- 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].lotag = wall[src_wall_num].lotag;
wall[dest_wall_num].extra = wall[src_wall_num].extra; wall[dest_wall_num].extra = wall[src_wall_num].extra;
uint16_t const dest_nextwall = wall[dest_wall_num].nextwall; uint32_t const dest_nextwall = wall[dest_wall_num].nextwall;
uint16_t const src_nextwall = wall[src_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].picnum = wall[src_nextwall].picnum;
wall[dest_nextwall].xrepeat = wall[src_nextwall].xrepeat; 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_SECTOR BIT(14)
#define HIT_PLAX_WALL BIT(16) #define HIT_PLAX_WALL BIT(16)
#define NORM_SPRITE(val) ((val) & (MAXSPRITES - 1)) #define NORM_SPRITE(val) ((val) & (kHitIndexMask - 1))
#define NORM_WALL(val) ((val) & (MAXWALLS - 1)) #define NORM_WALL(val) ((val) & (kHitIndexMask - 1))
#define NORM_SECTOR(val) ((val) & (MAXSECTORS - 1)) #define NORM_SECTOR(val) ((val) & (kHitIndexMask - 1))
// overwritesprite flags // overwritesprite flags
#define OVER_SPRITE_MIDDLE (BIT(0)) #define OVER_SPRITE_MIDDLE (BIT(0))

View file

@ -95,7 +95,7 @@ void SectorLightShade(SPRITEp sp, short intensity)
if (TEST(sp->extra, SPRX_BOOL5)) if (TEST(sp->extra, SPRX_BOOL5))
{ {
uint16_t const nextwall = wall[w].nextwall; uint16_t const nextwall = wall[w].nextwall;
if (nextwall < MAXWALLS) if (validWallIndex(nextwall))
{ {
base_shade = wall_shade[wallcount]; base_shade = wall_shade[wallcount];
wall[nextwall].shade = base_shade + intensity; 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 // Travel all the way around loop setting wall bits
do do
{ {
if ((uint16_t)wall[wall_num].nextwall < MAXWALLS) if (validWallIndex(wall[wall_num].nextwall))
SET(wall[wall_num].cstat, CSTAT_WALL_WARP_HITSCAN); SET(wall[wall_num].cstat, CSTAT_WALL_WARP_HITSCAN);
wall_num = wall[wall_num].point2; wall_num = wall[wall_num].point2;
} }

View file

@ -277,7 +277,7 @@ void DoRotatorSetInterp(short SpriteNum)
StartInterpolation(w, Interp_Wall_Y); StartInterpolation(w, Interp_Wall_Y);
uint16_t const nextwall = wall[w].nextwall; 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_X);
StartInterpolation(wall[nextwall].point2, Interp_Wall_Y); StartInterpolation(wall[nextwall].point2, Interp_Wall_Y);
@ -300,7 +300,7 @@ void DoRotatorStopInterp(short SpriteNum)
StopInterpolation(w, Interp_Wall_Y); StopInterpolation(w, Interp_Wall_Y);
uint16_t const nextwall = wall[w].nextwall; 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_X);
StopInterpolation(wall[nextwall].point2, Interp_Wall_Y); 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) if (set_nextwall)
{ {
uint16_t const nextwall = wall[wall_num].nextwall; uint16_t const nextwall = wall[wall_num].nextwall;
if (nextwall < MAXWALLS) if (validWallIndex(nextwall))
SET(wall[nextwall].extra, bit_mask); 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); SET(wp->extra, extra);
uint16_t const nextwall = wp->nextwall; uint16_t const nextwall = wp->nextwall;
if (nextwall < MAXWALLS) if (validWallIndex(nextwall))
SET(wall[nextwall].extra, extra); 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); SET(wall[wall_num].extra, extra);
uint16_t const nextwall = wall[wall_num].nextwall; uint16_t const nextwall = wall[wall_num].nextwall;
if (nextwall < MAXWALLS) if (validWallIndex(nextwall))
SET(wall[nextwall].extra, extra); 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; 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) if (wp->picnum == FAF_PLACE_MIRROR_PIC)
wp->picnum = FAF_MIRROR_PIC; wp->picnum = FAF_MIRROR_PIC;
@ -209,18 +209,28 @@ WallSetup(void)
case TAG_WALL_LOOP_OUTER_SECONDARY: case TAG_WALL_LOOP_OUTER_SECONDARY:
{ {
// make sure it's a red wall // make sure it's a red wall
ASSERT((uint16_t)wp->nextwall < MAXWALLS); if (validWallIndex(wp->nextwall))
{
WallSetupLoop(wp, TAG_WALL_LOOP_OUTER_SECONDARY, WALLFX_LOOP_OUTER|WALLFX_LOOP_OUTER_SECONDARY); 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; break;
} }
case TAG_WALL_LOOP_OUTER: case TAG_WALL_LOOP_OUTER:
{ {
// make sure it's a red wall // make sure it's a red wall
ASSERT((uint16_t)wp->nextwall < MAXWALLS); if (validWallIndex(wp->nextwall))
{
WallSetupLoop(wp, TAG_WALL_LOOP_OUTER, WALLFX_LOOP_OUTER); 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; wp->lotag = 0;
break; break;
} }

View file

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

View file

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

View file

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

View file

@ -20207,7 +20207,7 @@ bool TestDontStick(short SpriteNum, short hit_wall)
return true; return true;
// if blocking red wallo // 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 true;
return false; return false;