More monster location sanity checks

Placing a monster over already existing one will now complain.
Define EXTRA_SANITY_CHECKS to check monster removal too.
This commit is contained in:
Pasi Kallinen
2018-11-19 22:38:10 +02:00
parent 5acddebb3c
commit b54dda5624
6 changed files with 26 additions and 2 deletions

View File

@@ -629,8 +629,19 @@ extern dlevel_t level; /* structure describing the current level */
#define MON_BURIED_AT(x, y) \
(level.monsters[x][y] != (struct monst *) 0 \
&& (level.monsters[x][y])->mburied)
#if EXTRA_SANITY_CHECKS
#define place_worm_seg(m, x, y) do { \
if (level.monsters[x][y] && level.monsters[x][y] != m) impossible("place_worm_seg over mon"); \
level.monsters[x][y] = m; \
} while(0)
#define remove_monster(x, y) do { \
if (!level.monsters[x][y]) impossible("no monster to remove"); \
level.monsters[x][y] = (struct monst *) 0; \
} while(0)
#else
#define place_worm_seg(m, x, y) level.monsters[x][y] = m
#define remove_monster(x, y) level.monsters[x][y] = (struct monst *) 0
#endif
#define m_at(x, y) (MON_AT(x, y) ? level.monsters[x][y] : (struct monst *) 0)
#define m_buried_at(x, y) \
(MON_BURIED_AT(x, y) ? level.monsters[x][y] : (struct monst *) 0)