Skip to content

Commit

Permalink
Reduce the size of line_t by 2 bytes
Browse files Browse the repository at this point in the history
  • Loading branch information
viciious committed Jun 24, 2024
1 parent f2e9c2c commit 60b4049
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 24 deletions.
6 changes: 4 additions & 2 deletions am_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,10 +655,12 @@ static void AM_Drawer_ (int c)
for (i=0 ; i<numlines ; i++,line++)
{
int flags;
int mapped;
mapvertex_t *v1, *v2;

flags = line->flags;
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;
Expand Down Expand Up @@ -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 */
Expand Down
7 changes: 0 additions & 7 deletions doomdata.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion p_maputl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
12 changes: 3 additions & 9 deletions p_setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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]);
Expand Down
6 changes: 4 additions & 2 deletions p_slide.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand Down Expand Up @@ -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)
Expand Down
12 changes: 10 additions & 2 deletions r_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) (&sectors[sides[(ld)->sidenum[0]].sector])
#define LD_BACKSECTOR(ld) ((ld)->sidenum[1] != -1 ? &sectors[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;
Expand Down
2 changes: 1 addition & 1 deletion r_phase1.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 60b4049

Please sign in to comment.