1 | /* SCCS Id: @(#)decl.c 3.3 99/05/07 */ 2 | /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3 | /* NetHack may be freely redistributed. See license for details. */ 4 | 5 | #include "hack.h" 6 | 7 | int NDECL((*afternmv)); 8 | int NDECL((*occupation)); 9 | 10 | /* from xxxmain.c */ 11 | const char *hname = 0; /* name of the game (argv[0] of main) */ 12 | int hackpid = 0; /* current process id */ 13 | #if defined(UNIX) || defined(VMS) 14 | int locknum = 0; /* max num of simultaneous users */ 15 | #endif 16 | #ifdef DEF_PAGER 17 | char *catmore = 0; /* default pager */ 18 | #endif 19 | 20 | NEARDATA int bases[MAXOCLASSES] = DUMMY; 21 | 22 | NEARDATA int multi = 0; 23 | NEARDATA int warnlevel = 0; /* used by movemon and dochugw */ 24 | NEARDATA int nroom = 0; 25 | NEARDATA int nsubroom = 0; 26 | NEARDATA int occtime = 0; 27 | 28 | int x_maze_max, y_maze_max; /* initialized in main, used in mkmaze.c */ 29 | int otg_temp; /* used by object_to_glyph() [otg] */ 30 | 31 | #ifdef REDO 32 | NEARDATA int in_doagain = 0; 33 | #endif 34 | 35 | /* 36 | * The following structure will be initialized at startup time with 37 | * the level numbers of some "important" things in the game. 38 | */ 39 | struct dgn_topology dungeon_topology = {DUMMY}; 40 | 41 | #include "quest.h" 42 | struct q_score quest_status = DUMMY; 43 | 44 | NEARDATA int smeq[MAXNROFROOMS+1] = DUMMY; 45 | NEARDATA int doorindex = 0; 46 | 47 | NEARDATA char *save_cm = 0; 48 | NEARDATA int killer_format = 0; 49 | const char *killer = 0; 50 | const char *delayed_killer = 0; 51 | char killer_buf[BUFSZ] = DUMMY; 52 | const char *nomovemsg = 0; 53 | const char nul[40] = DUMMY; /* contains zeros */ 54 | NEARDATA char plname[PL_NSIZ] = DUMMY; /* player name */ 55 | NEARDATA char pl_character[PL_CSIZ] = DUMMY; 56 | NEARDATA char pl_race = '\0'; 57 | 58 | NEARDATA char pl_fruit[PL_FSIZ] = DUMMY; 59 | NEARDATA int current_fruit = 0; 60 | NEARDATA struct fruit *ffruit = (struct fruit *)0; 61 | 62 | NEARDATA char tune[6] = DUMMY; 63 | 64 | const char *occtxt = DUMMY; 65 | const char quitchars[] = " \r\n\033"; 66 | const char vowels[] = "aeiouAEIOU"; 67 | const char ynchars[] = "yn"; 68 | const char ynqchars[] = "ynq"; 69 | const char ynaqchars[] = "ynaq"; 70 | const char ynNaqchars[] = "yn#aq"; 71 | NEARDATA long yn_number = 0L; 72 | 73 | #ifdef MICRO 74 | char hackdir[PATHLEN]; /* where rumors, help, record are */ 75 | char levels[PATHLEN]; /* where levels are */ 76 | #endif /* MICRO */ 77 | 78 | 79 | #ifdef MFLOPPY 80 | char permbones[PATHLEN]; /* where permanent copy of bones go */ 81 | int ramdisk = FALSE; /* whether to copy bones to levels or not */ 82 | int saveprompt = TRUE; 83 | const char *alllevels = "levels.*"; 84 | const char *allbones = "bones*.*"; 85 | #endif 86 | 87 | struct linfo level_info[MAXLINFO]; 88 | 89 | NEARDATA struct sinfo program_state; 90 | 91 | /* 'rogue'-like direction commands (cmd.c) */ 92 | const char sdir[] = "hykulnjb><"; 93 | const char ndir[] = "47896321><"; /* number pad mode */ 94 | const schar xdir[10] = { -1,-1, 0, 1, 1, 1, 0,-1, 0, 0 }; 95 | const schar ydir[10] = { 0,-1,-1,-1, 0, 1, 1, 1, 0, 0 }; 96 | const schar zdir[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 1,-1 }; 97 | 98 | NEARDATA schar tbx = 0, tby = 0; /* mthrowu: target */ 99 | 100 | NEARDATA struct dig_info digging; 101 | 102 | NEARDATA dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */ 103 | NEARDATA s_level *sp_levchn; 104 | NEARDATA stairway upstair = { 0, 0 }, dnstair = { 0, 0 }; 105 | NEARDATA stairway upladder = { 0, 0 }, dnladder = { 0, 0 }; 106 | NEARDATA stairway sstairs = { 0, 0 }; 107 | NEARDATA dest_area updest = { 0, 0, 0, 0, 0, 0, 0, 0 }; 108 | NEARDATA dest_area dndest = { 0, 0, 0, 0, 0, 0, 0, 0 }; 109 | NEARDATA coord inv_pos = { 0, 0 }; 110 | 111 | NEARDATA boolean in_mklev = FALSE; 112 | NEARDATA boolean stoned = FALSE; /* done to monsters hit by 'c' */ 113 | NEARDATA boolean unweapon = FALSE; 114 | NEARDATA boolean mrg_to_wielded = FALSE; 115 | /* weapon picked is merged with wielded one */ 116 | NEARDATA struct obj *current_wand = 0; /* wand currently zapped/applied */ 117 | 118 | NEARDATA boolean in_steed_dismounting = FALSE; 119 | 120 | NEARDATA coord bhitpos = DUMMY; 121 | NEARDATA coord doors[DOORMAX] = {DUMMY}; 122 | 123 | NEARDATA struct mkroom rooms[(MAXNROFROOMS+1)*2] = {DUMMY}; 124 | NEARDATA struct mkroom* subrooms = &rooms[MAXNROFROOMS+1]; 125 | struct mkroom *upstairs_room, *dnstairs_room, *sstairs_room; 126 | 127 | dlevel_t level; /* level map */ 128 | struct trap *ftrap = (struct trap *)0; 129 | NEARDATA struct monst youmonst = DUMMY; 130 | NEARDATA struct flag flags = DUMMY; 131 | NEARDATA struct instance_flags iflags = DUMMY; 132 | NEARDATA struct you u = DUMMY; 133 | 134 | NEARDATA struct obj *invent = (struct obj *)0, 135 | *uwep = (struct obj *)0, *uarm = (struct obj *)0, 136 | *uswapwep = (struct obj *)0, 137 | *uquiver = (struct obj *)0, /* quiver */ 138 | #ifdef TOURIST 139 | *uarmu = (struct obj *)0, /* under-wear, so to speak */ 140 | #endif 141 | *uskin = (struct obj *)0, /* dragon armor, if a dragon */ 142 | *uarmc = (struct obj *)0, *uarmh = (struct obj *)0, 143 | *uarms = (struct obj *)0, *uarmg = (struct obj *)0, 144 | *uarmf = (struct obj *)0, *uamul = (struct obj *)0, 145 | *uright = (struct obj *)0, 146 | *uleft = (struct obj *)0, 147 | *ublindf = (struct obj *)0, 148 | *uchain = (struct obj *)0, 149 | *uball = (struct obj *)0; 150 | 151 | #ifdef TEXTCOLOR 152 | /* 153 | * This must be the same order as used for buzz() in zap.c. 154 | */ 155 | const int zapcolors[NUM_ZAP] = { 156 | HI_ZAP, /* 0 - missile */ 157 | CLR_ORANGE, /* 1 - fire */ 158 | CLR_WHITE, /* 2 - frost */ 159 | HI_ZAP, /* 3 - sleep */ 160 | CLR_BLACK, /* 4 - death */ 161 | CLR_WHITE, /* 5 - lightning */ 162 | CLR_YELLOW, /* 6 - poison gas */ 163 | CLR_GREEN, /* 7 - acid */ 164 | }; 165 | #endif /* text color */ 166 | 167 | const int shield_static[SHIELD_COUNT] = { 168 | S_ss1, S_ss2, S_ss3, S_ss2, S_ss1, S_ss2, S_ss4, /* 7 per row */ 169 | S_ss1, S_ss2, S_ss3, S_ss2, S_ss1, S_ss2, S_ss4, 170 | S_ss1, S_ss2, S_ss3, S_ss2, S_ss1, S_ss2, S_ss4, 171 | }; 172 | 173 | NEARDATA struct spell spl_book[MAXSPELL + 1] = {DUMMY}; 174 | 175 | NEARDATA long moves = 1L, monstermoves = 1L; 176 | /* These diverge when player is Fast */ 177 | NEARDATA long wailmsg = 0L; 178 | 179 | /* objects that are moving to another dungeon level */ 180 | NEARDATA struct obj *migrating_objs = (struct obj *)0; 181 | /* objects not yet paid for */ 182 | NEARDATA struct obj *billobjs = (struct obj *)0; 183 | 184 | /* used to zero all elements of a struct obj */ 185 | NEARDATA struct obj zeroobj = DUMMY; 186 | 187 | /* monster pronouns, index is return value of gender(mtmp) */ 188 | const char *he[3] = { "he", "she", "it" }; 189 | const char *him[3] = { "him", "her", "it" }; 190 | const char *his[3] = { "his", "her", "its" }; 191 | 192 | /* originally from dog.c */ 193 | NEARDATA char dogname[PL_PSIZ] = DUMMY; 194 | NEARDATA char catname[PL_PSIZ] = DUMMY; 195 | NEARDATA char horsename[PL_PSIZ] = DUMMY; 196 | char preferred_pet; /* '\0', 'c', 'd' */ 197 | /* monsters that went down/up together with @ */ 198 | NEARDATA struct monst *mydogs = (struct monst *)0; 199 | /* monsters that are moving to another dungeon level */ 200 | NEARDATA struct monst *migrating_mons = (struct monst *)0; 201 | 202 | NEARDATA struct mvitals mvitals[NUMMONS]; 203 | 204 | NEARDATA struct c_color_names c_color_names = { 205 | "black", "amber", "golden", 206 | "light blue", "red", "green", 207 | "silver", "blue", "purple", 208 | "white" 209 | }; 210 | 211 | struct c_common_strings c_common_strings = { 212 | "Nothing happens.", "That's enough tries!", 213 | "That is a silly thing to %s.", "shudder for a moment.", 214 | "something", "Something", "You can move again.", "Never mind." 215 | }; 216 | 217 | /* NOTE: the order of these words exactly corresponds to the 218 | order of oc_material values #define'd in objclass.h. */ 219 | const char *materialnm[] = { 220 | "mysterious", "liquid", "wax", "organic", "flesh", 221 | "paper", "cloth", "leather", "wooden", "bone", "dragonhide", 222 | "iron", "metal", "copper", "silver", "gold", "platinum", "mithril", 223 | "plastic", "glass", "gemstone", "stone" 224 | }; 225 | 226 | /* Vision */ 227 | NEARDATA boolean vision_full_recalc = 0; 228 | NEARDATA char **viz_array = 0;/* used in cansee() and couldsee() macros */ 229 | 230 | /* Global windowing data, defined here for multi-window-system support */ 231 | NEARDATA winid WIN_MESSAGE = WIN_ERR, WIN_STATUS = WIN_ERR; 232 | NEARDATA winid WIN_MAP = WIN_ERR, WIN_INVEN = WIN_ERR; 233 | char toplines[TBUFSZ]; 234 | /* Windowing stuff that's really tty oriented, but present for all ports */ 235 | struct tc_gbl_data tc_gbl_data = { 0,0, 0,0 }; /* AS,AE, LI,CO */ 236 | 237 | char *fqn_prefix[PREFIX_COUNT] = { (char *)0, (char *)0, (char *)0, (char *)0, 238 | (char *)0, (char *)0, (char *)0, (char *)0 }; 239 | 240 | #ifdef PREFIXES_IN_USE 241 | char *fqn_prefix_names[PREFIX_COUNT] = { "hackdir", "leveldir", "savedir", 242 | "bonesdir", "datadir", "scoredir", 243 | "lockdir", "configdir" }; 244 | #endif 245 | 246 | /* dummy routine used to force linkage */ 247 | void 248 | decl_init() 249 | { 250 | return; 251 | } 252 | 253 | /*decl.c*/