Engraving sanity checking

This commit is contained in:
Pasi Kallinen
2023-03-18 07:30:25 +02:00
parent 0d9801e17f
commit f360dee4dd
4 changed files with 35 additions and 0 deletions

View File

@@ -827,6 +827,7 @@ extern void del_engr_at(coordxy, coordxy);
extern int freehand(void);
extern int doengrave(void);
extern void sanitize_engravings(void);
extern void engraving_sanity_check(void);
extern void save_engravings(NHFILE *);
extern void rest_engravings(NHFILE *);
extern void engr_stats(const char *, char *, long *, long *);

View File

@@ -4247,6 +4247,7 @@ sanity_check(void)
light_sources_sanity_check();
bc_sanity_check();
trap_sanity_check();
engraving_sanity_check();
}
/* qsort() comparison routine for use in list_migrating_mons() */

View File

@@ -1376,6 +1376,34 @@ sanitize_engravings(void)
}
}
void
engraving_sanity_check(void)
{
struct engr *ep;
schar typ;
if (head_engr && (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz))) {
impossible("engraving sanity: on plane of air/water");
return;
}
for (ep = head_engr; ep; ep = ep->nxt_engr) {
coordxy x = ep->engr_x, y = ep->engr_y;
if (!isok(x, y)) {
impossible("engraving sanity: !isok <%i,%i>", x, y);
return;
}
typ = levl[x][y].typ;
if (typ == LAVAPOOL || typ == LAVAWALL || IS_POOL(typ)
|| typ == AIR || !accessible(x, y)) {
impossible("engraving sanity: illegal surface (%i)", typ);
return;
}
}
}
void
save_engravings(NHFILE *nhfp)
{

View File

@@ -330,6 +330,7 @@ map_cleanup(void)
{
struct obj *otmp;
struct trap *ttmp;
struct engr *etmp;
coordxy x, y;
for (x = 0; x < COLNO; x++)
@@ -347,6 +348,10 @@ map_cleanup(void)
if (((ttmp = t_at(x, y)) != 0)
&& !undestroyable_trap(ttmp->ttyp))
deltrap(ttmp);
/* engravings? */
if ((etmp = engr_at(x, y)) != 0)
del_engr(etmp);
}
}
}