abstract
| - Below is the full text to you.h from the source code of NetHack 3.2.0. To link to a particular line, write [[NetHack 3.2.0/you.h#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)you.h 3.2 95/08/13 */ 2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. #ifndef YOU_H 6. #define YOU_H 7. 8. #ifndef ALIGN_H 9. #include "align.h" 10. #endif 11. #ifndef ATTRIB_H 12. #include "attrib.h" 13. #endif 14. #ifndef MONST_H 15. #include "monst.h" 16. #endif 17. #ifndef YOUPROP_H 18. #include "youprop.h" 19. #endif 20. 21. /* 22. * [this stuff should be moved into a separate "weapon.h" file] 23. */ 24. #ifdef WEAPON_SKILLS 25. 26. /* Weapon Skills - Stephen White */ 27. #define P_DAGGER 0 28. #define P_KNIFE 1 29. #define P_AXE 2 30. #define P_PICK_AXE 3 31. #define P_SHORT_SWORD 4 32. #define P_BROAD_SWORD 5 33. #define P_LONG_SWORD 6 34. #define P_TWO_HANDED_SWORD 7 35. #define P_SCIMITAR 8 36. #define P_SABER 9 37. #define P_CLUB 10 38. #define P_MACE 11 39. #define P_MORNING_STAR 12 40. #define P_FLAIL 13 41. #define P_HAMMER 14 42. #define P_QUARTERSTAFF 15 43. #define P_POLEARMS 16 44. #define P_SPEAR 17 45. #define P_JAVELIN 18 46. #define P_TRIDENT 19 47. #define P_LANCE 20 48. #define P_BOW 21 49. #define P_SLING 22 50. #define P_CROSSBOW 23 51. #define P_DART 24 52. #define P_SHURIKEN 25 53. #define P_BOOMERANG 26 54. #define P_WHIP 27 55. #define P_UNICORN_HORN 28 /* last weapon */ 56. #define P_TWO_WEAPON_COMBAT 29 57. #define P_BARE_HANDED_COMBAT 30 58. #define P_MARTIAL_ARTS 31 /* currently unused */ 59. #define P_NUM_SKILLS 32 /* should always be the last entry */ 60. 61. #define P_NO_TYPE P_NUM_SKILLS 62. #define P_LAST_WEAPON P_UNICORN_HORN 63. 64. /* 65. * These are the standard weapon skill levels. It is important that 66. * the lowest "valid" skill be be 1. The code calculates the 67. * previous amount to practice by calling practice_needed_to_advance() 68. * with the current skill-1. To work out for the UNSKILLED case, 69. * a value of 0 needed. 70. */ 71. #define P_ISRESTRICTED 0 72. #define P_UNSKILLED 1 73. #define P_BASIC 2 74. #define P_SKILLED 3 75. #define P_EXPERT 4 76. 77. #define practice_needed_to_advance(level) ((level)*(level)*20) 78. 79. /* The hero's skill in various weapons. */ 80. struct skills { 81. xchar skill; 82. xchar max_skill; 83. unsigned short advance; 84. }; 85. 86. #define P_SKILL(type) (u.weapon_skills[type].skill) 87. #define P_MAX_SKILL(type) (u.weapon_skills[type].max_skill) 88. #define P_ADVANCE(type) (u.weapon_skills[type].advance) 89. #define P_RESTRICTED(type) (u.weapon_skills[type].skill == P_ISRESTRICTED) 90. 91. #define PN_POLEARMS (NUM_OBJECTS+0) 92. #define PN_TWO_WEAPON_COMBAT (NUM_OBJECTS+1) 93. #define PN_BARE_HANDED_COMBAT (NUM_OBJECTS+2) 94. #define PN_MARTIAL_ARTS (NUM_OBJECTS+3) 95. #define PN_SABER (NUM_OBJECTS+4) 96. 97. #define P_SKILL_LIMIT 60 /* max number of skill advancements */ 98. 99. /* initial skill matrix structure; used in u_init.c and weapon.c */ 100. struct def_skill { 101. xchar skill; 102. xchar skmax; 103. }; 104. 105. #endif /* WEAPON_SKILLS */ 106. 107. 108. struct prop { 109. 110. #define TIMEOUT 007777 /* mask */ 111. 112. #define LEFT_RING W_RINGL /* 010000L */ 113. #define RIGHT_RING W_RINGR /* 020000L */ 114. #define LEFT_SIDE LEFT_RING 115. #define RIGHT_SIDE RIGHT_RING 116. #define BOTH_SIDES (LEFT_SIDE | RIGHT_SIDE) 117. 118. #define WORN_ARMOR W_ARM /* 040000L */ 119. #define WORN_CLOAK W_ARMC /* 0100000L */ 120. #define WORN_HELMET W_ARMH /* 0200000L */ 121. #define WORN_SHIELD W_ARMS /* 0400000L */ 122. #define WORN_GLOVES W_ARMG /* 01000000L */ 123. #define WORN_BOOTS W_ARMF /* 02000000L */ 124. #define WORN_AMUL W_AMUL /* 04000000L */ 125. #define WORN_BLINDF W_TOOL /* 010000000L */ 126. #ifdef TOURIST 127. #define WORN_SHIRT W_ARMU /* 01000L */ 128. #endif 129. 130. /* 131. * FROMEXPER is for a property gained by virtue of your experience level, 132. * which will be lost if you lose that level; FROMOUTSIDE is one that is 133. * gained in some other way (e.g., a throne, a prayer, or a corpse). 134. * INTRINSIC is either FROMEXPER or FROMOUTSIDE 135. */ 136. #define FROMOUTSIDE 0200000000L 137. #define FROMEXPER 0400000000L 138. #define INTRINSIC (FROMOUTSIDE|FROMEXPER) 139. 140. /* 141. * Sometimes an intrinsic may be overridden or controllable. 142. */ 143. #define I_BLOCKED 01000000000L 144. #define I_SPECIAL 02000000000L 145. 146. long p_flgs; 147. }; 148. 149. struct u_have { 150. Bitfield(amulet,1); /* carrying Amulet */ 151. Bitfield(bell,1); /* carrying Bell */ 152. Bitfield(book,1); /* carrying Book */ 153. Bitfield(menorah,1); /* carrying Candelabrum */ 154. Bitfield(questart,1); /* carrying the Quest Artifact */ 155. Bitfield(unused,3); 156. }; 157. 158. struct u_event { 159. Bitfield(minor_oracle,1); /* received at least 1 cheap oracle */ 160. Bitfield(major_oracle,1); /* " expensive oracle */ 161. Bitfield(qcalled,1); /* called by Quest leader to do task */ 162. Bitfield(qexpelled,1); /* expelled from the Quest dungeon */ 163. Bitfield(qcompleted,1); /* successfully completed Quest task */ 164. Bitfield(uheard_tune,2); /* 1=know about, 2=heard passtune */ 165. Bitfield(uopened_dbridge,1); /* opened the drawbridge */ 166. 167. Bitfield(invoked,1); /* invoked Gate to the Sanctum level */ 168. Bitfield(gehennom_entered,1); /* entered Gehennom via Valley */ 169. #ifdef ELBERETH 170. Bitfield(uhand_of_elbereth,2); /* became Hand of Elbereth */ 171. #endif 172. Bitfield(udemigod,1); /* killed the wiz */ 173. Bitfield(ascended,1); /* has offered the Amulet */ 174. }; 175. 176. 177. struct you { 178. xchar ux, uy; 179. schar dx, dy, dz; /* direction of move (or zap or ... ) */ 180. schar di; /* direction of FF */ 181. xchar ux0, uy0; /* initial position FF */ 182. d_level uz, uz0; /* your level on this and the previous turn */ 183. d_level utolev; /* level monster teleported you to, or uz */ 184. uchar utotype; /* bitmask of goto_level() flags for utolev */ 185. char role; /* 'A'==archeologist, 'K'==knight, &c */ 186. char usym; /* usually '@' */ 187. boolean umoved; /* changed map location (post-move) */ 188. int last_str_turn; /* 0: none, 1: half turn, 2: full turn */ 189. /* +: turn right, -: turn left */ 190. int ulevel; /* 1 - MAXULEV */ 191. unsigned utrap; /* trap timeout */ 192. unsigned utraptype; /* defined if utrap nonzero */ 193. #define TT_BEARTRAP 0 194. #define TT_PIT 1 195. #define TT_WEB 2 196. #define TT_LAVA 3 197. #define TT_INFLOOR 4 198. char urooms[5]; /* rooms (roomno + 3) occupied now */ 199. char urooms0[5]; /* ditto, for previous position */ 200. char uentered[5]; /* rooms (roomno + 3) entered this turn */ 201. char ushops[5]; /* shop rooms (roomno + 3) occupied now */ 202. char ushops0[5]; /* ditto, for previous position */ 203. char ushops_entered[5]; /* ditto, shops entered this turn */ 204. char ushops_left[5]; /* ditto, shops exited this turn */ 205. 206. int uhunger; /* refd only in eat.c and shk.c */ 207. unsigned uhs; /* hunger state - see eat.c */ 208. 209. struct prop uprops[LAST_PROP+1]; 210. 211. unsigned umconf; 212. char usick_cause[PL_PSIZ+20]; /* sizeof "unicorn horn named "+1 */ 213. Bitfield(usick_type,2); 214. #define SICK_VOMITABLE 0x01 215. #define SICK_NONVOMITABLE 0x02 216. #define SICK_ALL 0x03 217. 218. /* For messages referring to hands, eyes, feet, etc... when polymorphed */ 219. #define ARM 0 220. #define EYE 1 221. #define FACE 2 222. #define FINGER 3 223. #define FINGERTIP 4 224. #define FOOT 5 225. #define HAND 6 226. #define HANDED 7 227. #define HEAD 8 228. #define LEG 9 229. #define LIGHT_HEADED 10 230. #define NECK 11 231. #define SPINE 12 232. #define TOE 13 233. #define HAIR 14 234. 235. /* These ranges can never be more than MAX_RANGE (vision.h). */ 236. int nv_range; /* current night vision range */ 237. int xray_range; /* current xray vision range */ 238. 239. /* 240. * These variables are valid globally only when punished and blind. 241. */ 242. #define BC_BALL 0x01 /* bit mask for ball in 'bc_felt' below */ 243. #define BC_CHAIN 0x02 /* bit mask for chain in 'bc_felt' below */ 244. int bglyph; /* glyph under the ball */ 245. int cglyph; /* glyph under the chain */ 246. int bc_order; /* ball & chain order [see bc_order() in ball.c] */ 247. int bc_felt; /* mask for ball/chain being felt */ 248. 249. 250. /* 251. * Player type monster (e.g. PM_VALKYRIE). This is set in u_init 252. * and never changed afterward. 253. */ 254. int umonster; 255. int umonnum; /* monster number or -1 */ 256. int mh, mhmax, mtimedone; /* for polymorph-self */ 257. struct attribs macurr, /* for monster attribs */ 258. mamax; /* for monster attribs */ 259. int ulycn; /* lycanthrope type */ 260. 261. unsigned ucreamed; 262. unsigned uswldtim; /* time you have been swallowed */ 263. 264. Bitfield (uswallow,1); /* true if swallowed */ 265. Bitfield(uinwater,1); /* if you're currently in water (only 266. underwater possible currently) */ 267. Bitfield(uundetected,1); /* if you're a hiding monster/piercer */ 268. Bitfield(mfemale,1); /* saved human value of flags.female */ 269. Bitfield(uinvulnerable,1); /* you're invulnerable (praying) */ 270. Bitfield(uburied,1); /* you're buried */ 271. /* 2 free bits! */ 272. 273. unsigned udg_cnt; /* how long you have been demigod */ 274. struct u_event uevent; /* certain events have happened */ 275. struct u_have uhave; /* you're carrying special objects */ 276. struct attribs acurr, /* your current attributes (eg. str)*/ 277. aexe, /* for gain/loss via "exercise" */ 278. abon, /* your bonus attributes (eg. str) */ 279. amax, /* your max attributes (eg. str) */ 280. atemp, /* used for temporary loss/gain */ 281. atime; /* used for loss/gain countdown */ 282. align ualign; /* character alignment */ 283. #define CONVERT 2 284. aligntyp ualignbase[CONVERT]; /* for ualign conversion record */ 285. schar uluck, moreluck; /* luck and luck bonus */ 286. #define LUCKADD 3 /* added value when carrying luck stone */ 287. #define Luck (u.uluck + u.moreluck) 288. #define LUCKMAX 10 /* on moonlit nights 11 */ 289. #define LUCKMIN (-10) 290. schar udaminc; 291. schar uac; 292. int uhp,uhpmax; 293. int uen, uenmax; /* magical energy - M. Stephenson */ 294. int ugangr; /* if the gods are angry at you */ 295. int ublessed, ublesscnt; /* blessing/duration from #pray */ 296. long ugold, ugold0; 297. long uexp, urexp; 298. long ucleansed; /* to record moves when player was cleansed */ 299. long usleep; /* sleeping; monstermove you last started */ 300. int uinvault; 301. struct monst *ustuck; 302. int umortality; /* how many times you died */ 303. int ugrave_arise; /* you die and become something aside from a ghost */ 304. time_t ubirthday; /* real world time when game began */ 305. 306. #ifdef WEAPON_SKILLS 307. int weapon_slots; /* unused skill slots */ 308. int skills_advanced; /* # of advances made so far */ 309. xchar skill_record[P_SKILL_LIMIT]; /* skill advancements */ 310. struct skills weapon_skills[P_NUM_SKILLS]; 311. #endif /* WEAPON_SKILLS */ 312. 313. }; /* end of `struct you' */ 314. 315. #define Role_is(X) (u.role == X) 316. #define human_role() (!Role_is('E')) 317. #define Upolyd (u.mtimedone != 0) 318. 319. #endif /* YOU_H */
|