distinguish global variables that get written to savefile
The g? structs had a mix of variables that were written to
the savefile, and those that were not.
For better clarity and to distinguish those that end up in
the savefile, relocate some g? variables that get written
directly to the savefile into different structs.
This updates EDITLEVEL, although technically it probably
didn't need to, since savefile contents are not changing.
Details:
gb.bases -> svb.bases
gb.bbubbles -> svb.bbubbles
gb.branches -> svb.branches
gc.context -> svc.context
gd.disco -> svd.disco
gd.dndest -> svd.dndest
gd.doors -> svd.doors
gd.doors_alloc -> svd.doors_alloc
gd.dungeon_topology -> svd.dungeon_topology
gd.dungeons -> svd.dungeons
ge.exclusion_zones -> sve.exclusion_zones
gh.hackpid -> svh.hackpid
gi.inv_pos -> svi.inv_pos
gk.killer -> svk.killer
gl.lastseentyp -> svl.lastseentyp
gl.level -> svl.level
gl.level_info -> svl.level_info
gm.mapseenchn -> svm.mapseenchn
gm.moves -> svm.moves
gm.mvitals -> svm.mvitals
gn.n_dgns -> svn.n_dgns
gn.n_regions -> svn.n_regions
gn.nroom -> svn.nroom
go.oracle_cnt -> svo.oracle_cnt
gp.pl_character -> svp.pl_character
gp.pl_fruit -> svp.pl_fruit
gp.plname -> svp.plname
gp.program_state -> svp.program_state
gq.quest_status -> svq.quest_status
gr.rooms -> svr.rooms
gs.sp_levchn -> svs.sp_levchn
gs.spl_book -> svs.spl_book
gt.timer_id -> svt.timer_id
gt.tune -> svt.tune
gu.updest -> svu.updest
gx.xmax -> svx.xmax
gx.xmin -> svx.xmin
gy.ymax -> svy.ymax
gy.ymin -> svy.ymin
Related note:
There are some pointer variables that are heads of chains that were not
moved from 'g?' to 'sv?', because they are not actually written to the
savefile directly, but the objects/monst/trap/lightsource/timer in the
chains they point to are. That can be changed, if desired.
Examples: gi.invent, gm.migrating_objs, gb.billobjs, gm.migrating_mons,
gf.ftrap, gl.light_base, gt.timer_base
This commit is contained in:
@@ -14,7 +14,7 @@ typedef struct align { /* alignment & record */
|
||||
} align;
|
||||
|
||||
/* bounds for "record" -- respect initial alignments of 10 */
|
||||
#define ALIGNLIM (10L + (gm.moves / 200L))
|
||||
#define ALIGNLIM (10L + (svm.moves / 200L))
|
||||
|
||||
#define A_NONE (-128) /* the value range of type */
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ struct context_info {
|
||||
* 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF-,
|
||||
* 8: travel */
|
||||
unsigned startingpet_mid; /* monster id number for initial pet */
|
||||
int current_fruit; /* fruit->fid corresponding to gp.pl_fruit[] */
|
||||
int current_fruit; /* fruit->fid corresponding to svp.pl_fruit[] */
|
||||
int mysteryforce; /* adjusts how often "mysterious force" kicks in */
|
||||
int rndencode; /* randomized escape sequence introducer */
|
||||
int warnlevel; /* threshold (digit) to warn about unseen mons */
|
||||
|
||||
197
include/decl.h
197
include/decl.h
@@ -194,13 +194,9 @@ struct instance_globals_b {
|
||||
#endif
|
||||
|
||||
/* decl.c */
|
||||
int bases[MAXOCLASSES + 2]; /* make bases[MAXOCLASSES+1] available */
|
||||
coord bhitpos; /* place where throw or zap hits or stops */
|
||||
struct obj *billobjs; /* objects not yet paid for */
|
||||
|
||||
/* dungeon.c */
|
||||
branch *branches; /* dungeon branch list */
|
||||
|
||||
/* files.c */
|
||||
char bones[BONESSIZE];
|
||||
|
||||
@@ -212,7 +208,6 @@ struct instance_globals_b {
|
||||
/* mkmaze.c */
|
||||
lev_region bughack; /* for preserving the insect legs when wallifying
|
||||
* baalz level */
|
||||
struct bubble *bbubbles;
|
||||
|
||||
/* pickup.c */
|
||||
boolean bucx_filter;
|
||||
@@ -253,7 +248,6 @@ struct instance_globals_c {
|
||||
#ifdef DEF_PAGER
|
||||
const char *catmore; /* external pager; from getenv() or DEF_PAGER */
|
||||
#endif
|
||||
struct context_info context;
|
||||
|
||||
/* dog.c */
|
||||
char catname[PL_PSIZ];
|
||||
@@ -317,12 +311,7 @@ struct instance_globals_d {
|
||||
long domove_succeeded;
|
||||
#define DOMOVE_WALK 0x00000001
|
||||
#define DOMOVE_RUSH 0x00000002
|
||||
dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */
|
||||
dest_area dndest;
|
||||
boolean defer_see_monsters;
|
||||
struct dgn_topology dungeon_topology;
|
||||
int doors_alloc; /* doors-array allocated size */
|
||||
coord *doors; /* array of door locations */
|
||||
|
||||
/* dig.c */
|
||||
boolean did_dig_msg;
|
||||
@@ -341,9 +330,6 @@ struct instance_globals_d {
|
||||
/* mon.c */
|
||||
boolean disintegested;
|
||||
|
||||
/* o_init.c */
|
||||
short disco[NUM_OBJECTS];
|
||||
|
||||
/* objname.c */
|
||||
/* distantname used by distant_name() to pass extra information to
|
||||
xname_flags(); it would be much cleaner if this were a parameter,
|
||||
@@ -372,7 +358,6 @@ struct instance_globals_e {
|
||||
struct bubble *ebubbles;
|
||||
|
||||
/* new stuff */
|
||||
struct exclusion_zone *exclusion_zones;
|
||||
int early_raw_messages; /* if raw_prints occurred early prior
|
||||
to gb.beyond_savefile_load */
|
||||
|
||||
@@ -457,7 +442,6 @@ struct instance_globals_h {
|
||||
|
||||
/* decl.c */
|
||||
const char *hname; /* name of the game (argv[0] of main) */
|
||||
int hackpid; /* current process id */
|
||||
#if defined(MICRO) || defined(WIN32)
|
||||
char hackdir[PATHLEN]; /* where rumors, help, record are */
|
||||
#endif /* MICRO || WIN32 */
|
||||
@@ -479,7 +463,6 @@ struct instance_globals_i {
|
||||
|
||||
/* decl.c */
|
||||
int in_doagain;
|
||||
coord inv_pos;
|
||||
boolean in_mklev;
|
||||
boolean in_steed_dismounting;
|
||||
struct obj *invent;
|
||||
@@ -525,7 +508,6 @@ struct instance_globals_k {
|
||||
|
||||
/* decl.c */
|
||||
struct obj *kickedobj; /* object in flight due to kicking */
|
||||
struct kinfo killer;
|
||||
|
||||
/* read.c */
|
||||
boolean known;
|
||||
@@ -540,9 +522,6 @@ struct instance_globals_l {
|
||||
cmdcount_nht last_command_count;
|
||||
|
||||
/* decl.c (before being incorporated into instance_globals_*) */
|
||||
schar lastseentyp[COLNO][ROWNO]; /* last seen/touched dungeon typ */
|
||||
struct linfo level_info[MAXLINFO];
|
||||
dlevel_t level; /* level map */
|
||||
#if defined(UNIX) || defined(VMS)
|
||||
int locknum; /* max num of simultaneous users */
|
||||
#endif
|
||||
@@ -620,20 +599,15 @@ struct instance_globals_m {
|
||||
struct multishot m_shot;
|
||||
boolean mrg_to_wielded; /* weapon picked is merged with wielded one */
|
||||
struct menucoloring *menu_colorings;
|
||||
long moves; /* turn counter */
|
||||
struct obj *migrating_objs; /* objects moving to another dungeon level */
|
||||
|
||||
/* dog.c */
|
||||
struct monst *mydogs; /* monsters that went down/up together with @ */
|
||||
struct monst *migrating_mons; /* monsters moving to another level */
|
||||
struct mvitals mvitals[NUMMONS];
|
||||
|
||||
/* dokick.c */
|
||||
struct rm *maploc;
|
||||
|
||||
/* dungeon.c */
|
||||
mapseen *mapseenchn; /*DUNGEON_OVERVIEW*/
|
||||
|
||||
/* mhitu.c */
|
||||
int mhitu_dieroll;
|
||||
|
||||
@@ -682,15 +656,11 @@ struct instance_globals_n {
|
||||
|
||||
/* decl.c */
|
||||
const char *nomovemsg;
|
||||
int nroom;
|
||||
int nsubroom;
|
||||
|
||||
/* dokick.c */
|
||||
struct rm nowhere;
|
||||
|
||||
/* dungeon.c */
|
||||
int n_dgns; /* number of dungeons (also used in mklev.c and do.c) */
|
||||
|
||||
/* files.c */
|
||||
int nesting;
|
||||
int no_sound_notified; /* run-time option processing: warn once if built
|
||||
@@ -713,9 +683,6 @@ struct instance_globals_n {
|
||||
/* questpgr.c */
|
||||
char nambuf[CVT_BUF_SIZE];
|
||||
|
||||
/* region.c */
|
||||
int n_regions;
|
||||
|
||||
/* restore.c */
|
||||
int n_ids_mapped;
|
||||
|
||||
@@ -779,7 +746,6 @@ struct instance_globals_o {
|
||||
|
||||
/* rumors.c */
|
||||
int oracle_flg; /* -1=>don't use, 0=>need init, 1=>init done */
|
||||
unsigned oracle_cnt; /* oracles are handled differently from rumors... */
|
||||
unsigned long *oracle_loc;
|
||||
|
||||
/* uhitm.c */
|
||||
@@ -799,13 +765,9 @@ struct instance_globals_p {
|
||||
int polearm_range_max;
|
||||
|
||||
/* decl.c */
|
||||
char plname[PL_NSIZ]; /* player name */
|
||||
int plnamelen; /* length of plname[] if that came from getlogin() */
|
||||
char pl_character[PL_CSIZ];
|
||||
char pl_race; /* character's race */
|
||||
char pl_fruit[PL_FSIZ];
|
||||
struct plinemsg_type *plinemsg_types;
|
||||
struct sinfo program_state; /* flags describing game's current state */
|
||||
|
||||
/* dog.c */
|
||||
int petname_used; /* user preferred pet name has been used */
|
||||
@@ -849,18 +811,12 @@ struct instance_globals_p {
|
||||
|
||||
struct instance_globals_q {
|
||||
|
||||
/* quest.c */
|
||||
struct q_score quest_status;
|
||||
|
||||
boolean havestate;
|
||||
unsigned long magic; /* validate that structure layout is preserved */
|
||||
};
|
||||
|
||||
struct instance_globals_r {
|
||||
|
||||
/* decl.c */
|
||||
struct mkroom rooms[(MAXNROFROOMS + 1) * 2];
|
||||
|
||||
/* symbols.c */
|
||||
nhsym rogue_syms[SYM_MAX]; /* loaded rogue symbols */
|
||||
|
||||
@@ -895,11 +851,9 @@ struct instance_globals_s {
|
||||
messages in artifact_hit() */
|
||||
|
||||
/* decl.c */
|
||||
s_level * sp_levchn;
|
||||
stairway *stairs;
|
||||
int smeq[MAXNROFROOMS + 1];
|
||||
boolean stoned; /* done to monsters hit by 'c' */
|
||||
struct spell spl_book[MAXSPELL + 1];
|
||||
struct mkroom *subrooms;
|
||||
|
||||
/* do.c */
|
||||
@@ -958,7 +912,7 @@ struct instance_globals_s {
|
||||
|
||||
/* spells.c */
|
||||
int spl_sortmode; /* index into spl_sortchoices[] */
|
||||
int *spl_orderindx; /* array of gs.spl_book[] indices */
|
||||
int *spl_orderindx; /* array of svs.spl_book[] indices */
|
||||
|
||||
/* steal.c */
|
||||
unsigned int stealoid; /* object to be stolen */
|
||||
@@ -977,7 +931,6 @@ struct instance_globals_t {
|
||||
struct trapinfo trapinfo;
|
||||
|
||||
/* decl.c */
|
||||
char tune[6];
|
||||
schar tbx; /* mthrowu: target x */
|
||||
schar tby; /* mthrowu: target y */
|
||||
char toplines[TBUFSZ];
|
||||
@@ -1012,7 +965,6 @@ struct instance_globals_t {
|
||||
/* timeout.c */
|
||||
/* ordered timer list */
|
||||
struct fe *timer_base; /* "active" */
|
||||
unsigned long timer_id;
|
||||
|
||||
/* topten.c */
|
||||
winid toptenwin;
|
||||
@@ -1030,7 +982,6 @@ struct instance_globals_u {
|
||||
boolean update_all;
|
||||
|
||||
/* decl.c */
|
||||
dest_area updest;
|
||||
boolean unweapon;
|
||||
|
||||
/* role.c */
|
||||
@@ -1115,9 +1066,6 @@ struct instance_globals_x {
|
||||
/* lock.c */
|
||||
struct xlock_s xlock;
|
||||
|
||||
/* mkmaze.c */
|
||||
int xmin, xmax; /* level boundaries x */
|
||||
|
||||
/* objnam.c */
|
||||
char *xnamep; /* obuf[] returned by xname(), for use in doname() for
|
||||
* bounds checking; differs from xname() return value
|
||||
@@ -1137,9 +1085,6 @@ struct instance_globals_y {
|
||||
int y_maze_max;
|
||||
struct monst youmonst;
|
||||
|
||||
/* mkmaze.c */
|
||||
int ymin, ymax; /* level boundaries y */
|
||||
|
||||
/* pline.c */
|
||||
/* work buffer for You(), &c and verbalize() */
|
||||
char *you_buf;
|
||||
@@ -1169,6 +1114,127 @@ struct instance_globals_z {
|
||||
unsigned long magic; /* validate that structure layout is preserved */
|
||||
};
|
||||
|
||||
struct instance_globals_saved_b {
|
||||
/* dungeon.c */
|
||||
branch *branches; /* dungeon branch list */
|
||||
/* mkmaze.c */
|
||||
struct bubble *bbubbles;
|
||||
/* o_init.c */
|
||||
int bases[MAXOCLASSES + 2]; /* make bases[MAXOCLASSES+1] available */
|
||||
};
|
||||
|
||||
struct instance_globals_saved_c {
|
||||
/* decl.c */
|
||||
struct context_info context;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_d {
|
||||
/* dungeon.c */
|
||||
dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */
|
||||
struct dgn_topology dungeon_topology;
|
||||
/* decl.c */
|
||||
dest_area dndest;
|
||||
coord *doors; /* array of door locations */
|
||||
int doors_alloc; /* doors-array allocated size */
|
||||
/* o_init.c */
|
||||
short disco[NUM_OBJECTS];
|
||||
};
|
||||
|
||||
struct instance_globals_saved_e {
|
||||
/* decl.c */
|
||||
struct exclusion_zone *exclusion_zones;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_h {
|
||||
/* decl.c */
|
||||
int hackpid; /* current process id */
|
||||
};
|
||||
|
||||
struct instance_globals_saved_i {
|
||||
/* decl.c */
|
||||
coord inv_pos;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_k {
|
||||
/* decl.c */
|
||||
struct kinfo killer;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_l {
|
||||
/* decl.c */
|
||||
schar lastseentyp[COLNO][ROWNO]; /* last seen/touched dungeon typ */
|
||||
dlevel_t level; /* level map */
|
||||
struct linfo level_info[MAXLINFO];
|
||||
};
|
||||
|
||||
struct instance_globals_saved_m {
|
||||
/* dungeon.c */
|
||||
mapseen *mapseenchn; /*DUNGEON_OVERVIEW*/
|
||||
/* decl.c */
|
||||
long moves; /* turn counter */
|
||||
struct mvitals mvitals[NUMMONS];
|
||||
};
|
||||
|
||||
struct instance_globals_saved_n {
|
||||
/* dungeon.c */
|
||||
int n_dgns; /* number of dungeons (also used in mklev.c and do.c) */
|
||||
/* mkroom.c */
|
||||
int nroom;
|
||||
/* region.c */
|
||||
int n_regions;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_o {
|
||||
/* rumors.c */
|
||||
unsigned oracle_cnt; /* oracles are handled differently from rumors... */
|
||||
};
|
||||
|
||||
struct instance_globals_saved_p {
|
||||
/* decl.c */
|
||||
char plname[PL_NSIZ]; /* player name */
|
||||
char pl_character[PL_CSIZ];
|
||||
char pl_fruit[PL_FSIZ];
|
||||
struct sinfo program_state; /* flags describing game's current state */
|
||||
};
|
||||
|
||||
struct instance_globals_saved_q {
|
||||
/* quest.c */
|
||||
struct q_score quest_status;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_r {
|
||||
/* mkroom.c */
|
||||
struct mkroom rooms[(MAXNROFROOMS + 1) * 2];
|
||||
};
|
||||
|
||||
struct instance_globals_saved_s {
|
||||
/* decl.c */
|
||||
struct spell spl_book[MAXSPELL + 1];
|
||||
s_level *sp_levchn;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_t {
|
||||
/* decl.c */
|
||||
char tune[6];
|
||||
/* timeout.c */
|
||||
unsigned long timer_id;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_u {
|
||||
/* decl.c */
|
||||
dest_area updest;
|
||||
};
|
||||
|
||||
struct instance_globals_saved_x {
|
||||
/* mkmaze.c */
|
||||
int xmin, xmax; /* level boundaries x */
|
||||
};
|
||||
|
||||
struct instance_globals_saved_y {
|
||||
/* mkmaze.c */
|
||||
int ymin, ymax; /* level boundaries y */
|
||||
};
|
||||
|
||||
extern struct instance_globals_a ga;
|
||||
extern struct instance_globals_b gb;
|
||||
extern struct instance_globals_c gc;
|
||||
@@ -1195,6 +1261,25 @@ extern struct instance_globals_w gw;
|
||||
extern struct instance_globals_x gx;
|
||||
extern struct instance_globals_y gy;
|
||||
extern struct instance_globals_z gz;
|
||||
extern struct instance_globals_saved_b svb;
|
||||
extern struct instance_globals_saved_c svc;
|
||||
extern struct instance_globals_saved_d svd;
|
||||
extern struct instance_globals_saved_e sve;
|
||||
extern struct instance_globals_saved_h svh;
|
||||
extern struct instance_globals_saved_i svi;
|
||||
extern struct instance_globals_saved_k svk;
|
||||
extern struct instance_globals_saved_l svl;
|
||||
extern struct instance_globals_saved_m svm;
|
||||
extern struct instance_globals_saved_n svn;
|
||||
extern struct instance_globals_saved_o svo;
|
||||
extern struct instance_globals_saved_p svp;
|
||||
extern struct instance_globals_saved_q svq;
|
||||
extern struct instance_globals_saved_r svr;
|
||||
extern struct instance_globals_saved_s svs;
|
||||
extern struct instance_globals_saved_t svt;
|
||||
extern struct instance_globals_saved_u svu;
|
||||
extern struct instance_globals_saved_x svx;
|
||||
extern struct instance_globals_saved_y svy;
|
||||
|
||||
struct const_globals {
|
||||
const struct obj zeroobj; /* used to zero out a struct obj */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* Returns the head of the list of objects that the player can see
|
||||
* at location (x,y). [Vestige of unimplemented invisible objects.]
|
||||
*/
|
||||
#define vobj_at(x, y) (gl.level.objects[x][y])
|
||||
#define vobj_at(x, y) (svl.level.objects[x][y])
|
||||
|
||||
/*
|
||||
* sensemon()
|
||||
@@ -63,7 +63,7 @@
|
||||
*/
|
||||
#define _mon_warning(mon) \
|
||||
(Warning && !(mon)->mpeaceful && (mdistu(mon) < 100) \
|
||||
&& (((int) ((mon)->m_lev / 4)) >= gc.context.warnlevel))
|
||||
&& (((int) ((mon)->m_lev / 4)) >= svc.context.warnlevel))
|
||||
|
||||
/*
|
||||
* mon_visible()
|
||||
@@ -820,7 +820,7 @@ enum glyph_offsets {
|
||||
expression but there will always be sequence points in between */
|
||||
#define obj_is_piletop(obj) \
|
||||
((obj)->where == OBJ_FLOOR \
|
||||
&& (go.otg_otmp = gl.level.objects[(obj)->ox][(obj)->oy]->nexthere) != 0 \
|
||||
&& (go.otg_otmp = svl.level.objects[(obj)->ox][(obj)->oy]->nexthere) != 0 \
|
||||
&& ((obj)->otyp != BOULDER || go.otg_otmp->otyp == BOULDER))
|
||||
/* used to hide info such as potion and gem color when not seen yet;
|
||||
stones and rock are excluded for gem class; LAST_SPELL includes blank
|
||||
|
||||
@@ -246,7 +246,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 gr.rooms[] */
|
||||
} msrooms[(MAXNROFROOMS + 1) * 2]; /* same size as svr.rooms[] */
|
||||
/* dead heroes; might not have graves or ghosts */
|
||||
struct cemetery *final_resting_place; /* same as level.bonesinfo */
|
||||
} mapseen;
|
||||
|
||||
@@ -234,7 +234,7 @@ struct instance_flags {
|
||||
boolean query_menu; /* use a menu for yes/no queries */
|
||||
boolean showdamage;
|
||||
boolean debug_fuzzer; /* fuzz testing */
|
||||
boolean defer_plname; /* X11 hack: askname() might not set gp.plname */
|
||||
boolean defer_plname; /* X11 hack: askname() might not set svp.plname */
|
||||
boolean herecmd_menu; /* use menu when mouseclick on yourself */
|
||||
boolean invis_goldsym; /* gold symbol is ' '? */
|
||||
boolean in_lua; /* executing a lua script */
|
||||
|
||||
@@ -372,40 +372,40 @@ struct dgn_topology { /* special dungeon levels for speed */
|
||||
|
||||
/* macros for accessing the dungeon levels by their old names */
|
||||
/* clang-format off */
|
||||
#define oracle_level (gd.dungeon_topology.d_oracle_level)
|
||||
#define bigroom_level (gd.dungeon_topology.d_bigroom_level)
|
||||
#define rogue_level (gd.dungeon_topology.d_rogue_level)
|
||||
#define medusa_level (gd.dungeon_topology.d_medusa_level)
|
||||
#define stronghold_level (gd.dungeon_topology.d_stronghold_level)
|
||||
#define valley_level (gd.dungeon_topology.d_valley_level)
|
||||
#define wiz1_level (gd.dungeon_topology.d_wiz1_level)
|
||||
#define wiz2_level (gd.dungeon_topology.d_wiz2_level)
|
||||
#define wiz3_level (gd.dungeon_topology.d_wiz3_level)
|
||||
#define juiblex_level (gd.dungeon_topology.d_juiblex_level)
|
||||
#define orcus_level (gd.dungeon_topology.d_orcus_level)
|
||||
#define baalzebub_level (gd.dungeon_topology.d_baalzebub_level)
|
||||
#define asmodeus_level (gd.dungeon_topology.d_asmodeus_level)
|
||||
#define portal_level (gd.dungeon_topology.d_portal_level)
|
||||
#define sanctum_level (gd.dungeon_topology.d_sanctum_level)
|
||||
#define earth_level (gd.dungeon_topology.d_earth_level)
|
||||
#define water_level (gd.dungeon_topology.d_water_level)
|
||||
#define fire_level (gd.dungeon_topology.d_fire_level)
|
||||
#define air_level (gd.dungeon_topology.d_air_level)
|
||||
#define astral_level (gd.dungeon_topology.d_astral_level)
|
||||
#define tower_dnum (gd.dungeon_topology.d_tower_dnum)
|
||||
#define sokoban_dnum (gd.dungeon_topology.d_sokoban_dnum)
|
||||
#define mines_dnum (gd.dungeon_topology.d_mines_dnum)
|
||||
#define quest_dnum (gd.dungeon_topology.d_quest_dnum)
|
||||
#define tutorial_dnum (gd.dungeon_topology.d_tutorial_dnum)
|
||||
#define qstart_level (gd.dungeon_topology.d_qstart_level)
|
||||
#define qlocate_level (gd.dungeon_topology.d_qlocate_level)
|
||||
#define nemesis_level (gd.dungeon_topology.d_nemesis_level)
|
||||
#define knox_level (gd.dungeon_topology.d_knox_level)
|
||||
#define mineend_level (gd.dungeon_topology.d_mineend_level)
|
||||
#define sokoend_level (gd.dungeon_topology.d_sokoend_level)
|
||||
#define oracle_level (svd.dungeon_topology.d_oracle_level)
|
||||
#define bigroom_level (svd.dungeon_topology.d_bigroom_level)
|
||||
#define rogue_level (svd.dungeon_topology.d_rogue_level)
|
||||
#define medusa_level (svd.dungeon_topology.d_medusa_level)
|
||||
#define stronghold_level (svd.dungeon_topology.d_stronghold_level)
|
||||
#define valley_level (svd.dungeon_topology.d_valley_level)
|
||||
#define wiz1_level (svd.dungeon_topology.d_wiz1_level)
|
||||
#define wiz2_level (svd.dungeon_topology.d_wiz2_level)
|
||||
#define wiz3_level (svd.dungeon_topology.d_wiz3_level)
|
||||
#define juiblex_level (svd.dungeon_topology.d_juiblex_level)
|
||||
#define orcus_level (svd.dungeon_topology.d_orcus_level)
|
||||
#define baalzebub_level (svd.dungeon_topology.d_baalzebub_level)
|
||||
#define asmodeus_level (svd.dungeon_topology.d_asmodeus_level)
|
||||
#define portal_level (svd.dungeon_topology.d_portal_level)
|
||||
#define sanctum_level (svd.dungeon_topology.d_sanctum_level)
|
||||
#define earth_level (svd.dungeon_topology.d_earth_level)
|
||||
#define water_level (svd.dungeon_topology.d_water_level)
|
||||
#define fire_level (svd.dungeon_topology.d_fire_level)
|
||||
#define air_level (svd.dungeon_topology.d_air_level)
|
||||
#define astral_level (svd.dungeon_topology.d_astral_level)
|
||||
#define tower_dnum (svd.dungeon_topology.d_tower_dnum)
|
||||
#define sokoban_dnum (svd.dungeon_topology.d_sokoban_dnum)
|
||||
#define mines_dnum (svd.dungeon_topology.d_mines_dnum)
|
||||
#define quest_dnum (svd.dungeon_topology.d_quest_dnum)
|
||||
#define tutorial_dnum (svd.dungeon_topology.d_tutorial_dnum)
|
||||
#define qstart_level (svd.dungeon_topology.d_qstart_level)
|
||||
#define qlocate_level (svd.dungeon_topology.d_qlocate_level)
|
||||
#define nemesis_level (svd.dungeon_topology.d_nemesis_level)
|
||||
#define knox_level (svd.dungeon_topology.d_knox_level)
|
||||
#define mineend_level (svd.dungeon_topology.d_mineend_level)
|
||||
#define sokoend_level (svd.dungeon_topology.d_sokoend_level)
|
||||
/* clang-format on */
|
||||
|
||||
#define dunlev_reached(x) (gd.dungeons[(x)->dnum].dunlev_ureached)
|
||||
#define dunlev_reached(x) (svd.dungeons[(x)->dnum].dunlev_ureached)
|
||||
#define MAXLINFO (MAXDUNGEON * MAXLEVEL)
|
||||
|
||||
enum lua_theme_group {
|
||||
@@ -1073,10 +1073,10 @@ typedef struct {
|
||||
|
||||
#define MATCH_WARN_OF_MON(mon) \
|
||||
(Warn_of_mon \
|
||||
&& ((gc.context.warntype.obj & (mon)->data->mflags2) != 0 \
|
||||
|| (gc.context.warntype.polyd & (mon)->data->mflags2) != 0 \
|
||||
|| (gc.context.warntype.species \
|
||||
&& (gc.context.warntype.species == (mon)->data))))
|
||||
&& ((svc.context.warntype.obj & (mon)->data->mflags2) != 0 \
|
||||
|| (svc.context.warntype.polyd & (mon)->data->mflags2) != 0 \
|
||||
|| (svc.context.warntype.species \
|
||||
&& (svc.context.warntype.species == (mon)->data))))
|
||||
|
||||
typedef uint32_t mmflags_nht; /* makemon MM_ flags */
|
||||
|
||||
|
||||
@@ -122,8 +122,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 gr.rooms[shoproom].rtype */
|
||||
schar shoproom; /* index in gr.rooms; set by inshop() */
|
||||
int shoptype; /* the value of svr.rooms[shoproom].rtype */
|
||||
schar shoproom; /* index in svr.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 */
|
||||
|
||||
@@ -40,10 +40,10 @@ struct shclass {
|
||||
const char *const *shknms; /* list of shopkeeper names for this type */
|
||||
};
|
||||
|
||||
/* the normal rooms on the current level are described in gr.rooms[0..n] for
|
||||
/* the normal rooms on the current level are described in svr.rooms[0..n] for
|
||||
* some n<MAXNROFROOMS
|
||||
* the vault, if any, is described by gr.rooms[n+1]
|
||||
* the next gr.rooms entry has hx -1 as a flag
|
||||
* the vault, if any, is described by svr.rooms[n+1]
|
||||
* the next svr.rooms entry has hx -1 as a flag
|
||||
* there is at most one non-vault special room on a level
|
||||
*/
|
||||
|
||||
@@ -88,7 +88,7 @@ enum roomtype_types {
|
||||
#define SHARED 1 /* indicates normal shared boundary */
|
||||
#define SHARED_PLUS 2 /* indicates shared boundary - extra adjacent-square
|
||||
* searching required */
|
||||
#define ROOMOFFSET 3 /* (levl[x][y].roomno - ROOMOFFSET) gives gr.rooms[] index,
|
||||
#define ROOMOFFSET 3 /* (levl[x][y].roomno - ROOMOFFSET) gives svr.rooms[] index,
|
||||
* for inside-squares and non-shared boundaries */
|
||||
|
||||
/* Values for needfill */
|
||||
@@ -99,14 +99,14 @@ enum roomtype_types {
|
||||
#define FILL_LVFLAGS 2 /* special rooms only; set the room's rtype and level
|
||||
flags as appropriate, but do not put anything in it */
|
||||
|
||||
#define IS_ROOM_PTR(x) ((x) >= gr.rooms && (x) < gr.rooms + MAXNROFROOMS)
|
||||
#define IS_ROOM_PTR(x) ((x) >= svr.rooms && (x) < svr.rooms + MAXNROFROOMS)
|
||||
#define IS_ROOM_INDEX(x) ((x) >= 0 && (x) < MAXNROFROOMS)
|
||||
#define IS_SUBROOM_PTR(x) \
|
||||
((x) >= gs.subrooms && (x) < gs.subrooms + MAXNROFROOMS)
|
||||
#define IS_SUBROOM_INDEX(x) ((x) > MAXNROFROOMS && (x) <= (MAXNROFROOMS * 2))
|
||||
#define ROOM_INDEX(x) ((x) - gr.rooms)
|
||||
#define ROOM_INDEX(x) ((x) - svr.rooms)
|
||||
#define SUBROOM_INDEX(x) ((x) - gs.subrooms)
|
||||
#define IS_LAST_ROOM_PTR(x) (ROOM_INDEX(x) == gn.nroom)
|
||||
#define IS_LAST_ROOM_PTR(x) (ROOM_INDEX(x) == svn.nroom)
|
||||
#define IS_LAST_SUBROOM_PTR(x) (!gn.nsubroom || SUBROOM_INDEX(x) == gn.nsubroom)
|
||||
|
||||
#endif /* MKROOM_H */
|
||||
|
||||
@@ -204,7 +204,7 @@ enum ms_sounds {
|
||||
passed to mkclass() as if it dealt with mons[].geno bits */
|
||||
#define G_IGNORE 0x8000 /* for mkclass(), ignore G_GENOD|G_EXTINCT */
|
||||
|
||||
/* for gm.mvitals[].mvflags (variant during game), along with G_NOCORPSE */
|
||||
/* for svm.mvitals[].mvflags (variant during game), along with G_NOCORPSE */
|
||||
#define G_KNOWN 0x04 /* have been encountered */
|
||||
#define G_GENOD 0x02 /* have been genocided */
|
||||
#define G_EXTINCT 0x01 /* population control; create no more */
|
||||
|
||||
@@ -212,7 +212,7 @@ struct monst {
|
||||
/* dead monsters stay on the fmon list until dmonsfree() at end of turn */
|
||||
#define DEADMONSTER(mon) ((mon)->mhp < 1)
|
||||
|
||||
#define is_starting_pet(mon) ((mon)->m_id == gc.context.startingpet_mid)
|
||||
#define is_starting_pet(mon) ((mon)->m_id == svc.context.startingpet_mid)
|
||||
#define is_vampshifter(mon) \
|
||||
((mon)->cham == PM_VAMPIRE || (mon)->cham == PM_VAMPIRE_LEADER \
|
||||
|| (mon)->cham == PM_VLAD_THE_IMPALER)
|
||||
@@ -226,7 +226,7 @@ struct monst {
|
||||
#define mundisplaceable(mon) \
|
||||
((mon)->ispriest || (mon)->isshk \
|
||||
|| (mon)->isgd || (mon)->data == &mons[PM_ORACLE] \
|
||||
|| (mon)->m_id == gq.quest_status.leader_m_id)
|
||||
|| (mon)->m_id == svq.quest_status.leader_m_id)
|
||||
|
||||
/* mimic appearances that block vision/light */
|
||||
#define is_lightblocker_mappear(mon) \
|
||||
|
||||
@@ -302,7 +302,7 @@ struct obj {
|
||||
/* Eggs and other food */
|
||||
#define MAX_EGG_HATCH_TIME 200 /* longest an egg can remain unhatched */
|
||||
#define stale_egg(egg) \
|
||||
((gm.moves - (egg)->age) > (2 * MAX_EGG_HATCH_TIME))
|
||||
((svm.moves - (egg)->age) > (2 * MAX_EGG_HATCH_TIME))
|
||||
#define ofood(o) ((o)->otyp == CORPSE || (o)->otyp == EGG || (o)->otyp == TIN)
|
||||
/* note: sometimes eggs and tins have special corpsenm values that
|
||||
shouldn't be used as an index into mons[] */
|
||||
@@ -420,8 +420,8 @@ struct obj {
|
||||
|| (o)->otyp == AMULET_OF_UNCHANGING)
|
||||
|
||||
/* achievement tracking; 3.6.x did this differently */
|
||||
#define is_mines_prize(o) ((o)->o_id == gc.context.achieveo.mines_prize_oid)
|
||||
#define is_soko_prize(o) ((o)->o_id == gc.context.achieveo.soko_prize_oid)
|
||||
#define is_mines_prize(o) ((o)->o_id == svc.context.achieveo.mines_prize_oid)
|
||||
#define is_soko_prize(o) ((o)->o_id == svc.context.achieveo.soko_prize_oid)
|
||||
|
||||
/* is_art() is now a function in artifact.c */
|
||||
/* #define is_art(o,art) ((o) && (o)->oartifact == (art)) */
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||
* and save files.
|
||||
*/
|
||||
#define EDITLEVEL 105
|
||||
#define EDITLEVEL 106
|
||||
|
||||
/*
|
||||
* Development status possibilities.
|
||||
|
||||
38
include/rm.h
38
include/rm.h
@@ -107,7 +107,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 || (gl.level.flags.arboreal && (typ) == STONE))
|
||||
((typ) == TREE || (svl.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)
|
||||
@@ -374,7 +374,7 @@ struct damage {
|
||||
an existing bones level; if so, most recent victim will be first in list */
|
||||
struct cemetery {
|
||||
struct cemetery *next; /* next struct is previous dead character... */
|
||||
/* "gp.plname" + "-ROLe" + "-RACe" + "-GENder" + "-ALIgnment" + \0 */
|
||||
/* "svp.plname" + "-ROLe" + "-RACe" + "-GENder" + "-ALIgnment" + \0 */
|
||||
char who[PL_NSIZ + 4 * (1 + 3) + 1];
|
||||
/* death reason, same as in score/log file */
|
||||
char how[100 + 1]; /* [DTHSZ+1] */
|
||||
@@ -441,9 +441,9 @@ typedef struct {
|
||||
/*
|
||||
* Macros for compatibility with old code. Someday these will go away.
|
||||
*/
|
||||
#define levl gl.level.locations
|
||||
#define fobj gl.level.objlist
|
||||
#define fmon gl.level.monlist
|
||||
#define levl svl.level.locations
|
||||
#define fobj svl.level.objlist
|
||||
#define fmon svl.level.monlist
|
||||
|
||||
/*
|
||||
* Covert a trap number into the defsym graphics array.
|
||||
@@ -453,45 +453,45 @@ typedef struct {
|
||||
#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) (gl.level.objects[x][y] != (struct obj *) 0)
|
||||
#define OBJ_AT(x, y) (svl.level.objects[x][y] != (struct obj *) 0)
|
||||
/*
|
||||
* Macros for encapsulation of level.monsters references.
|
||||
*/
|
||||
#if 0
|
||||
/* these wouldn't allow buried monster and surface monster at same location */
|
||||
#define MON_AT(x, y) \
|
||||
(gl.level.monsters[x][y] && !gl.level.monsters[x][y]->mburied)
|
||||
(svl.level.monsters[x][y] && !svl.level.monsters[x][y]->mburied)
|
||||
#define MON_BURIED_AT(x, y) \
|
||||
(gl.level.monsters[x][y] && gl.level.monsters[x][y]->mburied)
|
||||
(svl.level.monsters[x][y] && svl.level.monsters[x][y]->mburied)
|
||||
#define m_at(x, y) \
|
||||
(MON_AT(x, y) ? gl.level.monsters[x][y] : (struct monst *) 0)
|
||||
(MON_AT(x, y) ? svl.level.monsters[x][y] : (struct monst *) 0)
|
||||
#define m_buried_at(x, y) \
|
||||
(MON_BURIED_AT(x, y) ? gl.level.monsters[x][y] : (struct monst *) 0)
|
||||
(MON_BURIED_AT(x, y) ? svl.level.monsters[x][y] : (struct monst *) 0)
|
||||
#else /* without 'mburied' */
|
||||
#define MON_AT(x, y) (gl.level.monsters[x][y] != (struct monst *) 0)
|
||||
#define m_at(x, y) (gl.level.monsters[x][y])
|
||||
#define MON_AT(x, y) (svl.level.monsters[x][y] != (struct monst *) 0)
|
||||
#define m_at(x, y) (svl.level.monsters[x][y])
|
||||
#define m_buried_at(x, y) ((struct monst *) 0)
|
||||
#endif
|
||||
#ifdef EXTRA_SANITY_CHECKS
|
||||
#define place_worm_seg(m, x, y) \
|
||||
do { \
|
||||
if (gl.level.monsters[x][y] && gl.level.monsters[x][y] != m) \
|
||||
if (svl.level.monsters[x][y] && svl.level.monsters[x][y] != m) \
|
||||
impossible("place_worm_seg over mon"); \
|
||||
gl.level.monsters[x][y] = m; \
|
||||
svl.level.monsters[x][y] = m; \
|
||||
} while(0)
|
||||
#define remove_monster(x, y) \
|
||||
do { \
|
||||
if (!gl.level.monsters[x][y]) \
|
||||
if (!svl.level.monsters[x][y]) \
|
||||
impossible("no monster to remove"); \
|
||||
gl.level.monsters[x][y] = (struct monst *) 0; \
|
||||
svl.level.monsters[x][y] = (struct monst *) 0; \
|
||||
} while(0)
|
||||
#else
|
||||
#define place_worm_seg(m, x, y) gl.level.monsters[x][y] = m
|
||||
#define remove_monster(x, y) gl.level.monsters[x][y] = (struct monst *) 0
|
||||
#define place_worm_seg(m, x, y) svl.level.monsters[x][y] = m
|
||||
#define remove_monster(x, y) svl.level.monsters[x][y] = (struct monst *) 0
|
||||
#endif
|
||||
|
||||
/* restricted movement, potential luck penalties */
|
||||
#define Sokoban gl.level.flags.sokoban_rules
|
||||
#define Sokoban svl.level.flags.sokoban_rules
|
||||
|
||||
/*
|
||||
* These prototypes are in extern.h but some of the code which uses them
|
||||
|
||||
@@ -28,9 +28,9 @@ enum spellknowledge {
|
||||
#define ALL_MAP 0x1
|
||||
#define ALL_SPELLS 0x2
|
||||
|
||||
#define decrnknow(spell) gs.spl_book[spell].sp_know--
|
||||
#define spellid(spell) gs.spl_book[spell].sp_id
|
||||
#define spellknow(spell) gs.spl_book[spell].sp_know
|
||||
#define decrnknow(spell) svs.spl_book[spell].sp_know--
|
||||
#define spellid(spell) svs.spl_book[spell].sp_id
|
||||
#define spellknow(spell) svs.spl_book[spell].sp_know
|
||||
|
||||
/* how much Pw a spell of level lvl costs to cast? */
|
||||
#define SPELL_LEV_PW(lvl) ((lvl) * 5)
|
||||
|
||||
Reference in New Issue
Block a user