add some guard code to the Is_*_level macros in dungeon.h

All Is_*_level tests during early startup would test as true until
dungeon_topology was initialized in a new game or restored from
a save file. That could result in some unexpected code paths being
taken.
This commit is contained in:
nhmall
2019-11-17 19:13:23 -05:00
parent 9ea7b074fe
commit 57584a22d7
2 changed files with 33 additions and 25 deletions

View File

@@ -98,31 +98,36 @@ typedef struct branch {
*
* Depth corresponds to the number of floors below the surface.
*/
#define Is_astralevel(x) (on_level(x, &astral_level))
#define Is_earthlevel(x) (on_level(x, &earth_level))
#define Is_waterlevel(x) (on_level(x, &water_level))
#define Is_firelevel(x) (on_level(x, &fire_level))
#define Is_airlevel(x) (on_level(x, &air_level))
#define Is_medusa_level(x) (on_level(x, &medusa_level))
#define Is_oracle_level(x) (on_level(x, &oracle_level))
#define Is_valley(x) (on_level(x, &valley_level))
#define Is_juiblex_level(x) (on_level(x, &juiblex_level))
#define Is_asmo_level(x) (on_level(x, &asmodeus_level))
#define Is_baal_level(x) (on_level(x, &baalzebub_level))
#define Is_wiz1_level(x) (on_level(x, &wiz1_level))
#define Is_wiz2_level(x) (on_level(x, &wiz2_level))
#define Is_wiz3_level(x) (on_level(x, &wiz3_level))
#define Is_sanctum(x) (on_level(x, &sanctum_level))
#define Is_portal_level(x) (on_level(x, &portal_level))
#define Is_rogue_level(x) (on_level(x, &rogue_level))
#define Is_stronghold(x) (on_level(x, &stronghold_level))
#define Is_bigroom(x) (on_level(x, &bigroom_level))
#define Is_qstart(x) (on_level(x, &qstart_level))
#define Is_qlocate(x) (on_level(x, &qlocate_level))
#define Is_nemesis(x) (on_level(x, &nemesis_level))
#define Is_knox(x) (on_level(x, &knox_level))
#define Is_mineend_level(x) (on_level(x, &mineend_level))
#define Is_sokoend_level(x) (on_level(x, &sokoend_level))
/* These both can't be zero, or dungeon_topology isn't init'd / restored */
#define Lassigned(y) ((y)->dlevel || (y)->dnum)
#define Lcheck(x,z) (Lassigned(z) && on_level(x, z))
#define Is_astralevel(x) (Lcheck(x, &astral_level))
#define Is_earthlevel(x) (Lcheck(x, &earth_level))
#define Is_waterlevel(x) (Lcheck(x, &water_level))
#define Is_firelevel(x) (Lcheck(x, &fire_level))
#define Is_airlevel(x) (Lcheck(x, &air_level))
#define Is_medusa_level(x) (Lcheck(x, &medusa_level))
#define Is_oracle_level(x) (Lcheck(x, &oracle_level))
#define Is_valley(x) (Lcheck(x, &valley_level))
#define Is_juiblex_level(x) (Lcheck(x, &juiblex_level))
#define Is_asmo_level(x) (Lcheck(x, &asmodeus_level))
#define Is_baal_level(x) (Lcheck(x, &baalzebub_level))
#define Is_wiz1_level(x) (Lcheck(x, &wiz1_level))
#define Is_wiz2_level(x) (Lcheck(x, &wiz2_level))
#define Is_wiz3_level(x) (Lcheck(x, &wiz3_level))
#define Is_sanctum(x) (Lcheck(x, &sanctum_level))
#define Is_portal_level(x) (Lcheck(x, &portal_level))
#define Is_rogue_level(x) (Lcheck(x, &rogue_level))
#define Is_stronghold(x) (Lcheck(x, &stronghold_level))
#define Is_bigroom(x) (Lcheck(x, &bigroom_level))
#define Is_qstart(x) (Lcheck(x, &qstart_level))
#define Is_qlocate(x) (Lcheck(x, &qlocate_level))
#define Is_nemesis(x) (Lcheck(x, &nemesis_level))
#define Is_knox(x) (Lcheck(x, &knox_level))
#define Is_mineend_level(x) (Lcheck(x, &mineend_level))
#define Is_sokoend_level(x) (Lcheck(x, &sokoend_level))
#define In_sokoban(x) ((x)->dnum == sokoban_dnum)
#define Inhell In_hell(&u.uz) /* now gehennom */