OSDN Git Service

shrink mine
[nethackexpress/trunk.git] / include / hack.h
1 /*      SCCS Id: @(#)hack.h     3.4     2001/04/12      */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed.  See license for details. */
4
5 #ifndef HACK_H
6 #define HACK_H
7
8 #ifndef CONFIG_H
9 #include "config.h"
10 #endif
11
12 /*      For debugging beta code.        */
13 #ifdef BETA
14 #define Dpline  pline
15 #endif
16
17 #define TELL            1
18 #define NOTELL          0
19 #define ON              1
20 #define OFF             0
21 #define BOLT_LIM        8 /* from this distance ranged attacks will be made */
22 #define MAX_CARR_CAP    1000    /* so that boulders can be heavier */
23 #define DUMMY { 0 }
24
25 /* symbolic names for capacity levels */
26 #define UNENCUMBERED    0
27 #define SLT_ENCUMBER    1       /* Burdened */
28 #define MOD_ENCUMBER    2       /* Stressed */
29 #define HVY_ENCUMBER    3       /* Strained */
30 #define EXT_ENCUMBER    4       /* Overtaxed */
31 #define OVERLOADED      5       /* Overloaded */
32
33 /* Macros for how a rumor was delivered in outrumor() */
34 #define BY_ORACLE       0
35 #define BY_COOKIE       1
36 #define BY_PAPER        2
37 #define BY_OTHER        9
38
39 #ifdef STEED
40 /* Macros for why you are no longer riding */
41 #define DISMOUNT_GENERIC        0
42 #define DISMOUNT_FELL           1
43 #define DISMOUNT_THROWN         2
44 #define DISMOUNT_POLY           3
45 #define DISMOUNT_ENGULFED       4
46 #define DISMOUNT_BONES          5
47 #define DISMOUNT_BYCHOICE       6
48 #endif
49
50 /* Special returns from mapglyph() */
51 #define MG_CORPSE       0x01
52 #define MG_INVIS        0x02
53 #define MG_DETECT       0x04
54 #define MG_PET          0x08
55 #define MG_RIDDEN       0x10
56
57 /* sellobj_state() states */
58 #define SELL_NORMAL     (0)
59 #define SELL_DELIBERATE (1)
60 #define SELL_DONTSELL   (2)
61
62 /*
63  * This is the way the game ends.  If these are rearranged, the arrays
64  * in end.c and topten.c will need to be changed.  Some parts of the
65  * code assume that PANIC separates the deaths from the non-deaths.
66  */
67 #define DIED             0
68 #define CHOKING          1
69 #define POISONING        2
70 #define STARVING         3
71 #define DROWNING         4
72 #define BURNING          5
73 #define DISSOLVED        6
74 #define CRUSHING         7
75 #define STONING          8
76 #define TURNED_SLIME     9
77 #define GENOCIDED       10
78 #define PANICKED        11
79 #define TRICKED         12
80 #define QUIT            13
81 #define ESCAPED         14
82 #define ASCENDED        15
83
84 #include "align.h"
85 #include "dungeon.h"
86 #include "monsym.h"
87 #include "mkroom.h"
88 #include "objclass.h"
89 #include "youprop.h"
90 #include "wintype.h"
91 #include "decl.h"
92 #include "timeout.h"
93
94 NEARDATA extern coord bhitpos;  /* place where throw or zap hits or stops */
95
96 /* types of calls to bhit() */
97 #define ZAPPED_WAND     0
98 #define THROWN_WEAPON   1
99 #define KICKED_WEAPON   2
100 #define FLASHED_LIGHT   3
101 #define INVIS_BEAM      4
102
103 #define MATCH_WARN_OF_MON(mon)   (Warn_of_mon && flags.warntype && \
104                                  (flags.warntype & (mon)->data->mflags2))
105
106 #include "trap.h"
107 #include "flag.h"
108 #include "rm.h"
109 #include "vision.h"
110 #include "display.h"
111 #include "engrave.h"
112 #include "rect.h"
113 #include "region.h"
114
115 #ifdef USE_TRAMPOLI /* This doesn't belong here, but we have little choice */
116 #undef NDECL
117 #define NDECL(f) f()
118 #endif
119
120 #include "extern.h"
121 #include "winprocs.h"
122
123 #ifdef USE_TRAMPOLI
124 #include "wintty.h"
125 #undef WINTTY_H
126 #include "trampoli.h"
127 #undef EXTERN_H
128 #include "extern.h"
129 #endif /* USE_TRAMPOLI */
130
131 #define NO_SPELL        0
132
133 /* flags to control makemon() */
134 #define NO_MM_FLAGS       0x00  /* use this rather than plain 0 */
135 #define NO_MINVENT        0x01  /* suppress minvent when creating mon */
136 #define MM_NOWAIT         0x02  /* don't set STRAT_WAITMASK flags */
137 #define MM_EDOG           0x04  /* add edog structure */
138 #define MM_EMIN           0x08  /* add emin structure */
139 #define MM_ANGRY          0x10  /* monster is created angry */
140 #define MM_NONAME         0x20  /* monster is not christened */
141 #define MM_NOCOUNTBIRTH   0x40  /* don't increment born counter (for revival) */
142 #define MM_IGNOREWATER    0x80  /* ignore water when positioning */
143 #define MM_ADJACENTOK     0x100 /* it is acceptable to use adjacent coordinates */
144
145 /* special mhpmax value when loading bones monster to flag as extinct or genocided */
146 #define DEFUNCT_MONSTER (-100)
147
148 /* flags for special ggetobj status returns */
149 #define ALL_FINISHED      0x01  /* called routine already finished the job */
150
151 /* flags to control query_objlist() */
152 #define BY_NEXTHERE       0x1   /* follow objlist by nexthere field */
153 #define AUTOSELECT_SINGLE 0x2   /* if only 1 object, don't ask */
154 #define USE_INVLET        0x4   /* use object's invlet */
155 #define INVORDER_SORT     0x8   /* sort objects by packorder */
156 #define SIGNAL_NOMENU     0x10  /* return -1 rather than 0 if none allowed */
157 #define FEEL_COCKATRICE   0x20  /* engage cockatrice checks and react */
158
159 /* Flags to control query_category() */
160 /* BY_NEXTHERE used by query_category() too, so skip 0x01 */
161 #define UNPAID_TYPES 0x02
162 #define GOLD_TYPES   0x04
163 #define WORN_TYPES   0x08
164 #define ALL_TYPES    0x10
165 #define BILLED_TYPES 0x20
166 #define CHOOSE_ALL   0x40
167 #define BUC_BLESSED  0x80
168 #define BUC_CURSED   0x100
169 #define BUC_UNCURSED 0x200
170 #define BUC_UNKNOWN  0x400
171 #define BUC_ALLBKNOWN (BUC_BLESSED|BUC_CURSED|BUC_UNCURSED)
172 #define ALL_TYPES_SELECTED -2
173
174 /* Flags to control find_mid() */
175 #define FM_FMON        0x01     /* search the fmon chain */
176 #define FM_MIGRATE     0x02     /* search the migrating monster chain */
177 #define FM_MYDOGS      0x04     /* search mydogs */
178 #define FM_EVERYWHERE  (FM_FMON | FM_MIGRATE | FM_MYDOGS)
179
180 /* Flags to control pick_[race,role,gend,align] routines in role.c */
181 #define PICK_RANDOM     0
182 #define PICK_RIGID      1
183
184 /* Flags to control dotrap() in trap.c */
185 #define NOWEBMSG        0x01    /* suppress stumble into web message */
186 #define FORCEBUNGLE     0x02    /* adjustments appropriate for bungling */
187 #define RECURSIVETRAP   0x04    /* trap changed into another type this same turn */
188
189 /* Flags to control test_move in hack.c */
190 #define DO_MOVE         0       /* really doing the move */
191 #define TEST_MOVE       1       /* test a normal move (move there next) */
192 #define TEST_TRAV       2       /* test a future travel location */
193
194 /*** some utility macros ***/
195 #define yn(query) yn_function(query,ynchars, 'n')
196 #define ynq(query) yn_function(query,ynqchars, 'q')
197 #define ynaq(query) yn_function(query,ynaqchars, 'y')
198 #define nyaq(query) yn_function(query,ynaqchars, 'n')
199 #define nyNaq(query) yn_function(query,ynNaqchars, 'n')
200 #define ynNaq(query) yn_function(query,ynNaqchars, 'y')
201
202 /* Macros for scatter */
203 #define VIS_EFFECTS     0x01    /* display visual effects */
204 #define MAY_HITMON      0x02    /* objects may hit monsters */
205 #define MAY_HITYOU      0x04    /* objects may hit you */
206 #define MAY_HIT         (MAY_HITMON|MAY_HITYOU)
207 #define MAY_DESTROY     0x08    /* objects may be destroyed at random */
208 #define MAY_FRACTURE    0x10    /* boulders & statues may fracture */
209
210 /* Macros for launching objects */
211 #define ROLL            0x01    /* the object is rolling */
212 #define FLING           0x02    /* the object is flying thru the air */
213 #define LAUNCH_UNSEEN   0x40    /* hero neither caused nor saw it */
214 #define LAUNCH_KNOWN    0x80    /* the hero caused this by explicit action */
215
216 /* Macros for explosion types */
217 #define EXPL_DARK       0
218 #define EXPL_NOXIOUS    1
219 #define EXPL_MUDDY      2
220 #define EXPL_WET        3
221 #define EXPL_MAGICAL    4
222 #define EXPL_FIERY      5
223 #define EXPL_FROSTY     6
224 #define EXPL_MAX        7
225
226 /* Macros for messages referring to hands, eyes, feet, etc... */
227 #define ARM 0
228 #define EYE 1
229 #define FACE 2
230 #define FINGER 3
231 #define FINGERTIP 4
232 #define FOOT 5
233 #define HAND 6
234 #define HANDED 7
235 #define HEAD 8
236 #define LEG 9
237 #define LIGHT_HEADED 10
238 #define NECK 11
239 #define SPINE 12
240 #define TOE 13
241 #define HAIR 14
242 #define BLOOD 15
243 #define LUNG 16
244 #define NOSE 17
245 #define STOMACH 18
246
247 /* Flags to control menus */
248 #define MENUTYPELEN sizeof("traditional ")
249 #define MENU_TRADITIONAL 0
250 #define MENU_COMBINATION 1
251 #define MENU_PARTIAL     2
252 #define MENU_FULL        3
253
254 #define MENU_SELECTED   TRUE
255 #define MENU_UNSELECTED FALSE
256
257 /*
258  * Option flags
259  * Each higher number includes the characteristics of the numbers
260  * below it.
261  */
262 #define SET_IN_FILE     0 /* config file option only */
263 #define SET_VIA_PROG    1 /* may be set via extern program, not seen in game */
264 #define DISP_IN_GAME    2 /* may be set via extern program, displayed in game */
265 #define SET_IN_GAME     3 /* may be set via extern program or set in the game */
266
267 #define FEATURE_NOTICE_VER(major,minor,patch) (((unsigned long)major << 24) | \
268         ((unsigned long)minor << 16) | \
269         ((unsigned long)patch << 8) | \
270         ((unsigned long)0))
271
272 #define FEATURE_NOTICE_VER_MAJ    (flags.suppress_alert >> 24)
273 #define FEATURE_NOTICE_VER_MIN    (((unsigned long)(0x0000000000FF0000L & flags.suppress_alert)) >> 16)
274 #define FEATURE_NOTICE_VER_PATCH  (((unsigned long)(0x000000000000FF00L & flags.suppress_alert)) >>  8)
275
276 #ifndef max
277 #define max(a,b) ((a) > (b) ? (a) : (b))
278 #endif
279 #ifndef min
280 #define min(x,y) ((x) < (y) ? (x) : (y))
281 #endif
282 #define plur(x) (((x) == 1) ? "" : "s")
283
284 #define ARM_BONUS(obj)  (objects[(obj)->otyp].a_ac + (obj)->spe \
285                          - min((int)greatest_erosion(obj),objects[(obj)->otyp].a_ac))
286
287 #define makeknown(x)    discover_object((x),TRUE,TRUE)
288 #define distu(xx,yy)    dist2((int)(xx),(int)(yy),(int)u.ux,(int)u.uy)
289 #define onlineu(xx,yy)  online2((int)(xx),(int)(yy),(int)u.ux,(int)u.uy)
290
291 #define rn1(x,y)        (rn2(x)+(y))
292
293 /* negative armor class is randomly weakened to prevent invulnerability */
294 #define AC_VALUE(AC)    ((AC) >= 0 ? (AC) : -rnd(-(AC)))
295
296 #if defined(MICRO) && !defined(__DJGPP__)
297 #define getuid() 1
298 #define getlogin() ((char *)0)
299 #endif /* MICRO */
300
301 #if defined(OVERLAY)&&(defined(OVL0)||defined(OVL1)||defined(OVL2)||defined(OVL3)||defined(OVLB))
302 # define USE_OVLx
303 # define STATIC_DCL extern
304 # define STATIC_OVL
305 # ifdef OVLB
306 #  define STATIC_VAR
307 # else
308 #  define STATIC_VAR extern
309 # endif
310
311 #else   /* !OVERLAY || (!OVL0 && !OVL1 && !OVL2 && !OVL3 && !OVLB) */
312 # define STATIC_DCL static
313 # define STATIC_OVL static
314 # define STATIC_VAR static
315
316 /* If not compiling an overlay, compile everything. */
317 # define OVL0   /* highest priority */
318 # define OVL1
319 # define OVL2
320 # define OVL3   /* lowest specified priority */
321 # define OVLB   /* the base overlay segment */
322 #endif  /* OVERLAY && (OVL0 || OVL1 || OVL2 || OVL3 || OVLB) */
323
324 /* Macro for a few items that are only static if we're not overlaid.... */
325 #if defined(USE_TRAMPOLI) || defined(USE_OVLx)
326 # define STATIC_PTR
327 #else
328 # define STATIC_PTR static
329 #endif
330
331 /* The function argument to qsort() requires a particular
332  * calling convention under WINCE which is not the default
333  * in that environment.
334  */
335 #if defined(WIN_CE)
336 # define CFDECLSPEC __cdecl
337 #else
338 # define CFDECLSPEC
339 #endif
340  
341 #endif /* HACK_H */