From 7b08144aee43ecbc0ff24579e566238961c1f52a Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 8 Jan 2017 22:32:00 +0000 Subject: [PATCH] Poison unused exploding walls --- similar/main/fireball.cpp | 8 ++++++++ similar/main/state.cpp | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/similar/main/fireball.cpp b/similar/main/fireball.cpp index 450945be9..7c7d72d31 100644 --- a/similar/main/fireball.cpp +++ b/similar/main/fireball.cpp @@ -1298,7 +1298,11 @@ array expl_wall_list; void init_exploding_walls() { range_for (auto &i, expl_wall_list) + { + expl_wall *const p = &i; + DXX_POISON_MEMORY(reinterpret_cast(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(p), sizeof(*p), 0xfd); i.segnum = segment_none; //flag this slot as free + } } } diff --git a/similar/main/state.cpp b/similar/main/state.cpp index 21bf79498..310c2f5ce 100644 --- a/similar/main/state.cpp +++ b/similar/main/state.cpp @@ -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