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

View file

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

View file

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

View file

@ -1191,9 +1191,9 @@ void operatemasterswitches(int low)
void operateforcefields_common(DDukeActor *effector, int low, const std::initializer_list<int> &tiles) 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 (low == wal->lotag || low == -1)
if (isIn(wal->overpicnum, tiles)) if (isIn(wal->overpicnum, tiles))

View file

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

View file

@ -213,7 +213,7 @@ void animatewalls_r(void)
for (int p = 0; p < numanimwalls; p++) for (int p = 0; p < numanimwalls; p++)
{ {
auto wal = &wall[animwall[p].wallnum]; auto wal = animwall[p].wall;
int j = wal->picnum; int j = wal->picnum;
switch (j) 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; if (sn < 0) return;
darkestwall = 0; darkestwall = 0;
wal = &wall[sector[sn].wallptr]; wal = sector[sn].firstWall();
for (i = sector[sn].wallnum; i > 0; i--, wal++) for (i = sector[sn].wallnum; i > 0; i--, wal++)
if (wal->shade > darkestwall) if (wal->shade > darkestwall)
darkestwall = wal->shade; darkestwall = wal->shade;

View file

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