home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume16 / nethck31 / patch2o < prev    next >
Encoding:
Internet Message Format  |  1993-06-15  |  61.3 KB

  1. Path: uunet!news.tek.com!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v17i090:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch2o/33
  5. Date: 11 Jun 1993 00:12:10 GMT
  6. Organization: Tektronix, Inc, Redmond, OR, USA
  7. Lines: 1982
  8. Approved: billr@saab.CNA.TEK.COM
  9. Message-ID: <1v8ikq$j35@ying.cna.tek.com>
  10. NNTP-Posting-Host: saab.cna.tek.com
  11. Xref: uunet comp.sources.games:1778
  12.  
  13. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  14. Posting-number: Volume 17, Issue 90
  15. Archive-name: nethack31/Patch2o
  16. Patch-To: nethack31: Volume 16, Issue 1-116
  17. Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11
  18.  
  19.  
  20.  
  21. #! /bin/sh
  22. # This is a shell archive.  Remove anything before this line, then unpack
  23. # it by saving it into a file and typing "sh file".  To overwrite existing
  24. # files, type "sh file -c".  You can also feed this as standard input via
  25. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  26. # will see the following message at the end:
  27. #        "End of archive 15 (of 33)."
  28. # Contents:  patches02e sys/mac/NHrez.hqx
  29. # Wrapped by billr@saab on Thu Jun 10 16:55:03 1993
  30. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  31. if test -f 'patches02e' -a "${1}" != "-c" ; then 
  32.   echo shar: Renaming existing file \"'patches02e'\" to \"'patches02e.orig'\"
  33.   mv -f 'patches02e' 'patches02e.orig'
  34. fi
  35. echo shar: Extracting \"'patches02e'\" \(54556 characters\)
  36. sed "s/^X//" >'patches02e' <<'END_OF_FILE'
  37. X*** /tmp/da11082    Tue Jun  1 16:14:11 1993
  38. X--- src/mhitu.c    Tue May 11 11:15:17 1993
  39. X***************
  40. X*** 1,4 ****
  41. X! /*    SCCS Id: @(#)mhitu.c    3.1    93/02/09    */
  42. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  43. X  /* NetHack may be freely redistributed.  See license for details. */
  44. X  
  45. X--- 1,4 ----
  46. X! /*    SCCS Id: @(#)mhitu.c    3.1    93/03/14    */
  47. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  48. X  /* NetHack may be freely redistributed.  See license for details. */
  49. X  
  50. X***************
  51. X*** 429,434 ****
  52. X--- 429,435 ----
  53. X          }
  54. X          return (0);
  55. X      }
  56. X+ 
  57. X  #ifdef MUSE
  58. X      /* Unlike defensive stuff, don't let them use item _and_ attack. */
  59. X      /* Exception:  Medusa; her gaze is automatic.  (We actually kludge
  60. X***************
  61. X*** 607,615 ****
  62. X              break;
  63. X          }
  64. X          if(flags.botl) bot();
  65. X!         if(sum[i] == 2)  return(1);      /* attacker dead */
  66. X          if(sum[i] == 3) break;  /* attacker teleported, no more attacks */
  67. X-         /* sum[i] == 1: successful attack */
  68. X          /* sum[i] == 0: unsuccessful attack */
  69. X      }
  70. X      return(0);
  71. X--- 608,622 ----
  72. X              break;
  73. X          }
  74. X          if(flags.botl) bot();
  75. X!     /* give player a chance of waking up before dying -kaa */
  76. X!         if(sum[i] == 1) {        /* successful attack */
  77. X!         if (u.usleep && !rn2(10)) {
  78. X!             multi = -1;
  79. X!             nomovemsg = "The combat suddenly awakens you.";
  80. X!         }
  81. X!         }
  82. X!         if(sum[i] == 2)  return(1);     /* attacker dead */
  83. X          if(sum[i] == 3) break;  /* attacker teleported, no more attacks */
  84. X          /* sum[i] == 0: unsuccessful attack */
  85. X      }
  86. X      return(0);
  87. X***************
  88. X*** 706,712 ****
  89. X      } else {
  90. X          if (!Sick) You("feel very sick.");
  91. X          exercise(A_CON, FALSE);
  92. X!         make_sick(Sick + (long)rn1(25-ACURR(A_CON),15),FALSE);
  93. X          u.usick_cause = mdat->mname;
  94. X          return TRUE;
  95. X      }
  96. X--- 713,719 ----
  97. X      } else {
  98. X          if (!Sick) You("feel very sick.");
  99. X          exercise(A_CON, FALSE);
  100. X!         make_sick(Sick ? Sick/4 + 1L : (long)rn1(ACURR(A_CON), 20), FALSE);
  101. X          u.usick_cause = mdat->mname;
  102. X          return TRUE;
  103. X      }
  104. X***************
  105. X*** 1051,1057 ****
  106. X  #ifdef POLYSELF
  107. X                  && !is_swimmer(uasmon)
  108. X  #endif
  109. X!                 && !Magical_breathing
  110. X                 ) {
  111. X                  boolean moat = (levl[u.ux][u.uy].typ != POOL) &&
  112. X                  (levl[u.ux][u.uy].typ != WATER) &&
  113. X--- 1058,1064 ----
  114. X  #ifdef POLYSELF
  115. X                  && !is_swimmer(uasmon)
  116. X  #endif
  117. X!                 && !Amphibious
  118. X                 ) {
  119. X                  boolean moat = (levl[u.ux][u.uy].typ != POOL) &&
  120. X                  (levl[u.ux][u.uy].typ != WATER) &&
  121. X***************
  122. X*** 1109,1115 ****
  123. X              else
  124. X      pline("%s makes some remarks about how difficult theft is lately.",
  125. X      Monnam(mtmp));
  126. X!             rloc(mtmp);
  127. X              return 3;
  128. X          } else
  129. X  #endif
  130. X--- 1116,1122 ----
  131. X              else
  132. X      pline("%s makes some remarks about how difficult theft is lately.",
  133. X      Monnam(mtmp));
  134. X!             if (!tele_restrict(mtmp)) rloc(mtmp);
  135. X              return 3;
  136. X          } else
  137. X  #endif
  138. X***************
  139. X*** 1121,1127 ****
  140. X                  flags.female ? "unaffected" : "uninterested");
  141. X              }
  142. X              if(rn2(3)) {
  143. X!             rloc(mtmp);
  144. X              return 3;
  145. X              }
  146. X          } else {
  147. X--- 1128,1134 ----
  148. X                  flags.female ? "unaffected" : "uninterested");
  149. X              }
  150. X              if(rn2(3)) {
  151. X!             if (!tele_restrict(mtmp)) rloc(mtmp);
  152. X              return 3;
  153. X              }
  154. X          } else {
  155. X***************
  156. X*** 1131,1137 ****
  157. X                case 0:
  158. X              break;
  159. X                default:
  160. X!             rloc(mtmp);
  161. X              mtmp->mflee = 1;
  162. X              return 3;
  163. X              }
  164. X--- 1138,1144 ----
  165. X                case 0:
  166. X              break;
  167. X                default:
  168. X!             if (!tele_restrict(mtmp)) rloc(mtmp);
  169. X              mtmp->mflee = 1;
  170. X              return 3;
  171. X              }
  172. X***************
  173. X*** 1214,1224 ****
  174. X  #endif
  175. X                  exercise(A_STR, TRUE);
  176. X                  exercise(A_CON, TRUE);
  177. X              flags.botl = 1;
  178. X              if (mtmp->mhp == 0)
  179. X                  return 2; /* mongone() was called above */
  180. X              if(!rn2(50)) {
  181. X!                 rloc(mtmp);
  182. X                  return 3;
  183. X              }
  184. X              dmg = 0;
  185. X--- 1221,1232 ----
  186. X  #endif
  187. X                  exercise(A_STR, TRUE);
  188. X                  exercise(A_CON, TRUE);
  189. X+             if (Sick) make_sick(0L, FALSE);
  190. X              flags.botl = 1;
  191. X              if (mtmp->mhp == 0)
  192. X                  return 2; /* mongone() was called above */
  193. X              if(!rn2(50)) {
  194. X!                 if (!tele_restrict(mtmp)) rloc(mtmp);
  195. X                  return 3;
  196. X              }
  197. X              dmg = 0;
  198. X***************
  199. X*** 1794,1800 ****
  200. X  doseduce(mon)
  201. X  register struct monst *mon;
  202. X  {
  203. X!     register struct obj *ring;
  204. X      boolean fem = (mon->data == &mons[PM_SUCCUBUS]); /* otherwise incubus */
  205. X      char qbuf[QBUFSZ];
  206. X  
  207. X--- 1802,1808 ----
  208. X  doseduce(mon)
  209. X  register struct monst *mon;
  210. X  {
  211. X!     register struct obj *ring, *nring;
  212. X      boolean fem = (mon->data == &mons[PM_SUCCUBUS]); /* otherwise incubus */
  213. X      char qbuf[QBUFSZ];
  214. X  
  215. X***************
  216. X*** 1814,1820 ****
  217. X      if (Blind) pline("It caresses you...");
  218. X      else You("feel very attracted to %s.", mon_nam(mon));
  219. X  
  220. X!     for(ring = invent; ring; ring = ring->nobj) {
  221. X          if (ring->otyp != RIN_ADORNMENT) continue;
  222. X          if (fem) {
  223. X          if (rn2(20) < ACURR(A_CHA)) {
  224. X--- 1822,1829 ----
  225. X      if (Blind) pline("It caresses you...");
  226. X      else You("feel very attracted to %s.", mon_nam(mon));
  227. X  
  228. X!     for(ring = invent; ring; ring = nring) {
  229. X!         nring = ring->nobj;
  230. X          if (ring->otyp != RIN_ADORNMENT) continue;
  231. X          if (fem) {
  232. X          if (rn2(20) < ACURR(A_CHA)) {
  233. X***************
  234. X*** 1899,1905 ****
  235. X      if (uarm || uarmc) {
  236. X          verbalize("You're such a %s; I wish...",
  237. X                  flags.female ? "sweet lady" : "nice guy");
  238. X!         rloc(mon);
  239. X          return 1;
  240. X      }
  241. X      if (u.ualign.type == A_CHAOTIC && u.ualign.record < ALIGNLIM)
  242. X--- 1908,1914 ----
  243. X      if (uarm || uarmc) {
  244. X          verbalize("You're such a %s; I wish...",
  245. X                  flags.female ? "sweet lady" : "nice guy");
  246. X!         if (!tele_restrict(mon)) rloc(mon);
  247. X          return 1;
  248. X      }
  249. X      if (u.ualign.type == A_CHAOTIC && u.ualign.record < ALIGNLIM)
  250. X***************
  251. X*** 1992,1998 ****
  252. X      if (mon->mtame) /* don't charge */ ;
  253. X      else if (rn2(20) < ACURR(A_CHA)) {
  254. X          pline("%s demands that you pay %s, but you refuse...",
  255. X!             Monnam(mon), (fem ? "her" : "him"));
  256. X      }
  257. X  #ifdef POLYSELF
  258. X      else if (u.umonnum == PM_LEPRECHAUN)
  259. X--- 2001,2007 ----
  260. X      if (mon->mtame) /* don't charge */ ;
  261. X      else if (rn2(20) < ACURR(A_CHA)) {
  262. X          pline("%s demands that you pay %s, but you refuse...",
  263. X!             Monnam(mon), him[fem]);
  264. X      }
  265. X  #ifdef POLYSELF
  266. X      else if (u.umonnum == PM_LEPRECHAUN)
  267. X***************
  268. X*** 2021,2027 ****
  269. X          }
  270. X      }
  271. X      if (!rn2(25)) mon->mcan = 1; /* monster is worn out */
  272. X!     rloc(mon);
  273. X      return 1;
  274. X  }
  275. X  
  276. X--- 2030,2036 ----
  277. X          }
  278. X      }
  279. X      if (!rn2(25)) mon->mcan = 1; /* monster is worn out */
  280. X!     if (!tele_restrict(mon)) rloc(mon);
  281. X      return 1;
  282. X  }
  283. X  
  284. X***************
  285. X*** 2134,2141 ****
  286. X      /* These affect the enemy only if you are still a monster */
  287. X      if (rn2(3)) switch(uasmon->mattk[i].adtyp) {
  288. X          case AD_PLYS: /* Floating eye */
  289. X          if (u.umonnum == PM_FLOATING_EYE) {
  290. X!             if (!rn2(4)) tmp = 120;
  291. X              if (mtmp->mcansee && haseyes(mtmp->data) && rn2(3) &&
  292. X                  (perceives(mdat) || !Invis)) {
  293. X              if (Blind)
  294. X--- 2143,2151 ----
  295. X      /* These affect the enemy only if you are still a monster */
  296. X      if (rn2(3)) switch(uasmon->mattk[i].adtyp) {
  297. X          case AD_PLYS: /* Floating eye */
  298. X+         if (tmp > 127) tmp = 127;
  299. X          if (u.umonnum == PM_FLOATING_EYE) {
  300. X!             if (!rn2(4)) tmp = 127;
  301. X              if (mtmp->mcansee && haseyes(mtmp->data) && rn2(3) &&
  302. X                  (perceives(mdat) || !Invis)) {
  303. X              if (Blind)
  304. X***************
  305. X*** 2142,2147 ****
  306. X--- 2152,2162 ----
  307. X                  pline("As a blind %s, you cannot defend yourself.",
  308. X                              uasmon->mname);
  309. X                  else {
  310. X+ #ifdef MUSE
  311. X+                 if (mon_reflects(mtmp, 
  312. X+                         "Your gaze is reflected by %s %s."))
  313. X+                 return 1;
  314. X+ #endif
  315. X                  pline("%s is frozen by your gaze!", Monnam(mtmp));
  316. X                  mtmp->mcanmove = 0;
  317. X                  mtmp->mfrozen = tmp;
  318. X*** /tmp/da11130    Tue Jun  1 16:14:28 1993
  319. X--- src/mkroom.c    Tue Apr  6 15:46:24 1993
  320. X***************
  321. X*** 1,4 ****
  322. X! /*    SCCS Id: @(#)mkroom.c    3.1    92/11/14    */
  323. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  324. X  /* NetHack may be freely redistributed.  See license for details. */
  325. X  
  326. X--- 1,4 ----
  327. X! /*    SCCS Id: @(#)mkroom.c    3.1    93/04/04    */
  328. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  329. X  /* NetHack may be freely redistributed.  See license for details. */
  330. X  
  331. X***************
  332. X*** 363,368 ****
  333. X--- 363,369 ----
  334. X            if(enexto(mm, mm->x, mm->y, mdat))
  335. X             (void) makemon(mdat, mm->x, mm->y);
  336. X      }
  337. X+     level.flags.graveyard = TRUE;    /* reduced chance for undead corpse */
  338. X  }
  339. X  
  340. X  static struct permonst *
  341. X***************
  342. X*** 618,625 ****
  343. X  };
  344. X  
  345. X  static struct permonst *
  346. X! squadmon() {        /* return soldier types. */
  347. X! 
  348. X      register struct permonst *ptr;
  349. X      register int    i, cpro, sel_prob = rnd(80+level_difficulty());
  350. X  
  351. X--- 619,626 ----
  352. X  };
  353. X  
  354. X  static struct permonst *
  355. X! squadmon()        /* return soldier types. */
  356. X! {
  357. X      register struct permonst *ptr;
  358. X      register int    i, cpro, sel_prob = rnd(80+level_difficulty());
  359. X  
  360. X***************
  361. X*** 634,640 ****
  362. X      if(!(ptr->geno & (G_GENOD | G_EXTINCT)))  return(ptr);
  363. X      else                return((struct permonst *) 0);
  364. X  }
  365. X! #endif /* ARMY /* */
  366. X  
  367. X  /* 
  368. X   * save_room : A recursive function that saves a room and its subrooms 
  369. X--- 635,641 ----
  370. X      if(!(ptr->geno & (G_GENOD | G_EXTINCT)))  return(ptr);
  371. X      else                return((struct permonst *) 0);
  372. X  }
  373. X! #endif /* ARMY */
  374. X  
  375. X  /* 
  376. X   * save_room : A recursive function that saves a room and its subrooms 
  377. X*** /tmp/da11138    Tue Jun  1 16:14:30 1993
  378. X--- src/mon.c    Fri May 28 11:32:05 1993
  379. X***************
  380. X*** 1,4 ****
  381. X! /*    SCCS Id: @(#)mon.c    3.1    93/02/21    */
  382. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  383. X  /* NetHack may be freely redistributed.  See license for details. */
  384. X  
  385. X--- 1,4 ----
  386. X! /*    SCCS Id: @(#)mon.c    3.1    93/05/26    */
  387. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  388. X  /* NetHack may be freely redistributed.  See license for details. */
  389. X  
  390. X***************
  391. X*** 19,26 ****
  392. X  #define warnDelay 10
  393. X  long lastwarntime;
  394. X  int lastwarnlev;
  395. X  const char *warnings[] = {
  396. X!     "white", "pink", "red", "ruby", "purple", "black" };
  397. X  
  398. X  static void NDECL(warn_effects);
  399. X  
  400. X--- 19,28 ----
  401. X  #define warnDelay 10
  402. X  long lastwarntime;
  403. X  int lastwarnlev;
  404. X+ 
  405. X  const char *warnings[] = {
  406. X!     "white", "pink", "red", "ruby", "purple", "black"
  407. X! };
  408. X  
  409. X  static void NDECL(warn_effects);
  410. X  
  411. X***************
  412. X*** 256,262 ****
  413. X       * be handled here.  Swimmers are able to protect their stuff...
  414. X       */
  415. X      if (!is_clinger(mtmp->data)
  416. X!         && !is_swimmer(mtmp->data) && !magic_breathing(mtmp->data)) {
  417. X          if (cansee(mtmp->mx,mtmp->my))
  418. X          pline("%s drowns.", Monnam(mtmp));
  419. X          mondead(mtmp);
  420. X--- 258,264 ----
  421. X       * be handled here.  Swimmers are able to protect their stuff...
  422. X       */
  423. X      if (!is_clinger(mtmp->data)
  424. X!         && !is_swimmer(mtmp->data) && !amphibious(mtmp->data)) {
  425. X          if (cansee(mtmp->mx,mtmp->my))
  426. X          pline("%s drowns.", Monnam(mtmp));
  427. X          mondead(mtmp);
  428. X***************
  429. X*** 495,506 ****
  430. X      register struct monst *mtmp;
  431. X      register const char *str;
  432. X  {
  433. X!     register struct obj *otmp;
  434. X  
  435. X  /*    prevent shopkeepers from leaving the door of their shop */
  436. X      if(mtmp->isshk && inhishop(mtmp)) return;
  437. X  
  438. X!     for(otmp = level.objects[mtmp->mx][mtmp->my]; otmp; otmp=otmp->nexthere)
  439. X  /*    Nymphs take everything.  Most monsters don't pick up corpses. */
  440. X          if (
  441. X  #ifdef MUSE
  442. X--- 497,509 ----
  443. X      register struct monst *mtmp;
  444. X      register const char *str;
  445. X  {
  446. X!     register struct obj *otmp, *otmp2;
  447. X  
  448. X  /*    prevent shopkeepers from leaving the door of their shop */
  449. X      if(mtmp->isshk && inhishop(mtmp)) return;
  450. X  
  451. X!     for(otmp = level.objects[mtmp->mx][mtmp->my]; otmp; otmp = otmp2) {
  452. X!         otmp2 = otmp->nexthere;
  453. X  /*    Nymphs take everything.  Most monsters don't pick up corpses. */
  454. X          if (
  455. X  #ifdef MUSE
  456. X***************
  457. X*** 525,530 ****
  458. X--- 528,534 ----
  459. X          newsym(mtmp->mx, mtmp->my);
  460. X          return;            /* pick only one object */
  461. X          }
  462. X+     }
  463. X  }
  464. X  
  465. X  #endif /* OVL2 */
  466. X***************
  467. X*** 983,989 ****
  468. X  #ifdef REINCARNATION
  469. X         && !Is_rogue_level(&u.uz)
  470. X  #endif
  471. X!                     )
  472. X          (void) make_corpse(mdef);
  473. X  }
  474. X  
  475. X--- 987,993 ----
  476. X  #ifdef REINCARNATION
  477. X         && !Is_rogue_level(&u.uz)
  478. X  #endif
  479. X!        && !(level.flags.graveyard && is_undead(mdef->data) && rn2(3)))
  480. X          (void) make_corpse(mdef);
  481. X  }
  482. X  
  483. X***************
  484. X*** 1010,1016 ****
  485. X  monstone(mdef)
  486. X  register struct monst *mdef;
  487. X  {
  488. X!     struct obj *otmp, *contents;
  489. X      xchar x = mdef->mx, y = mdef->my;
  490. X  
  491. X  #ifdef MUSE
  492. X--- 1014,1020 ----
  493. X  monstone(mdef)
  494. X  register struct monst *mdef;
  495. X  {
  496. X!     struct obj *otmp, *obj, *nxt, *contents;
  497. X      xchar x = mdef->mx, y = mdef->my;
  498. X  
  499. X  #ifdef MUSE
  500. X***************
  501. X*** 1021,1037 ****
  502. X      lifesaved_monster(mdef);
  503. X      if (mdef->mhp > 0) return;
  504. X  #endif
  505. X  
  506. X      if((int)mdef->data->msize > MZ_TINY ||
  507. X         !rn2(2 + ((mdef->data->geno & G_FREQ) > 2))) {
  508. X          otmp = mk_named_object(STATUE, mdef->data, x, y,
  509. X!             NAME(mdef), (int)mdef->mnamelth);
  510. X!         contents = otmp->cobj = mdef->minvent;
  511. X!         while(contents) {
  512. X!             contents->owornmask = 0L;
  513. X!             contents = contents->nobj;
  514. X          }
  515. X!         mdef->minvent = (struct obj *)0;
  516. X          if (mdef->mgold) {
  517. X              struct obj *au;
  518. X              au = mksobj(GOLD_PIECE, FALSE, FALSE);
  519. X--- 1025,1057 ----
  520. X      lifesaved_monster(mdef);
  521. X      if (mdef->mhp > 0) return;
  522. X  #endif
  523. X+     mdef->mtrapped = 0;    /* (see m_detach) */
  524. X  
  525. X      if((int)mdef->data->msize > MZ_TINY ||
  526. X         !rn2(2 + ((mdef->data->geno & G_FREQ) > 2))) {
  527. X          otmp = mk_named_object(STATUE, mdef->data, x, y,
  528. X!                     NAME(mdef), (int)mdef->mnamelth);
  529. X!         /* some objects may end up outside the statue */
  530. X!         contents = 0;
  531. X!         for (obj = mdef->minvent; obj; obj = nxt) {
  532. X!             nxt = obj->nobj;
  533. X!             obj->owornmask = 0L;
  534. X!             if (obj->otyp == BOULDER ||
  535. X! #if 0                /* monsters don't carry statues */
  536. X!      (obj->otyp == STATUE && mons[obj->corpsenm].msize >= mdef->data->msize) ||
  537. X! #endif
  538. X!                 obj_resists(obj, 0, 0)) {
  539. X!             if (flooreffects(obj, x, y, "fall")) continue;
  540. X!             place_object(obj, x, y);
  541. X!             obj->nobj = fobj;
  542. X!             fobj = obj;
  543. X!             } else {
  544. X!             obj->nobj = contents;
  545. X!             contents = obj;
  546. X!             }
  547. X          }
  548. X!         otmp->cobj = contents;
  549. X!         mdef->minvent = 0;
  550. X          if (mdef->mgold) {
  551. X              struct obj *au;
  552. X              au = mksobj(GOLD_PIECE, FALSE, FALSE);
  553. X***************
  554. X*** 1055,1061 ****
  555. X  monkilled(mdef, fltxt, how)
  556. X  register struct monst *mdef;
  557. X  const char *fltxt;
  558. X! uchar how;
  559. X  {
  560. X      if (cansee(mdef->mx, mdef->my) && fltxt)
  561. X          pline("%s is %s%s%s!", Monnam(mdef),
  562. X--- 1075,1081 ----
  563. X  monkilled(mdef, fltxt, how)
  564. X  register struct monst *mdef;
  565. X  const char *fltxt;
  566. X! int how;
  567. X  {
  568. X      if (cansee(mdef->mx, mdef->my) && fltxt)
  569. X          pline("%s is %s%s%s!", Monnam(mdef),
  570. X***************
  571. X*** 1154,1161 ****
  572. X  #ifdef REINCARNATION
  573. X           || Is_rogue_level(&u.uz)
  574. X  #endif
  575. X!        || (level.flags.graveyard && is_undead(mdat) &&
  576. X!             rn2(mdat == &mons[PM_WRAITH] ? 5 : 2)))
  577. X          goto cleanup;
  578. X  
  579. X  #ifdef MAIL
  580. X--- 1174,1180 ----
  581. X  #ifdef REINCARNATION
  582. X           || Is_rogue_level(&u.uz)
  583. X  #endif
  584. X!        || (level.flags.graveyard && is_undead(mdat) && rn2(3)))
  585. X          goto cleanup;
  586. X  
  587. X  #ifdef MAIL
  588. X***************
  589. X*** 1572,1577 ****
  590. X--- 1591,1610 ----
  591. X          if(!mtmp->female) mtmp->female = TRUE;
  592. X      } else if (!is_neuter(mdat)) {
  593. X          if(!rn2(10)) mtmp->female = !mtmp->female;
  594. X+     }
  595. X+ 
  596. X+     if (In_endgame(&u.uz) && is_mplayer(olddata)) {
  597. X+         /* mplayers start out as "Foo the Bar", but some of the
  598. X+          * titles are inappropriate when polymorphed, particularly
  599. X+          * into the opposite sex.  players don't use ranks when
  600. X+          * polymorphed, so dropping the rank for mplayers seems
  601. X+          * reasonable.
  602. X+          */
  603. X+         char *p = index(NAME(mtmp), ' ');
  604. X+         if (p) {
  605. X+             *p = '\0';
  606. X+             mtmp->mnamelth = p - NAME(mtmp) + 1;
  607. X+         }
  608. X      }
  609. X  
  610. X      if(mdat == mtmp->data) return(0);    /* still the same monster */
  611. X*** /tmp/da11146    Tue Jun  1 16:14:34 1993
  612. X--- src/mondata.c    Wed Apr 14 15:39:26 1993
  613. X***************
  614. X*** 1,4 ****
  615. X! /*    SCCS Id: @(#)mondata.c    3.1    92/11/24    */
  616. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  617. X  /* NetHack may be freely redistributed.  See license for details. */
  618. X  
  619. X--- 1,4 ----
  620. X! /*    SCCS Id: @(#)mondata.c    3.1    93/03/16    */
  621. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  622. X  /* NetHack may be freely redistributed.  See license for details. */
  623. X  
  624. X***************
  625. X*** 214,219 ****
  626. X--- 214,225 ----
  627. X      if (!strncmp(str, "a ", 2)) str += 2;
  628. X      else if (!strncmp(str, "an ", 3)) str += 3;
  629. X  
  630. X+     /* Alternate spellings */
  631. X+     if (!strncmpi(str, "grey dragon", 11)) return PM_GRAY_DRAGON;
  632. X+     if (!strncmpi(str, "baby grey dragon", 16)) return PM_BABY_GRAY_DRAGON;
  633. X+     if (!strncmpi(str, "grey unicorn", 12)) return PM_GRAY_UNICORN;
  634. X+     if (!strncmpi(str, "grey ooze", 9)) return PM_GRAY_OOZE;
  635. X+ 
  636. X      /* Some irregular plurals */
  637. X      if (!strncmpi(str, "incubi", 6)) return PM_INCUBUS;
  638. X      if (!strncmpi(str, "succubi", 7)) return PM_SUCCUBUS;
  639. X***************
  640. X*** 397,402 ****
  641. X--- 403,413 ----
  642. X      return montype;
  643. X  }
  644. X  
  645. X+ static const char *levitate[2]    = { "float", "Float" };
  646. X+ static const char *fly[2]    = { "fly", "Fly" };
  647. X+ static const char *slither[2]    = { "slither", "Slither" };
  648. X+ static const char *ooze[2]    = { "ooze", "Ooze" };
  649. X+ static const char *crawl[2]    = { "crawl", "Crawl" };
  650. X  
  651. X  const char *
  652. X  locomotion(ptr, def)
  653. X***************
  654. X*** 403,414 ****
  655. X  const struct permonst *ptr;
  656. X  const char *def;
  657. X  {
  658. X      return (
  659. X!         is_floater(ptr) ? (const char *)"float" :
  660. X!         is_flyer(ptr)   ? (const char *)"fly" :
  661. X!         slithy(ptr)     ? (const char *)"slither" :
  662. X!         amorphous(ptr)  ? (const char *)"ooze" :
  663. X!         nolimbs(ptr)    ? (const char *)"crawl" :
  664. X          def
  665. X             );
  666. X  
  667. X--- 414,427 ----
  668. X  const struct permonst *ptr;
  669. X  const char *def;
  670. X  {
  671. X+     int capitalize = (*def == highc(*def));
  672. X+ 
  673. X      return (
  674. X!         is_floater(ptr) ? levitate[capitalize] :
  675. X!         is_flyer(ptr)   ? fly[capitalize] :
  676. X!         slithy(ptr)     ? slither[capitalize] :
  677. X!         amorphous(ptr)  ? ooze[capitalize] :
  678. X!         nolimbs(ptr)    ? crawl[capitalize] :
  679. X          def
  680. X             );
  681. X  
  682. X*** /tmp/da11154    Tue Jun  1 16:14:36 1993
  683. X--- src/monmove.c    Mon May 17 14:04:41 1993
  684. X***************
  685. X*** 1,4 ****
  686. X! /*    SCCS Id: @(#)monmove.c    3.1    93/02/17    */
  687. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  688. X  /* NetHack may be freely redistributed.  See license for details. */
  689. X  
  690. X--- 1,4 ----
  691. X! /*    SCCS Id: @(#)monmove.c    3.1    93/05/15    */
  692. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  693. X  /* NetHack may be freely redistributed.  See license for details. */
  694. X  
  695. X***************
  696. X*** 61,67 ****
  697. X            pline("%s yells:", Amonnam(mtmp));
  698. X            if(levl[x][y].looted & D_WARNED) {
  699. X              verbalize("Halt, thief!  You're under arrest!");
  700. X!             angry_guards(!(flags.soundok));
  701. X            } else {
  702. X              verbalize("Hey, stop picking that lock!");
  703. X              levl[x][y].looted |=  D_WARNED;
  704. X--- 61,67 ----
  705. X            pline("%s yells:", Amonnam(mtmp));
  706. X            if(levl[x][y].looted & D_WARNED) {
  707. X              verbalize("Halt, thief!  You're under arrest!");
  708. X!             (void) angry_guards(!(flags.soundok));
  709. X            } else {
  710. X              verbalize("Hey, stop picking that lock!");
  711. X              levl[x][y].looted |=  D_WARNED;
  712. X***************
  713. X*** 897,914 ****
  714. X          if((info[chi] & ALLOW_M) ||
  715. X             (nix == mtmp->mux && niy == mtmp->muy)) {
  716. X          struct monst *mtmp2;
  717. X!         int stat;
  718. X          mtmp2 = m_at(nix,niy);
  719. X  
  720. X!         stat = mattackm(mtmp, mtmp2);
  721. X  
  722. X!         if (stat & MM_AGR_DIED)        /* aggressor died */
  723. X              return 2;
  724. X  
  725. X!         if ((stat & MM_HIT) && !(stat & MM_DEF_DIED)  &&
  726. X              rn2(4) && mtmp2->mlstmv != monstermoves) {
  727. X!             stat = mattackm(mtmp2, mtmp);    /* return attack */
  728. X!             if (stat & MM_DEF_DIED)
  729. X              return 2;
  730. X          }
  731. X          return 3;
  732. X--- 897,914 ----
  733. X          if((info[chi] & ALLOW_M) ||
  734. X             (nix == mtmp->mux && niy == mtmp->muy)) {
  735. X          struct monst *mtmp2;
  736. X!         int mstatus;
  737. X          mtmp2 = m_at(nix,niy);
  738. X  
  739. X!         mstatus = mattackm(mtmp, mtmp2);
  740. X  
  741. X!         if (mstatus & MM_AGR_DIED)        /* aggressor died */
  742. X              return 2;
  743. X  
  744. X!         if ((mstatus & MM_HIT) && !(mstatus & MM_DEF_DIED)  &&
  745. X              rn2(4) && mtmp2->mlstmv != monstermoves) {
  746. X!             mstatus = mattackm(mtmp2, mtmp);    /* return attack */
  747. X!             if (mstatus & MM_DEF_DIED)
  748. X              return 2;
  749. X          }
  750. X          return 3;
  751. X***************
  752. X*** 1083,1128 ****
  753. X  #endif /* OVL2 */
  754. X  #ifdef OVL0
  755. X  
  756. X  void
  757. X! set_apparxy(mtmp)        /* where does mtmp think you are standing? */
  758. X!     register struct monst *mtmp;
  759. X  {
  760. X! #define notseen (Invis && !perceives(mtmp->data))
  761. X! /*    add cases as required.  eg. Displacement ... */
  762. X!     register int disp = (Underwater ? 3 : notseen ? 1 : Displaced ? 2 : 0);
  763. X  
  764. X! /*     without something like the following, invis. and displ. are too */
  765. X! /*    powerful. */
  766. X!     register boolean gotu =
  767. X!         (notseen ? !rn2(3) : Displaced ? !rn2(4) : FALSE);
  768. X  
  769. X! /*    Monsters which know where you are don't suddenly forget, if you
  770. X!     didn't move away. */
  771. X!     if (mtmp->mux==u.ux && mtmp->muy==u.uy) gotu = 1;
  772. X  
  773. X! /*     your dog follows your smell */
  774. X!     if(!disp || mtmp->mtame || gotu ||
  775. X! /*     Monsters touching you know where you are */
  776. X!        mtmp == u.ustuck ||
  777. X! /*    If invisible but not displaced, staying around gets you 'discovered' */
  778. X!         (!Displaced && u.dx == 0 && u.dy == 0)) {
  779. X!         mtmp->mux = u.ux;
  780. X!         mtmp->muy = u.uy;
  781. X      }
  782. X!     else do {
  783. X!         mtmp->mux = u.ux - disp + rn2(2*disp+1);
  784. X!         mtmp->muy = u.uy - disp + rn2(2*disp+1);
  785. X!     } while((mtmp->mux != u.ux || mtmp->muy != u.uy) &&
  786. X!             ( (!passes_walls(mtmp->data) &&
  787. X!               (!ACCESSIBLE(levl[mtmp->mux][mtmp->muy].typ) ||
  788. X!                (closed_door(mtmp->mux, mtmp->muy) &&
  789. X!             !amorphous(mtmp->data)
  790. X!                )
  791. X!               )
  792. X!           ) ||
  793. X!           (disp==1 && mtmp->mux == mtmp->mx && mtmp->muy == mtmp->my)
  794. X!             )
  795. X!            );
  796. X  }
  797. X  
  798. X  #endif /* OVL0 */
  799. X--- 1083,1139 ----
  800. X  #endif /* OVL2 */
  801. X  #ifdef OVL0
  802. X  
  803. X+ /* decide where the monster thinks you are standing */
  804. X  void
  805. X! set_apparxy(mtmp)
  806. X! register struct monst *mtmp;
  807. X  {
  808. X!     boolean notseen, gotu;
  809. X!     register int disp, mx = mtmp->mux, my = mtmp->muy;
  810. X  
  811. X!     /*
  812. X!      * do cheapest and/or most likely tests first
  813. X!      */
  814. X  
  815. X!     /* pet knows your smell; grabber still has hold of you */
  816. X!     if (mtmp->mtame || mtmp == u.ustuck) goto found_you;
  817. X  
  818. X!     /* monsters which know where you are don't suddenly forget,
  819. X!        if you haven't moved away */
  820. X!     if (mx == u.ux && my == u.uy) goto found_you;
  821. X! 
  822. X!     notseen = Invis && !perceives(mtmp->data);
  823. X!     /* add cases as required.  eg. Displacement ... */
  824. X!     disp = (notseen || Underwater ? 1 : Displaced ? 2 : 0);
  825. X!     if (!disp) goto found_you;
  826. X! 
  827. X!     /* without something like the following, invis. and displ.
  828. X!        are too powerful */
  829. X!     gotu = notseen ? !rn2(3) : Displaced ? !rn2(4) : FALSE;
  830. X! 
  831. X!     /* If invis but not displaced, staying around gets you 'discovered' */
  832. X!     gotu |= (!Displaced && u.dx == 0 && u.dy == 0);
  833. X! 
  834. X!     if (!gotu) {
  835. X!         register int try_cnt = 0;
  836. X!         do {
  837. X!         if (++try_cnt > 200) goto found_you;        /* punt */
  838. X!         mx = u.ux - disp + rn2(2*disp+1);
  839. X!         my = u.uy - disp + rn2(2*disp+1);
  840. X!         } while (!isok(mx,my)
  841. X!           || (disp != 2 && mx == mtmp->mx && my == mtmp->my)
  842. X!           || ((mx != u.ux || my != u.uy) &&
  843. X!               !passes_walls(mtmp->data) &&
  844. X!               (!ACCESSIBLE(levl[mx][my].typ) ||
  845. X!             (closed_door(mx, my) && !amorphous(mtmp->data)))));
  846. X!     } else {
  847. X! found_you:
  848. X!         mx = u.ux;
  849. X!         my = u.uy;
  850. X      }
  851. X! 
  852. X!     mtmp->mux = mx;
  853. X!     mtmp->muy = my;
  854. X  }
  855. X  
  856. X  #endif /* OVL0 */
  857. X*** /tmp/da11162    Tue Jun  1 16:14:39 1993
  858. X--- src/monst.c    Tue Jun  1 14:28:15 1993
  859. X***************
  860. X*** 1,4 ****
  861. X! /*    SCCS Id: @(#)monst.c    3.1    92/11/25          */
  862. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  863. X  /* NetHack may be freely redistributed.  See license for details. */
  864. X  
  865. X--- 1,4 ----
  866. X! /*    SCCS Id: @(#)monst.c    3.1    93/05/26          */
  867. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  868. X  /* NetHack may be freely redistributed.  See license for details. */
  869. X  
  870. X***************
  871. X*** 712,718 ****
  872. X        M2_HOSTILE | M2_STRONG | M2_NASTY,
  873. X        0, C(MAGENTA) },
  874. X  /*    Dummy monster needed for visual interface. */
  875. X!     { "long worm tail", S_WORM_TAIL, 0, 0, 0, 0, 0, G_NOGEN | G_NOCORPSE,
  876. X        { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  877. X        0, 0, 0, 0, 0, 0, 0, 0, M2_NOPOLY, 0, C(BROWN) },
  878. X  /*    xan, &c.    */
  879. X--- 712,719 ----
  880. X        M2_HOSTILE | M2_STRONG | M2_NASTY,
  881. X        0, C(MAGENTA) },
  882. X  /*    Dummy monster needed for visual interface. */
  883. X!     { "long worm tail", S_WORM_TAIL, 0, 0, 0, 0, 0,
  884. X!       (G_NOGEN | G_NOCORPSE | G_UNIQ),    /* uniq prevents figurines */
  885. X        { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  886. X        0, 0, 0, 0, 0, 0, 0, 0, M2_NOPOLY, 0, C(BROWN) },
  887. X  /*    xan, &c.    */
  888. X***************
  889. X*** 1273,1280 ****
  890. X        M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS,
  891. X        M2_STRONG, 0, C(HI_GOLD) },
  892. X      { "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1),
  893. X!       { { AT_BITE, AD_PLYS, 1, 6 }, { AT_HUGS, AD_PHYS, 2, 4 },
  894. X!         { AT_SPIT, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK },
  895. X        2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON,
  896. X        M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_POIS,
  897. X        M2_STRONG, 0, C(GREEN) },
  898. X--- 1274,1281 ----
  899. X        M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS,
  900. X        M2_STRONG, 0, C(HI_GOLD) },
  901. X      { "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1),
  902. X!       { { AT_BITE, AD_PLYS, 1, 6 }, { AT_SPIT, AD_DRST, 1, 6 },
  903. X!         { AT_HUGS, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK },
  904. X        2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON,
  905. X        M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_POIS,
  906. X        M2_STRONG, 0, C(GREEN) },
  907. X***************
  908. X*** 1569,1576 ****
  909. X        MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
  910. X        M2_HOSTILE | M2_NEUTER, 0, C(YELLOW) },
  911. X      { "rope golem", S_GOLEM, 4, 9, 8, 0, 0, (G_GENO | G_NOCORPSE | 1),
  912. X!       { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_HUGS, AD_PHYS, 6, 1 },
  913. X!         NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  914. X        450, 0, 0, MS_SILENT, MZ_LARGE,
  915. X        MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
  916. X        M2_HOSTILE | M2_NEUTER, 0, C(BROWN) },
  917. X--- 1570,1577 ----
  918. X        MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
  919. X        M2_HOSTILE | M2_NEUTER, 0, C(YELLOW) },
  920. X      { "rope golem", S_GOLEM, 4, 9, 8, 0, 0, (G_GENO | G_NOCORPSE | 1),
  921. X!       { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  922. X!         { AT_HUGS, AD_PHYS, 6, 1 }, NO_ATTK, NO_ATTK, NO_ATTK },
  923. X        450, 0, 0, MS_SILENT, MZ_LARGE,
  924. X        MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID,
  925. X        M2_HOSTILE | M2_NEUTER, 0, C(BROWN) },
  926. X***************
  927. X*** 1792,1799 ****
  928. X          { AT_BITE, AD_DRST, 1, 6 }, { AT_WEAP, AD_PHYS, 2, 4 },
  929. X          NO_ATTK, NO_ATTK },
  930. X        WT_HUMAN, 400, 0, MS_HISS, MZ_LARGE,
  931. X!       MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_SWIM |
  932. X!       M1_AMPHIBIOUS | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_OMNIVORE,
  933. X        M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE,
  934. X        M3_WAITFORU, C(BRIGHT_GREEN) },
  935. X      { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN,
  936. X--- 1793,1800 ----
  937. X          { AT_BITE, AD_DRST, 1, 6 }, { AT_WEAP, AD_PHYS, 2, 4 },
  938. X          NO_ATTK, NO_ATTK },
  939. X        WT_HUMAN, 400, 0, MS_HISS, MZ_LARGE,
  940. X!       MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_FLY | M1_SWIM |
  941. X!       M1_AMPHIBIOUS | M1_HUMANOID | M1_POIS | M1_OMNIVORE,
  942. X        M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE,
  943. X        M3_WAITFORU, C(BRIGHT_GREEN) },
  944. X      { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, A_NONE, G_NOGEN,
  945. X***************
  946. X*** 2042,2048 ****
  947. X      { "Death", S_DEMON, 20, 3, 4, 95, 0, (G_UNIQ | G_NOGEN),
  948. X        { { AT_TUCH, AD_DETH, 8, 8 }, { AT_TUCH, AD_DETH, 8, 8 },
  949. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  950. X!       WT_HUMAN, 0, 0, MS_DEATH, MZ_HUMAN,
  951. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  952. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  953. X        M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_REGEN,
  954. X--- 2043,2049 ----
  955. X      { "Death", S_DEMON, 20, 3, 4, 95, 0, (G_UNIQ | G_NOGEN),
  956. X        { { AT_TUCH, AD_DETH, 8, 8 }, { AT_TUCH, AD_DETH, 8, 8 },
  957. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  958. X!       WT_HUMAN, 0, 0, MS_RIDER, MZ_HUMAN,
  959. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  960. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  961. X        M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_REGEN,
  962. X***************
  963. X*** 2051,2057 ****
  964. X      { "Pestilence", S_DEMON, 20, 3, 4, 95, 0, (G_UNIQ | G_NOGEN),
  965. X        { { AT_TUCH, AD_PEST, 8, 8 }, { AT_TUCH, AD_PEST, 8, 8 },
  966. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  967. X!       WT_HUMAN, 0, 0, MS_PESTILENCE, MZ_HUMAN,
  968. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  969. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  970. X        M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_REGEN,
  971. X--- 2052,2058 ----
  972. X      { "Pestilence", S_DEMON, 20, 3, 4, 95, 0, (G_UNIQ | G_NOGEN),
  973. X        { { AT_TUCH, AD_PEST, 8, 8 }, { AT_TUCH, AD_PEST, 8, 8 },
  974. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  975. X!       WT_HUMAN, 0, 0, MS_RIDER, MZ_HUMAN,
  976. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  977. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  978. X        M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_REGEN,
  979. X***************
  980. X*** 2060,2066 ****
  981. X      { "Famine", S_DEMON, 20, 3, 4, 95, 0, (G_UNIQ | G_NOGEN),
  982. X        { { AT_TUCH, AD_FAMN, 8, 8 }, { AT_TUCH, AD_FAMN, 8, 8 },
  983. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  984. X!       WT_HUMAN, 0, 0, MS_FAMINE, MZ_HUMAN,
  985. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  986. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  987. X        M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_REGEN,
  988. X--- 2061,2067 ----
  989. X      { "Famine", S_DEMON, 20, 3, 4, 95, 0, (G_UNIQ | G_NOGEN),
  990. X        { { AT_TUCH, AD_FAMN, 8, 8 }, { AT_TUCH, AD_FAMN, 8, 8 },
  991. X          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  992. X!       WT_HUMAN, 0, 0, MS_RIDER, MZ_HUMAN,
  993. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  994. X        MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE,
  995. X        M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_REGEN,
  996. X***************
  997. X*** 2160,2166 ****
  998. X          NO_ATTK, NO_ATTK, NO_ATTK },
  999. X        WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN, 0, 0,
  1000. X        M1_HUMANOID | M1_OMNIVORE,
  1001. X!       M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, 0, C(RED) },
  1002. X      { "cavewoman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
  1003. X        { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
  1004. X          NO_ATTK, NO_ATTK, NO_ATTK },
  1005. X--- 2161,2168 ----
  1006. X          NO_ATTK, NO_ATTK, NO_ATTK },
  1007. X        WT_HUMAN, 400, 0, MS_HUMANOID, MZ_HUMAN, 0, 0,
  1008. X        M1_HUMANOID | M1_OMNIVORE,
  1009. X!       M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, 0,
  1010. X!       C(HI_DOMESTIC) },
  1011. X      { "cavewoman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
  1012. X        { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK,
  1013. X          NO_ATTK, NO_ATTK, NO_ATTK },
  1014. X*** /tmp/da11170    Tue Jun  1 16:14:44 1993
  1015. X--- src/mplayer.c    Mon Mar 15 12:36:28 1993
  1016. X***************
  1017. X*** 1,4 ****
  1018. X! /*    SCCS Id: @(#)mplayer.c    3.1    92/10/28    */
  1019. X  /*    Copyright (c) Izchak Miller, 1992.              */
  1020. X  /* NetHack may be freely redistributed.  See license for details. */
  1021. X  
  1022. X--- 1,4 ----
  1023. X! /*    SCCS Id: @(#)mplayer.c    3.1    93/03/14    */
  1024. X  /*    Copyright (c) Izchak Miller, 1992.              */
  1025. X  /* NetHack may be freely redistributed.  See license for details. */
  1026. X  
  1027. X***************
  1028. X*** 26,35 ****
  1029. X      /* Mac team */
  1030. X      "David", "Johnny", "Jon", "Jonathan", "Michael", "Rob",
  1031. X      "Tim", "Wang",
  1032. X-     /* OS/2 team */
  1033. X-     "Timo",
  1034. X      /* Atari team */
  1035. X      "Eric",
  1036. X      /* VMS team */
  1037. X      "Joshua", "Pat",
  1038. X      ""};
  1039. X--- 26,37 ----
  1040. X      /* Mac team */
  1041. X      "David", "Johnny", "Jon", "Jonathan", "Michael", "Rob",
  1042. X      "Tim", "Wang",
  1043. X      /* Atari team */
  1044. X      "Eric",
  1045. X+     /* NT team */
  1046. X+     "Michael",
  1047. X+     /* OS/2 team */
  1048. X+     "Timo",
  1049. X      /* VMS team */
  1050. X      "Joshua", "Pat",
  1051. X      ""};
  1052. X***************
  1053. X*** 281,311 ****
  1054. X  mplayer_talk(mtmp)
  1055. X  register struct monst *mtmp;
  1056. X  {
  1057. X!     char pbuf[BUFSZ];
  1058. X  
  1059. X      if(mtmp->mpeaceful) return; /* will drop to humanoid talk */
  1060. X  
  1061. X!     Strcpy(pbuf, "Talk? -- ");
  1062. X!     if(pl_character[0] == highc(*mtmp->data->mname)) { /* same kind */
  1063. X!          switch(rn2(4)) {
  1064. X!            case 0: Strcat(pbuf, "I can't win, and neither will you!");
  1065. X!                break;
  1066. X!            case 1: Strcat(pbuf, "You don't deserve to win!");
  1067. X!                break;
  1068. X!            case 3: Strcat(pbuf, "Mine should be the honor, not yours!");
  1069. X!                break;
  1070. X!          }
  1071. X!     } else {
  1072. X!          switch(rn2(4)) {
  1073. X!            case 0: Strcat(pbuf, "The low-life wants to talk, eh?");
  1074. X!                break;
  1075. X!            case 1: Strcat(pbuf, "Fight, scum!");
  1076. X!                break;
  1077. X!            case 3: Strcat(pbuf, "Here is what I have to say!");
  1078. X!                break;
  1079. X!          }
  1080. X!     }
  1081. X!     pline(pbuf);
  1082. X  }
  1083. X  
  1084. X  /*mplayer.c*/
  1085. X--- 283,302 ----
  1086. X  mplayer_talk(mtmp)
  1087. X  register struct monst *mtmp;
  1088. X  {
  1089. X!     static const char *same_class_msg[3] = {
  1090. X!         "I can't win, and neither will you!",
  1091. X!         "You don't deserve to win!",
  1092. X!         "Mine should be the honor, not yours!",
  1093. X!     },          *other_class_msg[3] = {
  1094. X!         "The low-life wants to talk, eh?",
  1095. X!         "Fight, scum!",
  1096. X!         "Here is what I have to say!",
  1097. X!     };
  1098. X  
  1099. X      if(mtmp->mpeaceful) return; /* will drop to humanoid talk */
  1100. X  
  1101. X!     pline("Talk? -- %s", pl_character[0] == highc(*mtmp->data->mname) ?
  1102. X!         same_class_msg[rn2(3)] : other_class_msg[rn2(3)]);
  1103. X  }
  1104. X  
  1105. X  /*mplayer.c*/
  1106. X*** /tmp/da11186    Tue Jun  1 16:14:48 1993
  1107. X--- src/muse.c    Tue Jun  1 12:13:09 1993
  1108. X***************
  1109. X*** 1,4 ****
  1110. X! /*    SCCS Id: @(#)muse.c    3.1    93/02/12    */
  1111. X  /* Monster item usage routine.  Copyright (C) 1990 by Ken Arromdee */
  1112. X  /* NetHack may be freely redistributed.  See license for details.  */
  1113. X  
  1114. X--- 1,4 ----
  1115. X! /*    SCCS Id: @(#)muse.c    3.1    93/05/25    */
  1116. X  /* Monster item usage routine.  Copyright (C) 1990 by Ken Arromdee */
  1117. X  /* NetHack may be freely redistributed.  See license for details.  */
  1118. X  
  1119. X***************
  1120. X*** 319,324 ****
  1121. X--- 319,330 ----
  1122. X      if (m.has_defense)    /* stairs, trapdoor or tele-trap, bugle alert */
  1123. X          goto botm;
  1124. X  
  1125. X+     /* kludge to cut down on trap destruction (particularly portals) */
  1126. X+     t = t_at(x,y);
  1127. X+     if (t && (t->ttyp == PIT || t->ttyp == SPIKED_PIT ||
  1128. X+           t->ttyp == WEB || t->ttyp == BEAR_TRAP))
  1129. X+         t = 0;        /* ok for monster to dig here */
  1130. X+ 
  1131. X  #define nomore(x) if(m.has_defense==x) continue;
  1132. X      for (obj = mtmp->minvent; obj; obj = obj->nobj) {
  1133. X          /* don't always use the same selection pattern */
  1134. X***************
  1135. X*** 326,332 ****
  1136. X  
  1137. X          /* nomore(MUSE_WAN_DIGGING); */
  1138. X          if (m.has_defense == MUSE_WAN_DIGGING) break;
  1139. X!         if (obj->otyp == WAN_DIGGING && obj->spe > 0 && !stuck
  1140. X              && !mtmp->isshk && !mtmp->isgd && !mtmp->ispriest
  1141. X              && !is_floater(mtmp->data)
  1142. X              /* digging wouldn't be effective; assume they know that */
  1143. X--- 332,338 ----
  1144. X  
  1145. X          /* nomore(MUSE_WAN_DIGGING); */
  1146. X          if (m.has_defense == MUSE_WAN_DIGGING) break;
  1147. X!         if (obj->otyp == WAN_DIGGING && obj->spe > 0 && !stuck && !t
  1148. X              && !mtmp->isshk && !mtmp->isgd && !mtmp->ispriest
  1149. X              && !is_floater(mtmp->data)
  1150. X              /* digging wouldn't be effective; assume they know that */
  1151. X***************
  1152. X*** 409,420 ****
  1153. X          otmp->spe--;
  1154. X          if (oseen) makeknown(WAN_TELEPORTATION);
  1155. X  mon_tele:
  1156. X!         if(level.flags.noteleport) {
  1157. X!             if (vismon)
  1158. X!               pline("A mysterious force prevents %s from teleporting!",
  1159. X!             mon_nam(mtmp));
  1160. X              return 2;
  1161. X-         }
  1162. X          if((/*mon_has_amulet(mtmp)||*/ Is_wiz1_level(&u.uz) ||
  1163. X                Is_wiz2_level(&u.uz) || Is_wiz3_level(&u.uz))
  1164. X                                  && !rn2(3)) {
  1165. X--- 415,422 ----
  1166. X          otmp->spe--;
  1167. X          if (oseen) makeknown(WAN_TELEPORTATION);
  1168. X  mon_tele:
  1169. X!         if (tele_restrict(mtmp))
  1170. X              return 2;
  1171. X          if((/*mon_has_amulet(mtmp)||*/ Is_wiz1_level(&u.uz) ||
  1172. X                Is_wiz2_level(&u.uz) || Is_wiz3_level(&u.uz))
  1173. X                                  && !rn2(3)) {
  1174. X***************
  1175. X*** 471,476 ****
  1176. X--- 473,480 ----
  1177. X          return 2;
  1178. X          }
  1179. X      case MUSE_WAN_DIGGING:
  1180. X+         {    struct trap *ttmp;
  1181. X+ 
  1182. X          mzapmsg(mtmp, otmp, FALSE);
  1183. X          otmp->spe--;
  1184. X          if (oseen) makeknown(WAN_DIGGING);
  1185. X***************
  1186. X*** 485,491 ****
  1187. X              pline("The floor here is too hard to dig in.");
  1188. X              return 2;
  1189. X          }
  1190. X!         seetrap(maketrap(mtmp->mx, mtmp->my, TRAPDOOR));
  1191. X          if (vis) {
  1192. X              pline("%s's made a hole in the floor.", Monnam(mtmp));
  1193. X              pline("%s falls through...", Monnam(mtmp));
  1194. X--- 489,497 ----
  1195. X              pline("The floor here is too hard to dig in.");
  1196. X              return 2;
  1197. X          }
  1198. X!         ttmp = maketrap(mtmp->mx, mtmp->my, TRAPDOOR);
  1199. X!         if (!ttmp) return 2;
  1200. X!         seetrap(ttmp);
  1201. X          if (vis) {
  1202. X              pline("%s's made a hole in the floor.", Monnam(mtmp));
  1203. X              pline("%s falls through...", Monnam(mtmp));
  1204. X***************
  1205. X*** 497,502 ****
  1206. X--- 503,509 ----
  1207. X          /* we made sure that there is a level for mtmp to go to */
  1208. X          migrate_to_level(mtmp, ledger_no(&u.uz)+1, 0);
  1209. X          return 2;
  1210. X+         }
  1211. X      case MUSE_WAN_CREATE_MONSTER:
  1212. X          {    coord cc;
  1213. X          struct permonst *pm=rndmonst();
  1214. X***************
  1215. X*** 524,529 ****
  1216. X--- 531,538 ----
  1217. X                  : rndmonst(), cc.x, cc.y);
  1218. X              if (mon) newsym(mon->mx,mon->my);
  1219. X          }
  1220. X+         /* flush monsters before asking for identification */
  1221. X+         flush_screen(0);
  1222. X          if (oseen && !objects[SCR_CREATE_MONSTER].oc_name_known
  1223. X                && !objects[SCR_CREATE_MONSTER].oc_uname)
  1224. X              docall(otmp); /* not makeknown(); be consistent */
  1225. X***************
  1226. X*** 651,664 ****
  1227. X          ) return 0;
  1228. X      switch (rn2(8 + (difficulty > 3) + (difficulty > 6) +
  1229. X                  (difficulty > 8))) {
  1230. X          case 0: case 1:
  1231. X              return SCR_TELEPORTATION;
  1232. X          case 2: return SCR_CREATE_MONSTER;
  1233. X          case 3: case 4:
  1234. X              return POT_HEALING;
  1235. X          case 5: return POT_EXTRA_HEALING;
  1236. X-         case 6: case 9:
  1237. X-             return WAN_TELEPORTATION;
  1238. X          case 7: if (is_floater(pm) || mtmp->isshk || mtmp->isgd
  1239. X                          || mtmp->ispriest
  1240. X                                      )
  1241. X--- 660,677 ----
  1242. X          ) return 0;
  1243. X      switch (rn2(8 + (difficulty > 3) + (difficulty > 6) +
  1244. X                  (difficulty > 8))) {
  1245. X+         case 6: case 9:
  1246. X+             if (!rn2(3)) return WAN_TELEPORTATION;
  1247. X+             /* else FALLTHRU */
  1248. X          case 0: case 1:
  1249. X              return SCR_TELEPORTATION;
  1250. X+         case 8: case 10:
  1251. X+             if (!rn2(3)) return WAN_CREATE_MONSTER;
  1252. X+             /* else FALLTHRU */
  1253. X          case 2: return SCR_CREATE_MONSTER;
  1254. X          case 3: case 4:
  1255. X              return POT_HEALING;
  1256. X          case 5: return POT_EXTRA_HEALING;
  1257. X          case 7: if (is_floater(pm) || mtmp->isshk || mtmp->isgd
  1258. X                          || mtmp->ispriest
  1259. X                                      )
  1260. X***************
  1261. X*** 665,672 ****
  1262. X                  return 0;
  1263. X              else
  1264. X                  return WAN_DIGGING;
  1265. X-         case 8: case 10:
  1266. X-             return WAN_CREATE_MONSTER;
  1267. X      }
  1268. X      /*NOTREACHED*/
  1269. X      return 0;
  1270. X--- 678,683 ----
  1271. X***************
  1272. X*** 1199,1211 ****
  1273. X              }
  1274. X          }
  1275. X          if (vismon) pline("%s seems more experienced.", Monnam(mtmp));
  1276. X-         i = rnd(8);
  1277. X          if (oseen) makeknown(POT_GAIN_LEVEL);
  1278. X          m_useup(mtmp, otmp);
  1279. X          if (!grow_up(mtmp,(struct monst *)0)) return 1;
  1280. X              /* grew into genocided monster */
  1281. X-         mtmp->mhp += i;
  1282. X-         mtmp->mhpmax += i;
  1283. X          return 2;
  1284. X      case MUSE_WAN_MAKE_INVISIBLE:
  1285. X          mzapmsg(mtmp, otmp, TRUE);
  1286. X--- 1210,1219 ----
  1287. X***************
  1288. X*** 1319,1328 ****
  1289. X      switch (rn2(3)) {
  1290. X          case 0:
  1291. X              if (mtmp->isgd) return 0;
  1292. X!             return rn2(4) ? POT_SPEED : WAN_SPEED_MONSTER;
  1293. X          case 1:
  1294. X              if (mtmp->mpeaceful && !See_invisible) return 0;
  1295. X!             return rn2(4) ? POT_INVISIBILITY : WAN_MAKE_INVISIBLE;
  1296. X          case 2:
  1297. X              return POT_GAIN_LEVEL;
  1298. X      }
  1299. X--- 1327,1336 ----
  1300. X      switch (rn2(3)) {
  1301. X          case 0:
  1302. X              if (mtmp->isgd) return 0;
  1303. X!             return rn2(6) ? POT_SPEED : WAN_SPEED_MONSTER;
  1304. X          case 1:
  1305. X              if (mtmp->mpeaceful && !See_invisible) return 0;
  1306. X!             return rn2(6) ? POT_INVISIBILITY : WAN_MAKE_INVISIBLE;
  1307. X          case 2:
  1308. X              return POT_GAIN_LEVEL;
  1309. X      }
  1310. X***************
  1311. X*** 1363,1368 ****
  1312. X              && obj->corpsenm == PM_COCKATRICE)
  1313. X      );
  1314. X  }
  1315. X! #endif
  1316. X  
  1317. X  /*muse.c*/
  1318. X--- 1371,1401 ----
  1319. X              && obj->corpsenm == PM_COCKATRICE)
  1320. X      );
  1321. X  }
  1322. X! 
  1323. X! boolean
  1324. X! mon_reflects(mon,str)
  1325. X! struct monst *mon;
  1326. X! const char *str;
  1327. X! {
  1328. X!     struct obj *orefl = which_armor(mon, W_ARMS);
  1329. X! 
  1330. X!     if (orefl && orefl->otyp == SHIELD_OF_REFLECTION) {
  1331. X!         if (str) {
  1332. X!         pline(str, s_suffix(mon_nam(mon)), "shield");
  1333. X!         makeknown(SHIELD_OF_REFLECTION);
  1334. X!         }
  1335. X!         return TRUE;
  1336. X!     } else if ((orefl = which_armor(mon, W_AMUL)) &&
  1337. X!                 orefl->otyp == AMULET_OF_REFLECTION) {
  1338. X!         if (str) {
  1339. X!         pline(str, s_suffix(mon_nam(mon)), "amulet");
  1340. X!         makeknown(AMULET_OF_REFLECTION);
  1341. X!         }
  1342. X!         return TRUE;
  1343. X!     }
  1344. X!     return FALSE;
  1345. X! }
  1346. X! 
  1347. X! #endif    /* MUSE */
  1348. X  
  1349. X  /*muse.c*/
  1350. X*** /tmp/da11194    Tue Jun  1 16:14:52 1993
  1351. X--- src/music.c    Wed May 26 11:55:23 1993
  1352. X***************
  1353. X*** 1,4 ****
  1354. X! /*    SCCS Id: @(#)music.c    3.1    92/11/26    */
  1355. X  /*     Copyright (c) 1989 by Jean-Christophe Collet */
  1356. X  /* NetHack may be freely redistributed.  See license for details. */
  1357. X  
  1358. X--- 1,4 ----
  1359. X! /*    SCCS Id: @(#)music.c    3.1    93/05/25    */
  1360. X  /*     Copyright (c) 1989 by Jean-Christophe Collet */
  1361. X  /* NetHack may be freely redistributed.  See license for details. */
  1362. X  
  1363. X***************
  1364. X*** 36,41 ****
  1365. X--- 36,52 ----
  1366. X  static void FDECL(do_earthquake,(int));
  1367. X  static int FDECL(do_improvisation,(struct obj *));
  1368. X  
  1369. X+ #ifdef UNIX386MUSIC
  1370. X+ static int NDECL(atconsole);
  1371. X+ static void FDECL(speaker,(struct obj *,char *));
  1372. X+ #endif
  1373. X+ #ifdef VPIX_MUSIC
  1374. X+ extern int sco_flag_console;    /* will need changing if not _M_UNIX */
  1375. X+ static void NDECL(playinit);
  1376. X+ static void FDECL(playstring, (char *,size_t));
  1377. X+ static void FDECL(speaker,(struct obj *,char *));
  1378. X+ #endif
  1379. X+ 
  1380. X  /*
  1381. X   * Wake every monster in range...
  1382. X   */
  1383. X***************
  1384. X*** 45,60 ****
  1385. X  int distance;
  1386. X  {
  1387. X      register struct monst *mtmp = fmon;
  1388. X  
  1389. X      while(mtmp) {
  1390. X!         if (distu(mtmp->mx, mtmp->my) < distance/3) {
  1391. X!             /* May scare some monsters */
  1392. X!             if (!resist(mtmp, SCROLL_CLASS, 0, NOTELL))
  1393. X!               mtmp->mflee = 1;
  1394. X!         } else if (distu(mtmp->mx, mtmp->my) < distance) {
  1395. X!             mtmp->msleep = 0;
  1396. X!             mtmp->mcanmove = 1;
  1397. X!             mtmp->mfrozen = 0;
  1398. X          }
  1399. X          mtmp = mtmp->nmon;
  1400. X      }
  1401. X--- 56,73 ----
  1402. X  int distance;
  1403. X  {
  1404. X      register struct monst *mtmp = fmon;
  1405. X+     register int distm;
  1406. X  
  1407. X      while(mtmp) {
  1408. X!         distm = distu(mtmp->mx, mtmp->my);
  1409. X!         if (distm < distance) {
  1410. X!             mtmp->msleep = 0;
  1411. X!             mtmp->mcanmove = 1;
  1412. X!             mtmp->mfrozen = 0;
  1413. X!             /* May scare some monsters */
  1414. X!             if (distm < distance/3 &&
  1415. X!                 !resist(mtmp, SCROLL_CLASS, 0, NOTELL))
  1416. X!             mtmp->mflee = 1;
  1417. X          }
  1418. X          mtmp = mtmp->nmon;
  1419. X      }
  1420. X***************
  1421. X*** 71,79 ****
  1422. X      register struct monst *mtmp = fmon;
  1423. X  
  1424. X      while(mtmp) {
  1425. X!           if (distu(mtmp->mx, mtmp->my) < distance)
  1426. X!             if(mtmp->mcanmove && !resist(mtmp, WAND_CLASS, 0, NOTELL))
  1427. X!               mtmp->mcanmove = mtmp->mfrozen = 0;
  1428. X          mtmp = mtmp->nmon;
  1429. X      }
  1430. X  }
  1431. X--- 84,98 ----
  1432. X      register struct monst *mtmp = fmon;
  1433. X  
  1434. X      while(mtmp) {
  1435. X!         if (distu(mtmp->mx, mtmp->my) < distance &&
  1436. X!             !resist(mtmp, WAND_CLASS, 0, NOTELL)) {
  1437. X!             register int min_sleep = d(10,10);
  1438. X!             /* 10d10 turns + wake_nearby() to rouse */
  1439. X!             mtmp->msleep = 1;
  1440. X!             mtmp->mcanmove = 0;
  1441. X!             if ((int)mtmp->mfrozen < min_sleep)
  1442. X!             mtmp->mfrozen = min_sleep;
  1443. X!         }
  1444. X          mtmp = mtmp->nmon;
  1445. X      }
  1446. X  }
  1447. X***************
  1448. X*** 125,137 ****
  1449. X  /* Awake only soldiers of the level. */
  1450. X  
  1451. X  void
  1452. X! awaken_soldiers() {
  1453. X  #ifdef ARMY
  1454. X      register struct monst *mtmp = fmon;
  1455. X  
  1456. X      while(mtmp) {
  1457. X          if (is_mercenary(mtmp->data) && mtmp->data != &mons[PM_GUARD]) {
  1458. X!         mtmp->mpeaceful = mtmp->msleep = 0;
  1459. X          mtmp->mcanmove = 1;
  1460. X          if (canseemon(mtmp))
  1461. X              pline("%s is now ready for battle!", Monnam(mtmp));
  1462. X--- 144,157 ----
  1463. X  /* Awake only soldiers of the level. */
  1464. X  
  1465. X  void
  1466. X! awaken_soldiers()
  1467. X! {
  1468. X  #ifdef ARMY
  1469. X      register struct monst *mtmp = fmon;
  1470. X  
  1471. X      while(mtmp) {
  1472. X          if (is_mercenary(mtmp->data) && mtmp->data != &mons[PM_GUARD]) {
  1473. X!         mtmp->mpeaceful = mtmp->msleep = mtmp->mfrozen = 0;
  1474. X          mtmp->mcanmove = 1;
  1475. X          if (canseemon(mtmp))
  1476. X              pline("%s is now ready for battle!", Monnam(mtmp));
  1477. X***************
  1478. X*** 184,190 ****
  1479. X      if (end_x >= COLNO) end_x = COLNO - 1;
  1480. X      if (end_y >= ROWNO) end_y = ROWNO - 1;
  1481. X      for (x=start_x; x<=end_x; x++) for (y=start_y; y<=end_y; y++) {
  1482. X!         if (mtmp = m_at(x,y)) {
  1483. X          if (mtmp->mundetected && is_hider(mtmp->data)) {
  1484. X              mtmp->mundetected = 0;
  1485. X              if (cansee(x,y))
  1486. X--- 204,211 ----
  1487. X      if (end_x >= COLNO) end_x = COLNO - 1;
  1488. X      if (end_y >= ROWNO) end_y = ROWNO - 1;
  1489. X      for (x=start_x; x<=end_x; x++) for (y=start_y; y<=end_y; y++) {
  1490. X!         if ((mtmp = m_at(x,y)) != 0) {
  1491. X!         wakeup(mtmp);    /* peaceful monster will become hostile */
  1492. X          if (mtmp->mundetected && is_hider(mtmp->data)) {
  1493. X              mtmp->mundetected = 0;
  1494. X              if (cansee(x,y))
  1495. X***************
  1496. X*** 220,225 ****
  1497. X--- 241,247 ----
  1498. X            case ROOM :
  1499. X            case CORR : /* Try to make a pit */
  1500. X  do_pit:            chasm = maketrap(x,y,PIT);
  1501. X+             if (!chasm) break;    /* no pit if portal at that location */
  1502. X              chasm->tseen = 1;
  1503. X  
  1504. X              levl[x][y].doormask = 0;
  1505. X***************
  1506. X*** 226,232 ****
  1507. X  
  1508. X              mtmp = m_at(x,y);
  1509. X  
  1510. X!             if (otmp = sobj_at(BOULDER, x, y)) {
  1511. X              if (cansee(x, y))
  1512. X                 pline("KADOOM! The boulder falls into a chasm%s!",
  1513. X                    ((x == u.ux) && (y == u.uy)) ? " below you" : "");
  1514. X--- 248,254 ----
  1515. X  
  1516. X              mtmp = m_at(x,y);
  1517. X  
  1518. X!             if ((otmp = sobj_at(BOULDER, x, y)) != 0) {
  1519. X              if (cansee(x, y))
  1520. X                 pline("KADOOM! The boulder falls into a chasm%s!",
  1521. X                    ((x == u.ux) && (y == u.uy)) ? " below you" : "");
  1522. X***************
  1523. X*** 235,241 ****
  1524. X              freeobj(otmp);
  1525. X              (void) flooreffects(otmp, x, y, "");
  1526. X              break;
  1527. X!             }    
  1528. X  
  1529. X              /* We have to check whether monsters or player
  1530. X                 falls in a chasm... */
  1531. X--- 257,263 ----
  1532. X              freeobj(otmp);
  1533. X              (void) flooreffects(otmp, x, y, "");
  1534. X              break;
  1535. X!             }
  1536. X  
  1537. X              /* We have to check whether monsters or player
  1538. X                 falls in a chasm... */
  1539. X***************
  1540. X*** 304,313 ****
  1541. X  #ifdef MAC
  1542. X      mac_speaker ( instr , "C" ) ;
  1543. X  #endif
  1544. X- 
  1545. X  #ifdef AMIGA
  1546. X      amii_speaker ( instr , "Cw", AMII_OKAY_VOLUME ) ;
  1547. X  #endif
  1548. X      if (Confusion)
  1549. X        pline("What you produce is quite far from music...");
  1550. X      else
  1551. X--- 326,338 ----
  1552. X  #ifdef MAC
  1553. X      mac_speaker ( instr , "C" ) ;
  1554. X  #endif
  1555. X  #ifdef AMIGA
  1556. X      amii_speaker ( instr , "Cw", AMII_OKAY_VOLUME ) ;
  1557. X  #endif
  1558. X+ #ifdef VPIX_MUSIC
  1559. X+     if (sco_flag_console)
  1560. X+         speaker(instr, "C");
  1561. X+ #endif
  1562. X      if (Confusion)
  1563. X        pline("What you produce is quite far from music...");
  1564. X      else
  1565. X***************
  1566. X*** 321,326 ****
  1567. X--- 346,352 ----
  1568. X            case MAGIC_FLUTE: /* Make monster fall asleep */
  1569. X          if (instr->spe > 0) {
  1570. X              instr->spe--;
  1571. X+             check_unpaid(instr);
  1572. X              You("produce soft music.");
  1573. X              put_monsters_to_sleep((int)u.ulevel*5);
  1574. X          }
  1575. X***************
  1576. X*** 335,340 ****
  1577. X--- 361,367 ----
  1578. X            case FIRE_HORN:    /* Idem wand of fire */
  1579. X          if (instr->spe > 0) {
  1580. X              instr->spe--;
  1581. X+             check_unpaid(instr);
  1582. X              if (!getdir(NULL)) {
  1583. X                  if (!Blind)
  1584. X                      pline("%s glows then fades.",
  1585. X***************
  1586. X*** 366,374 ****
  1587. X          break;
  1588. X            case MAGIC_HARP:    /* Charm monsters */
  1589. X          if (instr->spe > 0) {
  1590. X              pline("%s produces very attractive music.",
  1591. X                    The(xname(instr)));
  1592. X-             instr->spe--;
  1593. X              charm_monsters(((int)u.ulevel - 1) / 3 + 1);
  1594. X          }
  1595. X          exercise(A_DEX, TRUE);
  1596. X--- 393,402 ----
  1597. X          break;
  1598. X            case MAGIC_HARP:    /* Charm monsters */
  1599. X          if (instr->spe > 0) {
  1600. X+             instr->spe--;
  1601. X+             check_unpaid(instr);
  1602. X              pline("%s produces very attractive music.",
  1603. X                    The(xname(instr)));
  1604. X              charm_monsters(((int)u.ulevel - 1) / 3 + 1);
  1605. X          }
  1606. X          exercise(A_DEX, TRUE);
  1607. X***************
  1608. X*** 380,389 ****
  1609. X          break;
  1610. X            case DRUM_OF_EARTHQUAKE:    /* create several pits */
  1611. X          if (instr->spe > 0) {
  1612. X              You("produce a heavy, thunderous rolling!");
  1613. X              pline("The entire dungeon is shaking around you!");
  1614. X-             instr->spe--;
  1615. X              do_earthquake(((int)u.ulevel - 1) / 3 + 1);
  1616. X              makeknown(DRUM_OF_EARTHQUAKE);
  1617. X          }
  1618. X          break;
  1619. X--- 408,420 ----
  1620. X          break;
  1621. X            case DRUM_OF_EARTHQUAKE:    /* create several pits */
  1622. X          if (instr->spe > 0) {
  1623. X+             instr->spe--;
  1624. X+             check_unpaid(instr);
  1625. X              You("produce a heavy, thunderous rolling!");
  1626. X              pline("The entire dungeon is shaking around you!");
  1627. X              do_earthquake(((int)u.ulevel - 1) / 3 + 1);
  1628. X+             /* shake up monsters in a much larger radius... */
  1629. X+             awaken_monsters(ROWNO * COLNO);
  1630. X              makeknown(DRUM_OF_EARTHQUAKE);
  1631. X          }
  1632. X          break;
  1633. X***************
  1634. X*** 394,464 ****
  1635. X      return (2);        /* That takes time */
  1636. X  }
  1637. X  
  1638. X- #ifdef SYSV386MUSIC
  1639. X  /*
  1640. X-  * Play audible music on the machine's speaker if appropriate.
  1641. X-  */
  1642. X- 
  1643. X- static int
  1644. X- atconsole()
  1645. X- {
  1646. X-     /*
  1647. X-      * Kluge alert: This code assumes that your [34]86 has no X terminals
  1648. X-      * attached and that the console tty type is AT386 (this is always true
  1649. X-      * under AT&T UNIX for these boxen). The theory here is that your remote
  1650. X-      * ttys will have terminal type `ansi' or something else other than
  1651. X-      * `AT386' or `xterm'. We'd like to do better than this, but testing
  1652. X-      * to see if we're running on the console physical terminal is quite
  1653. X-      * difficult given the presence of virtual consoles and other modern
  1654. X-      * UNIX impedimenta...
  1655. X-      */
  1656. X-     char    *termtype = getenv("TERM");
  1657. X- 
  1658. X-      return(!strcmp(termtype, "AT386") || !strcmp(termtype, "xterm"));
  1659. X- }
  1660. X- 
  1661. X- static void
  1662. X- speaker(instr, buf)
  1663. X- struct obj *instr;
  1664. X- char    *buf;
  1665. X- {
  1666. X-     /*
  1667. X-      * For this to work, you need to have installed the PD speaker-control
  1668. X-      * driver for PC-compatible UNIX boxes that I (eric@snark.uu.net)
  1669. X-      * posted to comp.sources.unix in Feb 1990. A copy may be included
  1670. X-      * with your nethack distribution.
  1671. X-      */
  1672. X-     int    fd;
  1673. X- 
  1674. X-     if ((fd = open("/dev/speaker", 1)) != -1)
  1675. X-     {
  1676. X-     /* send a prefix to modify instrumental `timbre' */
  1677. X-     switch (instr->otyp)
  1678. X-     {
  1679. X-     case WOODEN_FLUTE:
  1680. X-     case MAGIC_FLUTE:
  1681. X-         (void) write(fd, ">ol", 1); /* up one octave & lock */
  1682. X-         break;
  1683. X-     case TOOLED_HORN:
  1684. X-     case FROST_HORN:
  1685. X-     case FIRE_HORN:
  1686. X-         (void) write(fd, "<<ol", 2); /* drop two octaves & lock */
  1687. X-         break;
  1688. X-     case BUGLE:
  1689. X-         (void) write(fd, "ol", 2); /* octave lock */
  1690. X-         break;
  1691. X-     case WOODEN_HARP:
  1692. X-     case MAGIC_HARP:
  1693. X-         (void) write(fd, "l8mlol", 4); /* fast, legato, octave lock */
  1694. X-         break;
  1695. X-     }
  1696. X-     (void) write(fd, buf, strlen(buf));
  1697. X-     (void) close(fd);
  1698. X-     }
  1699. X- }
  1700. X- #endif /* SYSV386MUSIC */
  1701. X- 
  1702. X- /*
  1703. X   * So you want music...
  1704. X   */
  1705. X  
  1706. X--- 425,431 ----
  1707. X***************
  1708. X*** 478,494 ****
  1709. X      c = yn("Improvise?");
  1710. X      }
  1711. X      if (c == 'n') {
  1712. X!     getlin("What tune are you playing? [what 5 notes]", buf);
  1713. X  #ifndef    AMIGA
  1714. X      /* The AMIGA supports two octaves of notes */
  1715. X      for (s=buf; *s; s++) *s = highc(*s);
  1716. X  #endif
  1717. X      You("extract a strange sound from %s!", the(xname(instr)));
  1718. X! #ifdef SYSV386MUSIC 
  1719. X      /* if user is at the console, play through the console speaker */
  1720. X      if (atconsole())
  1721. X          speaker(instr, buf);
  1722. X! #endif /* SYSV386MUSIC */
  1723. X  #ifdef MAC
  1724. X      mac_speaker ( instr , buf ) ;
  1725. X  #endif
  1726. X--- 445,468 ----
  1727. X      c = yn("Improvise?");
  1728. X      }
  1729. X      if (c == 'n') {
  1730. X!     if (u.uevent.uheard_tune == 2 && yn("Play the passtune?") == 'y')
  1731. X!         Strcpy(buf, tune);
  1732. X!     else
  1733. X!         getlin("What tune are you playing? [what 5 notes]", buf);
  1734. X  #ifndef    AMIGA
  1735. X      /* The AMIGA supports two octaves of notes */
  1736. X      for (s=buf; *s; s++) *s = highc(*s);
  1737. X  #endif
  1738. X      You("extract a strange sound from %s!", the(xname(instr)));
  1739. X! #ifdef UNIX386MUSIC
  1740. X      /* if user is at the console, play through the console speaker */
  1741. X      if (atconsole())
  1742. X          speaker(instr, buf);
  1743. X! #endif
  1744. X! #ifdef VPIX_MUSIC
  1745. X!     if (sco_flag_console)
  1746. X!         speaker(instr, buf);
  1747. X! #endif
  1748. X  #ifdef MAC
  1749. X      mac_speaker ( instr , buf ) ;
  1750. X  #endif
  1751. X***************
  1752. X*** 575,579 ****
  1753. X--- 549,696 ----
  1754. X      } else
  1755. X          return do_improvisation(instr);
  1756. X  }
  1757. X+ 
  1758. X+ #ifdef UNIX386MUSIC
  1759. X+ /*
  1760. X+  * Play audible music on the machine's speaker if appropriate.
  1761. X+  */
  1762. X+ 
  1763. X+ static int
  1764. X+ atconsole()
  1765. X+ {
  1766. X+     /*
  1767. X+      * Kluge alert: This code assumes that your [34]86 has no X terminals
  1768. X+      * attached and that the console tty type is AT386 (this is always true
  1769. X+      * under AT&T UNIX for these boxen). The theory here is that your remote
  1770. X+      * ttys will have terminal type `ansi' or something else other than
  1771. X+      * `AT386' or `xterm'. We'd like to do better than this, but testing
  1772. X+      * to see if we're running on the console physical terminal is quite
  1773. X+      * difficult given the presence of virtual consoles and other modern
  1774. X+      * UNIX impedimenta...
  1775. X+      */
  1776. X+     char    *termtype = getenv("TERM");
  1777. X+ 
  1778. X+      return(!strcmp(termtype, "AT386") || !strcmp(termtype, "xterm"));
  1779. X+ }
  1780. X+ 
  1781. X+ static void
  1782. X+ speaker(instr, buf)
  1783. X+ struct obj *instr;
  1784. X+ char    *buf;
  1785. X+ {
  1786. X+     /*
  1787. X+      * For this to work, you need to have installed the PD speaker-control
  1788. X+      * driver for PC-compatible UNIX boxes that I (esr@snark.thyrsus.com)
  1789. X+      * posted to comp.sources.unix in Feb 1990.  A copy should be included
  1790. X+      * with your nethack distribution.
  1791. X+      */
  1792. X+     int    fd;
  1793. X+ 
  1794. X+     if ((fd = open("/dev/speaker", 1)) != -1)
  1795. X+     {
  1796. X+     /* send a prefix to modify instrumental `timbre' */
  1797. X+     switch (instr->otyp)
  1798. X+     {
  1799. X+     case WOODEN_FLUTE:
  1800. X+     case MAGIC_FLUTE:
  1801. X+         (void) write(fd, ">ol", 1); /* up one octave & lock */
  1802. X+         break;
  1803. X+     case TOOLED_HORN:
  1804. X+     case FROST_HORN:
  1805. X+     case FIRE_HORN:
  1806. X+         (void) write(fd, "<<ol", 2); /* drop two octaves & lock */
  1807. X+         break;
  1808. X+     case BUGLE:
  1809. X+         (void) write(fd, "ol", 2); /* octave lock */
  1810. X+         break;
  1811. X+     case WOODEN_HARP:
  1812. X+     case MAGIC_HARP:
  1813. X+         (void) write(fd, "l8mlol", 4); /* fast, legato, octave lock */
  1814. X+         break;
  1815. X+     }
  1816. X+     (void) write(fd, buf, strlen(buf));
  1817. X+     (void) close(fd);
  1818. X+     }
  1819. X+ }
  1820. X+ #endif /* UNIX386MUSIC */
  1821. X+ 
  1822. X+ #ifdef VPIX_MUSIC
  1823. X+ 
  1824. X+ # if 0
  1825. X+ #include <sys/types.h>
  1826. X+ #include <sys/console.h>
  1827. X+ #include <sys/vtkd.h>
  1828. X+ # else
  1829. X+ #define KIOC ('K' << 8)
  1830. X+ #define KDMKTONE (KIOC | 8)
  1831. X+ # endif
  1832. X+ 
  1833. X+ #define noDEBUG
  1834. X+ 
  1835. X+ #include "interp.c"    /* from snd86unx.shr */
  1836. X+ 
  1837. X+ static void tone(hz, ticks)
  1838. X+ /* emit tone of frequency hz for given number of ticks */
  1839. X+ unsigned int hz, ticks;
  1840. X+ {
  1841. X+     ioctl(0,KDMKTONE,hz|((ticks*10)<<16));
  1842. X+ # ifdef DEBUG
  1843. X+     printf("TONE: %6d %6d\n",hz,ticks * 10);
  1844. X+ # endif
  1845. X+     nap(ticks * 10);
  1846. X+ }
  1847. X+ 
  1848. X+ 
  1849. X+ static void rest(ticks)
  1850. X+ /* rest for given number of ticks */
  1851. X+ int    ticks;
  1852. X+ {
  1853. X+     nap(ticks * 10);
  1854. X+ # ifdef DEBUG
  1855. X+     printf("REST:        %6d\n",ticks * 10);
  1856. X+ # endif
  1857. X+ }
  1858. X+ 
  1859. X+ 
  1860. X+ static void
  1861. X+ speaker(instr, buf)
  1862. X+ struct obj *instr;
  1863. X+ char    *buf;
  1864. X+ {
  1865. X+     /* emit a prefix to modify instrumental `timbre' */
  1866. X+     playinit();
  1867. X+     switch (instr->otyp)
  1868. X+     {
  1869. X+     case WOODEN_FLUTE:
  1870. X+     case MAGIC_FLUTE:
  1871. X+         playstring(">ol", 1); /* up one octave & lock */
  1872. X+         break;
  1873. X+     case TOOLED_HORN:
  1874. X+     case FROST_HORN:
  1875. X+     case FIRE_HORN:
  1876. X+         playstring("<<ol", 2); /* drop two octaves & lock */
  1877. X+         break;
  1878. X+     case BUGLE:
  1879. X+         playstring("ol", 2); /* octave lock */
  1880. X+         break;
  1881. X+     case WOODEN_HARP:
  1882. X+     case MAGIC_HARP:
  1883. X+         playstring("l8mlol", 4); /* fast, legato, octave lock */
  1884. X+         break;
  1885. X+     }
  1886. X+     playstring( buf, strlen(buf));
  1887. X+ }
  1888. X+ 
  1889. X+ # ifdef DEBUG
  1890. X+ main(argc,argv)
  1891. X+ char *argv[];
  1892. X+ {
  1893. X+     if (argc == 2) {
  1894. X+     playinit();
  1895. X+     playstring(argv[1], strlen(argv[1]));
  1896. X+     }
  1897. X+ }
  1898. X+ # endif
  1899. X+ #endif    /* VPIX_MUSIC */
  1900. X  
  1901. X  /*music.c*/
  1902. END_OF_FILE
  1903. if test 54556 -ne `wc -c <'patches02e'`; then
  1904.     echo shar: \"'patches02e'\" unpacked with wrong size!
  1905. fi
  1906. # end of 'patches02e'
  1907. if test -f 'sys/mac/NHrez.hqx' -a "${1}" != "-c" ; then 
  1908.   echo shar: Renaming existing file \"'sys/mac/NHrez.hqx'\" to \"'sys/mac/NHrez.hqx.orig'\"
  1909.   mv -f 'sys/mac/NHrez.hqx' 'sys/mac/NHrez.hqx.orig'
  1910. fi
  1911. echo shar: Extracting \"'sys/mac/NHrez.hqx'\" \(3692 characters\)
  1912. sed "s/^X//" >'sys/mac/NHrez.hqx' <<'END_OF_FILE'
  1913. X(This file must be converted with BinHex 4.0)
  1914. X
  1915. X:#8jPG%KKBfXZFJ"849K869"6)!#3"!Nc!!!"V2@%58j$6&9%45!L6Q9d5'&MDbj
  1916. XbFh*M)MX*N!-[+L"048j9,#"03N&5,#""6&*8,#"A58j%,#"*3diM,#"PG'-J+Lm
  1917. X058j$6&9%45!L8fpeEQ4c,R*cFQ-L1`Q3!bmU)%PZFh4bG@ePER4c)'&c)(0ZC#"
  1918. XbCA0[GA*MCA-J+Lm0$50TEQ0XG@4P)#*8HA"PFbjb)JdMD@jME(9NC5!L8hPc9(P
  1919. X`CA-ZFL)0)fPZBfaeC'8J)N*KE'a[Efj8HA"PFbjb)JNJN!3[+L"0B@-JFQ9cEh9
  1920. XbBf8JG(P`C5"NC@CTEQPdD@pZFb!U,`d0FQ9KC#!R9%9B9#FJ+$%`N!-X)NKPE(!
  1921. XL+5!*)#3N8fKPE'`S)N4KG#)T)#*)C@a`)MX0FQ9KC#!R9%9B9#FJ+$%`-$%X)PG
  1922. XTHNKPE(!L+5!N*&0SC@aX+#*%BA3L+5!L9fPk5'9XF#)l$A*PB@3J*e4&@&3R)#J
  1923. Xa-$!b,#*2F(4)C@a`)LNJ*#46D'9XE#JL4'&d)LNJ)Np`G%KPE(!L1`d[+JebC@&
  1924. XN)#G849K8*b!S-6!`-b`L3feN5'9XF#)T)#3N8fKPE'`S)N4KG#)T)#*$E@4)C@a
  1925. X`)MX0+Lm0FQ9KC#!R9%9B9#FJ+$%`-$3X)NeKBdKPE(!L+5!N*&0SC@aX+#*0B@0
  1926. X%DA)L+5!L6@&M5'9XF#)l$3ebC@&N)#G849K8*b!S-6!`05`L5%JL+5!*)#3N8fK
  1927. XPE'`S)N4KG#)T)#*)5#)l$A*PB@3J*e4&@&3R)#Ja-$!f,#*)DA0dEh*j)LNJ*#4
  1928. X6D'9XE#JL4'&d)LNJ)NKTFh4[FRNL1`ebC@&N)#G849K8*b!S-6!`0b`L6'PMC@j
  1929. XcC5)T)#3N8fKPE'`S)N4KG#)T)#*-D@0PER0P)MX0$A*PB@3J*e4&@&3R)#Ja-$!
  1930. Xi,#*1CAGc)LN*)#3N8fKPE'`S)NeKBd4TFL)T)#*1CAGc)MX0FQ9KC#!R9%9B9#F
  1931. XJ+$%`-$NX)Np`G'P[ER-L+5!N*&0SC@aX+#*2BQT%DA)L+5!L6h"dD@pZFb)l$3d
  1932. X[+JebC@&N)#G849K8*b!S-6!a-#`L8R9YEh*c)LNJ)#3N8fKPE'`S)NpLDN4TFL)
  1933. XT)#*5G@e[FR-L1`ebC@&N)#G849K8*b!S-6!a-5`L4'&dB5)T)*!%*#46D'9XE#J
  1934. XL6f*U4'Pb)LNJ)N4KG'%L1`dU,`d0FQ9cEh9bBf8J*e0*@N8R)#JY-5NJH`d*FQ9
  1935. XcCA*fC@3X$3PKBf0PF(46GA0`C@jN8Q9cG@eP4ACPER4c,!d*FQ9cCA*fC@3X$3P
  1936. XMB@j#B@0VCh*[G@jN,!d*C'pPFd&MG'PfBA4P6fj'4e0hDA4MD#`0#@*KBfYRFQp
  1937. XeEQ4"EQ4'Eh*PCh*[G@jN,!d*C'pZG%GPG%CbEfjd3faTBfYc,!d*D@GZEh*P3A"
  1938. X`4'PPC%9fC@jdFb`0#@Pc-c*#DA4$Efe`BA4TBQaP,!d*EQpd5'PRD%aPGQ9X4AC
  1939. XPER4"Gf&bC5`0#@pZE(P-Ef0KE%K-4ACPER4c,!d*EQpd8h4KG'P[EQ9bH8&hBA*
  1940. XP,!d*C'pZG&9cC94PH(4&C'Pd8f9bGQPMCA-X$3PbCA0PFRCPC#`0#A*PFf9bGQ9
  1941. XN,!d*FQ9cCA*fC@3X$3Na06!`)#SJ-6!b0#`*#5mU)(*PBfpYE@9ZC'9N)#S[$3N
  1942. Xa-*!$)#SJ-6!b0!Q3!bmU)'&LFfpXGA4P)'eTEQPYG@dX)(4[)'*P)'4PG'9bE@P
  1943. XZC@3J+Lm0I6X0$5mU)&0jFh4PE5!h)'KPE(!JBQ&XE'p[EL"TEQC[FQeKG'P[EL!
  1944. XU,`ebCA0[GA*MC5!RD'CNFLFJ+#de0MNf,#"`GA*RC@&LE'8T)(XJ$5#3"8KPE("
  1945. X0Ch*@CA*cD@pZ,#"SE84PCQ&eE(42F(4TEfjc,#!`,#!`,#![+L"SC@&NCA)JD@j
  1946. XQEh*YBA4TEfiJ+LmJ$3NJN!4l)%K08e458Q9c5A4PE5"l)#mU)(9cC5!R8e45)#F
  1947. XJFQ9cEh9bBf8J-M#3!b!U,b!b-*!$)(dJ$3Pp)!ep1`d0FQ9cEh9bBf8J*e088L!
  1948. XR)#Jb-*!$,#"`GA*RC@&LE'8T)(XJ,bSJ5'9XF#"YCA0cB@GP)'C[FL"KF(!JD@0
  1949. X[EL!U,`dJN!-L6Q9d5'&MDb!c,M&FEP4SDA-JDA-JG'KP)'CKE@peFb"%G@jRC@p
  1950. XZFb"KEQ3J4(*KCfpZFkSYE'PVC5"RB@eP)("[FR4PC#"dEb"dD'8J6@&MD@jdEh0
  1951. XS,L)J$Adl$3ebCA0[GA*MC5!R8e45)#FS,6%f-cNf,#"`GA*RC@&LE'8T)(X*,bS
  1952. XJ9fPXE#"LC5"MEh"TC@3JG'mJG'KP)(0KGQ9N)'CTE'8Z)#S[$3NL6Q9d5'&MDb)
  1953. X*N!F[+L"6C@8J5@jcD@4P)%eKBb"@55`JF'&RC5!j,6)a,JNJ+Lm0I6X0N!-[+L"
  1954. X0B@-JCA*bEh)JC'9MEf4PFb!k)$)`N!-J,5"PFR)M)'C[FL"MEfeYEfiJCA*bEh*
  1955. Xc,L""C'3JH@peFL"QBAC[FQPdCA-JBQ9XEhFJ+Lm0$A*PFfpeFQ0P)#G69&)J*b!
  1956. XS-M!c0#NJHb!LG'KP)'4TFfXJDA-JCR9XE#)J)(dl$A*PFfpeFQ0P)#G69&)J*b!
  1957. XS-M!c0LNJHb!LG'KPFQ8JGf&c)'&Z)%N[6b"PFR*[FL)J)(dl$A*PFfpeFQ0P)#G
  1958. X69&)J*b!S-M!d-bNJHb!LB5"QD@aP)'Pc)'eTFh0TEQFL)#"p1`ebCA0[GA*MC5!
  1959. XR8e45)#FJ+$)`0$3T)(XJ)R4SC5"NDA0V)'Pc)(GbDA4P,A"bEh4PBh4PC#)J)(d
  1960. Xl$A*PFfpeFQ0P)#G69&)J*b!S-M!d0bNJHb!LG'KP)'CTE'8JDA-JBR9cH5)J)(d
  1961. Xl$A*PFfpeFQ0P)#G69&)J*b!S-M!d15NJHb!LG'KP)'CTE'8JDA-JB@abC@&NH5"
  1962. X[F'9Z)L!JI6X0FQ9cEh9bBf8J*e088L!R)#Jb-6!i+5"l)#*dD'9bC5"TFb"ZEh3
  1963. XJC@j[G@GS)'ePE@pbH5)J)(dl$A*PFfpeFQ0P)#G69&)J*b!S-M%j-LNJHb!LB5"
  1964. XbCA0[GA*MC5"TFb"YDA0cD@jR)L!JI6X0NN!!!!%!N!-"EJ#3!fi!N!-q'rJ!!$[
  1965. Xi!!"lq!!!!rJ!!2ri!!$`1!!!rrJ!!1!i!!!*6Q9d5'&MDbjb!J#3!e4&@&409dP
  1966. X*!*!-9%9B9%eA58N!N"LS#ac8!!!*-`!!!D`!N"'!ri!!!)&!!!#")!!!J4!!!)(
  1967. Xi!!#!#!!!MmJ!!)!)!!#Ib!!!J!J!!)r)!!#!#!!!RmJ!!)!)!!#!#!!!rrJ!N$9
  1968. X)!!P0EfjKBfm!!'pd)'9iC@0eG'8JB5"NDA*PBh4[FRNX)!!'!!3!+J!N!eF#)!!
  1969. Xm!#3"M3)pTkY4EJ#3$!%!N!3H!#S!*!0A!L!!2!!N!Bd#23#3%!%!N!-"EJ#3!fi
  1970. X!N!-q!"[ej!C!!*!$(!!q!!"08&05!!%!#J2Yrrm!N!8EqZJ$m2rr!*!$6!!Eq33
  1971. Xp+3:
  1972. END_OF_FILE
  1973. if test 3692 -ne `wc -c <'sys/mac/NHrez.hqx'`; then
  1974.     echo shar: \"'sys/mac/NHrez.hqx'\" unpacked with wrong size!
  1975. fi
  1976. # end of 'sys/mac/NHrez.hqx'
  1977. echo shar: End of archive 15 \(of 33\).
  1978. cp /dev/null ark15isdone
  1979. MISSING=""
  1980. 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 32 33 ; do
  1981.     if test ! -f ark${I}isdone ; then
  1982.     MISSING="${MISSING} ${I}"
  1983.     fi
  1984. done
  1985. if test "${MISSING}" = "" ; then
  1986.     echo You have unpacked all 33 archives.
  1987.     echo "Now execute ./patchit.sh"
  1988.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1989. else
  1990.     echo You still need to unpack the following archives:
  1991.     echo "        " ${MISSING}
  1992. fi
  1993. ##  End of shell archive.
  1994. exit 0
  1995.