killer, level and rooms move to instance globals.

This commit is contained in:
Bart House
2018-12-24 19:50:08 -08:00
parent 198e44216e
commit be5cdcf77a
74 changed files with 793 additions and 790 deletions

View File

@@ -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 */

View File

@@ -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()

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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)

View File

@@ -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 */