remove_region() calls newsym() when removing gas clouds, but when
newsym() checked whether it was updating a gas cloud location it
always got a false 'yes' because the region hadn't been removed yet.
Fixing this didn't seem to make any observable difference so it must
be followed fairly rapidly by a full vision recalc.
-/* NetHack 3.6 region.c $NHDT-Date: 1573933605 2019/11/16 19:46:45 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.44 $ */
+/* NetHack 3.6 region.c $NHDT-Date: 1573957877 2019/11/17 02:31:17 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.45 $ */
/* Copyright (c) 1996 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
if (i == n_regions)
return;
+ /* remove region before potential newsym() calls, but don't free it yet */
+ if (--n_regions != i)
+ regions[i] = regions[n_regions];
+ regions[n_regions] = (NhRegion *) 0;
+
/* Update screen if necessary */
reg->ttl = -2L; /* for visible_region_at */
if (reg->visible)
newsym(x, y);
free_region(reg);
- regions[i] = regions[n_regions - 1];
- regions[n_regions - 1] = (NhRegion *) 0;
- n_regions--;
}
/*