Source:NetHack 3.3.0/youprop.h

Below is the full text to youprop.h from the source code of NetHack 3.3.0. To link to a particular line, write [[NetHack 3.3.0/youprop.h#line123 ]], for example.

Warning! This is the source code from an old release. For the latest release, see Source code

1.   /*	SCCS Id: @(#)youprop.h	3.3	99/07/02	*/ 2.   /* Copyright (c) 1989 Mike Threepoint				  */ 3.   /* NetHack may be freely redistributed. See license for details. */ 4.     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.   				 defends(AD_DISE,uwep)) 68.  #define Invulnerable		u.uprops[INVULNERABLE].intrinsic    /* [Tom] */ 69.   70.   /* Extrinsics only */ 71.  #define EAntimagic		u.uprops[ANTIMAGIC].extrinsic 72.  #define Antimagic		(EAntimagic || \  73.   				 (Upolyd && resists_magm(&youmonst))) 74.   75.   #define EAcid_resistance	u.uprops[ACID_RES].extrinsic 76.  #define Acid_resistance		(EAcid_resistance || resists_acid(&youmonst)) 77.   78.   #define EStone_resistance	u.uprops[STONE_RES].extrinsic 79.  #define Stone_resistance	(EStone_resistance || resists_ston(&youmonst)) 80.   81.    82.   /*** Troubles ***/ 83.  /* Pseudo-property */ 84.  #define Punished		(uball) 85.   86.   /* Those implemented solely as timeouts (we use just intrinsic) */ 87.  #define HStun			u.uprops[STUNNED].intrinsic 88.  #define Stunned			(HStun || u.umonnum == PM_STALKER || \  89.   				 youmonst.data->mlet == S_BAT) 90.  		/* Note: birds will also be stunned */ 91.   92.   #define HConfusion		u.uprops[CONFUSION].intrinsic 93.  #define Confusion		HConfusion 94.   95.   #define Blinded			u.uprops[BLINDED].intrinsic 96.  #define Blindfolded		(ublindf && ublindf->otyp != LENSES) 97.  		/* ...means blind because of a cover */ 98.  #define Blind	((Blinded || Blindfolded || !haseyes(youmonst.data)) && \  99.   		 !(ublindf && ublindf->oartifact == ART_EYES_OF_THE_OVERWORLD)) 100. 		/* ...the Eyes operate even when you really are blind 101. 		    or don't have any eyes */ 102.  103.  #define Sick			u.uprops[SICK].intrinsic 104. #define Stoned			u.uprops[STONED].intrinsic 105. #define Strangled		u.uprops[STRANGLED].intrinsic 106. #define Vomiting		u.uprops[VOMITING].intrinsic 107. #define Glib			u.uprops[GLIB].intrinsic 108. #define Slimed			u.uprops[SLIMED].intrinsic	/* [Tom] */ 109.  110.  /* Hallucination is solely a timeout; its resistance is extrinsic */ 111. #define HHallucination		u.uprops[HALLUC].intrinsic 112. #define EHalluc_resistance	u.uprops[HALLUC_RES].extrinsic 113. #define Halluc_resistance	(EHalluc_resistance || \  114.  				 (Upolyd && dmgtype(youmonst.data, AD_HALU))) 115. #define Hallucination		(HHallucination && !Halluc_resistance) 116.  117.  /* Timeout, plus a worn mask */ 118. #define HFumbling		u.uprops[FUMBLING].intrinsic 119. #define EFumbling		u.uprops[FUMBLING].extrinsic 120. #define Fumbling		(HFumbling || EFumbling) 121.  122.  #define HWounded_legs		u.uprops[WOUNDED_LEGS].intrinsic 123. #define EWounded_legs		u.uprops[WOUNDED_LEGS].extrinsic 124. #define Wounded_legs		(HWounded_legs || EWounded_legs) 125.  126.  #define HSleeping		u.uprops[SLEEPING].intrinsic 127. #define ESleeping		u.uprops[SLEEPING].extrinsic 128. #define Sleeping		(HSleeping || ESleeping) 129.  130.  #define HHunger			u.uprops[HUNGER].intrinsic 131. #define EHunger			u.uprops[HUNGER].extrinsic 132. #define Hunger			(HHunger || EHunger) 133.  134.   135.  /*** Vision and senses ***/ 136. #define HSee_invisible		u.uprops[SEE_INVIS].intrinsic 137. #define ESee_invisible		u.uprops[SEE_INVIS].extrinsic 138. #define See_invisible		(HSee_invisible || ESee_invisible || \  139.  				 perceives(youmonst.data)) 140.  141.  #define HTelepat		u.uprops[TELEPAT].intrinsic 142. #define ETelepat		u.uprops[TELEPAT].extrinsic 143. #define Blind_telepat		(HTelepat || ETelepat || \  144.  				 telepathic(youmonst.data)) 145. #define Unblind_telepat		(ETelepat) 146.  147.  #define HWarning		u.uprops[WARNING].intrinsic 148. #define EWarning		u.uprops[WARNING].extrinsic 149. #define Warning			(HWarning || EWarning) 150.  151.  #define HUndead_warning		u.uprops[WARN_UNDEAD].intrinsic 152. #define Undead_warning		(HUndead_warning) 153.  154.  #define HSearching		u.uprops[SEARCHING].intrinsic 155. #define ESearching		u.uprops[SEARCHING].extrinsic 156. #define Searching		(HSearching || ESearching) 157.  158.  #define HClairvoyant		u.uprops[CLAIRVOYANT].intrinsic 159. #define EClairvoyant		u.uprops[CLAIRVOYANT].extrinsic 160. #define BClairvoyant		u.uprops[CLAIRVOYANT].blocked 161. #define Clairvoyant		((HClairvoyant || EClairvoyant) &&\  162.  				 !BClairvoyant) 163.  164.  #define HInfravision		u.uprops[INFRAVISION].intrinsic 165. #define EInfravision		u.uprops[INFRAVISION].extrinsic 166. #define Infravision		(HInfravision || EInfravision || \  167.  				  infravision(youmonst.data)) 168.  169.  #define HDetect_monsters	u.uprops[DETECT_MONSTERS].intrinsic 170. #define EDetect_monsters	u.uprops[DETECT_MONSTERS].extrinsic 171. #define Detect_monsters		(HDetect_monsters || EDetect_monsters) 172.  173.   174.  /*** Appearance and behavior ***/ 175. #define Adornment		u.uprops[ADORNED].extrinsic 176.  177.  #define HInvis			u.uprops[INVIS].intrinsic 178. #define EInvis			u.uprops[INVIS].extrinsic 179. #define BInvis			u.uprops[INVIS].blocked 180. #define Invis			((HInvis || EInvis || \ 181. 				 pm_invisible(youmonst.data)) && !BInvis) 182. #define Invisible		(Invis && !See_invisible) 183.  184.  #define EDisplaced		u.uprops[DISPLACED].extrinsic 185. #define Displaced		EDisplaced 186.  187.  #define HStealth		u.uprops[STEALTH].intrinsic 188. #define EStealth		u.uprops[STEALTH].extrinsic 189. #define BStealth		u.uprops[STEALTH].blocked 190. #define Stealth			((HStealth || EStealth) && !BStealth) 191.  192.  #define HAggravate_monster	u.uprops[AGGRAVATE_MONSTER].intrinsic 193. #define EAggravate_monster	u.uprops[AGGRAVATE_MONSTER].extrinsic 194. #define Aggravate_monster	(HAggravate_monster || EAggravate_monster) 195.  196.  #define HConflict		u.uprops[CONFLICT].intrinsic 197. #define EConflict		u.uprops[CONFLICT].extrinsic 198. #define Conflict		(HConflict || EConflict) 199.  200.   201.  /*** Transportation ***/ 202. #define HJumping		u.uprops[JUMPING].intrinsic 203. #define EJumping		u.uprops[JUMPING].extrinsic 204. #define Jumping			(HJumping || EJumping) 205.  206.  #define HTeleportation		u.uprops[TELEPORT].intrinsic 207. #define ETeleportation		u.uprops[TELEPORT].extrinsic 208. #define Teleportation		(HTeleportation || ETeleportation || \  209.  				 can_teleport(youmonst.data)) 210.  211.  #define HTeleport_control	u.uprops[TELEPORT_CONTROL].intrinsic 212. #define ETeleport_control	u.uprops[TELEPORT_CONTROL].extrinsic 213. #define Teleport_control	(HTeleport_control || ETeleport_control || \  214.  				 control_teleport(youmonst.data)) 215.  216.  #define HLevitation		u.uprops[LEVITATION].intrinsic 217. #define ELevitation		u.uprops[LEVITATION].extrinsic 218. #define Levitation		(HLevitation || ELevitation || \  219.  				 is_floater(youmonst.data)) 220. 	/* Can't touch surface, can't go under water; overrides all others */ 221. #define Lev_at_will		(((HLevitation & I_SPECIAL) != 0L || \ 222. 				 (ELevitation & W_ARTI) != 0L) && \  223.  				 (HLevitation & ~(I_SPECIAL|TIMEOUT)) == 0L && \  224.  				 (ELevitation & ~W_ARTI) == 0L && \  225.  				 !is_floater(youmonst.data)) 226.  227.  #define EFlying			u.uprops[FLYING].extrinsic 228. #ifdef STEED 229. # define Flying			(EFlying || is_flyer(youmonst.data) || \  230.  				 (u.usteed && is_flyer(u.usteed->data))) 231. #else 232. # define Flying			(EFlying || is_flyer(youmonst.data)) 233. #endif 234. 	/* May touch surface; does not override any others */ 235.  236.  #define Wwalking		(u.uprops[WWALKING].extrinsic && \  237.  				 !Is_waterlevel(&u.uz)) 238. 	/* Don't get wet, can't go under water; overrides others except levitation */ 239. 	/* Wwalking is meaningless on water level */ 240.  241.  #define HSwimming		u.uprops[SWIMMING].intrinsic 242. #define ESwimming		u.uprops[SWIMMING].extrinsic	/* [Tom] */ 243. #ifdef STEED 244. # define Swimming		(HSwimming || ESwimming || \  245.  				 is_swimmer(youmonst.data) || \  246.  				 (u.usteed && is_swimmer(u.usteed->data))) 247. #else 248. # define Swimming		(HSwimming || ESwimming || \  249.  				 is_swimmer(youmonst.data)) 250. #endif 251. 	/* Get wet, don't go under water unless if amphibious */ 252.  253.  #define HMagical_breathing	u.uprops[MAGICAL_BREATHING].intrinsic 254. #define EMagical_breathing	u.uprops[MAGICAL_BREATHING].extrinsic 255. #define Amphibious		(HMagical_breathing || EMagical_breathing || \  256.  				 amphibious(youmonst.data)) 257. 	/* Get wet, may go under surface */ 258.  259.  #define Breathless		(HMagical_breathing || EMagical_breathing || \  260.  				 breathless(youmonst.data)) 261.  262.  #define Underwater		(u.uinwater) 263. /* Note that Underwater and u.uinwater are both used in code. 264.    The latter form is for later implementation of other in-water 265.    states, like swimming, wading, etc. */ 266.  267.  #define HPasses_walls		u.uprops[PASSES_WALLS].intrinsic 268. #define EPasses_walls		u.uprops[PASSES_WALLS].extrinsic 269. #define Passes_walls		(HPasses_walls || EPasses_walls || \  270.  				 passes_walls(youmonst.data)) 271.  272.   273.  /*** Physical attributes ***/ 274. #define HSlow_digestion		u.uprops[SLOW_DIGESTION].intrinsic 275. #define ESlow_digestion		u.uprops[SLOW_DIGESTION].extrinsic 276. #define Slow_digestion		(HSlow_digestion || ESlow_digestion)  /* KMH */ 277.  278.  #define HHalf_spell_damage	u.uprops[HALF_SPDAM].intrinsic 279. #define EHalf_spell_damage	u.uprops[HALF_SPDAM].extrinsic 280. #define Half_spell_damage	(HHalf_spell_damage || EHalf_spell_damage) 281.  282.  #define HHalf_physical_damage	u.uprops[HALF_PHDAM].intrinsic 283. #define EHalf_physical_damage	u.uprops[HALF_PHDAM].extrinsic 284. #define Half_physical_damage	(HHalf_physical_damage || EHalf_physical_damage) 285.  286.  #define HRegeneration		u.uprops[REGENERATION].intrinsic 287. #define ERegeneration		u.uprops[REGENERATION].extrinsic 288. #define Regeneration		(HRegeneration || ERegeneration || \  289.  				 regenerates(youmonst.data)) 290.  291.  #define HEnergy_regeneration	u.uprops[ENERGY_REGENERATION].intrinsic 292. #define EEnergy_regeneration	u.uprops[ENERGY_REGENERATION].extrinsic 293. #define Energy_regeneration	(HEnergy_regeneration || EEnergy_regeneration) 294.  295.  #define HProtection		u.uprops[PROTECTION].intrinsic 296. #define EProtection		u.uprops[PROTECTION].extrinsic 297. #define Protection		(HProtection || EProtection) 298.  299.  #define HProtection_from_shape_changers \ 300. 				u.uprops[PROT_FROM_SHAPE_CHANGERS].intrinsic 301. #define EProtection_from_shape_changers \ 302. 				u.uprops[PROT_FROM_SHAPE_CHANGERS].extrinsic 303. #define Protection_from_shape_changers \ 304. 				(HProtection_from_shape_changers || \  305.  				 EProtection_from_shape_changers) 306.  307.  #define HPolymorph		u.uprops[POLYMORPH].intrinsic 308. #define EPolymorph		u.uprops[POLYMORPH].extrinsic 309. #define Polymorph		(HPolymorph || EPolymorph) 310.  311.  #define HPolymorph_control	u.uprops[POLYMORPH_CONTROL].intrinsic 312. #define EPolymorph_control	u.uprops[POLYMORPH_CONTROL].extrinsic 313. #define Polymorph_control	(HPolymorph_control || EPolymorph_control) 314.  315.  #define HUnchanging		u.uprops[UNCHANGING].intrinsic 316. #define EUnchanging		u.uprops[UNCHANGING].extrinsic 317. #define Unchanging		(HUnchanging || EUnchanging)	/* KMH */ 318.  319.  #define HFast			u.uprops[FAST].intrinsic 320. #define EFast			u.uprops[FAST].extrinsic 321. #define Fast			(HFast || EFast) 322. #define Very_fast		((HFast & ~INTRINSIC) || EFast) 323.  324.  #define EReflecting		u.uprops[REFLECTING].extrinsic 325. #define Reflecting		(EReflecting || \  326.  				 (youmonst.data == &mons[PM_SILVER_DRAGON])) 327.  328.  #define Free_action		u.uprops[FREE_ACTION].extrinsic /* [Tom] */ 329.  330.  #define Fixed_abil		u.uprops[FIXED_ABIL].extrinsic	/* KMH */ 331.  332.  #define Lifesaved		u.uprops[LIFESAVED].extrinsic 333.  334.   335.  #endif /* YOUPROP_H */