- SW: got rid of MAXWALLS.

Only places left are declarations of global arrays.
This commit is contained in:
Christoph Oelckers 2021-11-11 01:01:30 +01:00
parent b6579809ad
commit 25a6774540
10 changed files with 45 additions and 35 deletions

View file

@ -67,10 +67,10 @@ void CopySectorWalls(short dest_sectnum, short src_sectnum)
wall[dest_wall_num].lotag = wall[src_wall_num].lotag;
wall[dest_wall_num].extra = wall[src_wall_num].extra;
uint16_t const dest_nextwall = wall[dest_wall_num].nextwall;
uint16_t const src_nextwall = wall[src_wall_num].nextwall;
uint32_t const dest_nextwall = wall[dest_wall_num].nextwall;
uint32_t const src_nextwall = wall[src_wall_num].nextwall;
if (dest_nextwall < MAXWALLS && src_nextwall < MAXWALLS)
if (validWallIndex(dest_nextwall) && validWallIndex(src_nextwall))
{
wall[dest_nextwall].picnum = wall[src_nextwall].picnum;
wall[dest_nextwall].xrepeat = wall[src_nextwall].xrepeat;

View file

@ -330,9 +330,9 @@ inline int SPRITEp_SIZE_BOS(const spritetype* sp)
#define HIT_SECTOR BIT(14)
#define HIT_PLAX_WALL BIT(16)
#define NORM_SPRITE(val) ((val) & (MAXSPRITES - 1))
#define NORM_WALL(val) ((val) & (MAXWALLS - 1))
#define NORM_SECTOR(val) ((val) & (MAXSECTORS - 1))
#define NORM_SPRITE(val) ((val) & (kHitIndexMask - 1))
#define NORM_WALL(val) ((val) & (kHitIndexMask - 1))
#define NORM_SECTOR(val) ((val) & (kHitIndexMask - 1))
// overwritesprite flags
#define OVER_SPRITE_MIDDLE (BIT(0))

View file

@ -95,7 +95,7 @@ void SectorLightShade(SPRITEp sp, short intensity)
if (TEST(sp->extra, SPRX_BOOL5))
{
uint16_t const nextwall = wall[w].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
{
base_shade = wall_shade[wallcount];
wall[nextwall].shade = base_shade + intensity;

View file

@ -118,7 +118,7 @@ void SetWallWarpHitscan(short sectnum)
// Travel all the way around loop setting wall bits
do
{
if ((uint16_t)wall[wall_num].nextwall < MAXWALLS)
if (validWallIndex(wall[wall_num].nextwall))
SET(wall[wall_num].cstat, CSTAT_WALL_WARP_HITSCAN);
wall_num = wall[wall_num].point2;
}

View file

@ -277,7 +277,7 @@ void DoRotatorSetInterp(short SpriteNum)
StartInterpolation(w, Interp_Wall_Y);
uint16_t const nextwall = wall[w].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
{
StartInterpolation(wall[nextwall].point2, Interp_Wall_X);
StartInterpolation(wall[nextwall].point2, Interp_Wall_Y);
@ -300,7 +300,7 @@ void DoRotatorStopInterp(short SpriteNum)
StopInterpolation(w, Interp_Wall_Y);
uint16_t const nextwall = wall[w].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
{
StopInterpolation(wall[nextwall].point2, Interp_Wall_X);
StopInterpolation(wall[nextwall].point2, Interp_Wall_Y);

View file

@ -106,7 +106,7 @@ void SetSectorWallBits(short sectnum, int bit_mask, bool set_sectwall, bool set_
if (set_nextwall)
{
uint16_t const nextwall = wall[wall_num].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
SET(wall[nextwall].extra, bit_mask);
}
@ -151,7 +151,7 @@ static void WallSetupLoop(WALLp wp, int16_t lotag, int16_t extra)
{
SET(wp->extra, extra);
uint16_t const nextwall = wp->nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
SET(wall[nextwall].extra, extra);
}
@ -162,7 +162,7 @@ static void WallSetupLoop(WALLp wp, int16_t lotag, int16_t extra)
{
SET(wall[wall_num].extra, extra);
uint16_t const nextwall = wall[wall_num].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
SET(wall[nextwall].extra, extra);
}
}
@ -180,7 +180,7 @@ WallSetup(void)
extern int x_min_bound, y_min_bound, x_max_bound, y_max_bound;
for (wp = wall, i = 0; wp < &wall[numwalls]; i++, wp++)
for (wp = wall, i = 0; i < numwalls; i++, wp++)
{
if (wp->picnum == FAF_PLACE_MIRROR_PIC)
wp->picnum = FAF_MIRROR_PIC;
@ -209,18 +209,28 @@ WallSetup(void)
case TAG_WALL_LOOP_OUTER_SECONDARY:
{
// make sure it's a red wall
ASSERT((uint16_t)wp->nextwall < MAXWALLS);
WallSetupLoop(wp, TAG_WALL_LOOP_OUTER_SECONDARY, WALLFX_LOOP_OUTER|WALLFX_LOOP_OUTER_SECONDARY);
if (validWallIndex(wp->nextwall))
{
WallSetupLoop(wp, TAG_WALL_LOOP_OUTER_SECONDARY, WALLFX_LOOP_OUTER | WALLFX_LOOP_OUTER_SECONDARY);
}
else
{
Printf(PRINT_HIGH, "one-sided wall %d in loop setup\n", i);
}
break;
}
case TAG_WALL_LOOP_OUTER:
{
// make sure it's a red wall
ASSERT((uint16_t)wp->nextwall < MAXWALLS);
WallSetupLoop(wp, TAG_WALL_LOOP_OUTER, WALLFX_LOOP_OUTER);
if (validWallIndex(wp->nextwall))
{
WallSetupLoop(wp, TAG_WALL_LOOP_OUTER, WALLFX_LOOP_OUTER);
}
else
{
Printf(PRINT_HIGH, "one-sided wall %d in loop setup\n", i);
}
wp->lotag = 0;
break;
}

View file

@ -276,7 +276,7 @@ void DoSlidorInterp(short SpriteNum, INTERP_FUNC interp_func)
pw = endwall;
uint16_t const nextwall = wall[w].nextwall;
if (nextwall >= MAXWALLS)
if (!validWallIndex(nextwall))
{
// white wall - move 4 points
interp_func(w, Interp_Wall_X);
@ -304,7 +304,7 @@ void DoSlidorInterp(short SpriteNum, INTERP_FUNC interp_func)
pw = endwall;
uint16_t const nextwall = wall[w].nextwall;
if (nextwall >= MAXWALLS)
if (!validWallIndex(nextwall))
{
// white wall - move 4 points
interp_func(w, Interp_Wall_X);
@ -332,7 +332,7 @@ void DoSlidorInterp(short SpriteNum, INTERP_FUNC interp_func)
pw = endwall;
uint16_t const nextwall = wall[w].nextwall;
if (nextwall >= MAXWALLS)
if (!validWallIndex(nextwall))
{
interp_func(w, Interp_Wall_Y);
interp_func(pw, Interp_Wall_Y);
@ -358,7 +358,7 @@ void DoSlidorInterp(short SpriteNum, INTERP_FUNC interp_func)
pw = endwall;
uint16_t const nextwall = wall[w].nextwall;
if (nextwall >= MAXWALLS)
if (!validWallIndex(nextwall))
{
interp_func(w, Interp_Wall_Y);
interp_func(pw, Interp_Wall_Y);
@ -400,7 +400,7 @@ int DoSlidorMoveWalls(short SpriteNum, int amt)
if (w < startwall)
pw = endwall;
if ((uint16_t)wall[w].nextwall >= MAXWALLS)
if (!validWallIndex(wall[w].nextwall))
{
// white wall - move 4 points
wall[w].x -= amt;
@ -424,7 +424,7 @@ int DoSlidorMoveWalls(short SpriteNum, int amt)
if (w < startwall)
pw = endwall;
if ((uint16_t)wall[w].nextwall >= MAXWALLS)
if (!validWallIndex(wall[w].nextwall))
{
// white wall - move 4 points
wall[w].x += amt;
@ -448,7 +448,7 @@ int DoSlidorMoveWalls(short SpriteNum, int amt)
if (w < startwall)
pw = endwall;
if ((uint16_t)wall[w].nextwall >= MAXWALLS)
if (!validWallIndex(wall[w].nextwall))
{
wall[w].y -= amt;
wall[pw].y -= amt;
@ -470,7 +470,7 @@ int DoSlidorMoveWalls(short SpriteNum, int amt)
if (w < startwall)
pw = endwall;
if ((uint16_t)wall[w].nextwall >= MAXWALLS)
if (!validWallIndex(wall[w].nextwall))
{
wall[w].y += amt;
wall[pw].y += amt;

View file

@ -2644,7 +2644,7 @@ SpriteSetup(void)
if (TEST_BOOL5(sp))
{
uint16_t const nextwall = wall[w].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
{
wall_shade[wallcount] = wall[wall[w].nextwall].shade;
wallcount++;
@ -2700,7 +2700,7 @@ SpriteSetup(void)
if (TEST_BOOL5(sp))
{
uint16_t const nextwall = wall[w].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
{
wall_shade[wallcount] = wall[wall[w].nextwall].shade;
wallcount++;
@ -2980,7 +2980,7 @@ SpriteSetup(void)
do
{
// DO NOT TAG WHITE WALLS!
if ((uint16_t)wall[wall_num].nextwall < MAXWALLS)
if (validWallIndex(wall[wall_num].nextwall))
{
SET(wall[wall_num].cstat, CSTAT_WALL_WARP_HITSCAN);
}
@ -3096,7 +3096,7 @@ SpriteSetup(void)
{
SET(wall[wall_num].cstat, CSTAT_WALL_BLOCK_ACTOR);
uint16_t const nextwall = wall[wall_num].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
SET(wall[nextwall].cstat, CSTAT_WALL_BLOCK_ACTOR);
wall_num = wall[wall_num].point2;
}

View file

@ -866,7 +866,7 @@ SectorObjectSetupBounds(SECTOR_OBJECTp sop)
// each wall has this set - for collision detection
SET(wall[k].extra, WALLFX_SECTOR_OBJECT|WALLFX_DONT_STICK);
uint16_t const nextwall = wall[k].nextwall;
if (nextwall < MAXWALLS)
if (validWallIndex(nextwall))
SET(wall[nextwall].extra, WALLFX_SECTOR_OBJECT|WALLFX_DONT_STICK);
}
}
@ -2108,7 +2108,7 @@ DetectSectorObjectByWall(WALLp wph)
if (TEST(wp->extra, WALLFX_LOOP_OUTER))
{
uint16_t const nextwall = wp->nextwall;
if (nextwall < MAXWALLS && wph == &wall[nextwall])
if (validWallIndex(nextwall) && wph == &wall[nextwall])
return sop;
}

View file

@ -20207,7 +20207,7 @@ bool TestDontStick(short SpriteNum, short hit_wall)
return true;
// if blocking red wallo
if (TEST(wp->cstat, CSTAT_WALL_BLOCK) && (uint16_t)wp->nextwall < MAXWALLS)
if (TEST(wp->cstat, CSTAT_WALL_BLOCK) && validWallIndex(wp->nextwall))
return true;
return false;