killer, level and rooms move to instance globals.
This commit is contained in:
@@ -23,7 +23,7 @@ E char SAVEP[];
|
||||
/* max size of a windowtype option */
|
||||
#define WINTYPELEN 16
|
||||
|
||||
E struct dgn_topology { /* special dungeon levels for speed */
|
||||
struct dgn_topology { /* special dungeon levels for speed */
|
||||
d_level d_oracle_level;
|
||||
d_level d_bigroom_level; /* unused */
|
||||
d_level d_rogue_level;
|
||||
@@ -51,39 +51,40 @@ E struct dgn_topology { /* special dungeon levels for speed */
|
||||
d_level d_knox_level;
|
||||
d_level d_mineend_level;
|
||||
d_level d_sokoend_level;
|
||||
} dungeon_topology;
|
||||
};
|
||||
|
||||
/* macros for accessing the dungeon levels by their old names */
|
||||
/* clang-format off */
|
||||
#define oracle_level (dungeon_topology.d_oracle_level)
|
||||
#define bigroom_level (dungeon_topology.d_bigroom_level)
|
||||
#define rogue_level (dungeon_topology.d_rogue_level)
|
||||
#define medusa_level (dungeon_topology.d_medusa_level)
|
||||
#define stronghold_level (dungeon_topology.d_stronghold_level)
|
||||
#define valley_level (dungeon_topology.d_valley_level)
|
||||
#define wiz1_level (dungeon_topology.d_wiz1_level)
|
||||
#define wiz2_level (dungeon_topology.d_wiz2_level)
|
||||
#define wiz3_level (dungeon_topology.d_wiz3_level)
|
||||
#define juiblex_level (dungeon_topology.d_juiblex_level)
|
||||
#define orcus_level (dungeon_topology.d_orcus_level)
|
||||
#define baalzebub_level (dungeon_topology.d_baalzebub_level)
|
||||
#define asmodeus_level (dungeon_topology.d_asmodeus_level)
|
||||
#define portal_level (dungeon_topology.d_portal_level)
|
||||
#define sanctum_level (dungeon_topology.d_sanctum_level)
|
||||
#define earth_level (dungeon_topology.d_earth_level)
|
||||
#define water_level (dungeon_topology.d_water_level)
|
||||
#define fire_level (dungeon_topology.d_fire_level)
|
||||
#define air_level (dungeon_topology.d_air_level)
|
||||
#define astral_level (dungeon_topology.d_astral_level)
|
||||
#define tower_dnum (dungeon_topology.d_tower_dnum)
|
||||
#define sokoban_dnum (dungeon_topology.d_sokoban_dnum)
|
||||
#define mines_dnum (dungeon_topology.d_mines_dnum)
|
||||
#define quest_dnum (dungeon_topology.d_quest_dnum)
|
||||
#define qstart_level (dungeon_topology.d_qstart_level)
|
||||
#define qlocate_level (dungeon_topology.d_qlocate_level)
|
||||
#define nemesis_level (dungeon_topology.d_nemesis_level)
|
||||
#define knox_level (dungeon_topology.d_knox_level)
|
||||
#define mineend_level (dungeon_topology.d_mineend_level)
|
||||
#define sokoend_level (dungeon_topology.d_sokoend_level)
|
||||
#define oracle_level (g.dungeon_topology.d_oracle_level)
|
||||
#define bigroom_level (g.dungeon_topology.d_bigroom_level)
|
||||
#define rogue_level (g.dungeon_topology.d_rogue_level)
|
||||
#define medusa_level (g.dungeon_topology.d_medusa_level)
|
||||
#define stronghold_level (g.dungeon_topology.d_stronghold_level)
|
||||
#define valley_level (g.dungeon_topology.d_valley_level)
|
||||
#define wiz1_level (g.dungeon_topology.d_wiz1_level)
|
||||
#define wiz2_level (g.dungeon_topology.d_wiz2_level)
|
||||
#define wiz3_level (g.dungeon_topology.d_wiz3_level)
|
||||
#define juiblex_level (g.dungeon_topology.d_juiblex_level)
|
||||
#define orcus_level (g.dungeon_topology.d_orcus_level)
|
||||
#define baalzebub_level (g.dungeon_topology.d_baalzebub_level)
|
||||
#define asmodeus_level (g.dungeon_topology.d_asmodeus_level)
|
||||
#define portal_level (g.dungeon_topology.d_portal_level)
|
||||
#define sanctum_level (g.dungeon_topology.d_sanctum_level)
|
||||
#define earth_level (g.dungeon_topology.d_earth_level)
|
||||
#define water_level (g.dungeon_topology.d_water_level)
|
||||
#define fire_level (g.dungeon_topology.d_fire_level)
|
||||
#define air_level (g.dungeon_topology.d_air_level)
|
||||
#define astral_level (g.dungeon_topology.d_astral_level)
|
||||
#define tower_dnum (g.dungeon_topology.d_tower_dnum)
|
||||
#define sokoban_dnum (g.dungeon_topology.d_sokoban_dnum)
|
||||
#define mines_dnum (g.dungeon_topology.d_mines_dnum)
|
||||
#define quest_dnum (g.dungeon_topology.d_quest_dnum)
|
||||
#define qstart_level (g.dungeon_topology.d_qstart_level)
|
||||
#define qlocate_level (g.dungeon_topology.d_qlocate_level)
|
||||
#define nemesis_level (g.dungeon_topology.d_nemesis_level)
|
||||
#define knox_level (g.dungeon_topology.d_knox_level)
|
||||
#define mineend_level (g.dungeon_topology.d_mineend_level)
|
||||
#define sokoend_level (g.dungeon_topology.d_sokoend_level)
|
||||
/* clang-format on */
|
||||
|
||||
#define xdnstair (g.dnstair.sx)
|
||||
@@ -133,7 +134,7 @@ E NEARDATA long yn_number;
|
||||
|
||||
E const char disclosure_options[];
|
||||
|
||||
E NEARDATA struct kinfo {
|
||||
struct kinfo {
|
||||
struct kinfo *next; /* chain of delayed killers */
|
||||
int id; /* uprop keys to ID a delayed killer */
|
||||
int format; /* one of the killer formats */
|
||||
@@ -141,7 +142,7 @@ E NEARDATA struct kinfo {
|
||||
#define KILLED_BY 1
|
||||
#define NO_KILLER_PREFIX 2
|
||||
char name[BUFSZ]; /* actual killer name */
|
||||
} killer;
|
||||
};
|
||||
|
||||
E char lock[];
|
||||
|
||||
@@ -688,7 +689,11 @@ struct instance_globals {
|
||||
struct obj *current_wand; /* wand currently zapped/applied */
|
||||
struct obj *thrownobj; /* object in flight due to throwing */
|
||||
struct obj *kickedobj; /* object in flight due to kicking */
|
||||
|
||||
struct dgn_topology dungeon_topology;
|
||||
struct kinfo killer;
|
||||
struct mkroom rooms[(MAXNROFROOMS + 1) * 2];
|
||||
struct mkroom *subrooms;
|
||||
dlevel_t level; /* level map */
|
||||
|
||||
/* dig.c */
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* Returns the head of the list of objects that the player can see
|
||||
* at location (x,y).
|
||||
*/
|
||||
#define vobj_at(x, y) (level.objects[x][y])
|
||||
#define vobj_at(x, y) (g.level.objects[x][y])
|
||||
|
||||
/*
|
||||
* sensemon()
|
||||
|
||||
@@ -244,7 +244,7 @@ typedef struct mapseen {
|
||||
struct mapseen_rooms {
|
||||
Bitfield(seen, 1);
|
||||
Bitfield(untended, 1); /* flag for shop without shk */
|
||||
} msrooms[(MAXNROFROOMS + 1) * 2]; /* same size as rooms[] */
|
||||
} msrooms[(MAXNROFROOMS + 1) * 2]; /* same size as g.rooms[] */
|
||||
/* dead heroes; might not have graves or ghosts */
|
||||
struct cemetery *final_resting_place; /* same as level.bonesinfo */
|
||||
} mapseen;
|
||||
|
||||
@@ -116,8 +116,8 @@ struct eshk {
|
||||
long credit; /* amount credited to customer */
|
||||
long debit; /* amount of debt for using unpaid items */
|
||||
long loan; /* shop-gold picked (part of debit) */
|
||||
int shoptype; /* the value of rooms[shoproom].rtype */
|
||||
schar shoproom; /* index in rooms; set by inshop() */
|
||||
int shoptype; /* the value of g.rooms[shoproom].rtype */
|
||||
schar shoproom; /* index in g.rooms; set by inshop() */
|
||||
schar unused; /* to force alignment for stupid compilers */
|
||||
boolean following; /* following customer since he owes us sth */
|
||||
boolean surcharge; /* angry shk inflates prices */
|
||||
|
||||
@@ -38,12 +38,10 @@ struct shclass {
|
||||
const char *const *shknms; /* list of shopkeeper names for this type */
|
||||
};
|
||||
|
||||
extern NEARDATA struct mkroom rooms[(MAXNROFROOMS + 1) * 2];
|
||||
extern NEARDATA struct mkroom *subrooms;
|
||||
/* the normal rooms on the current level are described in rooms[0..n] for
|
||||
/* the normal rooms on the current level are described in g.rooms[0..n] for
|
||||
* some n<MAXNROFROOMS
|
||||
* the vault, if any, is described by rooms[n+1]
|
||||
* the next rooms entry has hx -1 as a flag
|
||||
* the vault, if any, is described by g.rooms[n+1]
|
||||
* the next g.rooms entry has hx -1 as a flag
|
||||
* there is at most one non-vault special room on a level
|
||||
*/
|
||||
|
||||
@@ -92,16 +90,16 @@ enum roomtype_types {
|
||||
#define ROOMOFFSET \
|
||||
3 /* \
|
||||
* (levl[x][y].roomno - ROOMOFFSET) gives \
|
||||
* rooms[] index, for inside-squares and \
|
||||
* g.rooms[] index, for inside-squares and \
|
||||
* non-shared boundaries. \
|
||||
*/
|
||||
|
||||
#define IS_ROOM_PTR(x) ((x) >= rooms && (x) < rooms + MAXNROFROOMS)
|
||||
#define IS_ROOM_PTR(x) ((x) >= g.rooms && (x) < g.rooms + MAXNROFROOMS)
|
||||
#define IS_ROOM_INDEX(x) ((x) >= 0 && (x) < MAXNROFROOMS)
|
||||
#define IS_SUBROOM_PTR(x) ((x) >= subrooms && (x) < subrooms + MAXNROFROOMS)
|
||||
#define IS_SUBROOM_PTR(x) ((x) >= g.subrooms && (x) < g.subrooms + MAXNROFROOMS)
|
||||
#define IS_SUBROOM_INDEX(x) ((x) > MAXNROFROOMS && (x) < (MAXNROFROOMS * 2))
|
||||
#define ROOM_INDEX(x) ((x) -rooms)
|
||||
#define SUBROOM_INDEX(x) ((x) -subrooms)
|
||||
#define ROOM_INDEX(x) ((x) -g.rooms)
|
||||
#define SUBROOM_INDEX(x) ((x) -g.subrooms)
|
||||
#define IS_LAST_ROOM_PTR(x) (ROOM_INDEX(x) == g.nroom)
|
||||
#define IS_LAST_SUBROOM_PTR(x) (!g.nsubroom || SUBROOM_INDEX(x) == g.nsubroom)
|
||||
|
||||
|
||||
38
include/rm.h
38
include/rm.h
@@ -88,7 +88,7 @@ enum levl_typ_types {
|
||||
#define IS_DOOR(typ) ((typ) == DOOR)
|
||||
#define IS_DOORJOIN(typ) (IS_ROCK(typ) || (typ) == IRONBARS)
|
||||
#define IS_TREE(typ) \
|
||||
((typ) == TREE || (level.flags.arboreal && (typ) == STONE))
|
||||
((typ) == TREE || (g.level.flags.arboreal && (typ) == STONE))
|
||||
#define ACCESSIBLE(typ) ((typ) >= DOOR) /* good position */
|
||||
#define IS_ROOM(typ) ((typ) >= ROOM) /* ROOM, STAIRS, furniture.. */
|
||||
#define ZAP_POS(typ) ((typ) >= POOL)
|
||||
@@ -596,14 +596,12 @@ typedef struct {
|
||||
struct levelflags flags;
|
||||
} dlevel_t;
|
||||
|
||||
extern dlevel_t level; /* structure describing the current level */
|
||||
|
||||
/*
|
||||
* Macros for compatibility with old code. Someday these will go away.
|
||||
*/
|
||||
#define levl level.locations
|
||||
#define fobj level.objlist
|
||||
#define fmon level.monlist
|
||||
#define levl g.level.locations
|
||||
#define fobj g.level.objlist
|
||||
#define fmon g.level.monlist
|
||||
|
||||
/*
|
||||
* Covert a trap number into the defsym graphics array.
|
||||
@@ -613,38 +611,38 @@ extern dlevel_t level; /* structure describing the current level */
|
||||
#define trap_to_defsym(t) (S_arrow_trap + (t) -1)
|
||||
#define defsym_to_trap(d) ((d) -S_arrow_trap + 1)
|
||||
|
||||
#define OBJ_AT(x, y) (level.objects[x][y] != (struct obj *) 0)
|
||||
#define OBJ_AT(x, y) (g.level.objects[x][y] != (struct obj *) 0)
|
||||
/*
|
||||
* Macros for encapsulation of level.monsters references.
|
||||
*/
|
||||
#define MON_AT(x, y) \
|
||||
(level.monsters[x][y] != (struct monst *) 0 \
|
||||
&& !(level.monsters[x][y])->mburied)
|
||||
(g.level.monsters[x][y] != (struct monst *) 0 \
|
||||
&& !(g.level.monsters[x][y])->mburied)
|
||||
#define MON_BURIED_AT(x, y) \
|
||||
(level.monsters[x][y] != (struct monst *) 0 \
|
||||
&& (level.monsters[x][y])->mburied)
|
||||
(g.level.monsters[x][y] != (struct monst *) 0 \
|
||||
&& (g.level.monsters[x][y])->mburied)
|
||||
#ifdef EXTRA_SANITY_CHECKS
|
||||
#define place_worm_seg(m, x, y) \
|
||||
do { \
|
||||
if (level.monsters[x][y] && level.monsters[x][y] != m) \
|
||||
if (g.level.monsters[x][y] && g.level.monsters[x][y] != m) \
|
||||
impossible("place_worm_seg over mon"); \
|
||||
level.monsters[x][y] = m; \
|
||||
g.level.monsters[x][y] = m; \
|
||||
} while(0)
|
||||
#define remove_monster(x, y) \
|
||||
do { \
|
||||
if (!level.monsters[x][y]) \
|
||||
if (!g.level.monsters[x][y]) \
|
||||
impossible("no monster to remove"); \
|
||||
level.monsters[x][y] = (struct monst *) 0; \
|
||||
g.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
|
||||
#define place_worm_seg(m, x, y) g.level.monsters[x][y] = m
|
||||
#define remove_monster(x, y) g.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_at(x, y) (MON_AT(x, y) ? g.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)
|
||||
(MON_BURIED_AT(x, y) ? g.level.monsters[x][y] : (struct monst *) 0)
|
||||
|
||||
/* restricted movement, potential luck penalties */
|
||||
#define Sokoban level.flags.sokoban_rules
|
||||
#define Sokoban g.level.flags.sokoban_rules
|
||||
|
||||
#endif /* RM_H */
|
||||
|
||||
Reference in New Issue
Block a user