Files
nethack/include/decl.h
nhmall 0b35079acc add customcolors option
customcolors (default) and !customcolors toggle whether the
custom colors get applied to the glyphmap.
2024-03-24 16:55:23 -04:00

1194 lines
33 KiB
C

/* NetHack 3.7 decl.h $NHDT-Date: 1706079834 2024/01/24 07:03:54 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.355 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Michael Allison, 2007. */
/* NetHack may be freely redistributed. See license for details. */
#ifndef DECL_H
#define DECL_H
/* The names of the colors used for gems, etc. */
extern const char *c_obj_colors[];
/* lua callback queue names */
extern const char * const nhcb_name[];
extern int nhcb_counts[];
extern NEARDATA const struct c_color_names c_color_names;
#define NH_BLACK c_color_names.c_black
#define NH_AMBER c_color_names.c_amber
#define NH_GOLDEN c_color_names.c_golden
#define NH_LIGHT_BLUE c_color_names.c_light_blue
#define NH_RED c_color_names.c_red
#define NH_GREEN c_color_names.c_green
#define NH_SILVER c_color_names.c_silver
#define NH_BLUE c_color_names.c_blue
#define NH_PURPLE c_color_names.c_purple
#define NH_WHITE c_color_names.c_white
#define NH_ORANGE c_color_names.c_orange
/* common_strings */
extern const struct c_common_strings c_common_strings;
#define nothing_happens c_common_strings.c_nothing_happens
#define nothing_seems_to_happen c_common_strings.c_nothing_seems_to_happen
#define thats_enough_tries c_common_strings.c_thats_enough_tries
#define silly_thing_to c_common_strings.c_silly_thing_to
#define shudder_for_moment c_common_strings.c_shudder_for_moment
#define something c_common_strings.c_something
#define Something c_common_strings.c_Something
#define You_can_move_again c_common_strings.c_You_can_move_again
#define Never_mind c_common_strings.c_Never_mind
#define vision_clears c_common_strings.c_vision_clears
#define the_your c_common_strings.c_the_your
/* fakename[] used occasionally so vtense() won't be fooled by an assigned
name ending in 's' */
#define fakename c_common_strings.c_fakename
/* default object class symbols */
extern const struct class_sym def_oc_syms[MAXOCLASSES];
/* default mon class symbols */
extern const struct class_sym def_monsyms[MAXMCLASSES];
extern const char disclosure_options[];
/* empty string that is non-const for parameter use */
extern char emptystr[];
#ifdef WIN32
extern boolean fqn_prefix_locked[PREFIX_COUNT];
#endif
#ifdef PREFIXES_IN_USE
extern const char *fqn_prefix_names[PREFIX_COUNT];
#endif
extern NEARDATA boolean has_strong_rngseed;
extern struct engr *head_engr;
/* material strings */
extern const char *materialnm[];
/* current mon class symbols */
extern uchar monsyms[MAXMCLASSES];
/* current object class symbols */
extern uchar oc_syms[MAXOCLASSES];
extern const char quitchars[];
extern NEARDATA char tune[6];
extern const schar xdir[], ydir[], zdir[], dirs_ord[];
extern const char vowels[];
extern const char ynchars[];
extern const char ynqchars[];
extern const char ynaqchars[];
extern const char ynNaqchars[];
extern const char rightleftchars[];
extern NEARDATA long yn_number;
extern struct restore_info restoreinfo;
extern NEARDATA struct savefile_info sfcap, sfrestinfo, sfsaveinfo;
extern const int shield_static[];
extern NEARDATA struct obj *uarm, *uarmc, *uarmh, *uarms, *uarmg, *uarmf,
*uarmu, /* under-wear, so to speak */
*uskin, *uamul, *uleft, *uright, *ublindf, *uwep, *uswapwep, *uquiver;
extern NEARDATA struct obj *uchain; /* defined only when punished */
extern NEARDATA struct obj *uball;
extern NEARDATA struct you u;
extern NEARDATA time_t ubirthday;
extern NEARDATA struct u_realtime urealtime;
/* Window system stuff */
extern NEARDATA winid WIN_MESSAGE;
extern NEARDATA winid WIN_STATUS;
extern NEARDATA winid WIN_MAP, WIN_INVEN;
#ifndef TCAP_H
extern struct tc_gbl_data { /* also declared in tcap.h */
char *tc_AS, *tc_AE; /* graphics start and end (tty font swapping) */
int tc_LI, tc_CO; /* lines and columns */
} tc_gbl_data;
#define AS gt.tc_gbl_data.tc_AS
#define AE gt.tc_gbl_data.tc_AE
#define LI gt.tc_gbl_data.tc_LI
#define CO gt.tc_gbl_data.tc_CO
#endif
#ifdef PANICTRACE
extern const char *ARGV0;
#endif
struct display_hints {
boolean botl; /* partially redo status line */
boolean botlx; /* print an entirely new bottom line */
boolean time_botl; /* context.botl for 'time' (moves) only */
};
extern struct display_hints disp;
/*
* 'gX' -- instance_globals holds engine state that does not need to be
* persisted upon game exit. The initialization state is well defined
* and set in decl.c during early early engine initialization.
*
* Unlike instance_flags, values in the structure can be of any type.
*
* Pulled from other files to be grouped in one place. Some comments
* which came with them don't make much sense out of their original context.
*/
struct instance_globals_a {
/* decl.c */
int (*afternmv)(void);
/* detect.c */
int already_found_flag; /* used to augment first "already found a monster"
* message if 'cmdassist' is Off */
/* do.c */
boolean at_ladder;
/* dog.c */
struct autopickup_exception *apelist;
/* end.c */
struct valuable_data amulets[LAST_AMULET + 1 - FIRST_AMULET];
/* mon.c */
short *animal_list; /* list of PM values for animal monsters */
int animal_list_count;
/* pickup.c */
int A_first_hint; /* menustyle:Full plus 'A' response + !paranoid:A */
int A_second_hint; /* menustyle:Full plus 'A' response + paranoid:A */
boolean abort_looting;
/* shk.c */
boolean auto_credit;
/* sounds.c */
enum soundlib_ids active_soundlib;
/* trap.c */
/* context for water_damage(), managed by water_damage_chain();
when more than one stack of potions of acid explode while processing
a chain of objects, use alternate phrasing after the first message */
struct h2o_ctx acid_ctx;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_b {
/* botl.c */
struct istat_s blstats[2][MAXBLSTATS];
boolean blinit;
#ifdef STATUS_HILITES
long bl_hilite_moves;
#endif
/* decl.c */
int bases[MAXOCLASSES + 1];
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];
/* hack.c */
unsigned bldrpush_oid; /* id of last boulder pushed */
long bldrpushtime; /* turn that a message was given for pushing
* a boulder; used in lieu of Norep() */
/* mkmaze.c */
lev_region bughack; /* for preserving the insect legs when wallifying
* baalz level */
struct bubble *bbubbles;
/* pickup.c */
boolean bucx_filter;
/* zap.c */
struct monst *buzzer; /* zapper/caster/breather who initiates buzz() */
/* new */
boolean bot_disabled;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_c {
struct _cmd_queue *command_queue[NUM_CQS];
/* botl.c */
unsigned long cond_hilites[BL_ATTCLR_MAX];
int condmenu_sortorder;
/* cmd.c */
struct cmd Cmd; /* flag.h */
/* Provide a means to redo the last command. The flag `in_doagain'
(decl.c below) is set to true while redoing the command. This flag
is tested in commands that require additional input (like `throw'
which requires a thing and a direction), and the input prompt is
not shown. Also, while in_doagain is TRUE, no keystrokes can be
saved into the saveq. */
coord clicklook_cc;
/* decl.c */
char chosen_windowtype[WINTYPELEN];
int cmd_key; /* parse() / rhack() */
cmdcount_nht command_count;
/* some objects need special handling during destruction or placement */
struct obj *current_wand; /* wand currently zapped/applied */
#ifdef DEF_PAGER
const char *catmore; /* external pager; from getenv() or DEF_PAGER */
#endif
struct context_info context;
/* dog.c */
char catname[PL_PSIZ];
/* end.c */
char *crash_email; // email for crash reports
char *crash_name; // human name for crash reports
int crash_urlmax; // maximum length for the url of a crash report
/* symbols.c */
int currentgraphics;
/* files.c */
char *cmdline_rcfile; /* set in unixmain.c, used in options.c */
char *config_section_chosen;
char *config_section_current;
boolean chosen_symset_start;
boolean chosen_symset_end;
/* invent.c */
/* for perm_invent when operating on a partial inventory display, so that
persistent one doesn't get shrunk during filtering for item selection
then regrown to full inventory, possibly being resized in the process */
winid cached_pickinv_win;
int core_invent_state;
/* options.c */
char *cmdline_windowsys; /* set in unixmain.c */
struct menucoloring *color_colorings; /* alternate set of menu colors */
/* pickup.c */
/* current_container is set in use_container(), to be used by the
callback routines in_container() and out_container() from askchain()
and use_container(). Also used by menu_loot() and container_gone(). */
struct obj *current_container;
boolean class_filter;
/* questpgr.c */
char cvt_buf[CVT_BUF_SIZE];
/* sounds.c */
enum soundlib_ids chosen_soundlib;
/* sp_lev.c */
struct sp_coder *coder;
/* uhitm.c */
short corpsenm_digested; /* monster type being digested, set by gulpum */
/* zap.c */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_d {
/* decl.c */
int doorindex;
long done_money;
long domove_attempting;
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;
/* do.c */
char *dfr_pre_msg; /* pline() before level change */
char *dfr_post_msg; /* pline() after level change */
int did_nothing_flag; /* to augment the no-rest-next-to-monster message */
/* dog.c */
char dogname[PL_PSIZ];
/* end.c */
long done_seq; /* for counting deaths occurring on same hero_seq */
/* 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,
but that would require all xname() and doname() calls to be modified */
int distantname;
/* pickup.c */
boolean decor_fumble_override;
boolean decor_levitate_override;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_e {
/* cmd.c */
winid en_win;
boolean en_via_menu;
struct ext_func_tab *ext_tlist; /* info for rhack() from doextcmd() */
/* eat.c */
char *eatmbuf; /* set by cpostfx() */
/* mkmaze.c */
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 */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_f {
/* decl.c */
struct trap *ftrap;
char *fqn_prefix[PREFIX_COUNT];
struct fruit *ffruit;
/* eat.c */
boolean force_save_hs;
/* mhitm.c */
boolean far_noise;
/* rumors.c */
long false_rumor_size;
unsigned long false_rumor_start;
long false_rumor_end;
/* shk.c */
long int followmsg; /* last time of follow message */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_g {
/* display.c */
gbuf_entry gbuf[ROWNO][COLNO];
coordxy gbuf_start[ROWNO];
coordxy gbuf_stop[ROWNO];
/* do_name.c */
coordxy getposx, getposy; /* cursor position in case of async resize */
struct selectionvar *gloc_filter_map;
int gloc_filter_floodfill_match_glyph;
/* dog.c */
xint16 gtyp; /* type of dog's current goal */
coordxy gx; /* x position of dog's current goal */
coordxy gy; /* y position of dog's current goal */
/* dokick.c */
const char *gate_str;
/* end.c */
/* 1st +1: subtracting first from last, 2nd +1: one slot for all glass */
struct valuable_data gems[LAST_REAL_GEM + 1 - FIRST_REAL_GEM + 1];
/* invent.c */
long glyph_reset_timestamp;
/* nhlua.c */
boolean gmst_stored;
long gmst_moves;
struct obj *gmst_invent;
genericptr_t *gmst_ubak, *gmst_disco, *gmst_mvitals;
/* pline.c */
struct gamelog_line *gamelog;
/* region.c */
boolean gas_cloud_diss_within;
int gas_cloud_diss_seen;
/* new stuff */
/* per-level glyph mapping flags */
long glyphmap_perlevel_flags;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
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 */
long hero_seq; /* 'moves*8 + n' where n is updated each hero move during
* the current turn */
/* dog.c */
char horsename[PL_PSIZ];
/* mhitu.c */
unsigned hitmsg_mid;
struct attack *hitmsg_prev;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_i {
/* decl.c */
int in_doagain;
coord inv_pos;
boolean in_mklev;
boolean in_steed_dismounting;
struct obj *invent;
/* do_wear.c */
/* starting equipment gets auto-worn at beginning of new game,
and we don't want stealth or displacement feedback then */
boolean initial_don; /* manipulated in set_wear() */
/* invent.c */
char *invbuf;
unsigned invbufsiz;
int in_sync_perminvent;
/* mon.c */
struct monst **itermonarr; /* temporary array of all N monsters
* on the current level */
/* restore.c */
struct bucket *id_map;
/* sp_lev.c */
boolean in_mk_themerooms;
/* new */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_j {
/* apply.c */
int jumping_is_magic; /* current jump result of magic */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_k {
/* decl.c */
struct obj *kickedobj; /* object in flight due to kicking */
struct kinfo killer;
/* read.c */
boolean known;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_l {
/* cmd.c */
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
#ifdef MICRO
char levels[PATHLEN]; /* where levels are */
#endif /* MICRO */
/* files.c */
int lockptr;
char lock[LOCKNAMESIZE];
/* invent.c */
int lastinvnr; /* 0 ... 51 (never saved&restored) */
/* light.c */
light_source *light_base;
/* mklev.c */
genericptr_t luathemes[MAXDUNGEON];
/* mon.c */
unsigned last_hider; /* m_id of hides-under mon seen going into hiding */
/* nhlan.c */
#ifdef MAX_LAN_USERNAME
char lusername[MAX_LAN_USERNAME];
int lusername_size;
#endif
/* nhlua.c */
genericptr_t luacore; /* lua_State * */
char lua_warnbuf[BUFSZ];
int loglua;
int lua_sid;
/* options.c */
boolean loot_reset_justpicked;
/* save.c */
struct obj *looseball; /* track uball during save and... */
struct obj *loosechain; /* track uchain since saving might free it */
/* sp_lev.c */
char *lev_message;
lev_region *lregions;
/* trap.c */
struct launchplace launchplace;
/* windows.c */
struct win_choices *last_winchoice;
/* new stuff */
char lua_ver[LUA_VER_BUFSIZ];
char lua_copyright[LUA_COPYRIGHT_BUFSIZ];
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_m {
/* apply.c */
int mkot_trap_warn_count;
/* botl.c */
int mrank_sz; /* loaded by max_rank_sz */
/* decl.c */
cmdcount_nht multi;
const char *multi_reason;
char multireasonbuf[QBUFSZ]; /* note: smaller than usual [BUFSZ] */
/* for xname handling of multiple shot missile volleys:
number of shots, index of current one, validity check, shoot vs throw */
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;
/* mklev.c */
boolean made_branch; /* used only during level creation */
/* mkmap.c */
int min_rx; /* rectangle bounds for regions */
int max_rx;
int min_ry;
int max_ry;
/* mkobj.c */
boolean mkcorpstat_norevive; /* for trolls */
/* mthrowu.c */
int mesg_given; /* for m_throw()/thitu() 'miss' message */
struct monst *mtarget; /* monster being shot by another monster */
struct monst *marcher; /* monster that is shooting */
/* muse.c */
boolean m_using; /* kludge to use mondied instead of killed */
struct musable m;
/* options.c */
/* Allow the user to map incoming characters to various menu commands. */
char mapped_menu_cmds[MAX_MENU_MAPPED_CMDS + 1]; /* exported */
char mapped_menu_op[MAX_MENU_MAPPED_CMDS + 1];
/* region.c */
int max_regions;
/* trap.c */
boolean mentioned_water; /* set to True by water_damage() if it issues
* a message about water; dodip() should make
* POT_WATER should become discovered */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_n {
/* botl.c */
int now_or_before_idx; /* 0..1 for array[2][] first index */
/* 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
* without USER_SOUNDS and config file contains
* SOUND=foo or SOUNDDIR=bar */
/* mhitm.c */
long noisetime;
/* mkmap.c */
char *new_locations;
int n_loc_filled;
/* options.c */
short n_menu_mapped;
/* potion.c */
boolean notonhead; /* for long worms */
/* questpgr.c */
char nambuf[CVT_BUF_SIZE];
/* region.c */
int n_regions;
/* restore.c */
int n_ids_mapped;
/* sp_lev.c */
int num_lregions;
/* u_init.c */
short nocreate;
short nocreate2;
short nocreate3;
short nocreate4;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_o {
/* dbridge.c */
struct entity occupants[ENTITIES];
/* decl.c */
int (*occupation)(void);
int occtime;
int otg_temp; /* used by object_to_glyph() [otg] */
struct obj *otg_otmp; /* used by obj_is_piletop() */
const char *occtxt; /* defined when occupation != NULL */
/* symbols.c */
nhsym ov_primary_syms[SYM_MAX]; /* loaded primary symbols */
nhsym ov_rogue_syms[SYM_MAX]; /* loaded rogue symbols */
/* invent.c */
/* query objlist callback: return TRUE if obj is at given location */
coord only;
/* o_init.c */
short oclass_prob_totals[MAXOCLASSES];
/* options.c */
int opt_phase; /* builtin_opt, syscf_, rc_file_, environ_, play_opt */
boolean opt_initial;
boolean opt_from_file;
boolean opt_need_redraw; /* for doset() */
boolean opt_need_glyph_reset;
boolean opt_need_promptstyle;
boolean opt_reset_customizations;
/* pickup.c */
int oldcap; /* last encumbrance */
/* restore.c */
struct fruit *oldfruit;
long omoves;
/* 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 */
boolean override_confirmation; /* Used to flag attacks caused by
* Stormbringer's maliciousness. */
/* zap.c */
boolean obj_zapped;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_p {
/* apply.c */
int polearm_range_min;
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 */
char preferred_pet; /* '\0', 'c', 'd', 'n' (none) */
/* symbols.c */
nhsym primary_syms[SYM_MAX]; /* loaded primary symbols */
/* invent.c */
int perm_invent_toggling_direction;
/* pickup.c */
boolean picked_filter;
int pickup_encumbrance; /* when picking up multiple items in a single
* operation, encumbrance after previous item */
/* pline.c */
unsigned pline_flags;
char prevmsg[BUFSZ];
/* potion.c */
int potion_nothing;
int potion_unkn;
/* pray.c */
/* values calculated when prayer starts, and used when completed */
aligntyp p_aligntyp;
int p_trouble;
int p_type; /* (-1)-3: (-1)=really naughty, 3=really good */
/* weapon.c */
struct obj *propellor;
/* zap.c */
int poly_zapped;
/* new stuff */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
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 */
/* extralev.c */
struct rogueroom r[3][3];
/* mkmaze.c */
boolean ransacked;
/* region.c */
NhRegion **regions;
/* rip.c */
char **rip;
/* role.c */
char role_pa[NUM_BP];
char role_post_attribs;
struct role_filter rfilter;
/* shk.c */
struct repo repo;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_s {
/* artifact.c */
int spec_dbon_applies; /* coordinate effects from spec_dbon() with
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 */
d_level save_dlevel; /* ? [even back in 3.4.3, only used in bones.c] */
/* symbols.c */
struct symsetentry symset[NUM_GRAPHICS];
/* adds UNICODESET */
struct symset_customization sym_customizations[NUM_GRAPHICS + 1][custom_count];
nhsym showsyms[SYM_MAX]; /* symbols to be displayed */
/* files.c */
int symset_count; /* for pick-list building only */
int symset_which_set;
/* SAVESIZE, BONESSIZE, LOCKNAMESIZE are defined in "fnamesiz.h" */
char SAVEF[SAVESIZE]; /* relative path of save file from playground */
#ifdef MICRO
char SAVEP[SAVESIZE]; /* holds path of directory for save file */
#endif
/* invent.c */
unsigned sortlootmode; /* set by sortloot() for use by sortloot_cmp();
* reset by sortloot when done */
/* mhitm.c */
boolean skipdrin; /* mind flayer against headless target */
/* mon.c */
boolean somebody_can_move;
/* options.c */
struct symsetentry *symset_list; /* files.c will populate this with
* list of available sets */
boolean save_menucolors; /* copy of iflags.use_menu_colors */
struct menucoloring *save_colorings; /* copy of gm.menu_colorings */
boolean simple_options_help;
/* pickup.c */
boolean shop_filter;
/* pline.c */
#ifdef DUMPLOG_CORE
unsigned saved_pline_index; /* slot in saved_plines[] to use next */
char *saved_plines[DUMPLOG_MSG_COUNT];
#endif
/* polyself.c */
int sex_change_ok; /* controls whether taking on new form or becoming new
man can also change sex (ought to be an arg to
polymon() and newman() instead) */
/* shk.c */
/* auto-response flag for/from "sell foo?" 'a' => 'y', 'q' => 'n' */
char sell_response;
int sell_how;
/* spells.c */
int spl_sortmode; /* index into spl_sortchoices[] */
int *spl_orderindx; /* array of gs.spl_book[] indices */
/* steal.c */
unsigned int stealoid; /* object to be stolen */
unsigned int stealmid; /* monster doing the stealing */
/* vision.c */
int seethru; /* 'bubble' debugging: clouds and water don't block light */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_t {
/* apply.c */
struct trapinfo trapinfo;
/* decl.c */
char tune[6];
schar tbx; /* mthrowu: target x */
schar tby; /* mthrowu: target y */
char toplines[TBUFSZ];
struct obj *thrownobj; /* object in flight due to throwing */
/* Windowing stuff that's really tty oriented, but present for all ports */
struct tc_gbl_data tc_gbl_data; /* AS,AE, LI,CO */
/* hack.c */
anything tmp_anything;
struct selectionvar *travelmap;
/* invent.c */
/* query objlist callback: return TRUE if obj type matches "this_type" */
int this_type;
const char *this_title; /* title for inventory list of specific type */
/* muse.c */
int trapx;
int trapy;
/* rumors.c */
long true_rumor_size; /* rumor size variables are signed so that value -1
* can be used as a flag */
unsigned long true_rumor_start; /* rumor start offsets are unsigned because
* they're handled via %lx format */
long true_rumor_end; /* rumor end offsets are signed because they're
* compared with [dlb_]ftell() */
/* sp_lev.c */
boolean themeroom_failed;
/* timeout.c */
/* ordered timer list */
struct fe *timer_base; /* "active" */
unsigned long timer_id;
/* topten.c */
winid toptenwin;
/* uhitm.c */
int twohits; /* 0: single hit; 1: first of 2; 2: second of 2 */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_u {
/* botl.c */
boolean update_all;
/* decl.c */
dest_area updest;
boolean unweapon;
/* role.c */
struct Role urole; /* player's role. May be munged in role_init() */
struct Race urace; /* player's race. May be munged in role_init() */
/* save.c */
d_level uz_save;
/* new stuff */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_v {
/* botl.c */
boolean valset[MAXBLSTATS];
/* end.c */
struct val_list valuables[3];
/* mhitm.c */
boolean vis;
/* mklev.c */
coordxy vault_x;
coordxy vault_y;
/* mon.c */
boolean vamp_rise_msg;
/* pickup.c */
long val_for_n_or_more;
/* list of menu classes for query_objlist() and allow_category callback
(with room for all object classes, 'u'npaid, BUCX, and terminator) */
char valid_menu_classes[MAXOCLASSES + 1 + 4 + 1];
/* vision.c */
seenV **viz_array; /* used in cansee() and couldsee() macros */
coordxy *viz_rmin; /* min could see indices */
coordxy *viz_rmax; /* max could see indices */
boolean vision_full_recalc;
/* new stuff */
struct sound_voice voice;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_w {
/* decl.c */
int warn_obj_cnt; /* count of monsters meeting criteria */
long wailmsg;
/* symbols.c */
nhsym warnsyms[WARNCOUNT]; /* the current warning display symbols */
/* files.c */
char wizkit[WIZKIT_MAX];
/* hack.c */
int wc; /* current weight_cap(); valid after call to inv_weight() */
/* mkmaze.c */
struct trap *wportal;
/* new */
struct win_settings wsettings; /* wintype.h */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_x {
/* decl.c */
int x_maze_max;
/* 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
* due to reserving PREFIX bytes at start and possibly
* skipping leading "the " after constructing result */
/* sp_lev.c */
coordxy xstart, xsize;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_y {
/* decl.c */
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;
int you_buf_siz;
/* sp_lev.c */
coordxy ystart, ysize;
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
struct instance_globals_z {
/* mon.c */
boolean zombify;
/* muse.c */
boolean zap_oseen; /* for wands which use mbhitm and are zapped at
* players. We usually want an oseen local to
* the function, but this is impossible since the
* function mbhitm has to be compatible with the
* normal zap routines, and those routines don't
* remember who zapped the wand. */
boolean havestate;
unsigned long magic; /* validate that structure layout is preserved */
};
extern struct instance_globals_a ga;
extern struct instance_globals_b gb;
extern struct instance_globals_c gc;
extern struct instance_globals_d gd;
extern struct instance_globals_e ge;
extern struct instance_globals_f gf;
extern struct instance_globals_g gg;
extern struct instance_globals_h gh;
extern struct instance_globals_i gi;
extern struct instance_globals_j gj;
extern struct instance_globals_k gk;
extern struct instance_globals_l gl;
extern struct instance_globals_m gm;
extern struct instance_globals_n gn;
extern struct instance_globals_o go;
extern struct instance_globals_p gp;
extern struct instance_globals_q gq;
extern struct instance_globals_r gr;
extern struct instance_globals_s gs;
extern struct instance_globals_t gt;
extern struct instance_globals_u gu;
extern struct instance_globals_v gv;
extern struct instance_globals_w gw;
extern struct instance_globals_x gx;
extern struct instance_globals_y gy;
extern struct instance_globals_z gz;
struct const_globals {
const struct obj zeroobj; /* used to zero out a struct obj */
const struct monst zeromonst; /* used to zero out a struct monst */
const anything zeroany; /* used to zero out union any */
const NhRect zeroNhRect; /* used to zero out NhRect */
};
extern const struct const_globals cg;
extern struct obj hands_obj;
#endif /* DECL_H */