1/* SCCS Id: @(#)decl.h 3.4 2001/12/10 */ 2/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3/* NetHack may be freely redistributed. See license for details. */ 4 5#ifndef DECL_H 6#define DECL_H 7 8#define E extern 9 10E int NDECL((*occupation)); 11E int NDECL((*afternmv)); 12 13E const char *hname; 14E int hackpid; 15#if defined(UNIX) || defined(VMS) 16E int locknum; 17#endif 18#ifdef DEF_PAGER 19E char *catmore; 20#endif /* DEF_PAGER */ 21 22E char SAVEF[]; 23#ifdef MICRO 24E char SAVEP[]; 25#endif 26 27E NEARDATA int bases[MAXOCLASSES]; 28 29E NEARDATA int multi; 30#if 0 31E NEARDATA int warnlevel; 32#endif 33E NEARDATA int nroom; 34E NEARDATA int nsubroom; 35E NEARDATA int occtime; 36 37#define WARNCOUNT 6 /* number of different warning levels */ 38E uchar warnsyms[WARNCOUNT]; 39 40E int x_maze_max, y_maze_max; 41E int otg_temp; 42 43#ifdef REDO 44E NEARDATA int in_doagain; 45#endif 46 47E struct dgn_topology { /* special dungeon levels for speed */ 48 d_level d_oracle_level; 49 d_level d_bigroom_level; /* unused */ 50#ifdef REINCARNATION 51 d_level d_rogue_level; 52#endif 53 d_level d_medusa_level; 54 d_level d_stronghold_level; 55 d_level d_valley_level; 56 d_level d_wiz1_level; 57 d_level d_wiz2_level; 58 d_level d_wiz3_level; 59 d_level d_juiblex_level; 60 d_level d_orcus_level; 61 d_level d_baalzebub_level; /* unused */ 62 d_level d_asmodeus_level; /* unused */ 63 d_level d_portal_level; /* only in goto_level() [do.c] */ 64 d_level d_sanctum_level; 65 d_level d_earth_level; 66 d_level d_water_level; 67 d_level d_fire_level; 68 d_level d_air_level; 69 d_level d_astral_level; 70 xchar d_tower_dnum; 71 xchar d_sokoban_dnum; 72 xchar d_mines_dnum, d_quest_dnum; 73 d_level d_qstart_level, d_qlocate_level, d_nemesis_level; 74 d_level d_knox_level; 75} dungeon_topology; 76/* macros for accesing the dungeon levels by their old names */ 77#define oracle_level (dungeon_topology.d_oracle_level) 78#define bigroom_level (dungeon_topology.d_bigroom_level) 79#ifdef REINCARNATION 80#define rogue_level (dungeon_topology.d_rogue_level) 81#endif 82#define medusa_level (dungeon_topology.d_medusa_level) 83#define stronghold_level (dungeon_topology.d_stronghold_level) 84#define valley_level (dungeon_topology.d_valley_level) 85#define wiz1_level (dungeon_topology.d_wiz1_level) 86#define wiz2_level (dungeon_topology.d_wiz2_level) 87#define wiz3_level (dungeon_topology.d_wiz3_level) 88#define juiblex_level (dungeon_topology.d_juiblex_level) 89#define orcus_level (dungeon_topology.d_orcus_level) 90#define baalzebub_level (dungeon_topology.d_baalzebub_level) 91#define asmodeus_level (dungeon_topology.d_asmodeus_level) 92#define portal_level (dungeon_topology.d_portal_level) 93#define sanctum_level (dungeon_topology.d_sanctum_level) 94#define earth_level (dungeon_topology.d_earth_level) 95#define water_level (dungeon_topology.d_water_level) 96#define fire_level (dungeon_topology.d_fire_level) 97#define air_level (dungeon_topology.d_air_level) 98#define astral_level (dungeon_topology.d_astral_level) 99#define tower_dnum (dungeon_topology.d_tower_dnum) 100#define sokoban_dnum (dungeon_topology.d_sokoban_dnum) 101#define mines_dnum (dungeon_topology.d_mines_dnum) 102#define quest_dnum (dungeon_topology.d_quest_dnum) 103#define qstart_level (dungeon_topology.d_qstart_level) 104#define qlocate_level (dungeon_topology.d_qlocate_level) 105#define nemesis_level (dungeon_topology.d_nemesis_level) 106#define knox_level (dungeon_topology.d_knox_level) 107 108E NEARDATA stairway dnstair, upstair; /* stairs up and down */ 109#define xdnstair (dnstair.sx) 110#define ydnstair (dnstair.sy) 111#define xupstair (upstair.sx) 112#define yupstair (upstair.sy) 113 114E NEARDATA stairway dnladder, upladder; /* ladders up and down */ 115#define xdnladder (dnladder.sx) 116#define ydnladder (dnladder.sy) 117#define xupladder (upladder.sx) 118#define yupladder (upladder.sy) 119 120E NEARDATA stairway sstairs; 121 122E NEARDATA dest_area updest, dndest; /* level-change destination areas */ 123 124E NEARDATA coord inv_pos; 125E NEARDATA dungeon dungeons[]; 126E NEARDATA s_level *sp_levchn; 127#define dunlev_reached(x) (dungeons[(x)->dnum].dunlev_ureached) 128 129#include "quest.h" 130E struct q_score quest_status; 131 132E NEARDATA char pl_character[PL_CSIZ]; 133E NEARDATA char pl_race; /* character's race */ 134 135E NEARDATA char pl_fruit[PL_FSIZ]; 136E NEARDATA int current_fruit; 137E NEARDATA struct fruit *ffruit; 138 139E NEARDATA char tune[6]; 140 141#define MAXLINFO (MAXDUNGEON * MAXLEVEL) 142E struct linfo level_info[MAXLINFO]; 143 144E NEARDATA struct sinfo { 145 int gameover; /* self explanatory? */ 146 int stopprint; /* inhibit further end of game disclosure */ 147#if defined(UNIX) || defined(VMS) || defined (__EMX__) || defined(WIN32) 148 int done_hup; /* SIGHUP or moral equivalent received 149 * -- no more screen output */ 150#endif 151 int something_worth_saving; /* in case of panic */ 152 int panicking; /* `panic' is in progress */ 153#if defined(VMS) || defined(WIN32) 154 int exiting; /* an exit handler is executing */ 155#endif 156 int in_impossible; 157#ifdef PANICLOG 158 int in_paniclog; 159#endif 160} program_state; 161 162E boolean restoring; 163 164E const char quitchars[]; 165E const char vowels[]; 166E const char ynchars[]; 167E const char ynqchars[]; 168E const char ynaqchars[]; 169E const char ynNaqchars[]; 170E NEARDATA long yn_number; 171 172E const char disclosure_options[]; 173 174E NEARDATA int smeq[]; 175E NEARDATA int doorindex; 176E NEARDATA char *save_cm; 177#define KILLED_BY_AN 0 178#define KILLED_BY 1 179#define NO_KILLER_PREFIX 2 180E NEARDATA int killer_format; 181E const char *killer; 182E const char *delayed_killer; 183#ifdef GOLDOBJ 184E long done_money; 185#endif 186E char killer_buf[BUFSZ]; 187E const char *configfile; 188E NEARDATA char plname[PL_NSIZ]; 189E NEARDATA char dogname[]; 190E NEARDATA char catname[]; 191E NEARDATA char horsename[]; 192E char preferred_pet; 193E const char *occtxt; /* defined when occupation != NULL */ 194E const char *nomovemsg; 195E const char nul[]; 196E char lock[]; 197 198E const char sdir[], ndir[]; 199E const schar xdir[], ydir[], zdir[]; 200 201E NEARDATA schar tbx, tby; /* set in mthrowu.c */ 202 203E NEARDATA struct multishot { int n, i; short o; boolean s; } m_shot; 204 205E NEARDATA struct dig_info { /* apply.c, hack.c */ 206 int effort; 207 d_level level; 208 coord pos; 209 long lastdigtime; 210 boolean down, chew, warned, quiet; 211} digging; 212 213E NEARDATA long moves, monstermoves; 214E NEARDATA long wailmsg; 215 216E NEARDATA boolean in_mklev; 217E NEARDATA boolean stoned; 218E NEARDATA boolean unweapon; 219E NEARDATA boolean mrg_to_wielded; 220E NEARDATA struct obj *current_wand; 221 222E NEARDATA boolean in_steed_dismounting; 223 224E const int shield_static[]; 225 226#include "spell.h" 227E NEARDATA struct spell spl_book[]; /* sized in decl.c */ 228 229#include "color.h" 230#ifdef TEXTCOLOR 231E const int zapcolors[]; 232#endif 233 234E const char def_oc_syms[MAXOCLASSES]; /* default class symbols */ 235E uchar oc_syms[MAXOCLASSES]; /* current class symbols */ 236E const char def_monsyms[MAXMCLASSES]; /* default class symbols */ 237E uchar monsyms[MAXMCLASSES]; /* current class symbols */ 238 239#include "obj.h" 240E NEARDATA struct obj *invent, 241 *uarm, *uarmc, *uarmh, *uarms, *uarmg, *uarmf, 242#ifdef TOURIST 243 *uarmu, /* under-wear, so to speak */ 244#endif 245 *uskin, *uamul, *uleft, *uright, *ublindf, 246 *uwep, *uswapwep, *uquiver; 247 248E NEARDATA struct obj *uchain; /* defined only when punished */ 249E NEARDATA struct obj *uball; 250E NEARDATA struct obj *migrating_objs; 251E NEARDATA struct obj *billobjs; 252E NEARDATA struct obj zeroobj; /* init'd and defined in decl.c */ 253 254#include "you.h" 255E NEARDATA struct you u; 256 257#include "onames.h" 258#ifndef PM_H /* (pm.h has already been included via youprop.h) */ 259#include "pm.h" 260#endif 261 262E NEARDATA struct monst youmonst; /* init'd and defined in decl.c */ 263E NEARDATA struct monst *mydogs, *migrating_mons; 264 265E NEARDATA struct mvitals { 266 uchar born; 267 uchar died; 268 uchar mvflags; 269} mvitals[NUMMONS]; 270 271E NEARDATA struct c_color_names { 272 const char *const c_black, *const c_amber, *const c_golden, 273 *const c_light_blue,*const c_red, *const c_green, 274 *const c_silver, *const c_blue, *const c_purple, 275 *const c_white; 276} c_color_names; 277#define NH_BLACK c_color_names.c_black 278#define NH_AMBER c_color_names.c_amber 279#define NH_GOLDEN c_color_names.c_golden 280#define NH_LIGHT_BLUE c_color_names.c_light_blue 281#define NH_RED c_color_names.c_red 282#define NH_GREEN c_color_names.c_green 283#define NH_SILVER c_color_names.c_silver 284#define NH_BLUE c_color_names.c_blue 285#define NH_PURPLE c_color_names.c_purple 286#define NH_WHITE c_color_names.c_white 287 288/* The names of the colors used for gems, etc. */ 289E const char *c_obj_colors[]; 290 291E struct c_common_strings { 292 const char *const c_nothing_happens, *const c_thats_enough_tries, 293 *const c_silly_thing_to, *const c_shudder_for_moment, 294 *const c_something, *const c_Something, 295 *const c_You_can_move_again, 296 *const c_Never_mind, *c_vision_clears, 297 *const c_the_your[2]; 298} c_common_strings; 299#define nothing_happens c_common_strings.c_nothing_happens 300#define thats_enough_tries c_common_strings.c_thats_enough_tries 301#define silly_thing_to c_common_strings.c_silly_thing_to 302#define shudder_for_moment c_common_strings.c_shudder_for_moment 303#define something c_common_strings.c_something 304#define Something c_common_strings.c_Something 305#define You_can_move_again c_common_strings.c_You_can_move_again 306#define Never_mind c_common_strings.c_Never_mind 307#define vision_clears c_common_strings.c_vision_clears 308#define the_your c_common_strings.c_the_your 309 310/* material strings */ 311E const char *materialnm[]; 312 313/* Monster name articles */ 314#define ARTICLE_NONE 0 315#define ARTICLE_THE 1 316#define ARTICLE_A 2 317#define ARTICLE_YOUR 3 318 319/* Monster name suppress masks */ 320#define SUPPRESS_IT 0x01 321#define SUPPRESS_INVISIBLE 0x02 322#define SUPPRESS_HALLUCINATION 0x04 323#define SUPPRESS_SADDLE 0x08 324#define EXACT_NAME 0x0F 325 326/* Vision */ 327E NEARDATA boolean vision_full_recalc; /* TRUE if need vision recalc */ 328E NEARDATA char **viz_array; /* could see/in sight row pointers */ 329 330/* Window system stuff */ 331E NEARDATA winid WIN_MESSAGE, WIN_STATUS; 332E NEARDATA winid WIN_MAP, WIN_INVEN; 333E char toplines[]; 334#ifndef TCAP_H 335E struct tc_gbl_data { /* also declared in tcap.h */ 336 char *tc_AS, *tc_AE; /* graphics start and end (tty font swapping) */ 337 int tc_LI, tc_CO; /* lines and columns */ 338} tc_gbl_data; 339#define AS tc_gbl_data.tc_AS 340#define AE tc_gbl_data.tc_AE 341#define LI tc_gbl_data.tc_LI 342#define CO tc_gbl_data.tc_CO 343#endif 344 345/* xxxexplain[] is in drawing.c */ 346E const char * const monexplain[], invisexplain[], * const objexplain[], * const oclass_names[]; 347 348/* Some systems want to use full pathnames for some subsets of file names, 349 * rather than assuming that they're all in the current directory. This 350 * provides all the subclasses that seem reasonable, and sets up for all 351 * prefixes being null. Port code can set those that it wants. 352 */ 353#define HACKPREFIX 0 354#define LEVELPREFIX 1 355#define SAVEPREFIX 2 356#define BONESPREFIX 3 357#define DATAPREFIX 4 /* this one must match hardcoded value in dlb.c */ 358#define SCOREPREFIX 5 359#define LOCKPREFIX 6 360#define CONFIGPREFIX 7 361#define TROUBLEPREFIX 8 362#define PREFIX_COUNT 9 363/* used in files.c; xxconf.h can override if needed */ 364# ifndef FQN_MAX_FILENAME 365#define FQN_MAX_FILENAME 512 366# endif 367 368#if defined(NOCWD_ASSUMPTIONS) || defined(VAR_PLAYGROUND) 369/* the bare-bones stuff is unconditional above to simplify coding; for 370 * ports that actually use prefixes, add some more localized things 371 */ 372#define PREFIXES_IN_USE 373#endif 374 375E char *fqn_prefix[PREFIX_COUNT]; 376#ifdef PREFIXES_IN_USE 377E char *fqn_prefix_names[PREFIX_COUNT]; 378#endif 379 380#ifdef AUTOPICKUP_EXCEPTIONS 381struct autopickup_exception { 382 char *pattern; 383 boolean grab; 384 struct autopickup_exception *next; 385}; 386#endif /* AUTOPICKUP_EXCEPTIONS */ 387 388#undef E 389 390#endif /* DECL_H */ 391