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