Prevent the destruction of one-sided prison doors from causing a crash

This commit is contained in:
AlumiuN 2020-06-30 21:40:09 +12:00
parent 096a678ff7
commit 4425f07e9d

View file

@ -1380,25 +1380,31 @@ unsigned do_exploding_wall_frame(wall &w1)
auto &Walls = LevelUniqueWallSubsystemState.Walls;
auto &vmwallptr = Walls.vmptr;
auto &w2 = *vmwallptr(csegp->shared_segment::sides[cside].wall_num);
assert(&w1 != &w2);
assert((w1.flags & WALL_EXPLODING) || (w2.flags & WALL_EXPLODING));
w1.flags |= WALL_BLASTED;
w2.flags |= WALL_BLASTED;
if (w1_explode_time_elapsed >= EXPL_WALL_TIME)
auto cwall_num = csegp->shared_segment::sides[cside].wall_num;
if (cwall_num != wall_none)
{
if (w1.flags & WALL_EXPLODING)
{
w1.flags &= ~WALL_EXPLODING;
++ walls_updated;
}
if (w2.flags & WALL_EXPLODING)
auto &w2 = *vmwallptr(cwall_num);
assert(&w1 != &w2);
w2.flags |= WALL_BLASTED;
assert((w1.flags & WALL_EXPLODING) || (w2.flags & WALL_EXPLODING));
if (w1_explode_time_elapsed >= EXPL_WALL_TIME && w2.flags & WALL_EXPLODING)
{
w2.flags &= ~WALL_EXPLODING;
++ walls_updated;
}
Num_exploding_walls -= walls_updated;
}
else
assert(w1.flags & WALL_EXPLODING);
w1.flags |= WALL_BLASTED;
if (w1_explode_time_elapsed >= EXPL_WALL_TIME && w1.flags & WALL_EXPLODING)
{
w1.flags &= ~WALL_EXPLODING;
++ walls_updated;
}
Num_exploding_walls -= walls_updated;
}
const fix newfrac = fixdiv(w1_explode_time_elapsed, EXPL_WALL_TIME);