Below is the full text to include/youprop.h from NetHack 3.4.3. To link to a particular line, write [[youprop.h#line123]], for example.
1. /* SCCS Id: @(#)youprop.h 3.4 1999/07/02 */ 2. /* Copyright (c) 1989 Mike Threepoint */ 3. /* NetHack may be freely redistributed. See license for details. */ 4.
| The NetHack General Public License applies to screenshots, source code and other content from NetHack. |
5. #ifndef YOUPROP_H 6. #define YOUPROP_H 7. 8. #include "prop.h" 9. #include "permonst.h" 10. #include "mondata.h" 11. #include "pm.h" 12. 13. 14. /* KMH, intrinsics patch. 15. * Reorganized and rewritten for >32-bit properties. 16. * HXxx refers to intrinsic bitfields while in human form. 17. * EXxx refers to extrinsic bitfields from worn objects. 18. * BXxx refers to the cause of the property being blocked. 19. * Xxx refers to any source, including polymorph forms. 20. */ 21. 22. 23. #define maybe_polyd(if_so,if_not) (Upolyd ? (if_so) : (if_not)) 24. 25. 26. /*** Resistances to troubles ***/ 27. /* With intrinsics and extrinsics */ 28. #define HFire_resistance u.uprops[FIRE_RES].intrinsic 29. #define EFire_resistance u.uprops[FIRE_RES].extrinsic 30. #define Fire_resistance (HFire_resistance || EFire_resistance || \ 31. resists_fire(&youmonst)) 32. 33. #define HCold_resistance u.uprops[COLD_RES].intrinsic 34. #define ECold_resistance u.uprops[COLD_RES].extrinsic 35. #define Cold_resistance (HCold_resistance || ECold_resistance || \ 36. resists_cold(&youmonst)) 37. 38. #define HSleep_resistance u.uprops[SLEEP_RES].intrinsic 39. #define ESleep_resistance u.uprops[SLEEP_RES].extrinsic 40. #define Sleep_resistance (HSleep_resistance || ESleep_resistance || \ 41. resists_sleep(&youmonst)) 42. 43. #define HDisint_resistance u.uprops[DISINT_RES].intrinsic 44. #define EDisint_resistance u.uprops[DISINT_RES].extrinsic 45. #define Disint_resistance (HDisint_resistance || EDisint_resistance || \ 46. resists_disint(&youmonst)) 47. 48. #define HShock_resistance u.uprops[SHOCK_RES].intrinsic 49. #define EShock_resistance u.uprops[SHOCK_RES].extrinsic 50. #define Shock_resistance (HShock_resistance || EShock_resistance || \ 51. resists_elec(&youmonst)) 52. 53. #define HPoison_resistance u.uprops[POISON_RES].intrinsic 54. #define EPoison_resistance u.uprops[POISON_RES].extrinsic 55. #define Poison_resistance (HPoison_resistance || EPoison_resistance || \ 56. resists_poison(&youmonst)) 57. 58. #define HDrain_resistance u.uprops[DRAIN_RES].intrinsic 59. #define EDrain_resistance u.uprops[DRAIN_RES].extrinsic 60. #define Drain_resistance (HDrain_resistance || EDrain_resistance || \ 61. resists_drli(&youmonst)) 62. 63. /* Intrinsics only */ 64. #define HSick_resistance u.uprops[SICK_RES].intrinsic 65. #define Sick_resistance (HSick_resistance || \ 66. youmonst.data->mlet == S_FUNGUS || \ 67. youmonst.data == &mons[PM_GHOUL] || \ 68. defends(AD_DISE,uwep)) 69. #define Invulnerable u.uprops[INVULNERABLE].intrinsic /* [Tom] */ 70. 71. /* Extrinsics only */ 72. #define EAntimagic u.uprops[ANTIMAGIC].extrinsic 73. #define Antimagic (EAntimagic || \ 74. (Upolyd && resists_magm(&youmonst))) 75. 76. #define EAcid_resistance u.uprops[ACID_RES].extrinsic 77. #define Acid_resistance (EAcid_resistance || resists_acid(&youmonst)) 78. 79. #define EStone_resistance u.uprops[STONE_RES].extrinsic 80. #define Stone_resistance (EStone_resistance || resists_ston(&youmonst)) 81. 82. 83. /*** Troubles ***/ 84. /* Pseudo-property */ 85. #define Punished (uball) 86. 87. /* Those implemented solely as timeouts (we use just intrinsic) */ 88. #define HStun u.uprops[STUNNED].intrinsic 89. #define Stunned (HStun || u.umonnum == PM_STALKER || \ 90. youmonst.data->mlet == S_BAT) 91. /* Note: birds will also be stunned */ 92. 93. #define HConfusion u.uprops[CONFUSION].intrinsic 94. #define Confusion HConfusion 95. 96. #define Blinded u.uprops[BLINDED].intrinsic 97. #define Blindfolded (ublindf && ublindf->otyp != LENSES) 98. /* ...means blind because of a cover */ 99. #define Blind ((Blinded || Blindfolded || !haseyes(youmonst.data)) && \ 100. !(ublindf && ublindf->oartifact == ART_EYES_OF_THE_OVERWORLD)) 101. /* ...the Eyes operate even when you really are blind 102. or don't have any eyes */ 103. 104. #define Sick u.uprops[SICK].intrinsic 105. #define Stoned u.uprops[STONED].intrinsic 106. #define Strangled u.uprops[STRANGLED].intrinsic 107. #define Vomiting u.uprops[VOMITING].intrinsic 108. #define Glib u.uprops[GLIB].intrinsic 109. #define Slimed u.uprops[SLIMED].intrinsic /* [Tom] */ 110. 111. /* Hallucination is solely a timeout; its resistance is extrinsic */ 112. #define HHallucination u.uprops[HALLUC].intrinsic 113. #define EHalluc_resistance u.uprops[HALLUC_RES].extrinsic 114. #define Halluc_resistance (EHalluc_resistance || \ 115. (Upolyd && dmgtype(youmonst.data, AD_HALU))) 116. #define Hallucination (HHallucination && !Halluc_resistance) 117. 118. /* Timeout, plus a worn mask */ 119. #define HFumbling u.uprops[FUMBLING].intrinsic 120. #define EFumbling u.uprops[FUMBLING].extrinsic 121. #define Fumbling (HFumbling || EFumbling) 122. 123. #define HWounded_legs u.uprops[WOUNDED_LEGS].intrinsic 124. #define EWounded_legs u.uprops[WOUNDED_LEGS].extrinsic 125. #define Wounded_legs (HWounded_legs || EWounded_legs) 126. 127. #define HSleeping u.uprops[SLEEPING].intrinsic 128. #define ESleeping u.uprops[SLEEPING].extrinsic 129. #define Sleeping (HSleeping || ESleeping) 130. 131. #define HHunger u.uprops[HUNGER].intrinsic 132. #define EHunger u.uprops[HUNGER].extrinsic 133. #define Hunger (HHunger || EHunger) 134. 135. 136. /*** Vision and senses ***/ 137. #define HSee_invisible u.uprops[SEE_INVIS].intrinsic 138. #define ESee_invisible u.uprops[SEE_INVIS].extrinsic 139. #define See_invisible (HSee_invisible || ESee_invisible || \ 140. perceives(youmonst.data)) 141. 142. #define HTelepat u.uprops[TELEPAT].intrinsic 143. #define ETelepat u.uprops[TELEPAT].extrinsic 144. #define Blind_telepat (HTelepat || ETelepat || \ 145. telepathic(youmonst.data)) 146. #define Unblind_telepat (ETelepat) 147. 148. #define HWarning u.uprops[WARNING].intrinsic 149. #define EWarning u.uprops[WARNING].extrinsic 150. #define Warning (HWarning || EWarning) 151. 152. /* Warning for a specific type of monster */ 153. #define HWarn_of_mon u.uprops[WARN_OF_MON].intrinsic 154. #define EWarn_of_mon u.uprops[WARN_OF_MON].extrinsic 155. #define Warn_of_mon (HWarn_of_mon || EWarn_of_mon) 156. 157. #define HUndead_warning u.uprops[WARN_UNDEAD].intrinsic 158. #define Undead_warning (HUndead_warning) 159. 160. #define HSearching u.uprops[SEARCHING].intrinsic 161. #define ESearching u.uprops[SEARCHING].extrinsic 162. #define Searching (HSearching || ESearching) 163. 164. #define HClairvoyant u.uprops[CLAIRVOYANT].intrinsic 165. #define EClairvoyant u.uprops[CLAIRVOYANT].extrinsic 166. #define BClairvoyant u.uprops[CLAIRVOYANT].blocked 167. #define Clairvoyant ((HClairvoyant || EClairvoyant) &&\ 168. !BClairvoyant) 169. 170. #define HInfravision u.uprops[INFRAVISION].intrinsic 171. #define EInfravision u.uprops[INFRAVISION].extrinsic 172. #define Infravision (HInfravision || EInfravision || \ 173. infravision(youmonst.data)) 174. 175. #define HDetect_monsters u.uprops[DETECT_MONSTERS].intrinsic 176. #define EDetect_monsters u.uprops[DETECT_MONSTERS].extrinsic 177. #define Detect_monsters (HDetect_monsters || EDetect_monsters) 178. 179. 180. /*** Appearance and behavior ***/ 181. #define Adornment u.uprops[ADORNED].extrinsic 182. 183. #define HInvis u.uprops[INVIS].intrinsic 184. #define EInvis u.uprops[INVIS].extrinsic 185. #define BInvis u.uprops[INVIS].blocked 186. #define Invis ((HInvis || EInvis || \ 187. pm_invisible(youmonst.data)) && !BInvis) 188. #define Invisible (Invis && !See_invisible) 189. /* Note: invisibility also hides inventory and steed */ 190. 191. #define EDisplaced u.uprops[DISPLACED].extrinsic 192. #define Displaced EDisplaced 193. 194. #define HStealth u.uprops[STEALTH].intrinsic 195. #define EStealth u.uprops[STEALTH].extrinsic 196. #define BStealth u.uprops[STEALTH].blocked 197. #define Stealth ((HStealth || EStealth) && !BStealth) 198. 199. #define HAggravate_monster u.uprops[AGGRAVATE_MONSTER].intrinsic 200. #define EAggravate_monster u.uprops[AGGRAVATE_MONSTER].extrinsic 201. #define Aggravate_monster (HAggravate_monster || EAggravate_monster) 202. 203. #define HConflict u.uprops[CONFLICT].intrinsic 204. #define EConflict u.uprops[CONFLICT].extrinsic 205. #define Conflict (HConflict || EConflict) 206. 207. 208. /*** Transportation ***/ 209. #define HJumping u.uprops[JUMPING].intrinsic 210. #define EJumping u.uprops[JUMPING].extrinsic 211. #define Jumping (HJumping || EJumping) 212. 213. #define HTeleportation u.uprops[TELEPORT].intrinsic 214. #define ETeleportation u.uprops[TELEPORT].extrinsic 215. #define Teleportation (HTeleportation || ETeleportation || \ 216. can_teleport(youmonst.data)) 217. 218. #define HTeleport_control u.uprops[TELEPORT_CONTROL].intrinsic 219. #define ETeleport_control u.uprops[TELEPORT_CONTROL].extrinsic 220. #define Teleport_control (HTeleport_control || ETeleport_control || \ 221. control_teleport(youmonst.data)) 222. 223. #define HLevitation u.uprops[LEVITATION].intrinsic 224. #define ELevitation u.uprops[LEVITATION].extrinsic 225. #define Levitation (HLevitation || ELevitation || \ 226. is_floater(youmonst.data)) 227. /* Can't touch surface, can't go under water; overrides all others */ 228. #define Lev_at_will (((HLevitation & I_SPECIAL) != 0L || \ 229. (ELevitation & W_ARTI) != 0L) && \ 230. (HLevitation & ~(I_SPECIAL|TIMEOUT)) == 0L && \ 231. (ELevitation & ~W_ARTI) == 0L && \ 232. !is_floater(youmonst.data)) 233. 234. #define EFlying u.uprops[FLYING].extrinsic 235. #ifdef STEED 236. # define Flying (EFlying || is_flyer(youmonst.data) || \ 237. (u.usteed && is_flyer(u.usteed->data))) 238. #else 239. # define Flying (EFlying || is_flyer(youmonst.data)) 240. #endif 241. /* May touch surface; does not override any others */ 242. 243. #define Wwalking (u.uprops[WWALKING].extrinsic && \ 244. !Is_waterlevel(&u.uz)) 245. /* Don't get wet, can't go under water; overrides others except levitation */ 246. /* Wwalking is meaningless on water level */ 247. 248. #define HSwimming u.uprops[SWIMMING].intrinsic 249. #define ESwimming u.uprops[SWIMMING].extrinsic /* [Tom] */ 250. #ifdef STEED 251. # define Swimming (HSwimming || ESwimming || \ 252. is_swimmer(youmonst.data) || \ 253. (u.usteed && is_swimmer(u.usteed->data))) 254. #else 255. # define Swimming (HSwimming || ESwimming || \ 256. is_swimmer(youmonst.data)) 257. #endif 258. /* Get wet, don't go under water unless if amphibious */ 259. 260. #define HMagical_breathing u.uprops[MAGICAL_BREATHING].intrinsic 261. #define EMagical_breathing u.uprops[MAGICAL_BREATHING].extrinsic 262. #define Amphibious (HMagical_breathing || EMagical_breathing || \ 263. amphibious(youmonst.data)) 264. /* Get wet, may go under surface */ 265. 266. #define Breathless (HMagical_breathing || EMagical_breathing || \ 267. breathless(youmonst.data)) 268. 269. #define Underwater (u.uinwater) 270. /* Note that Underwater and u.uinwater are both used in code. 271. The latter form is for later implementation of other in-water 272. states, like swimming, wading, etc. */ 273. 274. #define HPasses_walls u.uprops[PASSES_WALLS].intrinsic 275. #define EPasses_walls u.uprops[PASSES_WALLS].extrinsic 276. #define Passes_walls (HPasses_walls || EPasses_walls || \ 277. passes_walls(youmonst.data)) 278. 279. 280. /*** Physical attributes ***/ 281. #define HSlow_digestion u.uprops[SLOW_DIGESTION].intrinsic 282. #define ESlow_digestion u.uprops[SLOW_DIGESTION].extrinsic 283. #define Slow_digestion (HSlow_digestion || ESlow_digestion) /* KMH */ 284. 285. #define HHalf_spell_damage u.uprops[HALF_SPDAM].intrinsic 286. #define EHalf_spell_damage u.uprops[HALF_SPDAM].extrinsic 287. #define Half_spell_damage (HHalf_spell_damage || EHalf_spell_damage) 288. 289. #define HHalf_physical_damage u.uprops[HALF_PHDAM].intrinsic 290. #define EHalf_physical_damage u.uprops[HALF_PHDAM].extrinsic 291. #define Half_physical_damage (HHalf_physical_damage || EHalf_physical_damage) 292. 293. #define HRegeneration u.uprops[REGENERATION].intrinsic 294. #define ERegeneration u.uprops[REGENERATION].extrinsic 295. #define Regeneration (HRegeneration || ERegeneration || \ 296. regenerates(youmonst.data)) 297. 298. #define HEnergy_regeneration u.uprops[ENERGY_REGENERATION].intrinsic 299. #define EEnergy_regeneration u.uprops[ENERGY_REGENERATION].extrinsic 300. #define Energy_regeneration (HEnergy_regeneration || EEnergy_regeneration) 301. 302. #define HProtection u.uprops[PROTECTION].intrinsic 303. #define EProtection u.uprops[PROTECTION].extrinsic 304. #define Protection (HProtection || EProtection) 305. 306. #define HProtection_from_shape_changers \ 307. u.uprops[PROT_FROM_SHAPE_CHANGERS].intrinsic 308. #define EProtection_from_shape_changers \ 309. u.uprops[PROT_FROM_SHAPE_CHANGERS].extrinsic 310. #define Protection_from_shape_changers \ 311. (HProtection_from_shape_changers || \ 312. EProtection_from_shape_changers) 313. 314. #define HPolymorph u.uprops[POLYMORPH].intrinsic 315. #define EPolymorph u.uprops[POLYMORPH].extrinsic 316. #define Polymorph (HPolymorph || EPolymorph) 317. 318. #define HPolymorph_control u.uprops[POLYMORPH_CONTROL].intrinsic 319. #define EPolymorph_control u.uprops[POLYMORPH_CONTROL].extrinsic 320. #define Polymorph_control (HPolymorph_control || EPolymorph_control) 321. 322. #define HUnchanging u.uprops[UNCHANGING].intrinsic 323. #define EUnchanging u.uprops[UNCHANGING].extrinsic 324. #define Unchanging (HUnchanging || EUnchanging) /* KMH */ 325. 326. #define HFast u.uprops[FAST].intrinsic 327. #define EFast u.uprops[FAST].extrinsic 328. #define Fast (HFast || EFast) 329. #define Very_fast ((HFast & ~INTRINSIC) || EFast) 330. 331. #define EReflecting u.uprops[REFLECTING].extrinsic 332. #define Reflecting (EReflecting || \ 333. (youmonst.data == &mons[PM_SILVER_DRAGON])) 334. 335. #define Free_action u.uprops[FREE_ACTION].extrinsic /* [Tom] */ 336. 337. #define Fixed_abil u.uprops[FIXED_ABIL].extrinsic /* KMH */ 338. 339. #define Lifesaved u.uprops[LIFESAVED].extrinsic 340. 341. 342. #endif /* YOUPROP_H */