Poison unused exploding walls

This commit is contained in:
Kp 2017-01-08 22:32:00 +00:00
parent d289fec43b
commit 7b08144aee
2 changed files with 19 additions and 1 deletions

View file

@ -1298,7 +1298,11 @@ array<expl_wall, MAX_EXPLODING_WALLS> expl_wall_list;
void init_exploding_walls()
{
range_for (auto &i, expl_wall_list)
{
expl_wall *const p = &i;
DXX_POISON_MEMORY(reinterpret_cast<uint8_t *>(p), sizeof(*p), 0xfd);
i.segnum = segment_none;
}
}
}
@ -1410,7 +1414,11 @@ void do_exploding_wall_frame()
);
}
if (i.time >= EXPL_WALL_TIME)
{
expl_wall *const p = &i;
DXX_POISON_MEMORY(reinterpret_cast<uint8_t *>(p), sizeof(*p), 0xfd);
i.segnum = segment_none; //flag this slot as free
}
}
}

View file

@ -1089,13 +1089,23 @@ int state_save_all_sub(const char *filename, const char *desc)
const int i = expl_wall_list.size();
PHYSFS_write(fp, &i, sizeof(int), 1);
}
{
const disk_expl_wall None{-1, 0, 0};
range_for (auto &e, expl_wall_list)
{
disk_expl_wall d;
const disk_expl_wall *i;
if (e.segnum == segment_none)
i = &None;
else
{
i = &d;
d.segnum = e.segnum;
d.sidenum = e.sidenum;
d.time = e.time;
PHYSFS_write(fp, &d, sizeof(d), 1);
}
PHYSFS_write(fp, i, sizeof(d), 1);
}
}
#endif