diff --git a/am_main.c b/am_main.c index 6e5d145f3..de5baa0b7 100644 --- a/am_main.c +++ b/am_main.c @@ -655,10 +655,12 @@ static void AM_Drawer_ (int c) for (i=0 ; iflags; - if ((!(flags & ML_MAPPED) || /* IF NOT MAPPED OR DON'T DRAW */ + mapped = LD_MAPPED(line); + if ((!mapped || /* IF NOT MAPPED OR DON'T DRAW */ flags & ML_DONTDRAW) && (!(p->powers[pw_allmap] + showAllLines))) continue; @@ -708,7 +710,7 @@ static void AM_Drawer_ (int c) color = CRY_BROWN; if ((p->powers[pw_allmap] + showAllLines) && /* IF COMPMAP && !MAPPED YET */ - !(flags & ML_MAPPED)) + !mapped) color = CRY_GREY; else if (!(flags & ML_TWOSIDED)) /* ONE-SIDED LINE */ diff --git a/doomdata.h b/doomdata.h index 7134d6735..b70483d01 100644 --- a/doomdata.h +++ b/doomdata.h @@ -62,15 +62,8 @@ typedef struct #define ML_SECRET 32 /* don't map as two sided: IT'S A SECRET! */ #define ML_SOUNDBLOCK 64 /* don't let sound cross two of these */ #define ML_DONTDRAW 128 /* don't draw on the automap */ -#define ML_MAPPED 256 /* set if allready drawn in automap */ -/* to aid move clipping */ -#define ML_ST_HORIZONTAL 512 -#define ML_ST_VERTICAL 1024 -#define ML_ST_POSITIVE 2048 -#define ML_ST_NEGATIVE 4096 - typedef struct { short floorheight, ceilingheight; diff --git a/p_maputl.c b/p_maputl.c index 61b724cec..88e69c1dc 100644 --- a/p_maputl.c +++ b/p_maputl.c @@ -88,7 +88,7 @@ boolean P_BoxCrossLine(line_t *ld, fixed_t testbbox[4]) return false; } - if(ld->flags & ML_ST_POSITIVE) + if(LD_SLOPE_POSITIVE(ld)) { x1 = testbbox[BOXLEFT ]; x2 = testbbox[BOXRIGHT]; diff --git a/p_setup.c b/p_setup.c index 5e6c74c6f..260bf4baa 100644 --- a/p_setup.c +++ b/p_setup.c @@ -117,7 +117,7 @@ void P_LoadSegs (int lump) li->sideoffset |= side; if (ldef->v1 == li->v1) - ldef->fineangle = angle >> ANGLETOFINESHIFT; + ldef->fineangle |= (angle >> ANGLETOFINESHIFT); } } @@ -449,16 +449,10 @@ void P_LoadLineDefs (int lump) v2 = &vertexes[ld->v2]; dx = (v2->x - v1->x) << FRACBITS; dy = (v2->y - v1->y) << FRACBITS; - if (!dx) - ld->flags |= ML_ST_VERTICAL; - else if (!dy) - ld->flags |= ML_ST_HORIZONTAL; - else + if (dx && dy) { if (FixedDiv (dy , dx) > 0) - ld->flags |= ML_ST_POSITIVE; - else - ld->flags |= ML_ST_NEGATIVE; + ld->fineangle |= 0x8000; } ld->sidenum[0] = LITTLESHORT(mld->sidenum[0]); diff --git a/p_slide.c b/p_slide.c index ebe4e6f74..0fc91824f 100644 --- a/p_slide.c +++ b/p_slide.c @@ -162,6 +162,7 @@ static boolean SL_CheckLine(line_t *ld, pslidework_t *sw) fixed_t opentop, openbottom; sector_t *front, *back; int side1; + int fineangle; vertex_t vtmp; fixed_t ldbbox[4]; @@ -201,12 +202,13 @@ static boolean SL_CheckLine(line_t *ld, pslidework_t *sw) // the line is definitely blocking movement at this point findfrac: + fineangle = LD_FINEANGLE(ld); sw->p1.x = vertexes[ld->v1].x << FRACBITS; sw->p1.y = vertexes[ld->v1].y << FRACBITS; sw->p2.x = vertexes[ld->v2].x << FRACBITS; sw->p2.y = vertexes[ld->v2].y << FRACBITS; - sw->nvx = finesine(ld->fineangle); - sw->nvy = -finecosine(ld->fineangle); + sw->nvx = finesine(fineangle); + sw->nvy = -finecosine(fineangle); side1 = SL_PointOnSide(sw, sw->slidex, sw->slidey); switch(side1) diff --git a/r_local.h b/r_local.h index 8f9e48af9..8812eea45 100644 --- a/r_local.h +++ b/r_local.h @@ -109,16 +109,24 @@ typedef struct typedef struct line_s { - VINT flags; VINT sidenum[2]; /* sidenum[1] will be -1 if one sided */ VINT v1, v2; - VINT special, tag; + uint8_t flags, special; + VINT tag; VINT fineangle; /* to get sine / eosine for sliding */ + /* bit 15 is set if the slope is positive */ + /* bit 14 is set if allready drawn in automap */ } line_t; #define LD_FRONTSECTOR(ld) (§ors[sides[(ld)->sidenum[0]].sector]) #define LD_BACKSECTOR(ld) ((ld)->sidenum[1] != -1 ? §ors[sides[ld->sidenum[1]].sector] : NULL) +#define LD_SEEN 0x4000 + +#define LD_MAPPED(ld) ((ld->fineangle & LD_SEEN) != 0) +#define LD_SLOPE_POSITIVE(ld) (ld->fineangle < 0 ? true : false) +#define LD_FINEANGLE(ld) (ld->fineangle & FINEMASK) + typedef struct subsector_s { VINT numlines; diff --git a/r_phase1.c b/r_phase1.c index 7339d6c24..51f1e9ce2 100644 --- a/r_phase1.c +++ b/r_phase1.c @@ -198,7 +198,7 @@ static void R_WallEarlyPrep(viswall_t* segl, fixed_t *restrict floorheight, const short liflags = li->flags; { - li->flags |= ML_MAPPED; // mark as seen + li->fineangle |= LD_SEEN; // mark as seen textureoffset = si->textureoffset & 0xfff; textureoffset <<= 4; // sign extend