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