home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume16 / nethck31 / patch1d < prev    next >
Encoding:
Text File  |  1993-03-04  |  57.7 KB  |  1,572 lines

  1. Subject:  v17i045:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch1d/31
  2. Newsgroups: comp.sources.games
  3. Approved: billr@saab.CNA.TEK.COM
  4.  
  5. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  6. Posting-number: Volume 17, Issue 45
  7. Archive-name: nethack31/Patch1d
  8. Patch-To: nethack31: Volume 16, Issue 1-116
  9. Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11
  10.  
  11.  
  12.  
  13. #! /bin/sh
  14. # This is a shell archive.  Remove anything before this line, then unpack
  15. # it by saving it into a file and typing "sh file".  To overwrite existing
  16. # files, type "sh file -c".  You can also feed this as standard input via
  17. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  18. # will see the following message at the end:
  19. #        "End of archive 4 (of 31)."
  20. # Contents:  patches01f
  21. # Wrapped by billr@saab on Fri Mar  5 10:50:42 1993
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f 'patches01f' -a "${1}" != "-c" ; then 
  24.   echo shar: Renaming existing file \"'patches01f'\" to \"'patches01f.orig'\"
  25.   mv -f 'patches01f' 'patches01f.orig'
  26. fi
  27. echo shar: Extracting \"'patches01f'\" \(55751 characters\)
  28. sed "s/^X//" >'patches01f' <<'END_OF_FILE'
  29. X*** /tmp/da08381    Thu Feb 25 10:24:07 1993
  30. X--- src/monst.c    Sun Feb 21 16:16:12 1993
  31. X***************
  32. X*** 48,54 ****
  33. X   */
  34. X  
  35. X  #ifndef SPLITMON_2
  36. X! struct permonst NEARDATA playermon = {        /* used by weapons bonus code */
  37. X      "player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN,
  38. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK,
  39. X        NO_ATTK, NO_ATTK, NO_ATTK },
  40. X--- 48,54 ----
  41. X   */
  42. X  
  43. X  #ifndef SPLITMON_2
  44. X! NEARDATA struct permonst playermon = {        /* used by weapons bonus code */
  45. X      "player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN,
  46. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK,
  47. X        NO_ATTK, NO_ATTK, NO_ATTK },
  48. X***************
  49. X*** 55,61 ****
  50. X      WT_HUMAN, 400, PL_NSIZ, MS_HUMANOID, MZ_HUMAN, 0, 0,
  51. X      M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE,
  52. X      M2_HUMAN | M2_STRONG | M2_COLLECT, 0, C(HI_DOMESTIC)
  53. X! },    NEARDATA *uasmon = &playermon;
  54. X  #endif /* SPLITMON_2 */
  55. X  
  56. X  /*
  57. X--- 55,61 ----
  58. X      WT_HUMAN, 400, PL_NSIZ, MS_HUMANOID, MZ_HUMAN, 0, 0,
  59. X      M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE,
  60. X      M2_HUMAN | M2_STRONG | M2_COLLECT, 0, C(HI_DOMESTIC)
  61. X! },    *uasmon = &playermon;
  62. X  #endif /* SPLITMON_2 */
  63. X  
  64. X  /*
  65. X***************
  66. X*** 97,103 ****
  67. X   */
  68. X  
  69. X  #ifndef SPLITMON_2
  70. X! struct permonst NEARDATA mons[] = {
  71. X  /*    ants    */
  72. X      { "giant ant",    S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3),
  73. X        { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK,
  74. X--- 97,103 ----
  75. X   */
  76. X  
  77. X  #ifndef SPLITMON_2
  78. X! NEARDATA struct permonst mons[] = {
  79. X  /*    ants    */
  80. X      { "giant ant",    S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3),
  81. X        { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK,
  82. X***************
  83. X*** 1437,1443 ****
  84. X        WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0,
  85. X        M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
  86. X        M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG |
  87. X!       M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSBOOK, C(HI_LORD) },
  88. X  /*    Wraiths     */
  89. X      { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1),
  90. X        { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
  91. X--- 1437,1444 ----
  92. X        WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0,
  93. X        M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN,
  94. X        M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG |
  95. X!       M2_NASTY | M2_PRINCE | M2_MALE, M3_WAITFORU | M3_WANTSBOOK,
  96. X!       C(HI_LORD) },
  97. X  /*    Wraiths     */
  98. X      { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1),
  99. X        { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
  100. X***************
  101. X*** 1794,1800 ****
  102. X        MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_SWIM |
  103. X        M1_AMPHIBIOUS | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_OMNIVORE,
  104. X        M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE,
  105. X!       0, C(BRIGHT_GREEN) },
  106. X      { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN,
  107. X        { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 },
  108. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  109. X--- 1795,1801 ----
  110. X        MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_SWIM |
  111. X        M1_AMPHIBIOUS | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_OMNIVORE,
  112. X        M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE,
  113. X!       M3_WAITFORU, C(BRIGHT_GREEN) },
  114. X      { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN,
  115. X        { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 },
  116. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  117. X***************
  118. X*** 1811,1817 ****
  119. X          NO_ATTK, NO_ATTK, NO_ATTK },
  120. X        WT_HUMAN, 400, 0, MS_GUARD, MZ_HUMAN,
  121. X        MR_STONE, MR_STONE, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE,
  122. X!       M2_NOPOLY | M2_HUMAN | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_NASTY |
  123. X        M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT |
  124. X        M2_MAGIC, 0, C(HI_LORD) },
  125. X  #endif
  126. X--- 1812,1818 ----
  127. X          NO_ATTK, NO_ATTK, NO_ATTK },
  128. X        WT_HUMAN, 400, 0, MS_GUARD, MZ_HUMAN,
  129. X        MR_STONE, MR_STONE, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE,
  130. X!       M2_NOPOLY | M2_HUMAN | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY |
  131. X        M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT |
  132. X        M2_MAGIC, 0, C(HI_LORD) },
  133. X  #endif
  134. X***************
  135. X*** 1973,1979 ****
  136. X        M1_ACID | M1_POIS,
  137. X        M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY |
  138. X        M2_LORD | M2_MALE,
  139. X!       M3_WANTSAMUL, C(BRIGHT_GREEN) },
  140. X      { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15,
  141. X        (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  142. X        { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 },
  143. X--- 1974,1980 ----
  144. X        M1_ACID | M1_POIS,
  145. X        M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY |
  146. X        M2_LORD | M2_MALE,
  147. X!       M3_WAITFORU | M3_WANTSAMUL, C(BRIGHT_GREEN) },
  148. X      { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15,
  149. X        (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  150. X        { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 },
  151. X***************
  152. X*** 1992,1998 ****
  153. X        MR_FIRE | MR_POISON, 0,
  154. X        M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK |
  155. X        M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT,
  156. X!       M3_WANTSBOOK | M3_WANTSAMUL, C(HI_LORD) },
  157. X      { "Geryon", S_DEMON, 72, 3, -3, 75, 15,
  158. X        (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  159. X        { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 },
  160. X--- 1993,1999 ----
  161. X        MR_FIRE | MR_POISON, 0,
  162. X        M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK |
  163. X        M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT,
  164. X!       M3_WAITFORU | M3_WANTSBOOK | M3_WANTSAMUL, C(HI_LORD) },
  165. X      { "Geryon", S_DEMON, 72, 3, -3, 75, 15,
  166. X        (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  167. X        { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 },
  168. X***************
  169. X*** 2303,2310 ****
  170. X        M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_NASTY |
  171. X        M2_COLLECT | M2_MAGIC, M3_CLOSE, C(WHITE) },
  172. X      { "Master of Thieves", S_HUMAN, 20, 15, 0, 30, -20, (G_NOGEN | G_UNIQ),
  173. X!       { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK,
  174. X!         NO_ATTK, NO_ATTK, NO_ATTK },
  175. X        WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN, 0, 0,
  176. X        M1_HUMANOID | M1_OMNIVORE,
  177. X        M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE |
  178. X--- 2304,2311 ----
  179. X        M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_NASTY |
  180. X        M2_COLLECT | M2_MAGIC, M3_CLOSE, C(WHITE) },
  181. X      { "Master of Thieves", S_HUMAN, 20, 15, 0, 30, -20, (G_NOGEN | G_UNIQ),
  182. X!       { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
  183. X!         { AT_CLAW, AD_SAMU, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK },
  184. X        WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN, 0, 0,
  185. X        M1_HUMANOID | M1_OMNIVORE,
  186. X        M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE |
  187. X***************
  188. X*** 2346,2352 ****
  189. X      { "Minion of Huhetol", S_DEMON, 16, 10, -2, 75, -14,
  190. X        (G_NOCORPSE | G_NOGEN | G_UNIQ),
  191. X        { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
  192. X!         { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK },
  193. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0,
  194. X        M1_FLY | M1_SEE_INVIS | M1_POIS,
  195. X        M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY |
  196. X--- 2347,2354 ----
  197. X      { "Minion of Huhetol", S_DEMON, 16, 10, -2, 75, -14,
  198. X        (G_NOCORPSE | G_NOGEN | G_UNIQ),
  199. X        { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
  200. X!         { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_SAMU, 2, 6 },
  201. X!         NO_ATTK, NO_ATTK },
  202. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0,
  203. X        M1_FLY | M1_SEE_INVIS | M1_POIS,
  204. X        M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY |
  205. X***************
  206. X*** 2353,2359 ****
  207. X        M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) },
  208. X      { "Thoth Amon", S_HUMAN, 16, 10, 0, 10, -14, (G_NOGEN | G_UNIQ),
  209. X        { { AT_MAGC, AD_SPEL, 0, 0 }, { AT_MAGC, AD_SPEL, 0, 0 },
  210. X!         { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  211. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_POISON, MR_POISON,
  212. X        M1_HUMANOID | M1_OMNIVORE,
  213. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_STALK | M2_HOSTILE | M2_NASTY |
  214. X--- 2355,2362 ----
  215. X        M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) },
  216. X      { "Thoth Amon", S_HUMAN, 16, 10, 0, 10, -14, (G_NOGEN | G_UNIQ),
  217. X        { { AT_MAGC, AD_SPEL, 0, 0 }, { AT_MAGC, AD_SPEL, 0, 0 },
  218. X!         { AT_WEAP, AD_PHYS, 1, 6 }, { AT_CLAW, AD_SAMU, 1, 4 },
  219. X!         NO_ATTK, NO_ATTK },
  220. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_POISON, MR_POISON,
  221. X        M1_HUMANOID | M1_OMNIVORE,
  222. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_STALK | M2_HOSTILE | M2_NASTY |
  223. X***************
  224. X*** 2360,2366 ****
  225. X        M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  226. X      { "Chromatic Dragon", S_DRAGON, 16, 10, 0, 30, -14, (G_NOGEN | G_UNIQ),
  227. X        { { AT_BREA, AD_RBRE, 6, 8 }, { AT_MAGC, AD_SPEL, 0, 0 },
  228. X!         { AT_BITE, AD_PHYS, 4, 8 }, { AT_BITE, AD_PHYS, 4, 8 },
  229. X          { AT_BITE, AD_PHYS, 4, 8 }, { AT_STNG, AD_PHYS, 1, 6 } },
  230. X        WT_DRAGON, 1700, 0, MS_NEMESIS, MZ_GIGANTIC,
  231. X        MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_POISON,
  232. X--- 2363,2369 ----
  233. X        M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  234. X      { "Chromatic Dragon", S_DRAGON, 16, 10, 0, 30, -14, (G_NOGEN | G_UNIQ),
  235. X        { { AT_BREA, AD_RBRE, 6, 8 }, { AT_MAGC, AD_SPEL, 0, 0 },
  236. X!         { AT_CLAW, AD_SAMU, 2, 8 }, { AT_BITE, AD_PHYS, 4, 8 },
  237. X          { AT_BITE, AD_PHYS, 4, 8 }, { AT_STNG, AD_PHYS, 1, 6 } },
  238. X        WT_DRAGON, 1700, 0, MS_NEMESIS, MZ_GIGANTIC,
  239. X        MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_POISON,
  240. X***************
  241. X*** 2371,2377 ****
  242. X        M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  243. X      { "Goblin King", S_ORC, 15, 10, MARM(10,4), 0, -15, (G_NOGEN | G_UNIQ),
  244. X        { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
  245. X!         NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  246. X        750, 350, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE,
  247. X        M2_NOPOLY | M2_ORC | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY |
  248. X        M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC,
  249. X--- 2374,2380 ----
  250. X        M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  251. X      { "Goblin King", S_ORC, 15, 10, MARM(10,4), 0, -15, (G_NOGEN | G_UNIQ),
  252. X        { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
  253. X!         { AT_CLAW, AD_SAMU, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  254. X        750, 350, 0, MS_NEMESIS, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE,
  255. X        M2_NOPOLY | M2_ORC | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY |
  256. X        M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC,
  257. X***************
  258. X*** 2378,2384 ****
  259. X        M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  260. X      { "Cyclops", S_GIANT, 18, 10, 0, 0, -15, (G_NOGEN | G_UNIQ),
  261. X        { { AT_WEAP, AD_PHYS, 4, 8 }, { AT_WEAP, AD_PHYS, 4, 8 },
  262. X!         NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  263. X        1900, 700, 0, MS_NEMESIS, MZ_HUGE, 0, 0,
  264. X        M1_HUMANOID | M1_OMNIVORE,
  265. X        M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK |
  266. X--- 2381,2387 ----
  267. X        M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  268. X      { "Cyclops", S_GIANT, 18, 10, 0, 0, -15, (G_NOGEN | G_UNIQ),
  269. X        { { AT_WEAP, AD_PHYS, 4, 8 }, { AT_WEAP, AD_PHYS, 4, 8 },
  270. X!         { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  271. X        1900, 700, 0, MS_NEMESIS, MZ_HUGE, 0, 0,
  272. X        M1_HUMANOID | M1_OMNIVORE,
  273. X        M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK |
  274. X***************
  275. X*** 2387,2393 ****
  276. X      { "Ixoth", S_DRAGON, 15, 9, -1, 20, -14, (G_NOGEN | G_UNIQ),
  277. X        { { AT_BREA, AD_FIRE, 8, 6 }, { AT_BITE, AD_PHYS, 4, 8 },
  278. X          { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_PHYS, 2, 4 },
  279. X!         { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK  },
  280. X        WT_DRAGON, 1600, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE, MR_FIRE,
  281. X        M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS,
  282. X        M2_NOPOLY | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_STALK |
  283. X--- 2390,2396 ----
  284. X      { "Ixoth", S_DRAGON, 15, 9, -1, 20, -14, (G_NOGEN | G_UNIQ),
  285. X        { { AT_BREA, AD_FIRE, 8, 6 }, { AT_BITE, AD_PHYS, 4, 8 },
  286. X          { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_PHYS, 2, 4 },
  287. X!         { AT_CLAW, AD_SAMU, 2, 4 }, NO_ATTK  },
  288. X        WT_DRAGON, 1600, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE, MR_FIRE,
  289. X        M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS,
  290. X        M2_NOPOLY | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_STALK |
  291. X***************
  292. X*** 2396,2409 ****
  293. X      { "Nalzok", S_DEMON, 16, 10, -2, 85, -127,
  294. X        (G_NOGEN | G_UNIQ | G_NOCORPSE),
  295. X        { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
  296. X!         { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK },
  297. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0,
  298. X        M1_FLY | M1_SEE_INVIS | M1_POIS,
  299. X        M2_NOPOLY | M2_DEMON | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK |
  300. X        M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) },
  301. X      { "Master Assassin", S_HUMAN, 15, 15, 0, 30, 18, (G_NOGEN | G_UNIQ),
  302. X!       { { AT_WEAP, AD_DRST, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK,
  303. X!         NO_ATTK, NO_ATTK, NO_ATTK },
  304. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0,
  305. X        M1_HUMANOID | M1_OMNIVORE,
  306. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY |
  307. X--- 2399,2413 ----
  308. X      { "Nalzok", S_DEMON, 16, 10, -2, 85, -127,
  309. X        (G_NOGEN | G_UNIQ | G_NOCORPSE),
  310. X        { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
  311. X!         { AT_MAGC, AD_SPEL, 0, 0 }, { AT_CLAW, AD_SAMU, 2, 6 },
  312. X!         NO_ATTK, NO_ATTK },
  313. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON, 0,
  314. X        M1_FLY | M1_SEE_INVIS | M1_POIS,
  315. X        M2_NOPOLY | M2_DEMON | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK |
  316. X        M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU, C(RED) },
  317. X      { "Master Assassin", S_HUMAN, 15, 15, 0, 30, 18, (G_NOGEN | G_UNIQ),
  318. X!       { { AT_WEAP, AD_DRST, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 8 },
  319. X!         { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  320. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0,
  321. X        M1_HUMANOID | M1_OMNIVORE,
  322. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY |
  323. X***************
  324. X*** 2412,2419 ****
  325. X      /* A renegade daimyo who led a 13 year civil war against the shogun */
  326. X      /* of his time. */
  327. X      { "Ashikaga Takauji", S_HUMAN, 15, 15, 0, 40, -13, (G_NOGEN | G_UNIQ),
  328. X!       { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK,
  329. X!         NO_ATTK, NO_ATTK, NO_ATTK },
  330. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0,
  331. X        M1_HUMANOID | M1_OMNIVORE,
  332. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_PNAME | M2_HOSTILE | M2_STALK |
  333. X--- 2416,2423 ----
  334. X      /* A renegade daimyo who led a 13 year civil war against the shogun */
  335. X      /* of his time. */
  336. X      { "Ashikaga Takauji", S_HUMAN, 15, 15, 0, 40, -13, (G_NOGEN | G_UNIQ),
  337. X!       { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
  338. X!         { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  339. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0,
  340. X        M1_HUMANOID | M1_OMNIVORE,
  341. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_PNAME | M2_HOSTILE | M2_STALK |
  342. X***************
  343. X*** 2423,2430 ****
  344. X  /*    NOTE: the Master of Thieves was defined above. */
  345. X  
  346. X      { "Lord Surtur", S_GIANT, 15, 12, 2, 50, 12, (G_NOGEN | G_UNIQ),
  347. X!       { { AT_WEAP, AD_PHYS, 2, 10 }, { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK,
  348. X!         NO_ATTK, NO_ATTK, NO_ATTK },
  349. X        2250, 850, 0, MS_NEMESIS, MZ_HUGE, MR_FIRE, MR_FIRE,
  350. X        M1_HUMANOID | M1_OMNIVORE,
  351. X        M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK |
  352. X--- 2427,2434 ----
  353. X  /*    NOTE: the Master of Thieves was defined above. */
  354. X  
  355. X      { "Lord Surtur", S_GIANT, 15, 12, 2, 50, 12, (G_NOGEN | G_UNIQ),
  356. X!       { { AT_WEAP, AD_PHYS, 2, 10 }, { AT_WEAP, AD_PHYS, 2, 10 },
  357. X!         { AT_CLAW, AD_SAMU, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  358. X        2250, 850, 0, MS_NEMESIS, MZ_HUGE, MR_FIRE, MR_FIRE,
  359. X        M1_HUMANOID | M1_OMNIVORE,
  360. X        M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK |
  361. X***************
  362. X*** 2432,2438 ****
  363. X        M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  364. X      { "Dark One", S_HUMAN, 15, 10, 0, 80, -10, (G_NOGEN | G_UNIQ),
  365. X        { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_MAGC, AD_SPEL, 0, 0 },
  366. X!         { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  367. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0,
  368. X        M1_HUMANOID | M1_OMNIVORE,
  369. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY |
  370. X--- 2436,2443 ----
  371. X        M3_WANTSARTI | M3_WAITFORU, C(HI_LORD) },
  372. X      { "Dark One", S_HUMAN, 15, 10, 0, 80, -10, (G_NOGEN | G_UNIQ),
  373. X        { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_MAGC, AD_SPEL, 0, 0 },
  374. X!         { AT_WEAP, AD_PHYS, 1, 6 }, { AT_CLAW, AD_SAMU, 1, 4 },
  375. X!         NO_ATTK, NO_ATTK },
  376. X        WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN, 0, 0,
  377. X        M1_HUMANOID | M1_OMNIVORE,
  378. X        M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY |
  379. X***************
  380. X*** 2467,2473 ****
  381. X        WT_ELF, 350, 0, MS_GUARDIAN, MZ_HUMAN, MR_SLEEP, MR_SLEEP,
  382. X        M1_HUMANOID | M1_OMNIVORE,
  383. X        M2_NOPOLY | M2_ELF | M2_PEACEFUL | M2_COLLECT, 0, C(HI_DOMESTIC) },
  384. X!     { "intern", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN,
  385. X        { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK,
  386. X          NO_ATTK, NO_ATTK, NO_ATTK },
  387. X        WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_POISON, MR_POISON,
  388. X--- 2472,2478 ----
  389. X        WT_ELF, 350, 0, MS_GUARDIAN, MZ_HUMAN, MR_SLEEP, MR_SLEEP,
  390. X        M1_HUMANOID | M1_OMNIVORE,
  391. X        M2_NOPOLY | M2_ELF | M2_PEACEFUL | M2_COLLECT, 0, C(HI_DOMESTIC) },
  392. X!     { "attendant", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN,
  393. X        { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK,
  394. X          NO_ATTK, NO_ATTK, NO_ATTK },
  395. X        WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_POISON, MR_POISON,
  396. X***************
  397. X*** 2506,2512 ****
  398. X      { "ronin", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN,
  399. X        { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
  400. X          NO_ATTK, NO_ATTK, NO_ATTK },
  401. X!       WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN, 0, 0,
  402. X        M1_HUMANOID | M1_OMNIVORE,
  403. X        M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT,
  404. X        0, C(HI_DOMESTIC) },
  405. X--- 2511,2517 ----
  406. X      { "ronin", S_HUMAN, 5, 10, 10, 10, 3, G_NOGEN,
  407. X        { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK,
  408. X          NO_ATTK, NO_ATTK, NO_ATTK },
  409. X!       WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN, 0, 0,
  410. X        M1_HUMANOID | M1_OMNIVORE,
  411. X        M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT,
  412. X        0, C(HI_DOMESTIC) },
  413. X*** /tmp/da08397    Thu Feb 25 10:24:14 1993
  414. X--- src/mthrowu.c    Wed Feb 17 09:17:26 1993
  415. X***************
  416. X*** 1,4 ****
  417. X! /*    SCCS Id: @(#)mthrowu.c    3.1    92/11/14    */
  418. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  419. X  /* NetHack may be freely redistributed.  See license for details. */
  420. X  
  421. X--- 1,4 ----
  422. X! /*    SCCS Id: @(#)mthrowu.c    3.1    93/02/14    */
  423. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  424. X  /* NetHack may be freely redistributed.  See license for details. */
  425. X  
  426. X***************
  427. X*** 22,28 ****
  428. X  /*
  429. X   * Keep consistent with breath weapons in zap.c, and AD_* in monattk.h.
  430. X   */
  431. X! STATIC_OVL const char NEARDATA *breathwep[] = {
  432. X                  "fragments",
  433. X                  "fire",
  434. X                  "frost",
  435. X--- 22,28 ----
  436. X  /*
  437. X   * Keep consistent with breath weapons in zap.c, and AD_* in monattk.h.
  438. X   */
  439. X! STATIC_OVL NEARDATA const char *breathwep[] = {
  440. X                  "fragments",
  441. X                  "fire",
  442. X                  "frost",
  443. X***************
  444. X*** 95,108 ****
  445. X            obj->otyp == ROCK))
  446. X          create = !rn2(3);
  447. X      else create = 1;
  448. X      if (create && !((mtmp = m_at(x, y)) && (mtmp->mtrapped) && 
  449. X              (t = t_at(x, y)) && ((t->ttyp == PIT) || 
  450. X!             (t->ttyp == SPIKED_PIT))) && 
  451. X!         !flooreffects(obj,x,y,"fall")) { /* don't double-dip on damage */
  452. X          place_object(obj, x, y);
  453. X          obj->nobj = fobj;
  454. X          fobj = obj;
  455. X          stackobj(fobj);
  456. X      } else obfree(obj, (struct obj*) 0);
  457. X  }
  458. X  
  459. X--- 95,110 ----
  460. X            obj->otyp == ROCK))
  461. X          create = !rn2(3);
  462. X      else create = 1;
  463. X+ 
  464. X      if (create && !((mtmp = m_at(x, y)) && (mtmp->mtrapped) && 
  465. X              (t = t_at(x, y)) && ((t->ttyp == PIT) || 
  466. X!             (t->ttyp == SPIKED_PIT)))) {
  467. X!         if (!flooreffects(obj,x,y,"fall")) { /* don't double-dip on damage */
  468. X          place_object(obj, x, y);
  469. X          obj->nobj = fobj;
  470. X          fobj = obj;
  471. X          stackobj(fobj);
  472. X+         }
  473. X      } else obfree(obj, (struct obj*) 0);
  474. X  }
  475. X  
  476. X***************
  477. X*** 160,167 ****
  478. X             && objects[singleobj->otyp].w_propellor)
  479. X              pline("%s misfires!", Monnam(mon));
  480. X          else
  481. X!             pline("The %s slips as %s throws it!",
  482. X!               xname(singleobj), mon_nam(mon));
  483. X          }
  484. X          dx = rn2(3)-1;
  485. X          dy = rn2(3)-1;
  486. X--- 162,169 ----
  487. X             && objects[singleobj->otyp].w_propellor)
  488. X              pline("%s misfires!", Monnam(mon));
  489. X          else
  490. X!             pline("%s slips as %s throws it!",
  491. X!               The(xname(singleobj)), mon_nam(mon));
  492. X          }
  493. X          dx = rn2(3)-1;
  494. X          dy = rn2(3)-1;
  495. X***************
  496. X*** 396,401 ****
  497. X--- 398,406 ----
  498. X          }
  499. X          prev = otmp;
  500. X      }
  501. X+ #ifdef MUSE
  502. X+     possibly_unwield(mon);
  503. X+ #endif
  504. X  }
  505. X  
  506. X  #endif /* OVLB */
  507. X*** /tmp/da08405    Thu Feb 25 10:24:16 1993
  508. X--- src/muse.c    Thu Feb 25 09:02:43 1993
  509. X***************
  510. X*** 1,4 ****
  511. X! /*    SCCS Id: @(#)muse.c    3.1    93/01/03    */
  512. X  /* Monster item usage routine.  Copyright (C) 1990 by Ken Arromdee */
  513. X  /* NetHack may be freely redistributed.  See license for details.  */
  514. X  
  515. X--- 1,4 ----
  516. X! /*    SCCS Id: @(#)muse.c    3.1    93/02/12    */
  517. X  /* Monster item usage routine.  Copyright (C) 1990 by Ken Arromdee */
  518. X  /* NetHack may be freely redistributed.  See license for details.  */
  519. X  
  520. X***************
  521. X*** 62,68 ****
  522. X          struct monst *mtmp;
  523. X  
  524. X          potion_descr = OBJ_DESCR(objects[obj->otyp]);
  525. X!         if (!strcmp(potion_descr, "milky") && !rn2(13)) {
  526. X          if (!enexto(&cc, mon->mx, mon->my, &mons[PM_GHOST])) return 0;
  527. X          mquaffmsg(mon, obj);
  528. X          m_useup(mon, obj);
  529. X--- 62,68 ----
  530. X          struct monst *mtmp;
  531. X  
  532. X          potion_descr = OBJ_DESCR(objects[obj->otyp]);
  533. X!         if (potion_descr && !strcmp(potion_descr, "milky") && !rn2(13)) {
  534. X          if (!enexto(&cc, mon->mx, mon->my, &mons[PM_GHOST])) return 0;
  535. X          mquaffmsg(mon, obj);
  536. X          m_useup(mon, obj);
  537. X***************
  538. X*** 82,88 ****
  539. X          }
  540. X          return 2;
  541. X          }
  542. X!         if (!strcmp(potion_descr, "smoky") && !rn2(13)) {
  543. X          if (!enexto(&cc, mon->mx, mon->my, &mons[PM_DJINNI])) return 0;
  544. X          mquaffmsg(mon, obj);
  545. X          m_useup(mon, obj);
  546. X--- 82,88 ----
  547. X          }
  548. X          return 2;
  549. X          }
  550. X!         if (potion_descr && !strcmp(potion_descr, "smoky") && !rn2(13)) {
  551. X          if (!enexto(&cc, mon->mx, mon->my, &mons[PM_DJINNI])) return 0;
  552. X          mquaffmsg(mon, obj);
  553. X          m_useup(mon, obj);
  554. X***************
  555. X*** 138,144 ****
  556. X  struct obj *otmp;
  557. X  boolean self;
  558. X  {
  559. X!     if (!cansee(mtmp->mx, mtmp->my)) {
  560. X  #ifdef SOUNDS
  561. X          if (flags.soundok)
  562. X  #endif
  563. X--- 138,144 ----
  564. X  struct obj *otmp;
  565. X  boolean self;
  566. X  {
  567. X!     if (!canseemon(mtmp)) {
  568. X  #ifdef SOUNDS
  569. X          if (flags.soundok)
  570. X  #endif
  571. X***************
  572. X*** 145,153 ****
  573. X              You("hear a distant zap.");
  574. X      } else if (self)
  575. X          pline("%s zaps %sself with %s!",
  576. X!             Monnam(mtmp),
  577. X!             gender(mtmp)==2 ? "it" : gender(mtmp) ? "her" : "him",
  578. X!             doname(otmp));
  579. X      else {
  580. X          pline("%s zaps %s!", Monnam(mtmp), an(xname(otmp)));
  581. X          stop_occupation();
  582. X--- 145,151 ----
  583. X              You("hear a distant zap.");
  584. X      } else if (self)
  585. X          pline("%s zaps %sself with %s!",
  586. X!               Monnam(mtmp), him[pronoun_gender(mtmp)], doname(otmp));
  587. X      else {
  588. X          pline("%s zaps %s!", Monnam(mtmp), an(xname(otmp)));
  589. X          stop_occupation();
  590. X***************
  591. X*** 159,170 ****
  592. X  struct monst *mtmp;
  593. X  struct obj *otmp;
  594. X  {
  595. X!     boolean vis = (cansee(mtmp->mx, mtmp->my));
  596. X  #ifdef SOUNDS
  597. X      if (flags.soundok)
  598. X  #endif
  599. X          otmp->dknown = 1;
  600. X!     if (!vis) {
  601. X  #ifdef SOUNDS
  602. X          if (flags.soundok)
  603. X  #endif
  604. X--- 157,168 ----
  605. X  struct monst *mtmp;
  606. X  struct obj *otmp;
  607. X  {
  608. X!     boolean vismon = (canseemon(mtmp));
  609. X  #ifdef SOUNDS
  610. X      if (flags.soundok)
  611. X  #endif
  612. X          otmp->dknown = 1;
  613. X!     if (!vismon) {
  614. X  #ifdef SOUNDS
  615. X          if (flags.soundok)
  616. X  #endif
  617. X***************
  618. X*** 174,185 ****
  619. X      } else pline("%s reads %s!", Monnam(mtmp), singular(otmp,doname));
  620. X      if (mtmp->mconf
  621. X  #ifdef SOUNDS
  622. X!         && (vis || flags.soundok)
  623. X  #endif
  624. X                      )
  625. X          pline("Being confused, %s mispronounces the magic words...",
  626. X!             vis ? mon_nam(mtmp) : gender(mtmp)==2 ? "it" :
  627. X!             gender(mtmp) ? "he" : "she");
  628. X  }
  629. X  
  630. X  static void
  631. X--- 172,182 ----
  632. X      } else pline("%s reads %s!", Monnam(mtmp), singular(otmp,doname));
  633. X      if (mtmp->mconf
  634. X  #ifdef SOUNDS
  635. X!         && (vismon || flags.soundok)
  636. X  #endif
  637. X                      )
  638. X          pline("Being confused, %s mispronounces the magic words...",
  639. X!               vismon ? mon_nam(mtmp) : he[pronoun_gender(mtmp)]);
  640. X  }
  641. X  
  642. X  static void
  643. X***************
  644. X*** 187,193 ****
  645. X  struct monst *mtmp;
  646. X  struct obj *otmp;
  647. X  {
  648. X!     if (cansee(mtmp->mx, mtmp->my)) {
  649. X          otmp->dknown = 1;
  650. X          pline("%s drinks %s!", Monnam(mtmp), singular(otmp, doname));
  651. X      } else
  652. X--- 184,190 ----
  653. X  struct monst *mtmp;
  654. X  struct obj *otmp;
  655. X  {
  656. X!     if (canseemon(mtmp)) {
  657. X          otmp->dknown = 1;
  658. X          pline("%s drinks %s!", Monnam(mtmp), singular(otmp, doname));
  659. X      } else
  660. X***************
  661. X*** 239,244 ****
  662. X--- 236,242 ----
  663. X      int x=mtmp->mx, y=mtmp->my;
  664. X      boolean stuck = (mtmp == u.ustuck);
  665. X      boolean immobile = (mtmp->data->mmove == 0);
  666. X+     int fraction;
  667. X  
  668. X      if (mtmp->mpeaceful || is_animal(mtmp->data) || mindless(mtmp->data))
  669. X          return 0;
  670. X***************
  671. X*** 245,252 ****
  672. X      if (u.uswallow && stuck) return 0;
  673. X      if(dist2(x, y, mtmp->mux, mtmp->muy) > 25)
  674. X          return 0;
  675. X      if(mtmp->mhp >= mtmp->mhpmax ||
  676. X!             (mtmp->mhp >= 10 && mtmp->mhp*5 >= mtmp->mhpmax))
  677. X          return 0;
  678. X  
  679. X      m.defensive = (struct obj *)0;
  680. X--- 243,252 ----
  681. X      if (u.uswallow && stuck) return 0;
  682. X      if(dist2(x, y, mtmp->mux, mtmp->muy) > 25)
  683. X          return 0;
  684. X+ 
  685. X+     fraction = u.ulevel < 10 ? 5 : u.ulevel < 14 ? 4 : 3;
  686. X      if(mtmp->mhp >= mtmp->mhpmax ||
  687. X!             (mtmp->mhp >= 10 && mtmp->mhp*fraction >= mtmp->mhpmax))
  688. X          return 0;
  689. X  
  690. X      m.defensive = (struct obj *)0;
  691. X***************
  692. X*** 264,271 ****
  693. X              m.has_defense = MUSE_UP_LADDER;
  694. X          if (x == xdnladder && y == ydnladder)
  695. X              m.has_defense = MUSE_DN_LADDER;
  696. X!     } else if (sstairs.sx &&
  697. X!            sstairs.sx == mtmp->mx && sstairs.sy == mtmp->my) {
  698. X          m.has_defense = MUSE_SSTAIRS;
  699. X      } else if (!stuck && !immobile) {
  700. X      /* Note: trapdoors take precedence over teleport traps. */
  701. X--- 264,270 ----
  702. X              m.has_defense = MUSE_UP_LADDER;
  703. X          if (x == xdnladder && y == ydnladder)
  704. X              m.has_defense = MUSE_DN_LADDER;
  705. X!     } else if (sstairs.sx && sstairs.sx == x && sstairs.sy == y) {
  706. X          m.has_defense = MUSE_SSTAIRS;
  707. X      } else if (!stuck && !immobile) {
  708. X      /* Note: trapdoors take precedence over teleport traps. */
  709. X***************
  710. X*** 316,346 ****
  711. X          }
  712. X      }
  713. X  #endif
  714. X!     if (m.has_defense == MUSE_UPSTAIRS ||
  715. X!             m.has_defense == MUSE_DOWNSTAIRS ||
  716. X!             m.has_defense == MUSE_UP_LADDER ||
  717. X!             m.has_defense == MUSE_DN_LADDER ||
  718. X!             m.has_defense == MUSE_SSTAIRS ||
  719. X! #ifdef ARMY
  720. X!             m.has_defense == MUSE_BUGLE ||
  721. X! #endif
  722. X!             m.has_defense == MUSE_TRAPDOOR)
  723. X          goto botm;
  724. X  #define nomore(x) if(m.has_defense==x) continue;
  725. X      for (obj = mtmp->minvent; obj; obj = obj->nobj) {
  726. X          /* nomore(MUSE_WAN_DIGGING); */
  727. X          if (m.has_defense == MUSE_WAN_DIGGING) break;
  728. X          if (obj->otyp == WAN_DIGGING && obj->spe > 0 && !stuck
  729. X              && !mtmp->isshk && !mtmp->isgd && !mtmp->ispriest
  730. X              && !is_floater(mtmp->data)
  731. X! #ifdef MULDGN
  732. X!             && !Is_knox(&u.uz)
  733. X! #endif
  734. X!             && !In_endgame(&u.uz)) {
  735. X              m.defensive = obj;
  736. X              m.has_defense = MUSE_WAN_DIGGING;
  737. X          }
  738. X-         nomore(MUSE_TELEPORT_TRAP);
  739. X          nomore(MUSE_WAN_TELEPORTATION_SELF);
  740. X          nomore(MUSE_WAN_TELEPORTATION);
  741. X          if(obj->otyp == WAN_TELEPORTATION && obj->spe > 0) {
  742. X--- 315,340 ----
  743. X          }
  744. X      }
  745. X  #endif
  746. X!     /* use immediate physical escape prior to attempting magic */
  747. X!     if (m.has_defense)    /* stairs, trapdoor or tele-trap, bugle alert */
  748. X          goto botm;
  749. X+ 
  750. X  #define nomore(x) if(m.has_defense==x) continue;
  751. X      for (obj = mtmp->minvent; obj; obj = obj->nobj) {
  752. X+         /* don't always use the same selection pattern */
  753. X+         if (m.has_defense && !rn2(3)) break;
  754. X+ 
  755. X          /* nomore(MUSE_WAN_DIGGING); */
  756. X          if (m.has_defense == MUSE_WAN_DIGGING) break;
  757. X          if (obj->otyp == WAN_DIGGING && obj->spe > 0 && !stuck
  758. X              && !mtmp->isshk && !mtmp->isgd && !mtmp->ispriest
  759. X              && !is_floater(mtmp->data)
  760. X!             /* digging wouldn't be effective; assume they know that */
  761. X!             && !(Is_botlevel(&u.uz) || In_endgame(&u.uz))
  762. X!             && !(is_ice(x,y) || is_pool(x,y) || is_lava(x,y))) {
  763. X              m.defensive = obj;
  764. X              m.has_defense = MUSE_WAN_DIGGING;
  765. X          }
  766. X          nomore(MUSE_WAN_TELEPORTATION_SELF);
  767. X          nomore(MUSE_WAN_TELEPORTATION);
  768. X          if(obj->otyp == WAN_TELEPORTATION && obj->spe > 0) {
  769. X***************
  770. X*** 353,359 ****
  771. X          if(obj->otyp == SCR_TELEPORTATION && mtmp->mcansee
  772. X             && haseyes(mtmp->data)
  773. X             && (!obj->cursed ||
  774. X!                (!mtmp->isshk && !mtmp->isgd && !mtmp->ispriest))) {
  775. X              m.defensive = obj;
  776. X              m.has_defense = MUSE_SCR_TELEPORTATION;
  777. X          }
  778. X--- 347,354 ----
  779. X          if(obj->otyp == SCR_TELEPORTATION && mtmp->mcansee
  780. X             && haseyes(mtmp->data)
  781. X             && (!obj->cursed ||
  782. X!                (!(mtmp->isshk && inhishop(mtmp)) 
  783. X!                 && !mtmp->isgd && !mtmp->ispriest))) {
  784. X              m.defensive = obj;
  785. X              m.has_defense = MUSE_SCR_TELEPORTATION;
  786. X          }
  787. X***************
  788. X*** 394,400 ****
  789. X      struct obj *otmp = m.defensive;
  790. X      boolean vis = cansee(mtmp->mx, mtmp->my);
  791. X      boolean vismon = canseemon(mtmp);
  792. X!     boolean oseen = otmp && (otmp->oclass == SCROLL_CLASS || vis);
  793. X  
  794. X      if ((i = precheck(mtmp, otmp)) != 0) return i;
  795. X      switch(m.has_defense) {
  796. X--- 389,395 ----
  797. X      struct obj *otmp = m.defensive;
  798. X      boolean vis = cansee(mtmp->mx, mtmp->my);
  799. X      boolean vismon = canseemon(mtmp);
  800. X!     boolean oseen = otmp && vismon;
  801. X  
  802. X      if ((i = precheck(mtmp, otmp)) != 0) return i;
  803. X      switch(m.has_defense) {
  804. X***************
  805. X*** 403,413 ****
  806. X          if (canseemon(mtmp))
  807. X              pline("%s plays %s!", Monnam(mtmp), doname(otmp));
  808. X          else if (flags.soundok)
  809. X!             You("hear the sound of a bugle!");
  810. X          awaken_soldiers();
  811. X          return 2;
  812. X  #endif
  813. X      case MUSE_WAN_TELEPORTATION_SELF:
  814. X          mzapmsg(mtmp, otmp, TRUE);
  815. X          otmp->spe--;
  816. X          if (oseen) makeknown(WAN_TELEPORTATION);
  817. X--- 398,410 ----
  818. X          if (canseemon(mtmp))
  819. X              pline("%s plays %s!", Monnam(mtmp), doname(otmp));
  820. X          else if (flags.soundok)
  821. X!             You("hear a bugle playing reveille!");
  822. X          awaken_soldiers();
  823. X          return 2;
  824. X  #endif
  825. X      case MUSE_WAN_TELEPORTATION_SELF:
  826. X+         if ((mtmp->isshk && inhishop(mtmp)) 
  827. X+                || mtmp->isgd || mtmp->ispriest) return 2;
  828. X          mzapmsg(mtmp, otmp, TRUE);
  829. X          otmp->spe--;
  830. X          if (oseen) makeknown(WAN_TELEPORTATION);
  831. X***************
  832. X*** 440,445 ****
  833. X--- 437,443 ----
  834. X          {
  835. X          int obj_is_cursed = otmp->cursed;
  836. X  
  837. X+         if (mtmp->isshk || mtmp->isgd || mtmp->ispriest) return 2;
  838. X          mreadmsg(mtmp, otmp);
  839. X          m_useup(mtmp, otmp);    /* otmp might be free'ed */
  840. X          if (oseen) makeknown(SCR_TELEPORTATION);
  841. X***************
  842. X*** 452,461 ****
  843. X              }
  844. X              if (Is_botlevel(&u.uz)) goto mon_tele;
  845. X              else {
  846. X!                 int nlev;
  847. X                  d_level flev;
  848. X  
  849. X!                 if (rn2(5)) nlev = rnd((int)depth(&u.uz) + 3);
  850. X                  else {
  851. X                  pline("%s shudders for a moment.",
  852. X                              Monnam(mtmp));
  853. X--- 450,459 ----
  854. X              }
  855. X              if (Is_botlevel(&u.uz)) goto mon_tele;
  856. X              else {
  857. X!                 int nlev = max(depth(&u.uz), 0);
  858. X                  d_level flev;
  859. X  
  860. X!                 if (rn2(5)) nlev = rnd(nlev + 3);
  861. X                  else {
  862. X                  pline("%s shudders for a moment.",
  863. X                              Monnam(mtmp));
  864. X***************
  865. X*** 703,708 ****
  866. X--- 701,712 ----
  867. X          return 0;
  868. X      if (u.uswallow) return 0;
  869. X      if (in_your_sanctuary(mtmp->mx, mtmp->my)) return 0;
  870. X+     if (dmgtype(mtmp->data, AD_HEAL) && !uwep
  871. X+ #ifdef TOURIST
  872. X+         && !uarmu
  873. X+ #endif
  874. X+         && !uarm && !uarmh && !uarms && !uarmg && !uarmc && !uarmf)
  875. X+         return 0;
  876. X  
  877. X      if (!ranged_stuff) return 0;
  878. X  #define nomore(x) if(m.has_offense==x) continue;
  879. X***************
  880. X*** 862,867 ****
  881. X--- 866,877 ----
  882. X          bhitpos.x += ddx;
  883. X          bhitpos.y += ddy;
  884. X          x = bhitpos.x; y = bhitpos.y;
  885. X+ 
  886. X+         if (!isok(x,y)) {
  887. X+             bhitpos.x -= ddx;
  888. X+             bhitpos.y -= ddy;
  889. X+             break;
  890. X+         }
  891. X          if (find_drawbridge(&x,&y))
  892. X              switch (obj->otyp) {
  893. X              case WAN_STRIKING:
  894. X***************
  895. X*** 916,923 ****
  896. X  {
  897. X      int i;
  898. X      struct obj *otmp = m.offensive;
  899. X!     boolean vis = cansee(mtmp->mx, mtmp->my);
  900. X!     boolean oseen = otmp && (otmp->oclass == SCROLL_CLASS || vis);
  901. X  
  902. X      if ((i = precheck(mtmp, otmp)) != 0) return i;
  903. X      switch(m.has_offense) {
  904. X--- 926,932 ----
  905. X  {
  906. X      int i;
  907. X      struct obj *otmp = m.offensive;
  908. X!     boolean oseen = otmp && canseemon(mtmp);
  909. X  
  910. X      if ((i = precheck(mtmp, otmp)) != 0) return i;
  911. X      switch(m.has_offense) {
  912. X***************
  913. X*** 948,953 ****
  914. X--- 957,965 ----
  915. X          return 2;
  916. X  #if 0
  917. X      case MUSE_SCR_FIRE:
  918. X+           {
  919. X+         boolean vis = cansee(mtmp->mx, mtmp->my);
  920. X+ 
  921. X          mreadmsg(mtmp, otmp);
  922. X          if (mtmp->mconf) {
  923. X              if (vis)
  924. X***************
  925. X*** 983,988 ****
  926. X--- 995,1001 ----
  927. X              }
  928. X          }
  929. X          return 2;
  930. X+           }
  931. X  #endif
  932. X      case MUSE_POT_PARALYSIS:
  933. X      case MUSE_POT_BLINDNESS:
  934. X***************
  935. X*** 1149,1155 ****
  936. X      struct obj *otmp = m.misc;
  937. X      boolean vis = cansee(mtmp->mx, mtmp->my);
  938. X      boolean vismon = canseemon(mtmp);
  939. X!     boolean oseen = otmp && (otmp->oclass == SCROLL_CLASS || vis);
  940. X  
  941. X      if ((i = precheck(mtmp, otmp)) != 0) return i;
  942. X      switch(m.has_misc) {
  943. X--- 1162,1168 ----
  944. X      struct obj *otmp = m.misc;
  945. X      boolean vis = cansee(mtmp->mx, mtmp->my);
  946. X      boolean vismon = canseemon(mtmp);
  947. X!     boolean oseen = otmp && vismon;
  948. X  
  949. X      if ((i = precheck(mtmp, otmp)) != 0) return i;
  950. X      switch(m.has_misc) {
  951. X***************
  952. X*** 1204,1212 ****
  953. X      case MUSE_POT_INVISIBILITY:
  954. X          mquaffmsg(mtmp, otmp);
  955. X          if (vis) pline("Gee, all of a sudden %s can't see %sself.",
  956. X!             mon_nam(mtmp),
  957. X!             humanoid(mtmp->data) ? (mtmp->female ? "her" : "him")
  958. X!                          : "it");
  959. X          if (oseen) makeknown(POT_INVISIBILITY);
  960. X          mtmp->minvis = 1;
  961. X          newsym(mtmp->mx,mtmp->my);
  962. X--- 1217,1223 ----
  963. X      case MUSE_POT_INVISIBILITY:
  964. X          mquaffmsg(mtmp, otmp);
  965. X          if (vis) pline("Gee, all of a sudden %s can't see %sself.",
  966. X!                    mon_nam(mtmp), him[pronoun_gender(mtmp)]);
  967. X          if (oseen) makeknown(POT_INVISIBILITY);
  968. X          mtmp->minvis = 1;
  969. X          newsym(mtmp->mx,mtmp->my);
  970. X***************
  971. X*** 1302,1322 ****
  972. X       * the monster and strong monsters won't use it at all...
  973. X       */
  974. X      if (difficulty < 6 && !rn2(30)) return WAN_POLYMORPH;
  975. X  
  976. X!     switch (rn2(7)) {
  977. X!         case 0: case 1:
  978. X              if (mtmp->isgd) return 0;
  979. X!             return POT_SPEED;
  980. X!         case 2:
  981. X              if (mtmp->mpeaceful && !See_invisible) return 0;
  982. X!             return WAN_MAKE_INVISIBLE;
  983. X!         case 3:
  984. X!             if (mtmp->mpeaceful && !See_invisible) return 0;
  985. X!             return POT_INVISIBILITY;
  986. X!         case 4:
  987. X!             if (mtmp->isgd) return 0;
  988. X!             return WAN_SPEED_MONSTER;
  989. X!         case 5: case 6:
  990. X              return POT_GAIN_LEVEL;
  991. X      }
  992. X      /*NOTREACHED*/
  993. X--- 1313,1329 ----
  994. X       * the monster and strong monsters won't use it at all...
  995. X       */
  996. X      if (difficulty < 6 && !rn2(30)) return WAN_POLYMORPH;
  997. X+     
  998. X+     if (!rn2(40)) return AMULET_OF_LIFE_SAVING;
  999. X  
  1000. X!     switch (rn2(3)) {
  1001. X!         case 0:
  1002. X              if (mtmp->isgd) return 0;
  1003. X!             return rn2(4) ? POT_SPEED : WAN_SPEED_MONSTER;
  1004. X!         case 1:
  1005. X              if (mtmp->mpeaceful && !See_invisible) return 0;
  1006. X!             return rn2(4) ? POT_INVISIBILITY : WAN_MAKE_INVISIBLE;
  1007. X!         case 2:
  1008. X              return POT_GAIN_LEVEL;
  1009. X      }
  1010. X      /*NOTREACHED*/
  1011. X***************
  1012. X*** 1350,1355 ****
  1013. X--- 1357,1366 ----
  1014. X          || typ == POT_BLINDNESS
  1015. X          || typ == POT_CONFUSION
  1016. X          || (typ == PICK_AXE && needspick(mon->data))
  1017. X+         || typ == AMULET_OF_REFLECTION
  1018. X+         || typ == AMULET_OF_LIFE_SAVING
  1019. X+         || ((mon->misc_worn_check & W_ARMG) && typ == CORPSE
  1020. X+             && obj->corpsenm == PM_COCKATRICE)
  1021. X      );
  1022. X  }
  1023. X  #endif
  1024. X*** /tmp/da08413    Thu Feb 25 10:24:19 1993
  1025. X--- src/music.c    Tue Feb 23 11:00:28 1993
  1026. X***************
  1027. X*** 22,28 ****
  1028. X   *            level.
  1029. X   * (leather) drum    Will awaken monsters like the horn.
  1030. X   * drum of earthquake    Will initiate an earthquake whose intensity depends
  1031. X!  *            on player level.  That is, it creates ramdom pits
  1032. X   *            called here chasms.
  1033. X   */
  1034. X  
  1035. X--- 22,28 ----
  1036. X   *            level.
  1037. X   * (leather) drum    Will awaken monsters like the horn.
  1038. X   * drum of earthquake    Will initiate an earthquake whose intensity depends
  1039. X!  *            on player level.  That is, it creates random pits
  1040. X   *            called here chasms.
  1041. X   */
  1042. X  
  1043. X***************
  1044. X*** 136,142 ****
  1045. X          if (canseemon(mtmp))
  1046. X              pline("%s is now ready for battle!", Monnam(mtmp));
  1047. X          else
  1048. X!             Norep("You hear the sound of battle gear being readied.");
  1049. X          }
  1050. X          mtmp = mtmp->nmon;
  1051. X      }
  1052. X--- 136,142 ----
  1053. X          if (canseemon(mtmp))
  1054. X              pline("%s is now ready for battle!", Monnam(mtmp));
  1055. X          else
  1056. X!             Norep("You hear the rattle of battle gear being readied.");
  1057. X          }
  1058. X          mtmp = mtmp->nmon;
  1059. X      }
  1060. X***************
  1061. X*** 247,252 ****
  1062. X--- 247,256 ----
  1063. X                  pline("%s falls into a chasm!", Monnam(mtmp));
  1064. X                  else if (flags.soundok && humanoid(mtmp->data))
  1065. X                  You("hear a scream!");
  1066. X+ #ifdef MUSE
  1067. X+                 mselftouch(mtmp, "Falling, ", TRUE);
  1068. X+                 if (mtmp->mhp > 0)
  1069. X+ #endif
  1070. X                  if ((mtmp->mhp -= rnd(6)) <= 0) {
  1071. X                  if(!cansee(x,y))
  1072. X                      pline("It is destroyed!");
  1073. X***************
  1074. X*** 301,306 ****
  1075. X--- 305,313 ----
  1076. X      mac_speaker ( instr , "C" ) ;
  1077. X  #endif
  1078. X  
  1079. X+ #ifdef AMIGA
  1080. X+     amii_speaker ( instr , "Cw", AMII_OKAY_VOLUME ) ;
  1081. X+ #endif
  1082. X      if (Confusion)
  1083. X        pline("What you produce is quite far from music...");
  1084. X      else
  1085. X***************
  1086. X*** 425,431 ****
  1087. X  
  1088. X      if ((fd = open("/dev/speaker", 1)) != -1)
  1089. X      {
  1090. X!     /* emit a prefix to modify instrumental `timbre' */
  1091. X      switch (instr->otyp)
  1092. X      {
  1093. X      case WOODEN_FLUTE:
  1094. X--- 432,438 ----
  1095. X  
  1096. X      if ((fd = open("/dev/speaker", 1)) != -1)
  1097. X      {
  1098. X!     /* send a prefix to modify instrumental `timbre' */
  1099. X      switch (instr->otyp)
  1100. X      {
  1101. X      case WOODEN_FLUTE:
  1102. X***************
  1103. X*** 472,478 ****
  1104. X--- 479,488 ----
  1105. X      }
  1106. X      if (c == 'n') {
  1107. X      getlin("What tune are you playing? [what 5 notes]", buf);
  1108. X+ #ifndef    AMIGA
  1109. X+     /* The AMIGA supports two octaves of notes */
  1110. X      for (s=buf; *s; s++) *s = highc(*s);
  1111. X+ #endif
  1112. X      You("extract a strange sound from %s!", the(xname(instr)));
  1113. X  #ifdef SYSV386MUSIC 
  1114. X      /* if user is at the console, play through the console speaker */
  1115. X***************
  1116. X*** 481,486 ****
  1117. X--- 491,509 ----
  1118. X  #endif /* SYSV386MUSIC */
  1119. X  #ifdef MAC
  1120. X      mac_speaker ( instr , buf ) ;
  1121. X+ #endif
  1122. X+ #ifdef AMIGA
  1123. X+     {
  1124. X+         char nbuf[ 20 ];
  1125. X+         int i;
  1126. X+         for( i = 0; buf[i] && i < 5; ++i )
  1127. X+         {
  1128. X+             nbuf[ i*2 ] = buf[ i ];
  1129. X+             nbuf[ (i*2)+1 ] = 'h';
  1130. X+         }
  1131. X+         nbuf[ i*2 ] = 0;
  1132. X+         amii_speaker ( instr , nbuf, AMII_OKAY_VOLUME ) ;
  1133. X+     }
  1134. X  #endif
  1135. X      /* Check if there was the Stronghold drawbridge near
  1136. X       * and if the tune conforms to what we're waiting for.
  1137. X*** /tmp/da08421    Thu Feb 25 10:24:21 1993
  1138. X--- src/o_init.c    Fri Feb 12 10:25:44 1993
  1139. X***************
  1140. X*** 20,26 ****
  1141. X      POTION_CLASS, SCROLL_CLASS, WAND_CLASS,
  1142. X      SPBOOK_CLASS, RING_CLASS, GEM_CLASS, 0 };
  1143. X  
  1144. X! static short NEARDATA disco[TOTAL_OBJS] = DUMMY;
  1145. X  
  1146. X  int
  1147. X  letindex(acls) register char acls; {
  1148. X--- 20,26 ----
  1149. X      POTION_CLASS, SCROLL_CLASS, WAND_CLASS,
  1150. X      SPBOOK_CLASS, RING_CLASS, GEM_CLASS, 0 };
  1151. X  
  1152. X! static NEARDATA short disco[TOTAL_OBJS] = DUMMY;
  1153. X  
  1154. X  int
  1155. X  letindex(acls) register char acls; {
  1156. X*** /tmp/da08429    Thu Feb 25 10:24:23 1993
  1157. X--- src/objects.c    Tue Feb 23 15:29:07 1993
  1158. X***************
  1159. X*** 27,37 ****
  1160. X  /*    the ctnr field of BITS currently does not map into struct objclass,
  1161. X   *    and is ignored in the expansion */
  1162. X  
  1163. X! struct objdescr NEARDATA obj_descr[] = {
  1164. X  #else
  1165. X  /* second pass -- object definitions */
  1166. X  
  1167. X! # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,big,dir,mtrl) nmkn,mrg,uskn,mgc,chrg,uniq,big,dir,mtrl /* SCO ODT 1.1 cpp fodder */
  1168. X  /* SCO's version of MSC 5.x barfs on the line above without a trailing space */
  1169. X  
  1170. X  #ifdef TEXTCOLOR
  1171. X--- 27,37 ----
  1172. X  /*    the ctnr field of BITS currently does not map into struct objclass,
  1173. X   *    and is ignored in the expansion */
  1174. X  
  1175. X! NEARDATA struct objdescr obj_descr[] = {
  1176. X  #else
  1177. X  /* second pass -- object definitions */
  1178. X  
  1179. X! # define BITS(nmkn,mrg,uskn,ctnr,mgc,chrg,uniq,nwsh,big,dir,mtrl) nmkn,mrg,uskn,mgc,chrg,uniq,nwsh,big,dir,mtrl /* SCO ODT 1.1 cpp fodder */
  1180. X  /* SCO's version of MSC 5.x barfs on the line above without a trailing space */
  1181. X  
  1182. X  #ifdef TEXTCOLOR
  1183. X***************
  1184. X*** 44,66 ****
  1185. X       prob, wt, cost, sdam, ldam, oc1, oc2, nut}
  1186. X  #endif
  1187. X  
  1188. X! struct objclass NEARDATA objects[] = {
  1189. X  #endif
  1190. X  /* dummy object[0] -- description [2nd arg] *must* be NULL */
  1191. X!     OBJECT(OBJ("strange object",NULL), BITS(1,0,0,0,0,0,0,0,0,0), 0,
  1192. X              ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
  1193. X  
  1194. X  /* weapons ... */
  1195. X  #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,metal,color) OBJECT( \
  1196. X!         OBJ(name,app), BITS(kn,mg,1,0,0,1,0,bi,0,metal), 0, \
  1197. X          WEAPON_CLASS, prob, 0, \
  1198. X          wt, cost, sdam, ldam, hitbon, 0, wt, color )
  1199. X  #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \
  1200. X!         OBJ(name,app), BITS(kn,1,1,0,0,1,0,0,0,metal), 0, \
  1201. X          WEAPON_CLASS, prob, 0, \
  1202. X          wt, cost, sdam, ldam, hitbon, prop, wt, color )
  1203. X  #define BOW(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \
  1204. X!         OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,metal), 0, \
  1205. X          WEAPON_CLASS, prob, 0, \
  1206. X          wt, cost, sdam, ldam, hitbon, -(prop), wt, color )
  1207. X  
  1208. X--- 44,66 ----
  1209. X       prob, wt, cost, sdam, ldam, oc1, oc2, nut}
  1210. X  #endif
  1211. X  
  1212. X! NEARDATA struct objclass objects[] = {
  1213. X  #endif
  1214. X  /* dummy object[0] -- description [2nd arg] *must* be NULL */
  1215. X!     OBJECT(OBJ("strange object",NULL), BITS(1,0,0,0,0,0,0,0,0,0,0), 0,
  1216. X              ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
  1217. X  
  1218. X  /* weapons ... */
  1219. X  #define WEAPON(name,app,kn,mg,bi,prob,wt,cost,sdam,ldam,hitbon,metal,color) OBJECT( \
  1220. X!         OBJ(name,app), BITS(kn,mg,1,0,0,1,0,0,bi,0,metal), 0, \
  1221. X          WEAPON_CLASS, prob, 0, \
  1222. X          wt, cost, sdam, ldam, hitbon, 0, wt, color )
  1223. X  #define PROJECTILE(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \
  1224. X!         OBJ(name,app), BITS(kn,1,1,0,0,1,0,0,0,0,metal), 0, \
  1225. X          WEAPON_CLASS, prob, 0, \
  1226. X          wt, cost, sdam, ldam, hitbon, prop, wt, color )
  1227. X  #define BOW(name,app,kn,prob,wt,cost,sdam,ldam,hitbon,metal,prop,color) OBJECT( \
  1228. X!         OBJ(name,app), BITS(kn,0,1,0,0,1,0,0,0,0,metal), 0, \
  1229. X          WEAPON_CLASS, prob, 0, \
  1230. X          wt, cost, sdam, ldam, hitbon, -(prop), wt, color )
  1231. X  
  1232. X***************
  1233. X*** 202,208 ****
  1234. X   * Some creatures are vulnerable to SILVER.
  1235. X   */
  1236. X  #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) OBJECT( \
  1237. X!         OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,blk,0,metal), power, \
  1238. X          ARMOR_CLASS, prob, delay, wt, cost, \
  1239. X          0, 0, 10 - ac, can, wt, c )
  1240. X  
  1241. X--- 202,208 ----
  1242. X   * Some creatures are vulnerable to SILVER.
  1243. X   */
  1244. X  #define ARMOR(name,desc,kn,mgc,blk,power,prob,delay,wt,cost,ac,can,metal,c) OBJECT( \
  1245. X!         OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,blk,0,metal), power, \
  1246. X          ARMOR_CLASS, prob, delay, wt, cost, \
  1247. X          0, 0, 10 - ac, can, wt, c )
  1248. X  
  1249. X***************
  1250. X*** 372,378 ****
  1251. X  
  1252. X  /* rings ... */
  1253. X  #define RING(name,stone,power,cost,mgc,spec,metal,color) OBJECT( \
  1254. X!         OBJ(name,stone), BITS(0,0,spec,0,mgc,spec,0,0,0,metal), \
  1255. X          power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
  1256. X  RING("adornment",         "wooden",     ADORNED,        100, 0, 1, WOOD,     HI_WOOD),
  1257. X  RING("gain strength",     "granite",    0,              150, 1, 1, MINERAL,  HI_MINERAL),
  1258. X--- 372,378 ----
  1259. X  
  1260. X  /* rings ... */
  1261. X  #define RING(name,stone,power,cost,mgc,spec,metal,color) OBJECT( \
  1262. X!         OBJ(name,stone), BITS(0,0,spec,0,mgc,spec,0,0,0,0,metal), \
  1263. X          power, RING_CLASS, 0, 0, 3, cost, 0, 0, 0, 0, 15, color )
  1264. X  RING("adornment",         "wooden",     ADORNED,        100, 0, 1, WOOD,     HI_WOOD),
  1265. X  RING("gain strength",     "granite",    0,              150, 1, 1, MINERAL,  HI_MINERAL),
  1266. X***************
  1267. X*** 407,413 ****
  1268. X  
  1269. X  /* amulets ... - THE Amulet comes last because it is special */
  1270. X  #define AMULET(name,desc,power,prob) OBJECT( \
  1271. X!         OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,IRON), power, \
  1272. X          AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )
  1273. X  
  1274. X  AMULET("amulet of ESP",           "circular",   TELEPAT,    180),
  1275. X--- 407,413 ----
  1276. X  
  1277. X  /* amulets ... - THE Amulet comes last because it is special */
  1278. X  #define AMULET(name,desc,power,prob) OBJECT( \
  1279. X!         OBJ(name,desc), BITS(0,0,0,0,1,0,0,0,0,0,IRON), power, \
  1280. X          AMULET_CLASS, prob, 0, 20, 150, 0, 0, 0, 0, 20, HI_METAL )
  1281. X  
  1282. X  AMULET("amulet of ESP",           "circular",   TELEPAT,    180),
  1283. X***************
  1284. X*** 420,428 ****
  1285. X  AMULET("amulet of reflection",    "hexagonal",  REFLECTING,  80),
  1286. X  AMULET("amulet of magical breathing", "octagonal",    MAGICAL_BREATHING, 70),
  1287. X  OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",
  1288. X!     "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,PLASTIC), 0,
  1289. X      AMULET_CLASS, 0, 0, 20,    0, 0, 0, 0, 0,  1, HI_METAL),
  1290. X! OBJECT(OBJ("Amulet of Yendor",NULL), BITS(1,0,1,0,1,0,1,0,0,MITHRIL), 0,
  1291. X      AMULET_CLASS, 0, 0, 20, 3500, 0, 0, 0, 0, 20, HI_METAL),
  1292. X  #undef AMULET
  1293. X  
  1294. X--- 420,428 ----
  1295. X  AMULET("amulet of reflection",    "hexagonal",  REFLECTING,  80),
  1296. X  AMULET("amulet of magical breathing", "octagonal",    MAGICAL_BREATHING, 70),
  1297. X  OBJECT(OBJ("cheap plastic imitation of the Amulet of Yendor",
  1298. X!     "Amulet of Yendor"), BITS(0,0,1,0,0,0,0,0,0,0,PLASTIC), 0,
  1299. X      AMULET_CLASS, 0, 0, 20,    0, 0, 0, 0, 0,  1, HI_METAL),
  1300. X! OBJECT(OBJ("Amulet of Yendor",NULL), BITS(1,0,1,0,1,0,1,1,0,0,MITHRIL), 0,
  1301. X      AMULET_CLASS, 0, 0, 20, 3500, 0, 0, 0, 0, 20, HI_METAL),
  1302. X  #undef AMULET
  1303. X  
  1304. X***************
  1305. X*** 429,443 ****
  1306. X  /* tools ... */
  1307. X  /* tools with weapon characteristics come last */
  1308. X  #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,material,color) OBJECT( \
  1309. X!         OBJ(name,desc), BITS(kn,mrg,chg,0,mgc,chg,0,0,0,material), 0, \
  1310. X          TOOL_CLASS, prob, 0, \
  1311. X          wt, cost, 0, 0, 0, 0, wt, color )
  1312. X  #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,material,color) OBJECT( \
  1313. X!         OBJ(name,desc), BITS(kn,0,chg,1,mgc,chg,0,0,0,material), 0, \
  1314. X          TOOL_CLASS, prob, 0, \
  1315. X          wt, cost, 0, 0, 0, 0, wt, color )
  1316. X  #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,material,color) OBJECT( \
  1317. X!         OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,bi,0,material), 0, \
  1318. X          TOOL_CLASS, prob, 0, \
  1319. X          wt, cost, sdam, ldam, hitbon, 0, wt, color )
  1320. X  /* containers */
  1321. X--- 429,443 ----
  1322. X  /* tools ... */
  1323. X  /* tools with weapon characteristics come last */
  1324. X  #define TOOL(name,desc,kn,mrg,mgc,chg,prob,wt,cost,material,color) OBJECT( \
  1325. X!         OBJ(name,desc), BITS(kn,mrg,chg,0,mgc,chg,0,0,0,0,material), 0, \
  1326. X          TOOL_CLASS, prob, 0, \
  1327. X          wt, cost, 0, 0, 0, 0, wt, color )
  1328. X  #define CONTAINER(name,desc,kn,mgc,chg,prob,wt,cost,material,color) OBJECT( \
  1329. X!         OBJ(name,desc), BITS(kn,0,chg,1,mgc,chg,0,0,0,0,material), 0, \
  1330. X          TOOL_CLASS, prob, 0, \
  1331. X          wt, cost, 0, 0, 0, 0, wt, color )
  1332. X  #define WEPTOOL(name,desc,kn,mgc,bi,prob,wt,cost,sdam,ldam,hitbon,material,color) OBJECT( \
  1333. X!         OBJ(name,desc), BITS(kn,0,1,0,mgc,1,0,0,bi,0,material), 0, \
  1334. X          TOOL_CLASS, prob, 0, \
  1335. X          wt, cost, sdam, ldam, hitbon, 0, wt, color )
  1336. X  /* containers */
  1337. X***************
  1338. X*** 516,525 ****
  1339. X              12, 12, 0,    BONE, WHITE),
  1340. X  /* two special, one of each kind, "tools" */
  1341. X  OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),
  1342. X!         BITS(0,0,1,0,1,0,1,0,0,GOLD), 0,
  1343. X          TOOL_CLASS, 0, 0,10, 3000, 0, 0, 0, 0, 200, HI_GOLD),
  1344. X  OBJECT(OBJ("Bell of Opening", "silver bell"),
  1345. X!         BITS(0,0,1,0,1,0,1,0,0,SILVER), 0,
  1346. X          TOOL_CLASS, 0, 0,10, 1000, 0, 0, 0, 0, 50, HI_SILVER),
  1347. X  #undef TOOL
  1348. X  #undef WEPTOOL
  1349. X--- 516,525 ----
  1350. X              12, 12, 0,    BONE, WHITE),
  1351. X  /* two special, one of each kind, "tools" */
  1352. X  OBJECT(OBJ("Candelabrum of Invocation", "candelabrum"),
  1353. X!         BITS(0,0,1,0,1,0,1,1,0,0,GOLD), 0,
  1354. X          TOOL_CLASS, 0, 0,10, 3000, 0, 0, 0, 0, 200, HI_GOLD),
  1355. X  OBJECT(OBJ("Bell of Opening", "silver bell"),
  1356. X!         BITS(0,0,1,0,1,0,1,1,0,0,SILVER), 0,
  1357. X          TOOL_CLASS, 0, 0,10, 1000, 0, 0, 0, 0, 50, HI_SILVER),
  1358. X  #undef TOOL
  1359. X  #undef WEPTOOL
  1360. X***************
  1361. X*** 526,532 ****
  1362. X  
  1363. X  /* comestibles ... */
  1364. X  #define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) OBJECT( \
  1365. X!         OBJ(name,NULL), BITS(1,1,uk,0,0,0,0,0,0,tin), 0, \
  1366. X          FOOD_CLASS, prob, delay, \
  1367. X          wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )
  1368. X  /* all types of food (except tins & corpses) must have a delay of at least 1. */
  1369. X--- 526,532 ----
  1370. X  
  1371. X  /* comestibles ... */
  1372. X  #define FOOD(name,prob,delay,wt,uk,tin,nutrition,color) OBJECT( \
  1373. X!         OBJ(name,NULL), BITS(1,1,uk,0,0,0,0,0,0,0,tin), 0, \
  1374. X          FOOD_CLASS, prob, delay, \
  1375. X          wt, nutrition/20 + 5, 0, 0, 0, 0, nutrition, color )
  1376. X  /* all types of food (except tins & corpses) must have a delay of at least 1. */
  1377. X***************
  1378. X*** 574,580 ****
  1379. X  
  1380. X  /* potions ... */
  1381. X  #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \
  1382. X!         OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,GLASS), power, \
  1383. X          POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )
  1384. X  POTION("gain ability",      "ruby",           1, 0,          45, 300, RED),
  1385. X  POTION("restore ability",   "pink",           1, 0,          45, 100, BRIGHT_MAGENTA),
  1386. X--- 574,580 ----
  1387. X  
  1388. X  /* potions ... */
  1389. X  #define POTION(name,desc,mgc,power,prob,cost,color) OBJECT( \
  1390. X!         OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,0,0,GLASS), power, \
  1391. X          POTION_CLASS, prob, 0, 20, cost, 0, 0, 0, 0, 10, color )
  1392. X  POTION("gain ability",      "ruby",           1, 0,          45, 300, RED),
  1393. X  POTION("restore ability",   "pink",           1, 0,          45, 100, BRIGHT_MAGENTA),
  1394. X***************
  1395. X*** 601,607 ****
  1396. X  
  1397. X  /* scrolls ... */
  1398. X  #define SCROLL(name,text,mgc,prob,cost) OBJECT( \
  1399. X!         OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,PAPER), 0, \
  1400. X          SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )
  1401. X      SCROLL("enchant armor",         "ZELGO MER",            1,  63,  80),
  1402. X      SCROLL("destroy armor",         "JUYED AWK YACC",       1,  45, 100),
  1403. X--- 601,607 ----
  1404. X  
  1405. X  /* scrolls ... */
  1406. X  #define SCROLL(name,text,mgc,prob,cost) OBJECT( \
  1407. X!         OBJ(name,text), BITS(0,1,0,0,mgc,0,0,0,0,0,PAPER), 0, \
  1408. X          SCROLL_CLASS, prob, 0, 5, cost, 0, 0, 0, 0, 6, HI_PAPER )
  1409. X      SCROLL("enchant armor",         "ZELGO MER",            1,  63,  80),
  1410. X      SCROLL("destroy armor",         "JUYED AWK YACC",       1,  45, 100),
  1411. X***************
  1412. X*** 637,643 ****
  1413. X  
  1414. X  /* spellbooks ... */
  1415. X  #define SPELL(name,desc,prob,delay,level,mgc,dir,color) OBJECT( \
  1416. X!         OBJ(name,desc), BITS(0,1,0,0,mgc,0,0,0,dir,PAPER), 0, \
  1417. X          SPBOOK_CLASS, prob, delay, \
  1418. X          50, level*100, 0, 0, 0, level, 20, color )
  1419. X  SPELL("dig",             "parchment",   22,  6, 5, 1, RAY,       HI_PAPER),
  1420. X--- 637,643 ----
  1421. X  
  1422. X  /* spellbooks ... */
  1423. X  #define SPELL(name,desc,prob,delay,level,mgc,dir,color) OBJECT( \
  1424. X!         OBJ(name,desc), BITS(0,0,0,0,mgc,0,0,0,0,dir,PAPER), 0, \
  1425. X          SPBOOK_CLASS, prob, delay, \
  1426. X          50, level*100, 0, 0, 0, level, 20, color )
  1427. X  SPELL("dig",             "parchment",   22,  6, 5, 1, RAY,       HI_PAPER),
  1428. X***************
  1429. X*** 682,694 ****
  1430. X  /* blank spellbook must come last because it retains its description */
  1431. X  SPELL("blank paper",     "plain",       20,  0, 0, 0, 0,         HI_PAPER),
  1432. X  /* a special, one of a kind, spellbook */
  1433. X! OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,0,0,PAPER), 0,
  1434. X      SPBOOK_CLASS, 0, 0,20, 3500, 0, 0, 0, 7, 20, HI_PAPER),
  1435. X  #undef SPELL
  1436. X  
  1437. X  /* wands ... */
  1438. X  #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \
  1439. X!         OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,dir,metal), 0, WAND_CLASS, \
  1440. X          prob, 0, 7, cost, 0, 0, 0, 0, 30, color )
  1441. X  WAND("light",           "glass",        95, 100, 1, NODIR,     GLASS,    HI_GLASS),
  1442. X  WAND("secret door detection", "balsa",  50, 150, 1, NODIR,     WOOD,     HI_WOOD),
  1443. X--- 682,694 ----
  1444. X  /* blank spellbook must come last because it retains its description */
  1445. X  SPELL("blank paper",     "plain",       20,  0, 0, 0, 0,         HI_PAPER),
  1446. X  /* a special, one of a kind, spellbook */
  1447. X! OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,PAPER), 0,
  1448. X      SPBOOK_CLASS, 0, 0,20, 3500, 0, 0, 0, 7, 20, HI_PAPER),
  1449. X  #undef SPELL
  1450. X  
  1451. X  /* wands ... */
  1452. X  #define WAND(name,typ,prob,cost,mgc,dir,metal,color) OBJECT( \
  1453. X!         OBJ(name,typ), BITS(0,0,1,0,mgc,1,0,0,0,dir,metal), 0, WAND_CLASS, \
  1454. X          prob, 0, 7, cost, 0, 0, 0, 0, 30, color )
  1455. X  WAND("light",           "glass",        95, 100, 1, NODIR,     GLASS,    HI_GLASS),
  1456. X  WAND("secret door detection", "balsa",  50, 150, 1, NODIR,     WOOD,     HI_WOOD),
  1457. X***************
  1458. X*** 720,726 ****
  1459. X  
  1460. X  /* coins ... - so far, gold is all there is */
  1461. X  #define COIN(name,prob,metal) OBJECT( \
  1462. X!         OBJ(name,NULL), BITS(0,1,0,0,0,0,0,0,0,metal), 0, \
  1463. X          GOLD_CLASS, prob, 0, 1, 0, 0, 0, 0, 0, 0, HI_GOLD )
  1464. X      COIN("gold piece",      1000, GOLD),
  1465. X  #undef COIN
  1466. X--- 720,726 ----
  1467. X  
  1468. X  /* coins ... - so far, gold is all there is */
  1469. X  #define COIN(name,prob,metal) OBJECT( \
  1470. X!         OBJ(name,NULL), BITS(0,1,0,0,0,0,0,0,0,0,metal), 0, \
  1471. X          GOLD_CLASS, prob, 0, 1, 0, 0, 0, 0, 0, 0, HI_GOLD )
  1472. X      COIN("gold piece",      1000, GOLD),
  1473. X  #undef COIN
  1474. X***************
  1475. X*** 727,736 ****
  1476. X  
  1477. X  /* gems ... - includes stones but not boulders */
  1478. X  #define GEM(name,desc,prob,wt,gval,nutr,glass,color) OBJECT( \
  1479. X!         OBJ(name,desc), BITS(0,1,0,0,0,0,0,0,0,glass), 0, \
  1480. X          GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, WP_SLING, nutr, color )
  1481. X  #define ROCK(name,desc,kn,prob,wt,gval,mgc,nutr,glass,color) OBJECT( \
  1482. X!         OBJ(name,desc), BITS(kn,1,0,0,mgc,0,0,0,0,glass), 0, \
  1483. X          GEM_CLASS, prob, 0, wt, gval, 3, 3, 0, WP_SLING, nutr, color )
  1484. X  GEM("dilithium crystal", "white",        3, 1, 4500, 15, GEMSTONE, WHITE),
  1485. X  GEM("diamond", "white",                  4, 1, 4000, 15, GEMSTONE, WHITE),
  1486. X--- 727,736 ----
  1487. X  
  1488. X  /* gems ... - includes stones but not boulders */
  1489. X  #define GEM(name,desc,prob,wt,gval,nutr,glass,color) OBJECT( \
  1490. X!         OBJ(name,desc), BITS(0,1,0,0,0,0,0,0,0,0,glass), 0, \
  1491. X          GEM_CLASS, prob, 0, 1, gval, 3, 3, 0, WP_SLING, nutr, color )
  1492. X  #define ROCK(name,desc,kn,prob,wt,gval,mgc,nutr,glass,color) OBJECT( \
  1493. X!         OBJ(name,desc), BITS(kn,1,0,0,mgc,0,0,0,0,0,glass), 0, \
  1494. X          GEM_CLASS, prob, 0, wt, gval, 3, 3, 0, WP_SLING, nutr, color )
  1495. X  GEM("dilithium crystal", "white",        3, 1, 4500, 15, GEMSTONE, WHITE),
  1496. X  GEM("diamond", "white",                  4, 1, 4000, 15, GEMSTONE, WHITE),
  1497. X***************
  1498. X*** 765,788 ****
  1499. X   * probabilities only come into effect when you try to polymorph them.
  1500. X   * Boulders and statues weigh more than MAX_CARR_CAP.
  1501. X   */
  1502. X! OBJECT(OBJ("boulder",NULL), BITS(1,0,0,0,0,0,0,1,0,MINERAL), 0,
  1503. X          ROCK_CLASS,   100, 0, 6000,  0, 20, 20, 0, 0, 2000, HI_MINERAL),
  1504. X! OBJECT(OBJ("statue", NULL), BITS(1,0,0,1,0,0,0,0,0,MINERAL), 0,
  1505. X!         ROCK_CLASS,   900, 0, 2500,  0, 20, 20, 0, 0, 2500, HI_MINERAL),
  1506. X! OBJECT(OBJ("heavy iron ball", NULL), BITS(1,0,0,0,0,0,0,0,0,IRON), 0,
  1507. X          BALL_CLASS,  1000, 0,  480, 10,  0,  0, 0, 0,  200, HI_METAL),
  1508. X! OBJECT(OBJ("iron chain", NULL), BITS(1,0,0,0,0,0,0,0,0,IRON), 0,
  1509. X          CHAIN_CLASS, 1000, 0,  120,  0,  0,  0, 0, 0,  200, HI_METAL),
  1510. X  OBJECT(OBJ("blinding venom", "splash of venom"),
  1511. X!         BITS(0,1,0,0,0,0,0,0,0,LIQUID), 0,
  1512. X          VENOM_CLASS,  500, 0,     1,  0,  0,  0, 0, 0,     0, HI_ORGANIC),
  1513. X  OBJECT(OBJ("acid venom", "splash of venom"),
  1514. X!         BITS(0,1,0,0,0,0,0,0,0,LIQUID), 0,
  1515. X          VENOM_CLASS,  500, 0,     1,  0,  6,  6, 0, 0,     0, HI_ORGANIC),
  1516. X          /* +d6 small or large */
  1517. X  
  1518. X  /* fencepost -- name [1st arg] *must* be NULL */
  1519. X!     OBJECT(OBJ(NULL,NULL), BITS(0,0,0,0,0,0,0,0,0,0), 0,
  1520. X          ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1521. X  }; /* objects[] */
  1522. X  
  1523. X--- 765,788 ----
  1524. X   * probabilities only come into effect when you try to polymorph them.
  1525. X   * Boulders and statues weigh more than MAX_CARR_CAP.
  1526. X   */
  1527. X! OBJECT(OBJ("boulder",NULL), BITS(1,0,0,0,0,0,0,0,1,0,MINERAL), 0,
  1528. X          ROCK_CLASS,   100, 0, 6000,  0, 20, 20, 0, 0, 2000, HI_MINERAL),
  1529. X! OBJECT(OBJ("statue", NULL), BITS(1,0,0,1,0,0,0,0,0,0,MINERAL), 0,
  1530. X!         ROCK_CLASS,   900, 0, 2500,  0, 20, 20, 0, 0, 2500, WHITE),
  1531. X! OBJECT(OBJ("heavy iron ball", NULL), BITS(1,0,0,0,0,0,0,0,0,0,IRON), 0,
  1532. X          BALL_CLASS,  1000, 0,  480, 10,  0,  0, 0, 0,  200, HI_METAL),
  1533. X! OBJECT(OBJ("iron chain", NULL), BITS(1,0,0,0,0,0,0,0,0,0,IRON), 0,
  1534. X          CHAIN_CLASS, 1000, 0,  120,  0,  0,  0, 0, 0,  200, HI_METAL),
  1535. X  OBJECT(OBJ("blinding venom", "splash of venom"),
  1536. X!         BITS(0,1,0,0,0,0,0,1,0,0,LIQUID), 0,
  1537. X          VENOM_CLASS,  500, 0,     1,  0,  0,  0, 0, 0,     0, HI_ORGANIC),
  1538. X  OBJECT(OBJ("acid venom", "splash of venom"),
  1539. X!         BITS(0,1,0,0,0,0,0,1,0,0,LIQUID), 0,
  1540. X          VENOM_CLASS,  500, 0,     1,  0,  6,  6, 0, 0,     0, HI_ORGANIC),
  1541. X          /* +d6 small or large */
  1542. X  
  1543. X  /* fencepost -- name [1st arg] *must* be NULL */
  1544. X!     OBJECT(OBJ(NULL,NULL), BITS(0,0,0,0,0,0,0,0,0,0,0), 0,
  1545. X          ILLOBJ_CLASS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  1546. X  }; /* objects[] */
  1547. X  
  1548. X
  1549. END_OF_FILE
  1550. if test 55751 -ne `wc -c <'patches01f'`; then
  1551.     echo shar: \"'patches01f'\" unpacked with wrong size!
  1552. fi
  1553. # end of 'patches01f'
  1554. echo shar: End of archive 4 \(of 31\).
  1555. cp /dev/null ark4isdone
  1556. MISSING=""
  1557. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ; do
  1558.     if test ! -f ark${I}isdone ; then
  1559.     MISSING="${MISSING} ${I}"
  1560.     fi
  1561. done
  1562. if test "${MISSING}" = "" ; then
  1563.     echo You have unpacked all 31 archives.
  1564.     echo "Now execute 'patchit.sh'"
  1565.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1566. else
  1567.     echo You still need to unpack the following archives:
  1568.     echo "        " ${MISSING}
  1569. fi
  1570. ##  End of shell archive.
  1571. exit 0
  1572.