- store wall pointers in animwall

This commit is contained in:
Christoph Oelckers 2021-11-18 00:30:37 +01:00
parent 6b73a37b56
commit 567a360092
7 changed files with 23 additions and 24 deletions

View file

@ -400,14 +400,14 @@ void prelevel_d(int g)
I_Error("Too many 'anim' walls (max 512.)");
animwall[numanimwalls].tag = 0;
animwall[numanimwalls].wallnum = 0;
animwall[numanimwalls].wall = nullptr;
switch (wal.overpicnum)
{
case FANSHADOW:
case FANSPRITE:
wal.cstat |= 65;
animwall[numanimwalls].wallnum = wallnum(&wal);
animwall[numanimwalls].wall = &wal;
numanimwalls++;
break;
@ -427,7 +427,7 @@ void prelevel_d(int g)
case BIGFORCE:
animwall[numanimwalls].wallnum = wallnum(&wal);
animwall[numanimwalls].wall = &wal;
numanimwalls++;
continue;
@ -441,7 +441,7 @@ void prelevel_d(int g)
case W_TECHWALL2:
case W_TECHWALL3:
case W_TECHWALL4:
animwall[numanimwalls].wallnum = wallnum(&wal);
animwall[numanimwalls].wall = &wal;
// animwall[numanimwalls].tag = -1;
numanimwalls++;
break;
@ -450,7 +450,7 @@ void prelevel_d(int g)
case SCREENBREAK8:
for (int j = SCREENBREAK6; j < SCREENBREAK9; j++)
tloadtile(j);
animwall[numanimwalls].wallnum = wallnum(&wal);
animwall[numanimwalls].wall = &wal;
animwall[numanimwalls].tag = -1;
numanimwalls++;
break;
@ -462,7 +462,7 @@ void prelevel_d(int g)
wal.extra = wal.picnum;
animwall[numanimwalls].tag = -1;
animwall[numanimwalls].wallnum = wallnum(&wal);
animwall[numanimwalls].wall = &wal;
animwall[numanimwalls].tag = wal.picnum;
numanimwalls++;
break;
@ -485,7 +485,7 @@ void prelevel_d(int g)
case SCREENBREAK18:
case SCREENBREAK19:
animwall[numanimwalls].wallnum = wallnum(&wal);
animwall[numanimwalls].wall = &wal;
animwall[numanimwalls].tag = wal.picnum;
numanimwalls++;
break;

View file

@ -418,8 +418,6 @@ void prelevel_r(int g)
struct player_struct* p;
int i;
int j;
int startwall;
int endwall;
int lotaglist;
short lotags[65];
int speed = 0;
@ -717,18 +715,18 @@ void prelevel_r(int g)
mirrorcnt = 0;
for (i = 0; i < numwalls; i++)
for (auto& wl : walls())
{
walltype* wal;
wal = &wall[i];
walltype* wal = &wl;
if (wal->overpicnum == MIRROR && (wal->cstat & 32) != 0)
{
auto sect = wal->nextSector();
if (mirrorcnt > 63)
I_Error("Too many mirrors (64 max.)");
if ((j >= 0) && sect->ceilingpicnum != MIRROR)
if (sect->ceilingpicnum != MIRROR)
{
sect->ceilingpicnum = MIRROR;
sect->floorpicnum = MIRROR;
@ -743,17 +741,17 @@ void prelevel_r(int g)
I_Error("Too many 'anim' walls (max 512.)");
animwall[numanimwalls].tag = 0;
animwall[numanimwalls].wallnum = 0;
animwall[numanimwalls].wall = nullptr;
switch (wal->overpicnum)
{
case FANSPRITE:
wal->cstat |= 65;
animwall[numanimwalls].wallnum = i;
animwall[numanimwalls].wall = wal;
numanimwalls++;
break;
case BIGFORCE:
animwall[numanimwalls].wallnum = i;
animwall[numanimwalls].wall = wal;
numanimwalls++;
continue;
}
@ -767,7 +765,7 @@ void prelevel_r(int g)
case SCREENBREAK8:
for (j = SCREENBREAK6; j <= SCREENBREAK8; j++)
tloadtile(j);
animwall[numanimwalls].wallnum = i;
animwall[numanimwalls].wall = wal;
animwall[numanimwalls].tag = -1;
numanimwalls++;
break;

View file

@ -74,7 +74,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, animwalltype& w, a
{
if (arc.BeginObject(keyname))
{
arc("wallnum", w.wallnum)
arc("wallnum", w.wall)
("tag", w.tag)
.EndObject();
}

View file

@ -1191,9 +1191,9 @@ void operatemasterswitches(int low)
void operateforcefields_common(DDukeActor *effector, int low, const std::initializer_list<int> &tiles)
{
for (int p = numanimwalls; p >= 0; p--)
for (int p = numanimwalls-1; p >= 0; p--)
{
auto wal = &wall[animwall[p].wallnum];
auto wal = animwall[p].wall;
if (low == wal->lotag || low == -1)
if (isIn(wal->overpicnum, tiles))

View file

@ -92,7 +92,7 @@ void animatewalls_d(void)
for (int p = 0; p < numanimwalls; p++)
{
auto wal = &wall[animwall[p].wallnum];
auto wal = animwall[p].wall;
int j = wal->picnum;
switch (j)

View file

@ -213,7 +213,7 @@ void animatewalls_r(void)
for (int p = 0; p < numanimwalls; p++)
{
auto wal = &wall[animwall[p].wallnum];
auto wal = animwall[p].wall;
int j = wal->picnum;
switch (j)
@ -1349,7 +1349,7 @@ void checkhitwall_r(DDukeActor* spr, walltype* wal, int x, int y, int z, int atw
if (sn < 0) return;
darkestwall = 0;
wal = &wall[sector[sn].wallptr];
wal = sector[sn].firstWall();
for (i = sector[sn].wallnum; i > 0; i--, wal++)
if (wal->shade > darkestwall)
darkestwall = wal->shade;

View file

@ -107,7 +107,8 @@ inline DDukeActor* DDukeActor::array() { return hittype; }
struct animwalltype
{
int wallnum, tag;
walltype* wall;
int tag;
};
// Todo - put more state in here