Prevent the destruction of one-sided prison doors from causing a crash
This commit is contained in:
parent
096a678ff7
commit
4425f07e9d
|
@ -1380,25 +1380,31 @@ unsigned do_exploding_wall_frame(wall &w1)
|
||||||
|
|
||||||
auto &Walls = LevelUniqueWallSubsystemState.Walls;
|
auto &Walls = LevelUniqueWallSubsystemState.Walls;
|
||||||
auto &vmwallptr = Walls.vmptr;
|
auto &vmwallptr = Walls.vmptr;
|
||||||
auto &w2 = *vmwallptr(csegp->shared_segment::sides[cside].wall_num);
|
|
||||||
assert(&w1 != &w2);
|
auto cwall_num = csegp->shared_segment::sides[cside].wall_num;
|
||||||
assert((w1.flags & WALL_EXPLODING) || (w2.flags & WALL_EXPLODING));
|
if (cwall_num != wall_none)
|
||||||
w1.flags |= WALL_BLASTED;
|
|
||||||
w2.flags |= WALL_BLASTED;
|
|
||||||
if (w1_explode_time_elapsed >= EXPL_WALL_TIME)
|
|
||||||
{
|
{
|
||||||
if (w1.flags & WALL_EXPLODING)
|
auto &w2 = *vmwallptr(cwall_num);
|
||||||
{
|
assert(&w1 != &w2);
|
||||||
w1.flags &= ~WALL_EXPLODING;
|
w2.flags |= WALL_BLASTED;
|
||||||
++ walls_updated;
|
assert((w1.flags & WALL_EXPLODING) || (w2.flags & WALL_EXPLODING));
|
||||||
}
|
if (w1_explode_time_elapsed >= EXPL_WALL_TIME && w2.flags & WALL_EXPLODING)
|
||||||
if (w2.flags & WALL_EXPLODING)
|
|
||||||
{
|
{
|
||||||
w2.flags &= ~WALL_EXPLODING;
|
w2.flags &= ~WALL_EXPLODING;
|
||||||
++ walls_updated;
|
++ 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);
|
const fix newfrac = fixdiv(w1_explode_time_elapsed, EXPL_WALL_TIME);
|
||||||
|
|
Loading…
Reference in a new issue