Source:NetHack 3.4.0/mondata.h

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

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

1.   /*	SCCS Id: @(#)mondata.h	3.4	2001/02/14	*/ 2.   /* Copyright (c) 1989 Mike Threepoint				  */ 3.   /* NetHack may be freely redistributed. See license for details. */ 4.     5.    #ifndef MONDATA_H 6.   #define MONDATA_H 7.    8.    #define verysmall(ptr)		((ptr)->msize < MZ_SMALL) 9.   #define bigmonst(ptr)		((ptr)->msize >= MZ_LARGE) 10.   11.   #define pm_resistance(ptr,typ)	(((ptr)->mresists & (typ)) != 0) 12.   13.   #define resists_fire(mon)	(((mon)->mintrinsics & MR_FIRE) != 0) 14.  #define resists_cold(mon)	(((mon)->mintrinsics & MR_COLD) != 0) 15.  #define resists_sleep(mon)	(((mon)->mintrinsics & MR_SLEEP) != 0) 16.  #define resists_disint(mon)	(((mon)->mintrinsics & MR_DISINT) != 0) 17.  #define resists_elec(mon)	(((mon)->mintrinsics & MR_ELEC) != 0) 18.  #define resists_poison(mon)	(((mon)->mintrinsics & MR_POISON) != 0) 19.  #define resists_acid(mon)	(((mon)->mintrinsics & MR_ACID) != 0) 20.  #define resists_ston(mon)	(((mon)->mintrinsics & MR_STONE) != 0) 21.   22.   #define is_flyer(ptr)		(((ptr)->mflags1 & M1_FLY) != 0L) 23.  #define is_floater(ptr)		((ptr)->mlet == S_EYE) 24.  #define is_clinger(ptr)		(((ptr)->mflags1 & M1_CLING) != 0L) 25.  #define is_swimmer(ptr)		(((ptr)->mflags1 & M1_SWIM) != 0L) 26.  #define breathless(ptr)		(((ptr)->mflags1 & M1_BREATHLESS) != 0L) 27.  #define amphibious(ptr)		(((ptr)->mflags1 & (M1_AMPHIBIOUS | M1_BREATHLESS)) != 0L) 28.  #define passes_walls(ptr)	(((ptr)->mflags1 & M1_WALLWALK) != 0L) 29.  #define amorphous(ptr)		(((ptr)->mflags1 & M1_AMORPHOUS) != 0L) 30.  #define noncorporeal(ptr)	((ptr)->mlet == S_GHOST) 31.  #define tunnels(ptr)		(((ptr)->mflags1 & M1_TUNNEL) != 0L) 32.  #define needspick(ptr)		(((ptr)->mflags1 & M1_NEEDPICK) != 0L) 33.  #define hides_under(ptr)	(((ptr)->mflags1 & M1_CONCEAL) != 0L) 34.  #define is_hider(ptr)		(((ptr)->mflags1 & M1_HIDE) != 0L) 35.  #define haseyes(ptr)		(((ptr)->mflags1 & M1_NOEYES) == 0L) 36.  #define eyecount(ptr)		(!haseyes(ptr) ? 0 : \  37.   				 ((ptr) == &mons[PM_CYCLOPS] || \ 38.  				  (ptr) == &mons[PM_FLOATING_EYE]) ? 1 : 2) 39.  #define nohands(ptr)		(((ptr)->mflags1 & M1_NOHANDS) != 0L) 40.  #define nolimbs(ptr)		(((ptr)->mflags1 & M1_NOLIMBS) == M1_NOLIMBS) 41.  #define notake(ptr)		(((ptr)->mflags1 & M1_NOTAKE) != 0L) 42.  #define has_head(ptr)		(((ptr)->mflags1 & M1_NOHEAD) == 0L) 43.  #define is_whirly(ptr)		((ptr)->mlet == S_VORTEX || \  44.   				 (ptr) == &mons[PM_AIR_ELEMENTAL]) 45.  #define is_silent(ptr)		((ptr)->msound == MS_SILENT) 46.  #define unsolid(ptr)		(((ptr)->mflags1 & M1_UNSOLID) != 0L) 47.  #define mindless(ptr)		(((ptr)->mflags1 & M1_MINDLESS) != 0L) 48.  #define humanoid(ptr)		(((ptr)->mflags1 & M1_HUMANOID) != 0L) 49.  #define is_animal(ptr)		(((ptr)->mflags1 & M1_ANIMAL) != 0L) 50.  #define slithy(ptr)		(((ptr)->mflags1 & M1_SLITHY) != 0L) 51.  #define is_wooden(ptr)		((ptr) == &mons[PM_WOOD_GOLEM]) 52.  #define thick_skinned(ptr)	(((ptr)->mflags1 & M1_THICK_HIDE) != 0L) 53.  #define lays_eggs(ptr)		(((ptr)->mflags1 & M1_OVIPAROUS) != 0L) 54.  #define regenerates(ptr)	(((ptr)->mflags1 & M1_REGEN) != 0L) 55.  #define perceives(ptr)		(((ptr)->mflags1 & M1_SEE_INVIS) != 0L) 56.  #define can_teleport(ptr)	(((ptr)->mflags1 & M1_TPORT) != 0L) 57.  #define control_teleport(ptr)	(((ptr)->mflags1 & M1_TPORT_CNTRL) != 0L) 58.  #define telepathic(ptr)		((ptr) == &mons[PM_FLOATING_EYE] || \  59.   				 (ptr) == &mons[PM_MIND_FLAYER] || \  60.   				 (ptr) == &mons[PM_MASTER_MIND_FLAYER]) 61.  #define is_armed(ptr)		attacktype(ptr, AT_WEAP) 62.  #define acidic(ptr)		(((ptr)->mflags1 & M1_ACID) != 0L) 63.  #define poisonous(ptr)		(((ptr)->mflags1 & M1_POIS) != 0L) 64.  #define carnivorous(ptr)	(((ptr)->mflags1 & M1_CARNIVORE) != 0L) 65.  #define herbivorous(ptr)	(((ptr)->mflags1 & M1_HERBIVORE) != 0L) 66.  #define metallivorous(ptr)	(((ptr)->mflags1 & M1_METALLIVORE) != 0L) 67.  #define polyok(ptr)		(((ptr)->mflags2 & M2_NOPOLY) == 0L) 68.  #define is_undead(ptr)		(((ptr)->mflags2 & M2_UNDEAD) != 0L) 69.  #define is_were(ptr)		(((ptr)->mflags2 & M2_WERE) != 0L) 70.  #define is_elf(ptr)		(((ptr)->mflags2 & M2_ELF) != 0L) 71.  #define is_dwarf(ptr)		(((ptr)->mflags2 & M2_DWARF) != 0L) 72.  #define is_gnome(ptr)		(((ptr)->mflags2 & M2_GNOME) != 0L) 73.  #define is_orc(ptr)		(((ptr)->mflags2 & M2_ORC) != 0L) 74.  #define is_human(ptr)		(((ptr)->mflags2 & M2_HUMAN) != 0L) 75.  #define your_race(ptr)		(((ptr)->mflags2 & urace.selfmask) != 0L) 76.  #define is_bat(ptr)		((ptr) == &mons[PM_BAT] || \  77.   				 (ptr) == &mons[PM_GIANT_BAT] || \  78.   				 (ptr) == &mons[PM_VAMPIRE_BAT]) 79.  #define is_bird(ptr)		((ptr)->mlet == S_BAT && !is_bat(ptr)) 80.  #define is_giant(ptr)		(((ptr)->mflags2 & M2_GIANT) != 0L) 81.  #define is_golem(ptr)		((ptr)->mlet == S_GOLEM) 82.  #define is_domestic(ptr)	(((ptr)->mflags2 & M2_DOMESTIC) != 0L) 83.  #define is_demon(ptr)		(((ptr)->mflags2 & M2_DEMON) != 0L) 84.  #define is_mercenary(ptr)	(((ptr)->mflags2 & M2_MERC) != 0L) 85.  #define is_male(ptr)		(((ptr)->mflags2 & M2_MALE) != 0L) 86.  #define is_female(ptr)		(((ptr)->mflags2 & M2_FEMALE) != 0L) 87.  #define is_neuter(ptr)		(((ptr)->mflags2 & M2_NEUTER) != 0L) 88.  #define is_wanderer(ptr)	(((ptr)->mflags2 & M2_WANDER) != 0L) 89.  #define always_hostile(ptr)	(((ptr)->mflags2 & M2_HOSTILE) != 0L) 90.  #define always_peaceful(ptr)	(((ptr)->mflags2 & M2_PEACEFUL) != 0L) 91.  #define race_hostile(ptr)	(((ptr)->mflags2 & urace.hatemask) != 0L) 92.  #define race_peaceful(ptr)	(((ptr)->mflags2 & urace.lovemask) != 0L) 93.  #define extra_nasty(ptr)	(((ptr)->mflags2 & M2_NASTY) != 0L) 94.  #define strongmonst(ptr)	(((ptr)->mflags2 & M2_STRONG) != 0L) 95.  #define can_breathe(ptr)	attacktype(ptr, AT_BREA) 96.  #define cantwield(ptr)		(nohands(ptr) || verysmall(ptr)) 97.  #define could_twoweap(ptr)	((ptr)->mattk[1].aatyp == AT_WEAP) 98.  #define cantweararm(ptr)	(breakarm(ptr) || sliparm(ptr)) 99.  #define throws_rocks(ptr)	(((ptr)->mflags2 & M2_ROCKTHROW) != 0L) 100. #define type_is_pname(ptr)	(((ptr)->mflags2 & M2_PNAME) != 0L) 101. #define is_lord(ptr)		(((ptr)->mflags2 & M2_LORD) != 0L) 102. #define is_prince(ptr)		(((ptr)->mflags2 & M2_PRINCE) != 0L) 103. #define is_ndemon(ptr)		(is_demon(ptr) && \  104.  				 (((ptr)->mflags2 & (M2_LORD|M2_PRINCE)) == 0L)) 105. #define is_dlord(ptr)		(is_demon(ptr) && is_lord(ptr)) 106. #define is_dprince(ptr)		(is_demon(ptr) && is_prince(ptr)) 107. #define is_minion(ptr)		((ptr)->mflags2 & M2_MINION) 108. #define is_lminion(ptr)		(is_minion(ptr) && \  109.  				 (ptr)->maligntyp >= A_COALIGNED) 110. #define likes_gold(ptr)		(((ptr)->mflags2 & M2_GREEDY) != 0L) 111. #define likes_gems(ptr)		(((ptr)->mflags2 & M2_JEWELS) != 0L) 112. #define likes_objs(ptr)		(((ptr)->mflags2 & M2_COLLECT) != 0L || \  113.  				 is_armed(ptr)) 114. #define likes_magic(ptr)	(((ptr)->mflags2 & M2_MAGIC) != 0L) 115. #define webmaker(ptr)		((ptr) == &mons[PM_CAVE_SPIDER] || \  116.  				 (ptr) == &mons[PM_GIANT_SPIDER]) 117. #define is_unicorn(ptr)		((ptr)->mlet == S_UNICORN && likes_gems(ptr)) 118. #define is_longworm(ptr)	(((ptr) == &mons[PM_BABY_LONG_WORM]) || \  119.  				 ((ptr) == &mons[PM_LONG_WORM]) || \  120.  				 ((ptr) == &mons[PM_LONG_WORM_TAIL])) 121. #define is_covetous(ptr)	((ptr->mflags3 & M3_COVETOUS)) 122. #define infravision(ptr)	((ptr->mflags3 & M3_INFRAVISION)) 123. #define infravisible(ptr)	((ptr->mflags3 & M3_INFRAVISIBLE)) 124. #define is_mplayer(ptr)		(((ptr) >= &mons[PM_ARCHEOLOGIST]) && \  125.  				 ((ptr) <= &mons[PM_WIZARD])) 126. #define is_rider(ptr)		((ptr) == &mons[PM_DEATH] || \  127.  				 (ptr) == &mons[PM_FAMINE] || \  128.  				 (ptr) == &mons[PM_PESTILENCE]) 129. #define is_placeholder(ptr)	((ptr) == &mons[PM_ORC] || \  130.  				 (ptr) == &mons[PM_GIANT] || \  131.  				 (ptr) == &mons[PM_ELF] || \  132.  				 (ptr) == &mons[PM_HUMAN]) 133. /* return TRUE if the monster tends to revive */ 134. #define is_reviver(ptr)		(is_rider(ptr) || (ptr)->mlet == S_TROLL) 135.  136.  /* this returns the light's range, or 0 if none; if we add more light emitting 137.    monsters, we'll likely have to add a new light range field to mons[] */ 138. #define emits_light(ptr)	(((ptr)->mlet == S_LIGHT || \ 139. 				  (ptr) == &mons[PM_FLAMING_SPHERE] || \ 140. 				  (ptr) == &mons[PM_SHOCKING_SPHERE] || \ 141. 				  (ptr) == &mons[PM_FIRE_VORTEX]) ? 1 : \  142.  				 ((ptr) == &mons[PM_FIRE_ELEMENTAL]) ? 1 : 0) 143. /*	[note: the light ranges above were reduced to 1 for performance...] */ 144. #define likes_lava(ptr)		(ptr == &mons[PM_FIRE_ELEMENTAL] || \  145.  				 ptr == &mons[PM_SALAMANDER]) 146. #define pm_invisible(ptr) ((ptr) == &mons[PM_STALKER] || \  147.  			   (ptr) == &mons[PM_BLACK_LIGHT]) 148.  149.  /* could probably add more */ 150. #define likes_fire(ptr)		((ptr) == &mons[PM_FIRE_VORTEX] || \  151.  				  (ptr) == &mons[PM_FLAMING_SPHERE] || \  152.  				 likes_lava(ptr)) 153.  154.  #define touch_petrifies(ptr)	((ptr) == &mons[PM_COCKATRICE] || \  155.  				 (ptr) == &mons[PM_CHICKATRICE]) 156.  157.  #define is_mind_flayer(ptr)	((ptr) == &mons[PM_MIND_FLAYER] || \  158.  				 (ptr) == &mons[PM_MASTER_MIND_FLAYER]) 159.  160.  #define nonliving(ptr)		(is_golem(ptr) || is_undead(ptr) || \  161.  				 (ptr)->mlet == S_VORTEX) 162.  163.  /* Used for conduct with corpses, tins, and digestion attacks */ 164. /* G_NOCORPSE monsters might still be swallowed as a purple worm */ 165. /* Maybe someday this could be in mflags... */ 166.  #define vegan(ptr)		((ptr)->mlet == S_BLOB || \  167.  				 (ptr)->mlet == S_JELLY ||            \  168.  				 (ptr)->mlet == S_FUNGUS ||           \  169.  				 (ptr)->mlet == S_VORTEX ||           \  170.  				 (ptr)->mlet == S_LIGHT ||            \  171.  				((ptr)->mlet == S_ELEMENTAL &&        \ 172. 				 (ptr) != &mons[PM_STALKER]) ||       \  173.  				((ptr)->mlet == S_GOLEM &&            \ 174. 				 (ptr) != &mons[PM_FLESH_GOLEM] &&    \ 175. 				 (ptr) != &mons[PM_LEATHER_GOLEM]) || \  176.  				 noncorporeal(ptr)) 177. #define vegetarian(ptr)		(vegan(ptr) || \  178.  				((ptr)->mlet == S_PUDDING &&         \ 179. 				 (ptr) != &mons[PM_BLACK_PUDDING])) 180.  181.  #define befriend_with_obj(ptr, obj) ((obj)->oclass == FOOD_CLASS && \  182.  				     is_domestic(ptr)) 183.  184.  #endif /* MONDATA_H */