Source:SLASH'EM 0.0.7E7F2/hack.h

Below is the full text to hack.h from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/hack.h#line123 ]], for example.

The latest source code for vanilla NetHack is at Source code.

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    6	/* 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 BETRAYED	 1 69.  #define CHOKING		 2 70.  #define POISONING	 3 71.  #define STARVING	 4 72.  #define DROWNING	 5 73.  #define BURNING		 6 74.  #define DISSOLVED	 7 75.  #define CRUSHING	 8 76.  #define STONING		 9 77.  #define TURNED_SLIME 10 78.  #define GENOCIDED	11 79.  #define PANICKED	12 80.  #define TRICKED		13 81.  #define QUIT		14 82.  #define ESCAPED		15 83.  #define ASCENDED	16 84.   85.   #include "align.h"  86. #include "dungeon.h" 87. #include "monsym.h" 88. #include "mkroom.h" 89. #include "objclass.h" 90. #include "youprop.h" 91. #include "wintype.h" 92. #include "decl.h" 93. #include "timeout.h" 94. 95.  NEARDATA extern coord bhitpos;	/* place where throw or zap hits or stops */ 96.   97.   /* types of calls to bhit */ 98.  #define ZAPPED_WAND	0 99.  #define THROWN_WEAPON	1 100. #define KICKED_WEAPON	2 101. #define FLASHED_LIGHT	3 102. #define INVIS_BEAM	4 103.  104.  #define MATCH_WARN_OF_MON(mon)	 (Warn_of_mon && flags.warntype && \  105.  		   		 (flags.warntype & (mon)->data->mflags2)) 106.  107.  #include "trap.h"  108. #include "flag.h" 109. #include "rm.h" 110. #include "vision.h" 111. #include "display.h" 112. #include "engrave.h" 113. #include "rect.h" 114. #include "region.h" 115. 116. #ifdef USE_TRAMPOLI /* This doesn't belong here, but we have little choice */ 117. #undef NDECL 118. #define NDECL(f) f 119. #endif 120.  121.  #include "extern.h"  122. #include "winprocs.h" 123. 124. #ifdef USE_TRAMPOLI 125. #include "wintty.h"  126. #undef WINTTY_H 127. #include "trampoli.h"  128. #undef EXTERN_H 129. #include "extern.h"  130. #endif /* USE_TRAMPOLI */ 131.  132.  #define NO_SPELL	0 133.  134.  /* flags to control makemon */ 135. #define NO_MM_FLAGS	  0x00	/* use this rather than plain 0 */ 136. #define NO_MINVENT	  0x01	/* suppress minvent when creating mon */ 137. #define MM_NOWAIT	  0x02	/* don't set STRAT_WAITMASK flags */ 138. #define MM_EDOG		  0x04	/* add edog structure */ 139. #define MM_EMIN		  0x08	/* add emin structure */ 140. #define MM_ANGRY	  0x10  /* monster is created angry */ 141. #define MM_NONAME	  0x20  /* monster is not christened */ 142. #define MM_NOCOUNTBIRTH	  0x40  /* don't increment born counter (for revival) */ 143. #define MM_IGNOREWATER	  0x80	/* ignore water when positioning */ 144. #define MM_ADJACENTOK	  0x100 /* it is acceptable to use adjacent coordinates */ 145.  146.  /* special mhpmax value when loading bones monster to flag as extinct or genocided */ 147. #define DEFUNCT_MONSTER	(-100) 148.  149.  /* flags for special ggetobj status returns */ 150. #define ALL_FINISHED	  0x01  /* called routine already finished the job */ 151.  152.  /* flags to control query_objlist */ 153. #define BY_NEXTHERE	  0x1	/* follow objlist by nexthere field */ 154. #define AUTOSELECT_SINGLE 0x2	/* if only 1 object, don't ask */ 155. #define USE_INVLET	  0x4	/* use object's invlet */ 156. #define INVORDER_SORT	  0x8	/* sort objects by packorder */ 157. #define SIGNAL_NOMENU	  0x10	/* return -1 rather than 0 if none allowed */ 158. #define FEEL_COCKATRICE   0x20  /* engage cockatrice checks and react */ 159. #define SIGNAL_CANCEL	  0x40	/* return -4 rather than 0 if explicit cancel */ 160.  161.  /* Flags to control query_category */ 162. /* BY_NEXTHERE used by query_category too, so skip 0x01 */ 163. #define UNPAID_TYPES 0x02 164. #define GOLD_TYPES   0x04 165. #define WORN_TYPES   0x08 166. #define ALL_TYPES    0x10 167. #define BILLED_TYPES 0x20 168. #define CHOOSE_ALL   0x40 169. #define BUC_BLESSED  0x80 170. #define BUC_CURSED   0x100 171. #define BUC_UNCURSED 0x200 172. #define BUC_UNKNOWN  0x400 173. #define BUC_ALLBKNOWN (BUC_BLESSED|BUC_CURSED|BUC_UNCURSED) 174. #define ALL_TYPES_SELECTED -2 175.  176.  /* Flags to control find_mid */ 177. #define FM_FMON	       0x01	/* search the fmon chain */ 178. #define FM_MIGRATE     0x02	/* search the migrating monster chain */ 179. #define FM_MYDOGS      0x04	/* search mydogs */ 180. #define FM_EVERYWHERE  (FM_FMON | FM_MIGRATE | FM_MYDOGS) 181.  182.  /* Flags to control pick_[race,role,gend,align] routines in role.c */ 183. #define PICK_RANDOM	0 184. #define PICK_RIGID	1 185.  186.  /* Flags to control dotrap in trap.c */ 187. #define NOWEBMSG	0x01	/* suppress stumble into web message */ 188. #define FORCEBUNGLE	0x02	/* adjustments appropriate for bungling */ 189. #define RECURSIVETRAP	0x04	/* trap changed into another type this same turn */ 190.  191.  /* Flags to control test_move in hack.c */ 192. #define DO_MOVE		0	/* really doing the move */ 193. #define TEST_MOVE	1	/* test a normal move (move there next) */ 194. #define TEST_TRAV	2	/* test a future travel location */ 195.  196.  /*** some utility macros ***/ 197. #define yn(query) yn_function(query,ynchars, 'n') 198. #define ynq(query) yn_function(query,ynqchars, 'q') 199. #define ynaq(query) yn_function(query,ynaqchars, 'y') 200. #define nyaq(query) yn_function(query,ynaqchars, 'n') 201. #define nyNaq(query) yn_function(query,ynNaqchars, 'n') 202. #define ynNaq(query) yn_function(query,ynNaqchars, 'y') 203.  204.  /* Macros for scatter */ 205. #define VIS_EFFECTS	0x01	/* display visual effects */ 206. #define MAY_HITMON	0x02	/* objects may hit monsters */ 207. #define MAY_HITYOU	0x04	/* objects may hit you */ 208. #define MAY_HIT		(MAY_HITMON|MAY_HITYOU) 209. #define MAY_DESTROY	0x08	/* objects may be destroyed at random */ 210. #define MAY_FRACTURE	0x10	/* boulders & statues may fracture */ 211.  212.  /* Macros for launching objects */ 213. #define ROLL		0x01	/* the object is rolling */ 214. #define FLING		0x02	/* the object is flying thru the air */ 215. #define LAUNCH_UNSEEN	0x40	/* hero neither caused nor saw it */ 216. #define LAUNCH_KNOWN	0x80	/* the hero caused this by explicit action */ 217.  218.  /* Macros for explosion types */ 219. #define EXPL_DARK	0 220. #define EXPL_NOXIOUS	1 221. #define EXPL_MUDDY	2 222. #define EXPL_WET	3 223. #define EXPL_MAGICAL	4 224. #define EXPL_FIERY	5 225. #define EXPL_FROSTY	6 226. #define EXPL_MAX	7 227.  228.  /* Macros for messages referring to hands, eyes, feet, etc... */ 229.  #define ARM 0 230. #define EYE 1 231. #define FACE 2 232. #define FINGER 3 233. #define FINGERTIP 4 234. #define FOOT 5 235. #define HAND 6 236. #define HANDED 7 237. #define HEAD 8 238. #define LEG 9 239. #define LIGHT_HEADED 10 240. #define NECK 11 241. #define SPINE 12 242. #define TOE 13 243. #define HAIR 14 244. #define BLOOD 15 245. #define LUNG 16 246. #define NOSE 17 247. #define STOMACH 18 248.  249.  /* Flags to control menus */ 250. #define MENUTYPELEN sizeof("traditional ") 251. #define MENU_TRADITIONAL 0 252. #define MENU_COMBINATION 1 253. #define MENU_PARTIAL	 2 254. #define MENU_FULL	 3 255.  256.  #define MENU_SELECTED	TRUE 257. #define MENU_UNSELECTED FALSE 258.  259.  /*  260.   * Option flags 261.  * Each higher number includes the characteristics of the numbers 262.  * below it. 263.  */  264.  #define SET_IN_FILE	0 /* config file option only */ 265. #define SET_VIA_PROG	1 /* may be set via extern program, not seen in game */ 266. #define DISP_IN_GAME	2 /* may be set via extern program, displayed in game */ 267. #define SET_IN_GAME	3 /* may be set via extern program or set in the game */ 268.  269.  #define FEATURE_NOTICE_VER(major,minor,patch) (((unsigned long)major << 24) | \  270.  	((unsigned long)minor << 16) | \  271.  	((unsigned long)patch << 8) | \  272.  	((unsigned long)0)) 273.  274.  #define FEATURE_NOTICE_VER_MAJ	  (flags.suppress_alert >> 24) 275. #define FEATURE_NOTICE_VER_MIN	  (((unsigned long)(0x0000000000FF0000L & flags.suppress_alert)) >> 16) 276. #define FEATURE_NOTICE_VER_PATCH  (((unsigned long)(0x000000000000FF00L & flags.suppress_alert)) >>  8) 277.  278.  #ifndef max 279. #define max(a,b) ((a) > (b) ? (a) : (b)) 280. #endif 281. #ifndef min 282. #define min(x,y) ((x) < (y) ? (x) : (y)) 283. #endif 284. #define plur(x) (((x) == 1) ? "" : "s") 285.  286.  #define ARM_BONUS(obj)	(objects[(obj)->otyp].a_ac + (obj)->spe \  287.  			 - min((int)greatest_erosion(obj),objects[(obj)->otyp].a_ac)) 288.  289.  #define makeknown(x)	discover_object((x),TRUE,TRUE) 290. #define distu(xx,yy)	dist2((int)(xx),(int)(yy),(int)u.ux,(int)u.uy) 291. #define onlineu(xx,yy)	online2((int)(xx),(int)(yy),(int)u.ux,(int)u.uy) 292. #define setustuck(v)	(flags.botl = 1, u.ustuck = (v)) 293.  294.  #define rn1(x,y)	(rn2(x)+(y)) 295.  296.  /* negative armor class is randomly weakened to prevent invulnerability */ 297. #define AC_VALUE(AC)	((AC) >= 0 ? (AC) : -rnd(-(AC))) 298.  299.  #if defined(MICRO) && !defined(__DJGPP__) 300. #define getuid 1 301. #define getlogin ((char *)0) 302. #endif /* MICRO */ 303.  304.  #if defined(OVERLAY)&&(defined(OVL0)||defined(OVL1)||defined(OVL2)||defined(OVL3)||defined(OVLB)) 305. # define USE_OVLx 306. # define STATIC_DCL extern 307. # define STATIC_OVL 308. # ifdef OVLB 309. #  define STATIC_VAR 310. # else 311. #  define STATIC_VAR extern 312. # endif 313.  314.  #else	/* !OVERLAY || (!OVL0 && !OVL1 && !OVL2 && !OVL3 && !OVLB) */ 315. # define STATIC_DCL static 316. # define STATIC_OVL static 317. # define STATIC_VAR static 318.  319.  /* If not compiling an overlay, compile everything. */ 320.  # define OVL0	/* highest priority */ 321. # define OVL1 322. # define OVL2 323. # define OVL3	/* lowest specified priority */ 324. # define OVLB	/* the base overlay segment */ 325. #endif	/* OVERLAY && (OVL0 || OVL1 || OVL2 || OVL3 || OVLB) */ 326.  327.  /* Macro for a few items that are only static if we're not overlaid.... */ 328.  #if defined(USE_TRAMPOLI) || defined(USE_OVLx) 329. # define STATIC_PTR 330. #else 331. # define STATIC_PTR static 332. #endif 333.  334.  /* For my clever ending messages... */ 335.  extern int Instant_Death; 336. extern int Quick_Death; 337. extern int Nibble_Death; 338. extern int last_hit; 339. extern int second_last_hit; 340. extern int third_last_hit; 341.  342.  /* For those tough guys who get carried away... */ 343.  extern int repeat_hit; 344.  345.  /* Raw status flags */ 346. #define RAW_STAT_LEVITATION	0x00000001 347. #define RAW_STAT_CONFUSION	0x00000002 348. #define RAW_STAT_FOODPOIS	0x00000004 349. #define RAW_STAT_ILL		0x00000008 350. #define RAW_STAT_BLIND		0x00000010 351. #define RAW_STAT_STUNNED	0x00000020 352. #define RAW_STAT_HALLUCINATION	0x00000040 353. #define RAW_STAT_SLIMED		0x00000080 354.  355.  /* The function argument to qsort requires a particular 356.  * calling convention under WINCE which is not the default 357.  * in that environment. 358.  */  359.  #if defined(WIN_CE) 360. # define CFDECLSPEC __cdecl 361. #else 362. # define CFDECLSPEC 363. #endif 364.   365.  #endif /* HACK_H */