home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume16 / nethck31 / patch3b < prev    next >
Encoding:
Internet Message Format  |  1993-07-23  |  60.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: v18i035:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch3b/18
  5. Date: 20 Jul 1993 22:31:41 GMT
  6. Organization: Tektronix, Inc, Redmond, OR, USA
  7. Lines: 2204
  8. Approved: billr@saab.CNA.TEK.COM
  9. Message-ID: <22hrod$9pp@ying.cna.tek.com>
  10. NNTP-Posting-Host: saab.cna.tek.com
  11. Xref: uunet comp.sources.games:1835
  12.  
  13. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  14. Posting-number: Volume 18, Issue 35
  15. Archive-name: nethack31/patch3b
  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 2 (of 18)."
  28. # Contents:  patches03c sys/share/NOTE
  29. # Wrapped by billr@saab on Tue Jul 20 14:57:18 1993
  30. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  31. if test -f 'patches03c' -a "${1}" != "-c" ; then 
  32.   echo shar: Renaming existing file \"'patches03c'\" to \"'patches03c.orig'\"
  33.   mv -f 'patches03c' 'patches03c.orig'
  34. fi
  35. echo shar: Extracting \"'patches03c'\" \(56262 characters\)
  36. sed "s/^X//" >'patches03c' <<'END_OF_FILE'
  37. X*** /tmp/da21333    Mon Jul 12 17:34:14 1993
  38. X--- src/pray.c    Fri Jul  9 15:33:46 1993
  39. X***************
  40. X*** 770,776 ****
  41. X            (changed > 1L ? "s" : ""), (changed > 1L ? "" : "s"),
  42. X            (bless_water ? amber : Black));
  43. X      }
  44. X!     return (changed > 0L);
  45. X  }
  46. X  
  47. X  static void
  48. X--- 770,776 ----
  49. X            (changed > 1L ? "s" : ""), (changed > 1L ? "" : "s"),
  50. X            (bless_water ? amber : Black));
  51. X      }
  52. X!     return((boolean)(changed > 0L));
  53. X  }
  54. X  
  55. X  static void
  56. X*** /tmp/da21341    Mon Jul 12 17:34:17 1993
  57. X--- src/priest.c    Thu Jul  8 15:49:54 1993
  58. X***************
  59. X*** 132,139 ****
  60. X  register struct monst *priest;
  61. X  register xchar x, y;
  62. X  {
  63. X!     return((EPRI(priest)->shroom == *in_rooms(x, y, TEMPLE)) &&
  64. X!            on_level(&(EPRI(priest)->shrlevel), &u.uz));
  65. X  }
  66. X  
  67. X  /*
  68. X--- 132,139 ----
  69. X  register struct monst *priest;
  70. X  register xchar x, y;
  71. X  {
  72. X!     return((boolean)((EPRI(priest)->shroom == *in_rooms(x, y, TEMPLE)) &&
  73. X!            on_level(&(EPRI(priest)->shrlevel), &u.uz)));
  74. X  }
  75. X  
  76. X  /*
  77. X***************
  78. X*** 305,311 ****
  79. X  p_coaligned(priest)
  80. X  struct monst *priest;
  81. X  {
  82. X!     return(u.ualign.type == ((int)EPRI(priest)->shralign));
  83. X  }
  84. X  
  85. X  static boolean
  86. X--- 305,311 ----
  87. X  p_coaligned(priest)
  88. X  struct monst *priest;
  89. X  {
  90. X!     return((boolean)(u.ualign.type == ((int)EPRI(priest)->shralign)));
  91. X  }
  92. X  
  93. X  static boolean
  94. X***************
  95. X*** 319,325 ****
  96. X      lev = &levl[EPRI(pri)->shrpos.x][EPRI(pri)->shrpos.y];
  97. X      if (!IS_ALTAR(lev->typ) || !(lev->altarmask & AM_SHRINE))
  98. X          return(FALSE);
  99. X!     return(EPRI(pri)->shralign == Amask2align(lev->altarmask & ~AM_SHRINE));
  100. X  }
  101. X  
  102. X  struct monst *
  103. X--- 319,325 ----
  104. X      lev = &levl[EPRI(pri)->shrpos.x][EPRI(pri)->shrpos.y];
  105. X      if (!IS_ALTAR(lev->typ) || !(lev->altarmask & AM_SHRINE))
  106. X          return(FALSE);
  107. X!     return((boolean)(EPRI(pri)->shralign == Amask2align(lev->altarmask & ~AM_SHRINE)));
  108. X  }
  109. X  
  110. X  struct monst *
  111. X***************
  112. X*** 483,489 ****
  113. X              verbalize("I bestow upon thee a blessing.");
  114. X              Clairvoyant += rn1(500,500);
  115. X          }
  116. X!         } else if(offer < (u.ulevel * 600)) {
  117. X          verbalize("Thy devotion has been rewarded.");
  118. X          if (!(Protection & INTRINSIC))  {
  119. X              Protection |= FROMOUTSIDE;
  120. X--- 483,491 ----
  121. X              verbalize("I bestow upon thee a blessing.");
  122. X              Clairvoyant += rn1(500,500);
  123. X          }
  124. X!         } else if(offer < (u.ulevel * 600) &&
  125. X!               u.ublessed < 20 &&
  126. X!               (u.ublessed < 9 || !rn2(u.ublessed))) {
  127. X          verbalize("Thy devotion has been rewarded.");
  128. X          if (!(Protection & INTRINSIC))  {
  129. X              Protection |= FROMOUTSIDE;
  130. X***************
  131. X*** 493,499 ****
  132. X          verbalize("Thy selfless generosity is deeply appreciated.");
  133. X          if(u.ugold < (offer * 2L) && coaligned) {
  134. X              if(strayed && (moves - u.ucleansed) > 5000L) {
  135. X!             u.ualign.record = 0; /* cleanse him */
  136. X              u.ucleansed = moves;
  137. X              } else {
  138. X              u.ualign.record += 2;
  139. X--- 495,501 ----
  140. X          verbalize("Thy selfless generosity is deeply appreciated.");
  141. X          if(u.ugold < (offer * 2L) && coaligned) {
  142. X              if(strayed && (moves - u.ucleansed) > 5000L) {
  143. X!             u.ualign.record = 0; /* cleanse thee */
  144. X              u.ucleansed = moves;
  145. X              } else {
  146. X              u.ualign.record += 2;
  147. X***************
  148. X*** 561,567 ****
  149. X          (roomno != *in_rooms(x, y, TEMPLE)) ||
  150. X          !(priest = findpriest(roomno)))
  151. X          return(FALSE);
  152. X!     return(has_shrine(priest) && p_coaligned(priest) && priest->mpeaceful);
  153. X  }
  154. X  
  155. X  void
  156. X--- 563,569 ----
  157. X          (roomno != *in_rooms(x, y, TEMPLE)) ||
  158. X          !(priest = findpriest(roomno)))
  159. X          return(FALSE);
  160. X!     return((boolean)(has_shrine(priest) && p_coaligned(priest) && priest->mpeaceful));
  161. X  }
  162. X  
  163. X  void
  164. X*** /tmp/da21350    Mon Jul 12 17:34:19 1993
  165. X--- src/quest.c    Wed Jul  7 16:25:20 1993
  166. X***************
  167. X*** 123,135 ****
  168. X  boolean
  169. X  ok_to_quest()
  170. X  {
  171. X!     return(Qstat(got_quest) || Qstat(got_thanks));
  172. X  }
  173. X  
  174. X  static boolean
  175. X  not_capable()
  176. X  {
  177. X!     return(u.ulevel < MIN_QUEST_LEVEL);
  178. X  }
  179. X  
  180. X  /* TODO:    This one needs tuning. */
  181. X--- 123,135 ----
  182. X  boolean
  183. X  ok_to_quest()
  184. X  {
  185. X!     return((boolean)(Qstat(got_quest) || Qstat(got_thanks)));
  186. X  }
  187. X  
  188. X  static boolean
  189. X  not_capable()
  190. X  {
  191. X!     return((boolean)(u.ulevel < MIN_QUEST_LEVEL));
  192. X  }
  193. X  
  194. X  /* TODO:    This one needs tuning. */
  195. X***************
  196. X*** 145,151 ****
  197. X          u.ualign.record = MIN_QUEST_ALIGN;
  198. X      }
  199. X  #endif
  200. X!   return(u.ualign.record < MIN_QUEST_ALIGN);
  201. X  }
  202. X  
  203. X  /*
  204. X--- 145,151 ----
  205. X          u.ualign.record = MIN_QUEST_ALIGN;
  206. X      }
  207. X  #endif
  208. X!   return((boolean)(u.ualign.record < MIN_QUEST_ALIGN));
  209. X  }
  210. X  
  211. X  /*
  212. X*** /tmp/da21358    Mon Jul 12 17:34:21 1993
  213. X--- src/questpgr.c    Wed Jul  7 16:25:22 1993
  214. X***************
  215. X*** 10,16 ****
  216. X  #include "qtext.h"
  217. X  
  218. X  #define QTEXT_FILE    "quest.dat"
  219. X! #if defined(MICRO) && !defined(AMIGA)
  220. X  # define RDMODE "rb"
  221. X  #else
  222. X  # define RDMODE "r"
  223. X--- 10,16 ----
  224. X  #include "qtext.h"
  225. X  
  226. X  #define QTEXT_FILE    "quest.dat"
  227. X! #if (defined(MICRO) && !defined(AMIGA)) || defined(THINK_C)
  228. X  # define RDMODE "rb"
  229. X  #else
  230. X  # define RDMODE "r"
  231. X***************
  232. X*** 243,249 ****
  233. X          case 'A':    return(0);
  234. X          case 'B':    return(1);
  235. X          case 'C':    return(2);
  236. X!         case 'E':    return(3+flags.female);
  237. X          case 'H':    return(5);
  238. X          case 'K':    return(6);
  239. X          case 'P':    return(7);
  240. X--- 243,249 ----
  241. X          case 'A':    return(0);
  242. X          case 'B':    return(1);
  243. X          case 'C':    return(2);
  244. X!         case 'E':    return((unsigned)(3+flags.female));
  245. X          case 'H':    return(5);
  246. X          case 'K':    return(6);
  247. X          case 'P':    return(7);
  248. X***************
  249. X*** 280,286 ****
  250. X  is_quest_artifact(otmp)
  251. X  struct obj *otmp;
  252. X  {
  253. X!     return(otmp->oartifact == qt_matrix[class_index()].artinum);
  254. X  }
  255. X  
  256. X  static const char *
  257. X--- 280,286 ----
  258. X  is_quest_artifact(otmp)
  259. X  struct obj *otmp;
  260. X  {
  261. X!     return((boolean)(otmp->oartifact == qt_matrix[class_index()].artinum));
  262. X  }
  263. X  
  264. X  static const char *
  265. X***************
  266. X*** 305,311 ****
  267. X  leaderless()    /* return true iff leader is dead */
  268. X  {
  269. X      int i = qt_matrix[class_index()].ldrnum;
  270. X!     return (u.nr_killed[i] > 0);
  271. X  }
  272. X  
  273. X  static struct qtmsg *
  274. X--- 305,311 ----
  275. X  leaderless()    /* return true iff leader is dead */
  276. X  {
  277. X      int i = qt_matrix[class_index()].ldrnum;
  278. X!     return((boolean)(u.nr_killed[i] > 0));
  279. X  }
  280. X  
  281. X  static struct qtmsg *
  282. X*** /tmp/da21367    Mon Jul 12 17:34:24 1993
  283. X--- src/read.c    Mon Jul 12 13:45:27 1993
  284. X***************
  285. X*** 86,94 ****
  286. X          pline("As you read the scroll, it disappears.");
  287. X        if(confused) {
  288. X          if (Hallucination)
  289. X!         pline("Being so trippy, you screw up....");
  290. X          else
  291. X!         pline("Being confused, you mispronounce the magic words....");
  292. X        }
  293. X      }
  294. X      if(!seffects(scroll))  {
  295. X--- 86,94 ----
  296. X          pline("As you read the scroll, it disappears.");
  297. X        if(confused) {
  298. X          if (Hallucination)
  299. X!         pline("Being so trippy, you screw up...");
  300. X          else
  301. X!         pline("Being confused, you mispronounce the magic words...");
  302. X        }
  303. X      }
  304. X      if(!seffects(scroll))  {
  305. X***************
  306. X*** 1194,1200 ****
  307. X      if (tries == 5) pline(thats_enough_tries);
  308. X      else {
  309. X          (void) cant_create(&which);
  310. X!         return makemon(&mons[which], u.ux, u.uy) != 0;
  311. X      }
  312. X      return FALSE;
  313. X  }
  314. X--- 1194,1200 ----
  315. X      if (tries == 5) pline(thats_enough_tries);
  316. X      else {
  317. X          (void) cant_create(&which);
  318. X!         return((boolean)(makemon(&mons[which], u.ux, u.uy) != 0));
  319. X      }
  320. X      return FALSE;
  321. X  }
  322. X*** /tmp/da21383    Mon Jul 12 17:34:28 1993
  323. X--- src/restore.c    Mon Jul 12 13:38:57 1993
  324. X***************
  325. X*** 25,30 ****
  326. X--- 25,34 ----
  327. X  static boolean FDECL(restgamestate, (int, unsigned int *));
  328. X  static int FDECL(restlevelfile, (int,XCHAR_P));
  329. X  
  330. X+ #ifdef AMII_GRAPHICS
  331. X+ void NDECL( amii_setpens );        /* use colors from save file */
  332. X+ #endif
  333. X+ 
  334. X  #ifdef MULDGN
  335. X  #include "quest.h"
  336. X  #endif
  337. X***************
  338. X*** 241,247 ****
  339. X          if(mtmp->minvent)
  340. X              mtmp->minvent = restobjchn(fd, ghostly);
  341. X  #ifdef MUSE
  342. X!         if (mtmp->mw) mtmp->mw = mtmp->minvent;    /* wield 1st obj in inventory */
  343. X  #endif
  344. X          if (mtmp->isshk) restshk(mtmp, ghostly);
  345. X          if (mtmp->ispriest) restpriest(mtmp, ghostly);
  346. X--- 245,261 ----
  347. X          if(mtmp->minvent)
  348. X              mtmp->minvent = restobjchn(fd, ghostly);
  349. X  #ifdef MUSE
  350. X!         if (mtmp->mw) {
  351. X!             struct obj *obj;
  352. X! 
  353. X!             for(obj = mtmp->minvent; obj; obj = obj->nobj)
  354. X!                 if (obj->owornmask & W_WEP) break;
  355. X!             if (obj) mtmp->mw = obj;
  356. X!             else {
  357. X!                 MON_NOWEP(mtmp);
  358. X!                 impossible("bad monster weapon restore");
  359. X!             }
  360. X!         }
  361. X  #endif
  362. X          if (mtmp->isshk) restshk(mtmp, ghostly);
  363. X          if (mtmp->ispriest) restpriest(mtmp, ghostly);
  364. X***************
  365. X*** 641,647 ****
  366. X          uchar    len;
  367. X          struct rm r;
  368. X          
  369. X! #if defined(applec)
  370. X          memset ( & r , 0 , sizeof ( r ) ) ; /* Suppress warning about used before set */
  371. X  #endif
  372. X          i = 0; j = 0; len = 0;
  373. X--- 655,661 ----
  374. X          uchar    len;
  375. X          struct rm r;
  376. X          
  377. X! #if defined(MAC)
  378. X          memset ( & r , 0 , sizeof ( r ) ) ; /* Suppress warning about used before set */
  379. X  #endif
  380. X          i = 0; j = 0; len = 0;
  381. X*** /tmp/da21415    Mon Jul 12 17:34:37 1993
  382. X--- src/save.c    Fri Jul  2 15:11:03 1993
  383. X***************
  384. X*** 1,4 ****
  385. X! /*    SCCS Id: @(#)save.c    3.1    93/05/26    */
  386. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  387. X  /* NetHack may be freely redistributed.  See license for details. */
  388. X  
  389. X--- 1,4 ----
  390. X! /*    SCCS Id: @(#)save.c    3.1    93/06/27    */
  391. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  392. X  /* NetHack may be freely redistributed.  See license for details. */
  393. X  
  394. X***************
  395. X*** 13,18 ****
  396. X--- 13,21 ----
  397. X  #endif /* EXPLORE_MODE */
  398. X  
  399. X  boolean hu;        /* set during hang-up */
  400. X+ #ifdef VMS
  401. X+ extern volatile int exiting;        /* sys/vms/vmsmain.c */
  402. X+ #endif
  403. X  
  404. X  #ifdef MULDGN
  405. X  #include "quest.h"
  406. X***************
  407. X*** 74,86 ****
  408. X  
  409. X  #ifndef NOSAVEONHANGUP
  410. X  int
  411. X! hangup() {
  412. X      if(!hu) {
  413. X          hu = TRUE;
  414. X          (void) dosave0();
  415. X! # ifndef VMS
  416. X!         terminate(1);
  417. X  # endif
  418. X      }
  419. X      return 0;
  420. X  }
  421. X--- 77,93 ----
  422. X  
  423. X  #ifndef NOSAVEONHANGUP
  424. X  int
  425. X! hangup()
  426. X! {
  427. X      if(!hu) {
  428. X          hu = TRUE;
  429. X          (void) dosave0();
  430. X! # ifdef VMS
  431. X!         /* don't call exit when already within an exit handler;
  432. X!            that would cancel any other pending user-mode handlers */
  433. X!         if (!exiting)
  434. X  # endif
  435. X+         terminate(1);
  436. X      }
  437. X      return 0;
  438. X  }
  439. X*** /tmp/da21423    Mon Jul 12 17:34:39 1993
  440. X--- src/shk.c    Wed Jul  7 16:25:30 1993
  441. X***************
  442. X*** 495,501 ****
  443. X      if (!mtmp)
  444. X          return(FALSE);
  445. X      else
  446. X!         return(inhishop(mtmp));
  447. X  }
  448. X  #endif    /* SOUNDS */
  449. X  
  450. X--- 495,501 ----
  451. X      if (!mtmp)
  452. X          return(FALSE);
  453. X      else
  454. X!         return((boolean)(inhishop(mtmp)));
  455. X  }
  456. X  #endif    /* SOUNDS */
  457. X  
  458. X***************
  459. X*** 2168,2173 ****
  460. X--- 2168,2174 ----
  461. X                  if (!obj->unpaid && !saleitem) obj->no_charge = 1;
  462. X                  subfrombill(obj, shkp);
  463. X                  pay(-offer, shkp);
  464. X+                 shk_names_obj(obj);     /* identify some non-magic objects */
  465. X                  You("sold %s for %ld gold piece%s.", doname(obj),
  466. X                  offer, plur(offer));
  467. X                  break;
  468. X***************
  469. X*** 2180,2185 ****
  470. X--- 2181,2189 ----
  471. X  doinvbill(mode)
  472. X  int mode;        /* 0: deliver count 1: paged */
  473. X  {
  474. X+ #ifdef    __SASC
  475. X+     void sasc_bug(struct obj *, unsigned);
  476. X+ #endif
  477. X      register struct monst* shkp;
  478. X      register struct bill_x *bp, *end_bp;
  479. X      register struct obj *obj;
  480. X***************
  481. X*** 2651,2657 ****
  482. X  is_fshk(mtmp)
  483. X  register struct monst *mtmp;
  484. X  {
  485. X!     return(mtmp->isshk && ESHK(mtmp)->following);
  486. X  }
  487. X  
  488. X  /* You are digging in the shop. */
  489. X--- 2655,2661 ----
  490. X  is_fshk(mtmp)
  491. X  register struct monst *mtmp;
  492. X  {
  493. X!     return((boolean)(mtmp->isshk && ESHK(mtmp)->following));
  494. X  }
  495. X  
  496. X  /* You are digging in the shop. */
  497. X***************
  498. X*** 2902,2910 ****
  499. X      shkp = shop_keeper(*in_rooms(x, y, SHOPBASE));
  500. X      if(!shkp || !inhishop(shkp)) return(FALSE);
  501. X  
  502. X!     return(inside_shop(x, y) &&
  503. X          !(x == ESHK(shkp)->shk.x &&
  504. X!             y == ESHK(shkp)->shk.y));
  505. X  }
  506. X  
  507. X  /* called by dotalk(sounds.c) when #chatting; returns obj if location
  508. X--- 2906,2914 ----
  509. X      shkp = shop_keeper(*in_rooms(x, y, SHOPBASE));
  510. X      if(!shkp || !inhishop(shkp)) return(FALSE);
  511. X  
  512. X!     return((boolean)(inside_shop(x, y) &&
  513. X          !(x == ESHK(shkp)->shk.x &&
  514. X!             y == ESHK(shkp)->shk.y)));
  515. X  }
  516. X  
  517. X  /* called by dotalk(sounds.c) when #chatting; returns obj if location
  518. X***************
  519. X*** 3235,3240 ****
  520. X--- 3239,3245 ----
  521. X  #endif /* OVLB */
  522. X  
  523. X  #ifdef __SASC
  524. X+ void
  525. X  sasc_bug(struct obj *op, unsigned x){
  526. X      op->unpaid=x;
  527. X  }
  528. X*** /tmp/da21431    Mon Jul 12 17:34:45 1993
  529. X--- src/shknam.c    Fri Jul  9 15:36:24 1993
  530. X***************
  531. X*** 107,117 ****
  532. X      "Htargcm", "Enrobwem", "Kachzi Rellim", "Regien", "Donmyar",
  533. X      "Yelpur", "Nosnehpets", "Stewe", "Renrut", "_Zlaw", "Nosalnef",
  534. X      "Rewuorb", "Rellenk", "Yad", "Cire Htims", "Y-crad", "Nenilukah",
  535. X  #ifdef OVERLAY
  536. X!     "Erreip", "Nehpets", "Mron", "Snivek",
  537. X  #endif
  538. X  #ifdef MAC
  539. X      "Nhoj-lee", "Evad\'kh", "Ettaw-noj", "Tsew-mot", "Ydna-s",
  540. X  #endif
  541. X  #ifdef AMIGA
  542. X      "Falo", "Nosid-da\'r", "Ekim-p", "Rebrol-nek", "Noslo", "Yl-rednow",
  543. X--- 107,122 ----
  544. X      "Htargcm", "Enrobwem", "Kachzi Rellim", "Regien", "Donmyar",
  545. X      "Yelpur", "Nosnehpets", "Stewe", "Renrut", "_Zlaw", "Nosalnef",
  546. X      "Rewuorb", "Rellenk", "Yad", "Cire Htims", "Y-crad", "Nenilukah",
  547. X+     "Corsh", "Aned",
  548. X  #ifdef OVERLAY
  549. X!     "Erreip", "Nehpets", "Mron", "Snivek", "Lapu",
  550. X  #endif
  551. X+ #ifdef WIN32
  552. X+     "Lechaim",
  553. X+ #endif
  554. X  #ifdef MAC
  555. X      "Nhoj-lee", "Evad\'kh", "Ettaw-noj", "Tsew-mot", "Ydna-s",
  556. X+     "Yao-hang", "Tonbar",
  557. X  #endif
  558. X  #ifdef AMIGA
  559. X      "Falo", "Nosid-da\'r", "Ekim-p", "Rebrol-nek", "Noslo", "Yl-rednow",
  560. X*** /tmp/da21455    Mon Jul 12 17:34:52 1993
  561. X--- src/sp_lev.c    Tue Jul  6 15:20:22 1993
  562. X***************
  563. X*** 1,4 ****
  564. X! /*    SCCS Id: @(#)sp_lev.c    3.1    92/11/14    */
  565. X  /*    Copyright (c) 1989 by Jean-Christophe Collet */
  566. X  /* NetHack may be freely redistributed.  See license for details. */
  567. X  
  568. X--- 1,4 ----
  569. X! /*    SCCS Id: @(#)sp_lev.c    3.1    93/06/29    */
  570. X  /*    Copyright (c) 1989 by Jean-Christophe Collet */
  571. X  /* NetHack may be freely redistributed.  See license for details. */
  572. X  
  573. X***************
  574. X*** 42,48 ****
  575. X  static boolean FDECL(create_subroom, (struct mkroom *, XCHAR_P, XCHAR_P,
  576. X                      XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P));
  577. X  
  578. X! #if defined(MICRO) && !defined(AMIGA)
  579. X  # define RDMODE "rb"
  580. X  #else
  581. X  # define RDMODE "r"
  582. X--- 42,48 ----
  583. X  static boolean FDECL(create_subroom, (struct mkroom *, XCHAR_P, XCHAR_P,
  584. X                      XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P));
  585. X  
  586. X! #if (defined(MICRO) && !defined(AMIGA)) || defined(THINK_C)
  587. X  # define RDMODE "rb"
  588. X  #else
  589. X  # define RDMODE "r"
  590. X***************
  591. X*** 962,968 ****
  592. X          croom_is_temple = FALSE;
  593. X      } else {
  594. X          get_location(&x, &y, DRY);
  595. X!         if (sproom = (schar) *in_rooms(x, y, TEMPLE))
  596. X          croom = &rooms[sproom - ROOMOFFSET];
  597. X          else
  598. X          croom_is_temple = FALSE;
  599. X--- 962,968 ----
  600. X          croom_is_temple = FALSE;
  601. X      } else {
  602. X          get_location(&x, &y, DRY);
  603. X!         if ((sproom = (schar) *in_rooms(x, y, TEMPLE)) != 0)
  604. X          croom = &rooms[sproom - ROOMOFFSET];
  605. X          else
  606. X          croom_is_temple = FALSE;
  607. X***************
  608. X*** 1376,1392 ****
  609. X          r = ro[n];
  610. X          Free(r->name);
  611. X          Free(r->parent);
  612. X!         if (j = r->ndoor) {
  613. X              while(j--)
  614. X                  Free(r->doors[j]);
  615. X              Free(r->doors);
  616. X          }
  617. X!         if (j = r->ntrap) {
  618. X              while (j--)
  619. X                  Free(r->traps[j]);
  620. X              Free(r->traps);
  621. X          }
  622. X!         if (j = r->nmonster) {
  623. X              while (j--) {
  624. X                  Free(r->monsters[j]->name);
  625. X                  Free(r->monsters[j]->appear_as);
  626. X--- 1376,1392 ----
  627. X          r = ro[n];
  628. X          Free(r->name);
  629. X          Free(r->parent);
  630. X!         if ((j = r->ndoor) != 0) {
  631. X              while(j--)
  632. X                  Free(r->doors[j]);
  633. X              Free(r->doors);
  634. X          }
  635. X!         if ((j = r->ntrap) != 0) {
  636. X              while (j--)
  637. X                  Free(r->traps[j]);
  638. X              Free(r->traps);
  639. X          }
  640. X!         if ((j = r->nmonster) != 0) {
  641. X              while (j--) {
  642. X                  Free(r->monsters[j]->name);
  643. X                  Free(r->monsters[j]->appear_as);
  644. X***************
  645. X*** 1394,1400 ****
  646. X              }
  647. X              Free(r->monsters);
  648. X          }
  649. X!         if (j = r->nobject) {
  650. X              while(j--) {
  651. X                  Free(r->objects[j]->name);
  652. X                  Free(r->objects[j]);
  653. X--- 1394,1400 ----
  654. X              }
  655. X              Free(r->monsters);
  656. X          }
  657. X!         if ((j = r->nobject) != 0) {
  658. X              while(j--) {
  659. X                  Free(r->objects[j]->name);
  660. X                  Free(r->objects[j]);
  661. X***************
  662. X*** 1401,1422 ****
  663. X              }
  664. X              Free(r->objects);
  665. X          }
  666. X!         if (j = r->nstair) {
  667. X              while(j--)
  668. X                  Free(r->stairs[j]);
  669. X              Free(r->stairs);
  670. X          }
  671. X!         if (j = r->naltar) {
  672. X              while (j--)
  673. X                  Free(r->altars[j]);
  674. X              Free(r->altars);
  675. X          }
  676. X!         if (j = r->ngold) {
  677. X              while(j--)
  678. X                  Free(r->golds[j]);
  679. X              Free(r->golds);
  680. X          }
  681. X!         if (j = r->nengraving) {
  682. X              while(j--) {
  683. X                  Free(r->engravings[j]->e.text);
  684. X                  Free(r->engravings[j]);
  685. X--- 1401,1422 ----
  686. X              }
  687. X              Free(r->objects);
  688. X          }
  689. X!         if ((j = r->nstair) != 0) {
  690. X              while(j--)
  691. X                  Free(r->stairs[j]);
  692. X              Free(r->stairs);
  693. X          }
  694. X!         if ((j = r->naltar) != 0) {
  695. X              while (j--)
  696. X                  Free(r->altars[j]);
  697. X              Free(r->altars);
  698. X          }
  699. X!         if ((j = r->ngold) != 0) {
  700. X              while(j--)
  701. X                  Free(r->golds[j]);
  702. X              Free(r->golds);
  703. X          }
  704. X!         if ((j = r->nengraving) != 0) {
  705. X              while(j--) {
  706. X                  Free(r->engravings[j]->e.text);
  707. X                  Free(r->engravings[j]);
  708. X***************
  709. X*** 1423,1439 ****
  710. X              }
  711. X              Free(r->engravings);
  712. X          }
  713. X!         if (j = r->nfountain) {
  714. X              while(j--)
  715. X                  Free(r->fountains[j]);
  716. X              Free(r->fountains);
  717. X          }
  718. X!         if (j = r->nsink) {
  719. X              while(j--)
  720. X                  Free(r->sinks[j]);
  721. X              Free(r->sinks);
  722. X          }
  723. X!         if (j = r->npool) {
  724. X              while(j--)
  725. X                  Free(r->pools[j]);
  726. X              Free(r->pools);
  727. X--- 1423,1439 ----
  728. X              }
  729. X              Free(r->engravings);
  730. X          }
  731. X!         if ((j = r->nfountain) != 0) {
  732. X              while(j--)
  733. X                  Free(r->fountains[j]);
  734. X              Free(r->fountains);
  735. X          }
  736. X!         if ((j = r->nsink) != 0) {
  737. X              while(j--)
  738. X                  Free(r->sinks[j]);
  739. X              Free(r->sinks);
  740. X          }
  741. X!         if ((j = r->npool) != 0) {
  742. X              while(j--)
  743. X                  Free(r->pools[j]);
  744. X              Free(r->pools);
  745. X***************
  746. X*** 1685,1691 ****
  747. X  
  748. X          /* read the doors */
  749. X          Fread((genericptr_t) &r->ndoor, 1, sizeof(r->ndoor), fd);
  750. X!         if(n = r->ndoor)
  751. X              r->doors = NewTab(room_door, n);
  752. X          while(n--) {
  753. X              r->doors[n] = New(room_door);
  754. X--- 1685,1691 ----
  755. X  
  756. X          /* read the doors */
  757. X          Fread((genericptr_t) &r->ndoor, 1, sizeof(r->ndoor), fd);
  758. X!         if ((n = r->ndoor) != 0)
  759. X              r->doors = NewTab(room_door, n);
  760. X          while(n--) {
  761. X              r->doors[n] = New(room_door);
  762. X***************
  763. X*** 1695,1701 ****
  764. X  
  765. X          /* read the traps */
  766. X          Fread((genericptr_t) &r->ntrap, 1, sizeof(r->ntrap), fd);
  767. X!         if(n = r->ntrap)
  768. X              r->traps = NewTab(trap, n);
  769. X          while(n--) {
  770. X              r->traps[n] = New(trap);
  771. X--- 1695,1701 ----
  772. X  
  773. X          /* read the traps */
  774. X          Fread((genericptr_t) &r->ntrap, 1, sizeof(r->ntrap), fd);
  775. X!         if ((n = r->ntrap) != 0)
  776. X              r->traps = NewTab(trap, n);
  777. X          while(n--) {
  778. X              r->traps[n] = New(trap);
  779. X***************
  780. X*** 1704,1710 ****
  781. X  
  782. X          /* read the monsters */
  783. X          Fread((genericptr_t) &r->nmonster, 1, sizeof(r->nmonster), fd);
  784. X!         if(n = r->nmonster)
  785. X              r->monsters = NewTab(monster, n);
  786. X          while(n--) {
  787. X              r->monsters[n] = New(monster);
  788. X--- 1704,1710 ----
  789. X  
  790. X          /* read the monsters */
  791. X          Fread((genericptr_t) &r->nmonster, 1, sizeof(r->nmonster), fd);
  792. X!         if ((n = r->nmonster) != 0)
  793. X              r->monsters = NewTab(monster, n);
  794. X          while(n--) {
  795. X              r->monsters[n] = New(monster);
  796. X***************
  797. X*** 1732,1738 ****
  798. X  
  799. X          /* read the objects */
  800. X          Fread((genericptr_t) &r->nobject, 1, sizeof(r->nobject), fd);
  801. X!         if(n = r->nobject)
  802. X              r->objects = NewTab(object, n);
  803. X          while (n--) {
  804. X              r->objects[n] = New(object);
  805. X--- 1732,1738 ----
  806. X  
  807. X          /* read the objects */
  808. X          Fread((genericptr_t) &r->nobject, 1, sizeof(r->nobject), fd);
  809. X!         if ((n = r->nobject) != 0)
  810. X              r->objects = NewTab(object, n);
  811. X          while (n--) {
  812. X              r->objects[n] = New(object);
  813. X***************
  814. X*** 1750,1756 ****
  815. X  
  816. X          /* read the stairs */
  817. X          Fread((genericptr_t) &r->nstair, 1, sizeof(r->nstair), fd);
  818. X!         if (n = r->nstair)
  819. X              r->stairs = NewTab(stair, n);
  820. X          while (n--) {
  821. X              r->stairs[n] = New(stair);
  822. X--- 1750,1756 ----
  823. X  
  824. X          /* read the stairs */
  825. X          Fread((genericptr_t) &r->nstair, 1, sizeof(r->nstair), fd);
  826. X!         if ((n = r->nstair) != 0)
  827. X              r->stairs = NewTab(stair, n);
  828. X          while (n--) {
  829. X              r->stairs[n] = New(stair);
  830. X***************
  831. X*** 1760,1766 ****
  832. X  
  833. X          /* read the altars */
  834. X          Fread((genericptr_t) &r->naltar, 1, sizeof(r->naltar), fd);
  835. X!         if (n = r->naltar)
  836. X              r->altars = NewTab(altar, n);
  837. X          while (n--) {
  838. X              r->altars[n] = New(altar);
  839. X--- 1760,1766 ----
  840. X  
  841. X          /* read the altars */
  842. X          Fread((genericptr_t) &r->naltar, 1, sizeof(r->naltar), fd);
  843. X!         if ((n = r->naltar) != 0)
  844. X              r->altars = NewTab(altar, n);
  845. X          while (n--) {
  846. X              r->altars[n] = New(altar);
  847. X***************
  848. X*** 1770,1776 ****
  849. X  
  850. X          /* read the gold piles */
  851. X          Fread((genericptr_t) &r->ngold, 1, sizeof(r->ngold), fd);
  852. X!         if (n = r->ngold)
  853. X              r->golds = NewTab(gold, n);
  854. X          while (n--) {
  855. X              r->golds[n] = New(gold);
  856. X--- 1770,1776 ----
  857. X  
  858. X          /* read the gold piles */
  859. X          Fread((genericptr_t) &r->ngold, 1, sizeof(r->ngold), fd);
  860. X!         if ((n = r->ngold) != 0)
  861. X              r->golds = NewTab(gold, n);
  862. X          while (n--) {
  863. X              r->golds[n] = New(gold);
  864. X***************
  865. X*** 1780,1786 ****
  866. X          /* read the engravings */
  867. X          Fread((genericptr_t) &r->nengraving, 1,
  868. X              sizeof(r->nengraving), fd);
  869. X!         if (n = r->nengraving)
  870. X              r->engravings = NewTab(engraving,n);
  871. X          while(n--) {
  872. X              r->engravings[n] = New(engraving);
  873. X--- 1780,1786 ----
  874. X          /* read the engravings */
  875. X          Fread((genericptr_t) &r->nengraving, 1,
  876. X              sizeof(r->nengraving), fd);
  877. X!         if ((n = r->nengraving) != 0)
  878. X              r->engravings = NewTab(engraving,n);
  879. X          while(n--) {
  880. X              r->engravings[n] = New(engraving);
  881. X***************
  882. X*** 1796,1802 ****
  883. X          /* read the fountains */
  884. X          Fread((genericptr_t) &r->nfountain, 1,
  885. X              sizeof(r->nfountain), fd);
  886. X!         if (n = r->nfountain)
  887. X              r->fountains = NewTab(fountain, n);
  888. X          while (n--) {
  889. X              r->fountains[n] = New(fountain);
  890. X--- 1796,1802 ----
  891. X          /* read the fountains */
  892. X          Fread((genericptr_t) &r->nfountain, 1,
  893. X              sizeof(r->nfountain), fd);
  894. X!         if ((n = r->nfountain) != 0)
  895. X              r->fountains = NewTab(fountain, n);
  896. X          while (n--) {
  897. X              r->fountains[n] = New(fountain);
  898. X***************
  899. X*** 1806,1812 ****
  900. X  
  901. X          /* read the sinks */
  902. X          Fread((genericptr_t) &r->nsink, 1, sizeof(r->nsink), fd);
  903. X!         if (n = r->nsink)
  904. X              r->sinks = NewTab(sink, n);
  905. X          while (n--) {
  906. X              r->sinks[n] = New(sink);
  907. X--- 1806,1812 ----
  908. X  
  909. X          /* read the sinks */
  910. X          Fread((genericptr_t) &r->nsink, 1, sizeof(r->nsink), fd);
  911. X!         if ((n = r->nsink) != 0)
  912. X              r->sinks = NewTab(sink, n);
  913. X          while (n--) {
  914. X              r->sinks[n] = New(sink);
  915. X***************
  916. X*** 1815,1821 ****
  917. X  
  918. X          /* read the pools */
  919. X          Fread((genericptr_t) &r->npool, 1, sizeof(r->npool), fd);
  920. X!         if (n = r->npool)
  921. X              r->pools = NewTab(pool,n);
  922. X          while (n--) {
  923. X              r->pools[n] = New(pool);
  924. X--- 1815,1821 ----
  925. X  
  926. X          /* read the pools */
  927. X          Fread((genericptr_t) &r->npool, 1, sizeof(r->npool), fd);
  928. X!         if ((n = r->npool) != 0)
  929. X              r->pools = NewTab(pool,n);
  930. X          while (n--) {
  931. X              r->pools[n] = New(pool);
  932. X***************
  933. X*** 1835,1841 ****
  934. X              if (tmproom[j]->name && !strcmp(tmproom[j]->name,
  935. X                                 tmproom[i]->parent)) {
  936. X                  n = tmproom[j]->nsubroom++;
  937. X!                 tmproom[j]->subrooms[n] = tmproom[i];
  938. X                  break;
  939. X              }
  940. X          }
  941. X--- 1835,1841 ----
  942. X              if (tmproom[j]->name && !strcmp(tmproom[j]->name,
  943. X                                 tmproom[i]->parent)) {
  944. X                  n = tmproom[j]->nsubroom++;
  945. X!                 tmproom[j]->subrooms[(int)n] = tmproom[i];
  946. X                  break;
  947. X              }
  948. X          }
  949. X***************
  950. X*** 2183,2190 ****
  951. X  
  952. X      /* now that we have rooms _and_ associated doors, fill the rooms */
  953. X      for(n = 0; n < SIZE(mustfill); n++)
  954. X!         if(mustfill[n])
  955. X!         fill_room(&rooms[n], (mustfill[n] == 2));
  956. X  
  957. X      /* if special boundary syms (CROSSWALL) in map, remove them now */
  958. X      if(has_bounds) {
  959. X--- 2183,2190 ----
  960. X  
  961. X      /* now that we have rooms _and_ associated doors, fill the rooms */
  962. X      for(n = 0; n < SIZE(mustfill); n++)
  963. X!         if(mustfill[(int)n])
  964. X!         fill_room(&rooms[(int)n], (mustfill[(int)n] == 2));
  965. X  
  966. X      /* if special boundary syms (CROSSWALL) in map, remove them now */
  967. X      if(has_bounds) {
  968. X*** /tmp/da21463    Mon Jul 12 17:34:56 1993
  969. X--- src/spell.c    Mon Jul 12 13:45:30 1993
  970. X***************
  971. X*** 92,98 ****
  972. X  deadbook(book2)
  973. X  struct obj *book2;
  974. X  {
  975. X!     You("turn the pages of the Book of the Dead....");
  976. X      makeknown(SPE_BOOK_OF_THE_DEAD);
  977. X      if(invocation_pos(u.ux, u.uy) && !On_stairs(u.ux, u.uy)) {
  978. X      register struct obj *otmp;
  979. X--- 92,98 ----
  980. X  deadbook(book2)
  981. X  struct obj *book2;
  982. X  {
  983. X!     You("turn the pages of the Book of the Dead...");
  984. X      makeknown(SPE_BOOK_OF_THE_DEAD);
  985. X      if(invocation_pos(u.ux, u.uy) && !On_stairs(u.ux, u.uy)) {
  986. X      register struct obj *otmp;
  987. X***************
  988. X*** 571,577 ****
  989. X  spellet(spl)
  990. X  int spl;
  991. X  {
  992. X!     return (spl < 27) ? ('a' + spl - 1) : ('A' + spl - 27);
  993. X  }
  994. X  
  995. X  int
  996. X--- 571,577 ----
  997. X  spellet(spl)
  998. X  int spl;
  999. X  {
  1000. X!     return((char)((spl < 27) ? ('a' + spl - 1) : ('A' + spl - 27)));
  1001. X  }
  1002. X  
  1003. X  int
  1004. X*** /tmp/da21479    Mon Jul 12 17:35:00 1993
  1005. X--- src/timeout.c    Thu Jul  8 13:59:18 1993
  1006. X***************
  1007. X*** 1,8 ****
  1008. X! /*    SCCS Id: @(#)timeout.c    3.1    93/03/30    */
  1009. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1010. X  /* NetHack may be freely redistributed.  See license for details. */
  1011. X  
  1012. X! #include    "hack.h"
  1013. X  
  1014. X  STATIC_DCL void NDECL(stoned_dialogue);
  1015. X  STATIC_DCL void NDECL(vomiting_dialogue);
  1016. X--- 1,8 ----
  1017. X! /*    SCCS Id: @(#)timeout.c    3.1    93/07/07    */
  1018. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1019. X  /* NetHack may be freely redistributed.  See license for details. */
  1020. X  
  1021. X! #include "hack.h"
  1022. X  
  1023. X  STATIC_DCL void NDECL(stoned_dialogue);
  1024. X  STATIC_DCL void NDECL(vomiting_dialogue);
  1025. X***************
  1026. X*** 123,130 ****
  1027. X  
  1028. X      for(upp = u.uprops; upp < u.uprops+SIZE(u.uprops); upp++)
  1029. X          if((upp->p_flgs & TIMEOUT) && !(--upp->p_flgs & TIMEOUT)) {
  1030. X!         if(upp->p_tofn) (*upp->p_tofn)();
  1031. X!         else switch(upp - u.uprops){
  1032. X          case STONED:
  1033. X              if (!killer) {
  1034. X                  killer_format = KILLED_BY_AN;
  1035. X--- 123,129 ----
  1036. X  
  1037. X      for(upp = u.uprops; upp < u.uprops+SIZE(u.uprops); upp++)
  1038. X          if((upp->p_flgs & TIMEOUT) && !(--upp->p_flgs & TIMEOUT)) {
  1039. X!         switch(upp - u.uprops){
  1040. X          case STONED:
  1041. X              if (!killer) {
  1042. X                  killer_format = KILLED_BY_AN;
  1043. X***************
  1044. X*** 196,201 ****
  1045. X--- 195,203 ----
  1046. X                  Sleeping = sleeptime + rnd(100);
  1047. X              }
  1048. X              break;
  1049. X+         case LEVITATION:
  1050. X+             (void) float_down();
  1051. X+             break;
  1052. X          case STRANGLED:
  1053. X              killer_format = KILLED_BY;
  1054. X              killer = "strangulation";
  1055. X***************
  1056. X*** 255,268 ****
  1057. X  #ifdef POLYSELF
  1058. X      int yours = otmp->spe;
  1059. X  #endif
  1060. X  
  1061. X!     if(monstermoves-otmp->age > 200)  /* very old egg - it's dead */
  1062. X          otmp->corpsenm = -1;
  1063. X! #ifdef LINT    /* long conv. ok */
  1064. X!     else if(rnd(150) > 150) {
  1065. X! #else
  1066. X!     else if(rnd((int)(monstermoves-otmp->age)) > 150) {
  1067. X! #endif
  1068. X          mtmp = makemon(&mons[big_to_little(otmp->corpsenm)], u.ux, u.uy);
  1069. X          useup(otmp);
  1070. X          if(mtmp) {
  1071. X--- 257,270 ----
  1072. X  #ifdef POLYSELF
  1073. X      int yours = otmp->spe;
  1074. X  #endif
  1075. X+     long egg_age = monstermoves - otmp->age;
  1076. X  
  1077. X!     if (egg_age > 200L) {        /* very old egg - it's dead */
  1078. X          otmp->corpsenm = -1;
  1079. X!         return;
  1080. X!     } else if (egg_age <= 150L) {    /* too young to hatch */
  1081. X!         return;
  1082. X!     } else if (rnd((int)egg_age) > 150) {
  1083. X          mtmp = makemon(&mons[big_to_little(otmp->corpsenm)], u.ux, u.uy);
  1084. X          useup(otmp);
  1085. X          if(mtmp) {
  1086. X*** /tmp/da21504    Mon Jul 12 17:35:07 1993
  1087. X--- src/trap.c    Wed Jul  7 16:25:35 1993
  1088. X***************
  1089. X*** 1,4 ****
  1090. X! /*    SCCS Id: @(#)trap.c    3.1    93/05/25    */
  1091. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1092. X  /* NetHack may be freely redistributed.  See license for details. */
  1093. X  
  1094. X--- 1,4 ----
  1095. X! /*    SCCS Id: @(#)trap.c    3.1    93/06/20    */
  1096. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1097. X  /* NetHack may be freely redistributed.  See license for details. */
  1098. X  
  1099. X***************
  1100. X*** 819,825 ****
  1101. X  register struct monst *mtmp;
  1102. X  {
  1103. X      register struct trap *trap = t_at(mtmp->mx, mtmp->my);
  1104. X!     boolean trapkilled = FALSE, tdoor = FALSE;
  1105. X      struct permonst *mptr = mtmp->data;
  1106. X      struct obj *otmp;
  1107. X  
  1108. X--- 819,825 ----
  1109. X  register struct monst *mtmp;
  1110. X  {
  1111. X      register struct trap *trap = t_at(mtmp->mx, mtmp->my);
  1112. X!     boolean trapkilled = FALSE;
  1113. X      struct permonst *mptr = mtmp->data;
  1114. X      struct obj *otmp;
  1115. X  
  1116. X***************
  1117. X*** 1003,1080 ****
  1118. X              if(!Can_fall_thru(&u.uz))
  1119. X                  panic("Trapdoors cannot exist on this level.");
  1120. X  
  1121. X!             if ( (mptr == &mons[PM_WUMPUS]) ||
  1122. X!                  (mtmp->wormno && count_wsegs(mtmp) > 5) ) break;
  1123. X!             tdoor = TRUE;
  1124. X              /* Fall through */
  1125. X          case LEVEL_TELEP:
  1126. X!             /* long worms w/tails can now change levels! - Norm */
  1127. X!             if (!is_flyer(mptr)) {
  1128. X!                 register int nlev;
  1129. X!                 d_level tolevel;
  1130. X  #ifdef WALKIES
  1131. X!                 if(teleport_pet(mtmp)) {
  1132. X  #endif
  1133. X!                 if(tdoor) {
  1134. X!                     if(Is_stronghold(&u.uz))
  1135. X!                         assign_level(&tolevel, &valley_level);
  1136. X!                     else if(Is_botlevel(&u.uz)) {
  1137. X!                         pline("%s avoids the trap.", 
  1138. X!                                       Monnam(mtmp));
  1139. X!                     break;
  1140. X!                     } else get_level(&tolevel,depth(&u.uz)+1);
  1141. X                  } else {
  1142. X! #ifdef MULDGN
  1143. X!                     if(Is_knox(&u.uz)) {
  1144. X!                         rloc(mtmp);
  1145. X!                     break;
  1146. X                      }
  1147. X! #endif
  1148. X!                     nlev = rnd(3);
  1149. X!                     if(!rn2(2)) nlev = -(nlev);
  1150. X!                     nlev = dunlev(&u.uz) + nlev;
  1151. X!                     if(nlev > dunlevs_in_dungeon(&u.uz)) {
  1152. X!                         nlev = dunlevs_in_dungeon(&u.uz);
  1153. X!                     /* teleport up if already on bottom */
  1154. X!                     if (Is_botlevel(&u.uz)) 
  1155. X!                         nlev -= rnd(3);
  1156. X                      }
  1157. X-                     if (nlev < 1) {
  1158. X-                     nlev = 1;
  1159. X-                     if (dunlev(&u.uz) == 1) {
  1160. X-                         nlev += rnd(3);
  1161. X-                         if (nlev >
  1162. X-                               dunlevs_in_dungeon(&u.uz)) 
  1163. X-                             nlev = 
  1164. X-                           dunlevs_in_dungeon(&u.uz);
  1165. X-                     }
  1166. X-                     }
  1167. X-                     /* can't seem to go anywhere    */
  1168. X-                     /* (possible in short dungeons) */
  1169. X-                     if (nlev == dunlev(&u.uz)) {
  1170. X-                     rloc(mtmp);
  1171. X-                     break;
  1172. X-                     }
  1173. X-                     nlev = dungeons[u.uz.dnum].depth_start +
  1174. X-                                                nlev;
  1175. X-                     get_level(&tolevel, nlev);
  1176. X                  }
  1177. X!                 if(in_sight) {
  1178. X!         pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp));
  1179. X!                     seetrap(trap);
  1180. X                  }
  1181. X!                 migrate_to_level(mtmp, 
  1182. X!                          ledger_no(&tolevel), 0);
  1183. X!                 return(3);    /* no longer on this level */
  1184. X! #ifdef WALKIES
  1185. X                  }
  1186. X! #endif
  1187. X              }
  1188. X              break;
  1189. X  
  1190. X          case TELEP_TRAP:
  1191. X              if(tele_restrict(mtmp)) break;
  1192. X-         case MAGIC_PORTAL:
  1193. X  #ifdef WALKIES
  1194. X              if(teleport_pet(mtmp)) {
  1195. X  #endif
  1196. X--- 1003,1089 ----
  1197. X              if(!Can_fall_thru(&u.uz))
  1198. X                  panic("Trapdoors cannot exist on this level.");
  1199. X  
  1200. X!             if (is_flyer(mptr) || mptr == &mons[PM_WUMPUS] ||
  1201. X!                 (mtmp->wormno && count_wsegs(mtmp) > 5)) break;
  1202. X              /* Fall through */
  1203. X          case LEVEL_TELEP:
  1204. X!         case MAGIC_PORTAL:
  1205. X!             if (mtmp == u.ustuck)    /* probably a vortex */
  1206. X!                 break;        /* temporary? kludge */
  1207. X  #ifdef WALKIES
  1208. X!             if (teleport_pet(mtmp))
  1209. X  #endif
  1210. X!             {
  1211. X!                 d_level tolevel;
  1212. X!                 int migrate_typ = 0;
  1213. X! 
  1214. X!                 if (tt == TRAPDOOR) {
  1215. X!                 if (Is_stronghold(&u.uz)) {
  1216. X!                     assign_level(&tolevel, &valley_level);
  1217. X!                 } else if (Is_botlevel(&u.uz)) {
  1218. X!                     pline("%s avoids the trap.", Monnam(mtmp));
  1219. X!                     break;
  1220. X                  } else {
  1221. X!                     get_level(&tolevel, depth(&u.uz) + 1);
  1222. X!                 }
  1223. X!                 } else if (tt == MAGIC_PORTAL) {
  1224. X!                 if (In_endgame(&u.uz) &&
  1225. X!                     (mon_has_amulet(mtmp) ||
  1226. X!                     is_home_elemental(mptr))) {
  1227. X!                     if (in_sight && mptr->mlet != S_ELEMENTAL) {
  1228. X!                      pline("%s seems to shimmer for a moment.",
  1229. X!                        Monnam(mtmp));
  1230. X!                     seetrap(trap);
  1231. X                      }
  1232. X!                     break;
  1233. X!                 } else {
  1234. X!                     assign_level(&tolevel, &trap->dst);
  1235. X!                     migrate_typ = 6; /* see dog.c */
  1236. X!                 }
  1237. X!                 } else { /* (tt == LEVEL_TELEP) */
  1238. X!                 register int nlev;
  1239. X! 
  1240. X!                 if (mon_has_amulet(mtmp)) break;
  1241. X!                 nlev = rnd(3);
  1242. X!                 if (!rn2(2)) nlev = -nlev;
  1243. X!                 nlev += dunlev(&u.uz);
  1244. X!                 if (nlev > dunlevs_in_dungeon(&u.uz)) {
  1245. X!                     nlev = dunlevs_in_dungeon(&u.uz);
  1246. X!                     /* teleport up if already on bottom */
  1247. X!                     if (Is_botlevel(&u.uz)) nlev -= rnd(3);
  1248. X!                 }
  1249. X!                 if (nlev < 1) {
  1250. X!                     nlev = 1;
  1251. X!                     if (dunlev(&u.uz) == 1) {
  1252. X!                     nlev += rnd(3);
  1253. X!                     if (nlev > dunlevs_in_dungeon(&u.uz)) 
  1254. X!                         nlev = dunlevs_in_dungeon(&u.uz);
  1255. X                      }
  1256. X                  }
  1257. X!                 /* can't seem to go anywhere    */
  1258. X!                 /* (possible in short dungeons) */
  1259. X!                 if (nlev == dunlev(&u.uz)) {
  1260. X!                     rloc(mtmp);
  1261. X!                     break;
  1262. X                  }
  1263. X!                 nlev += dungeons[u.uz.dnum].depth_start;
  1264. X!                 get_level(&tolevel, nlev);
  1265. X                  }
  1266. X! 
  1267. X!                 if (in_sight) {
  1268. X!                 pline("Suddenly, %s disappears out of sight.",
  1269. X!                       mon_nam(mtmp));
  1270. X!                 seetrap(trap);
  1271. X!                 }
  1272. X!                 migrate_to_level(mtmp, 
  1273. X!                          ledger_no(&tolevel),
  1274. X!                          migrate_typ);
  1275. X!                 return(3);    /* no longer on this level */
  1276. X              }
  1277. X              break;
  1278. X  
  1279. X          case TELEP_TRAP:
  1280. X              if(tele_restrict(mtmp)) break;
  1281. X  #ifdef WALKIES
  1282. X              if(teleport_pet(mtmp)) {
  1283. X  #endif
  1284. X***************
  1285. X*** 1081,1088 ****
  1286. X                  /* Note: don't remove the trap if a vault.  Other-
  1287. X                   * wise the monster will be stuck there, since 
  1288. X                   * the guard isn't going to come for it...
  1289. X-                  * Also: don't remove if magic portal.  In short,
  1290. X-                  * don't remove :-)
  1291. X                   */
  1292. X                  if (in_sight) {
  1293. X                  pline("%s suddenly disappears!", 
  1294. X--- 1090,1095 ----
  1295. X***************
  1296. X*** 1096,1102 ****
  1297. X  #endif
  1298. X              break;
  1299. X  
  1300. X!            case WEB:
  1301. X              /* Monster in a web. */
  1302. X              if (mptr->mlet == S_SPIDER) break;
  1303. X              if (amorphous(mptr)) {
  1304. X--- 1103,1109 ----
  1305. X  #endif
  1306. X              break;
  1307. X  
  1308. X!         case WEB:
  1309. X              /* Monster in a web. */
  1310. X              if (mptr->mlet == S_SPIDER) break;
  1311. X              if (amorphous(mptr)) {
  1312. X***************
  1313. X*** 1142,1149 ****
  1314. X          case MAGIC_TRAP:
  1315. X              /* A magic trap.  Monsters immune. */
  1316. X              break;
  1317. X!         case ANTI_MAGIC:    
  1318. X!                         break;
  1319. X  
  1320. X          case LANDMINE: {
  1321. X              register struct monst *mntmp = fmon;
  1322. X--- 1149,1156 ----
  1323. X          case MAGIC_TRAP:
  1324. X              /* A magic trap.  Monsters immune. */
  1325. X              break;
  1326. X!         case ANTI_MAGIC:
  1327. X!             break;
  1328. X  
  1329. X          case LANDMINE: {
  1330. X              register struct monst *mntmp = fmon;
  1331. X***************
  1332. X*** 1338,1344 ****
  1333. X      if (!trap) {
  1334. X          if(Is_airlevel(&u.uz))
  1335. X              You("begin to tumble in place.");
  1336. X!         if(Is_waterlevel(&u.uz) && !no_msg)
  1337. X              You("feel heavier.");
  1338. X          /* u.uinwater msgs already in spoteffects()/drown() */
  1339. X          else if (!u.uinwater && !no_msg) {
  1340. X--- 1345,1351 ----
  1341. X      if (!trap) {
  1342. X          if(Is_airlevel(&u.uz))
  1343. X              You("begin to tumble in place.");
  1344. X!         else if (Is_waterlevel(&u.uz) && !no_msg)
  1345. X              You("feel heavier.");
  1346. X          /* u.uinwater msgs already in spoteffects()/drown() */
  1347. X          else if (!u.uinwater && !no_msg) {
  1348. X***************
  1349. X*** 1345,1354 ****
  1350. X              if (Hallucination)
  1351. X                  pline("Bummer!  You've %s.",
  1352. X                        is_pool(u.ux,u.uy) ?
  1353. X!                           "splashed down" : "hit the ground");
  1354. X              else
  1355. X                  You("float gently to the %s.",
  1356. X!                     is_pool(u.ux,u.uy) ? "water" : "ground");
  1357. X          }
  1358. X          trap = t_at(u.ux,u.uy);
  1359. X      }
  1360. X--- 1352,1361 ----
  1361. X              if (Hallucination)
  1362. X                  pline("Bummer!  You've %s.",
  1363. X                        is_pool(u.ux,u.uy) ?
  1364. X!                     "splashed down" : "hit the ground");
  1365. X              else
  1366. X                  You("float gently to the %s.",
  1367. X!                     surface(u.ux, u.uy));
  1368. X          }
  1369. X          trap = t_at(u.ux,u.uy);
  1370. X      }
  1371. X***************
  1372. X*** 2426,2432 ****
  1373. X          case 2:
  1374. X          case 1:
  1375. X          case 0:
  1376. X!             pline("A cloud of %s gas billows from %s",
  1377. X                    hcolor(), the(xname(obj)));
  1378. X              if(!Stunned) {
  1379. X                  if (Hallucination)
  1380. X--- 2433,2439 ----
  1381. X          case 2:
  1382. X          case 1:
  1383. X          case 0:
  1384. X!             pline("A cloud of %s gas billows from %s.",
  1385. X                    hcolor(), the(xname(obj)));
  1386. X              if(!Stunned) {
  1387. X                  if (Hallucination)
  1388. X***************
  1389. X*** 2559,2568 ****
  1390. X  boolean
  1391. X  unconscious()
  1392. X  {
  1393. X!     return (multi < 0 && (!nomovemsg ||
  1394. X          u.usleep ||
  1395. X          !strncmp(nomovemsg,"You regain con", 15) ||
  1396. X!         !strncmp(nomovemsg,"You are consci", 15)));
  1397. X  }
  1398. X  
  1399. X  static char lava_killer[] = "molten lava";
  1400. X--- 2566,2575 ----
  1401. X  boolean
  1402. X  unconscious()
  1403. X  {
  1404. X!     return((boolean)(multi < 0 && (!nomovemsg ||
  1405. X          u.usleep ||
  1406. X          !strncmp(nomovemsg,"You regain con", 15) ||
  1407. X!         !strncmp(nomovemsg,"You are consci", 15))));
  1408. X  }
  1409. X  
  1410. X  static char lava_killer[] = "molten lava";
  1411. X***************
  1412. X*** 2622,2628 ****
  1413. X              pline("You're still burning.");
  1414. X              done(BURNING);
  1415. X          }
  1416. X!     You("find yourself back on solid ground.");
  1417. X      return(TRUE);
  1418. X      }
  1419. X  
  1420. X--- 2629,2635 ----
  1421. X              pline("You're still burning.");
  1422. X              done(BURNING);
  1423. X          }
  1424. X!     You("find yourself back on solid %s.", surface(u.ux, u.uy));
  1425. X      return(TRUE);
  1426. X      }
  1427. X  
  1428. X*** /tmp/da21512    Mon Jul 12 17:35:11 1993
  1429. X--- src/u_init.c    Thu Jul  8 13:59:21 1993
  1430. X***************
  1431. X*** 1,4 ****
  1432. X! /*    SCCS Id: @(#)u_init.c    3.1    93/04/24    */
  1433. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1434. X  /* NetHack may be freely redistributed.  See license for details. */
  1435. X  
  1436. X--- 1,4 ----
  1437. X! /*    SCCS Id: @(#)u_init.c    3.1    93/07/07    */
  1438. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1439. X  /* NetHack may be freely redistributed.  See license for details. */
  1440. X  
  1441. X***************
  1442. X*** 274,281 ****
  1443. X      /* zero u, including pointer values --
  1444. X       * necessary when aborting from a failed restore */
  1445. X      (void) memset((genericptr_t)&u, 0, sizeof(u));
  1446. X-     for (i = 0; i < LAST_PROP+1; i++) u.uprops[i].p_tofn = 0;
  1447. X      u.ustuck = (struct monst *)0;
  1448. X  
  1449. X  #if 0    /* documentation of more zero values as desirable */
  1450. X      u.uluck  = u.moreluck = 0;
  1451. X--- 274,281 ----
  1452. X      /* zero u, including pointer values --
  1453. X       * necessary when aborting from a failed restore */
  1454. X      (void) memset((genericptr_t)&u, 0, sizeof(u));
  1455. X      u.ustuck = (struct monst *)0;
  1456. X+     u.usick_cause = NULL;
  1457. X  
  1458. X  #if 0    /* documentation of more zero values as desirable */
  1459. X      u.uluck  = u.moreluck = 0;
  1460. X***************
  1461. X*** 304,309 ****
  1462. X--- 304,310 ----
  1463. X  
  1464. X      u.usym = S_HUMAN;
  1465. X      u.umoved = FALSE;
  1466. X+     u.umortality = 0;
  1467. X      u.ugrave_arise = -1;
  1468. X  
  1469. X      u.ulevel = 0;    /* set up some of the initial attributes */
  1470. X***************
  1471. X*** 319,324 ****
  1472. X--- 320,331 ----
  1473. X      u.umonnum = -1;
  1474. X      u.ulycn = -1;
  1475. X      set_uasmon();
  1476. X+ #endif
  1477. X+ 
  1478. X+ #ifdef BSD
  1479. X+     (void) time((long *)&u.ubirthday);
  1480. X+ #else
  1481. X+     (void) time(&u.ubirthday);
  1482. X  #endif
  1483. X  
  1484. X      /*
  1485. X*** /tmp/da21520    Mon Jul 12 17:35:14 1993
  1486. X--- src/uhitm.c    Wed Jul  7 16:25:38 1993
  1487. X***************
  1488. X*** 171,177 ****
  1489. X      if (is_orc(mtmp->data) && pl_character[0]=='E') tmp++;
  1490. X  
  1491. X  /*    with a lot of luggage, your agility diminishes */
  1492. X!     if(tmp2 = near_capacity()) tmp -= (tmp2*2) - 1;
  1493. X      if(u.utrap) tmp -= 3;
  1494. X  #ifdef POLYSELF
  1495. X  /*    Some monsters have a combination of weapon attacks and non-weapon
  1496. X--- 171,177 ----
  1497. X      if (is_orc(mtmp->data) && pl_character[0]=='E') tmp++;
  1498. X  
  1499. X  /*    with a lot of luggage, your agility diminishes */
  1500. X!     if ((tmp2 = near_capacity()) != 0) tmp -= (tmp2*2) - 1;
  1501. X      if(u.utrap) tmp -= 3;
  1502. X  #ifdef POLYSELF
  1503. X  /*    Some monsters have a combination of weapon attacks and non-weapon
  1504. X***************
  1505. X*** 312,317 ****
  1506. X--- 312,318 ----
  1507. X          /* 1/20 chance of shattering defender's weapon */
  1508. X          struct obj *obj = MON_WEP(mon);
  1509. X  
  1510. X+         obj->owornmask &= ~W_WEP;
  1511. X          MON_NOWEP(mon);
  1512. X          m_useup(mon, obj);
  1513. X          pline("%s weapon shatters!", s_suffix(Monnam(mon)));
  1514. X***************
  1515. X*** 357,363 ****
  1516. X  struct monst *mon;
  1517. X  int tmp;
  1518. X  {
  1519. X!     static NEARDATA int malive;
  1520. X      boolean mhit = (tmp > (dieroll = rnd(20)) || u.uswallow);
  1521. X  
  1522. X      if(tmp > dieroll) exercise(A_DEX, TRUE);
  1523. X--- 358,364 ----
  1524. X  struct monst *mon;
  1525. X  int tmp;
  1526. X  {
  1527. X!     static NEARDATA boolean malive;
  1528. X      boolean mhit = (tmp > (dieroll = rnd(20)) || u.uswallow);
  1529. X  
  1530. X      if(tmp > dieroll) exercise(A_DEX, TRUE);
  1531. X***************
  1532. X*** 743,749 ****
  1533. X      }
  1534. X  #endif
  1535. X  
  1536. X!     return(destroyed ? FALSE : TRUE);
  1537. X  }
  1538. X  
  1539. X  #ifdef POLYSELF
  1540. X--- 744,750 ----
  1541. X      }
  1542. X  #endif
  1543. X  
  1544. X!     return((boolean)(destroyed ? FALSE : TRUE));
  1545. X  }
  1546. X  
  1547. X  #ifdef POLYSELF
  1548. X***************
  1549. X*** 1283,1289 ****
  1550. X              /* Enemy dead, before any special abilities used */
  1551. X              if (!known_hitum(mon,dhit)) return 0;
  1552. X              /* might be a worm that gets cut in half */
  1553. X!             if (m_at(u.ux+u.dx, u.uy+u.dy) != mon) return(nsum);
  1554. X              /* Do not print "You hit" message, since known_hitum
  1555. X               * already did it.
  1556. X               */
  1557. X--- 1284,1290 ----
  1558. X              /* Enemy dead, before any special abilities used */
  1559. X              if (!known_hitum(mon,dhit)) return 0;
  1560. X              /* might be a worm that gets cut in half */
  1561. X!             if (m_at(u.ux+u.dx, u.uy+u.dy) != mon) return((boolean)(nsum != 0));
  1562. X              /* Do not print "You hit" message, since known_hitum
  1563. X               * already did it.
  1564. X               */
  1565. X***************
  1566. X*** 1410,1416 ****
  1567. X          }
  1568. X          if (dhit == -1)
  1569. X          rehumanize();
  1570. X!         if(sum[i] == 2) return(passive(mon, 1, 0, (mattk->aatyp==AT_KICK)));
  1571. X                              /* defender dead */
  1572. X          else {
  1573. X          (void) passive(mon, sum[i], 1, (mattk->aatyp==AT_KICK));
  1574. X--- 1411,1417 ----
  1575. X          }
  1576. X          if (dhit == -1)
  1577. X          rehumanize();
  1578. X!         if(sum[i] == 2) return((boolean)passive(mon, 1, 0, (mattk->aatyp==AT_KICK)));
  1579. X                              /* defender dead */
  1580. X          else {
  1581. X          (void) passive(mon, sum[i], 1, (mattk->aatyp==AT_KICK));
  1582. X***************
  1583. X*** 1421,1427 ****
  1584. X          if (multi < 0)
  1585. X          break; /* If paralyzed while attacking, i.e. floating eye */
  1586. X      }
  1587. X!     return(nsum);
  1588. X  }
  1589. X  
  1590. X  #endif /* POLYSELF */
  1591. X--- 1422,1428 ----
  1592. X          if (multi < 0)
  1593. X          break; /* If paralyzed while attacking, i.e. floating eye */
  1594. X      }
  1595. X!     return((boolean)(nsum != 0));
  1596. X  }
  1597. X  
  1598. X  #endif /* POLYSELF */
  1599. X*** /tmp/da21529    Mon Jul 12 17:35:18 1993
  1600. X--- src/vault.c    Wed Jul  7 16:25:41 1993
  1601. X***************
  1602. X*** 739,745 ****
  1603. X  {
  1604. X      register struct monst *grd = findgd();
  1605. X  
  1606. X!     return(grd == (struct monst *)0);
  1607. X  }
  1608. X  #endif
  1609. X  
  1610. X--- 739,745 ----
  1611. X  {
  1612. X      register struct monst *grd = findgd();
  1613. X  
  1614. X!     return((boolean)(grd == (struct monst *)0));
  1615. X  }
  1616. X  #endif
  1617. X  
  1618. X*** /tmp/da21537    Mon Jul 12 17:35:20 1993
  1619. X--- src/version.c    Wed Jul  7 16:25:44 1993
  1620. X***************
  1621. X*** 40,46 ****
  1622. X  comp_times(filetime)
  1623. X  long filetime;
  1624. X  {
  1625. X!     return (filetime < BUILD_TIME);
  1626. X  }
  1627. X  #endif
  1628. X  
  1629. X--- 40,46 ----
  1630. X  comp_times(filetime)
  1631. X  long filetime;
  1632. X  {
  1633. X!     return((boolean)(filetime < BUILD_TIME));
  1634. X  }
  1635. X  #endif
  1636. X  
  1637. X*** /tmp/da21545    Mon Jul 12 17:35:22 1993
  1638. X--- src/vision.c    Wed Jul  7 16:25:47 1993
  1639. X***************
  1640. X*** 1446,1452 ****
  1641. X      }
  1642. X      }
  1643. X  cleardone:
  1644. X!     return result;
  1645. X  }
  1646. X  
  1647. X  #ifdef VISION_TABLES
  1648. X--- 1446,1452 ----
  1649. X      }
  1650. X      }
  1651. X  cleardone:
  1652. X!     return((boolean)result);
  1653. X  }
  1654. X  
  1655. X  #ifdef VISION_TABLES
  1656. X*** /tmp/da21554    Mon Jul 12 17:35:26 1993
  1657. X--- src/weapon.c    Mon Jul 12 13:38:27 1993
  1658. X***************
  1659. X*** 1,4 ****
  1660. X! /*    SCCS Id: @(#)weapon.c    3.1    93/02/09    */
  1661. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1662. X  /* NetHack may be freely redistributed.  See license for details. */
  1663. X  
  1664. X--- 1,4 ----
  1665. X! /*    SCCS Id: @(#)weapon.c    3.1    93/07/10    */
  1666. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1667. X  /* NetHack may be freely redistributed.  See license for details. */
  1668. X  
  1669. X***************
  1670. X*** 7,13 ****
  1671. X   *    bonuses for any given weapon used, as well as weapons selection
  1672. X   *    code for monsters.
  1673. X   */
  1674. X! #include    "hack.h"
  1675. X  
  1676. X  #ifdef OVLB
  1677. X  
  1678. X--- 7,13 ----
  1679. X   *    bonuses for any given weapon used, as well as weapons selection
  1680. X   *    code for monsters.
  1681. X   */
  1682. X! #include "hack.h"
  1683. X  
  1684. X  #ifdef OVLB
  1685. X  
  1686. X***************
  1687. X*** 344,349 ****
  1688. X--- 344,350 ----
  1689. X          return;
  1690. X      }
  1691. X      if (!attacktype(mon->data, AT_WEAP)) {
  1692. X+         mw_tmp->owornmask &= ~W_WEP;
  1693. X          MON_NOWEP(mon);
  1694. X          mon->weapon_check = NO_WEAPON_WANTED;
  1695. X          if (cansee(mon->mx, mon->my)) {
  1696. X***************
  1697. X*** 424,443 ****
  1698. X           */
  1699. X          if (mw_tmp && mw_tmp->cursed && mw_tmp->otyp != CORPSE) {
  1700. X              if (canseemon(mon)) {
  1701. X              if (obj->otyp == PICK_AXE) {
  1702. X!                 pline("Since %s weapon %s welded to %s hand,",
  1703. X                    s_suffix(mon_nam(mon)),
  1704. X!                   (mw_tmp->quan == 1L) ? "is" : "are",
  1705. X!                   his[pronoun_gender(mon)]);
  1706. X                  pline("%s cannot wield that %s.",
  1707. X                  mon_nam(mon), xname(obj));
  1708. X              } else {
  1709. X                  pline("%s tries to wield %s.", Monnam(mon),
  1710. X                  doname(obj));
  1711. X!                 pline("%s %s %s welded to %s hand!",
  1712. X!                   s_suffix(Monnam(mon)), xname(mw_tmp),
  1713. X!                   (mw_tmp->quan == 1L) ? "is" : "are",
  1714. X!                   his[pronoun_gender(mon)]);
  1715. X              }
  1716. X              mw_tmp->bknown = 1;
  1717. X              }
  1718. X--- 425,449 ----
  1719. X           */
  1720. X          if (mw_tmp && mw_tmp->cursed && mw_tmp->otyp != CORPSE) {
  1721. X              if (canseemon(mon)) {
  1722. X+             char welded_buf[BUFSZ];
  1723. X+ 
  1724. X+             Sprintf(welded_buf, "%s welded to %s hand%s",
  1725. X+                 (mw_tmp->quan == 1L) ? "is" : "are",
  1726. X+                 his[pronoun_gender(mon)],
  1727. X+                 objects[mw_tmp->otyp].oc_bimanual ? "s" : "");
  1728. X+ 
  1729. X              if (obj->otyp == PICK_AXE) {
  1730. X!                 pline("Since %s weapon%s %s,",
  1731. X                    s_suffix(mon_nam(mon)),
  1732. X!                   plur(mw_tmp->quan), welded_buf);
  1733. X                  pline("%s cannot wield that %s.",
  1734. X                  mon_nam(mon), xname(obj));
  1735. X              } else {
  1736. X                  pline("%s tries to wield %s.", Monnam(mon),
  1737. X                  doname(obj));
  1738. X!                 pline("%s %s %s!",
  1739. X!                   s_suffix(Monnam(mon)),
  1740. X!                   xname(mw_tmp), welded_buf);
  1741. X              }
  1742. X              mw_tmp->bknown = 1;
  1743. X              }
  1744. X***************
  1745. X*** 445,450 ****
  1746. X--- 451,457 ----
  1747. X              return 1;
  1748. X          }
  1749. X          mon->mw = obj;        /* wield obj */
  1750. X+         if (mw_tmp) mw_tmp->owornmask &= ~W_WEP;
  1751. X          mon->weapon_check = NEED_WEAPON;
  1752. X          if (canseemon(mon)) {
  1753. X              pline("%s wields %s!", Monnam(mon), doname(obj));
  1754. X***************
  1755. X*** 457,462 ****
  1756. X--- 464,470 ----
  1757. X                  obj->bknown = 1;
  1758. X              }
  1759. X          }
  1760. X+         obj->owornmask = W_WEP;
  1761. X          return 1;
  1762. X      }
  1763. X      mon->weapon_check = NEED_WEAPON;
  1764. X*** Old/src/windows.c    Wed Jul 14 01:29:19 1993
  1765. X--- src/windows.c    Wed Jul 14 01:29:51 1993
  1766. X***************
  1767. X*** 1,4 ****
  1768. X! /*    SCCS Id: @(#)windows.c    3.1    93/01/08    */
  1769. X  /* Copyright (c) D. Cohrs, 1993. */
  1770. X  /* NetHack may be freely redistributed.  See license for details. */
  1771. X  
  1772. X--- 1,4 ----
  1773. X! /*    SCCS Id: @(#)windows.c    3.1    93/07/13    */
  1774. X  /* Copyright (c) D. Cohrs, 1993. */
  1775. X  /* NetHack may be freely redistributed.  See license for details. */
  1776. X  
  1777. X***************
  1778. X*** 13,27 ****
  1779. X  extern void NDECL(win_X11_init);
  1780. X  #endif
  1781. X  #ifdef MAC
  1782. X! extern struct window_procs mac_procs ;
  1783. X  #endif
  1784. X  #ifdef AMIGA_INTUITION
  1785. X! extern struct window_procs amii_procs ;
  1786. X! extern struct window_procs amiv_procs ;
  1787. X! extern void NDECL( amii_loadlib );
  1788. X! extern void NDECL( amiv_loadlib );
  1789. X  #endif
  1790. X  
  1791. X  NEARDATA struct window_procs windowprocs;
  1792. X  
  1793. X  static
  1794. X--- 13,29 ----
  1795. X  extern void NDECL(win_X11_init);
  1796. X  #endif
  1797. X  #ifdef MAC
  1798. X! extern struct window_procs mac_procs;
  1799. X  #endif
  1800. X  #ifdef AMIGA_INTUITION
  1801. X! extern struct window_procs amii_procs;
  1802. X! extern struct window_procs amiv_procs;
  1803. X! extern void NDECL(amii_loadlib);
  1804. X! extern void NDECL(amiv_loadlib);
  1805. X  #endif
  1806. X  
  1807. X+ static void FDECL(def_raw_print, (const char *s));
  1808. X+ 
  1809. X  NEARDATA struct window_procs windowprocs;
  1810. X  
  1811. X  static
  1812. X***************
  1813. X*** 36,51 ****
  1814. X      { &X11_procs, win_X11_init },
  1815. X  #endif
  1816. X  #ifdef MAC
  1817. X!     { & mac_procs , NULL } ,
  1818. X  #endif
  1819. X  #ifdef AMIGA_INTUITION
  1820. X      /* A shared library is used for implementing the access to these two
  1821. X       * different display mechanisms.  This means that the function names
  1822. X!      * are actually the same (assembler stubs) and the libraries do different
  1823. X!      * things.
  1824. X       */
  1825. X!     { & amii_procs , amii_loadlib } ,
  1826. X!     { & amiv_procs , amiv_loadlib } ,
  1827. X  #endif
  1828. X      { 0, 0 }        /* must be last */
  1829. X  };
  1830. X--- 38,53 ----
  1831. X      { &X11_procs, win_X11_init },
  1832. X  #endif
  1833. X  #ifdef MAC
  1834. X!     { &mac_procs, 0 },
  1835. X  #endif
  1836. X  #ifdef AMIGA_INTUITION
  1837. X      /* A shared library is used for implementing the access to these two
  1838. X       * different display mechanisms.  This means that the function names
  1839. X!      * are actually the same (assembler stubs) and the libraries do
  1840. X!      * different things.
  1841. X       */
  1842. X!     { &amii_procs, amii_loadlib },
  1843. X!     { &amiv_procs, amiv_loadlib },
  1844. X  #endif
  1845. X      { 0, 0 }        /* must be last */
  1846. X  };
  1847. X*** /tmp/da21587    Mon Jul 12 17:35:34 1993
  1848. X--- src/wizard.c    Wed Jul  7 16:25:52 1993
  1849. X***************
  1850. X*** 208,219 ****
  1851. X      register int mask;
  1852. X  {
  1853. X      switch(mask) {
  1854. X!         case M3_WANTSAMUL:    return(u.uhave.amulet);
  1855. X!         case M3_WANTSBELL:    return(u.uhave.bell);
  1856. X!         case M3_WANTSCAND:    return(u.uhave.menorah);
  1857. X!         case M3_WANTSBOOK:    return(u.uhave.book);
  1858. X  #ifdef MULDGN
  1859. X!         case M3_WANTSARTI:    return(u.uhave.questart);
  1860. X  #endif
  1861. X          default:        break;
  1862. X      }
  1863. X--- 208,219 ----
  1864. X      register int mask;
  1865. X  {
  1866. X      switch(mask) {
  1867. X!         case M3_WANTSAMUL:    return(boolean)(u.uhave.amulet);
  1868. X!         case M3_WANTSBELL:    return(boolean)(u.uhave.bell);
  1869. X!         case M3_WANTSCAND:    return(boolean)(u.uhave.menorah);
  1870. X!         case M3_WANTSBOOK:    return(boolean)(u.uhave.book);
  1871. X  #ifdef MULDGN
  1872. X!         case M3_WANTSARTI:    return(boolean)(u.uhave.questart);
  1873. X  #endif
  1874. X          default:        break;
  1875. X      }
  1876. X*** /tmp/da21605    Mon Jul 12 17:35:39 1993
  1877. X--- src/worn.c    Fri Jul  2 15:28:14 1993
  1878. X***************
  1879. X*** 1,4 ****
  1880. X! /*    SCCS Id: @(#)worn.c    3.1    93/02/09
  1881. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1882. X  /* NetHack may be freely redistributed.  See license for details. */
  1883. X  
  1884. X--- 1,4 ----
  1885. X! /*    SCCS Id: @(#)worn.c    3.1    93/06/24    */
  1886. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1887. X  /* NetHack may be freely redistributed.  See license for details. */
  1888. X  
  1889. X***************
  1890. X*** 212,218 ****
  1891. X              *ppronoun = his[pronoun_gender(mon)];
  1892. X  
  1893. X      if (breakarm(mdat)) {
  1894. X!         if (otmp = which_armor(mon, W_ARM)) {
  1895. X          if (vis)
  1896. X              pline("%s breaks out of %s armor!", Monnam(mon), ppronoun);
  1897. X          else
  1898. X--- 212,218 ----
  1899. X              *ppronoun = his[pronoun_gender(mon)];
  1900. X  
  1901. X      if (breakarm(mdat)) {
  1902. X!         if ((otmp = which_armor(mon, W_ARM)) != 0) {
  1903. X          if (vis)
  1904. X              pline("%s breaks out of %s armor!", Monnam(mon), ppronoun);
  1905. X          else
  1906. X***************
  1907. X*** 220,226 ****
  1908. X          mon->misc_worn_check &= ~W_ARM;
  1909. X          m_useup(mon, otmp);
  1910. X          }
  1911. X!         if (otmp = which_armor(mon, W_ARMC)) {
  1912. X          if (otmp->oartifact) {
  1913. X              if (vis)
  1914. X              pline("%s cloak falls off!", s_suffix(Monnam(mon)));
  1915. X--- 220,226 ----
  1916. X          mon->misc_worn_check &= ~W_ARM;
  1917. X          m_useup(mon, otmp);
  1918. X          }
  1919. X!         if ((otmp = which_armor(mon, W_ARMC)) != 0) {
  1920. X          if (otmp->oartifact) {
  1921. X              if (vis)
  1922. X              pline("%s cloak falls off!", s_suffix(Monnam(mon)));
  1923. X***************
  1924. X*** 237,243 ****
  1925. X          }
  1926. X          }
  1927. X  # ifdef TOURIST
  1928. X!         if (otmp = which_armor(mon, W_ARMU)) {
  1929. X          if (vis)
  1930. X              pline("%s shirt rips to shreds!", s_suffix(Monnam(mon)));
  1931. X          else
  1932. X--- 237,243 ----
  1933. X          }
  1934. X          }
  1935. X  # ifdef TOURIST
  1936. X!         if ((otmp = which_armor(mon, W_ARMU)) != 0) {
  1937. X          if (vis)
  1938. X              pline("%s shirt rips to shreds!", s_suffix(Monnam(mon)));
  1939. X          else
  1940. X***************
  1941. X*** 247,253 ****
  1942. X          }
  1943. X  # endif
  1944. X          } else if (sliparm(mdat)) {
  1945. X!         if (otmp = which_armor(mon, W_ARM)) {
  1946. X          if (vis)
  1947. X              pline("%s armor falls around %s!", 
  1948. X                       s_suffix(Monnam(mon)), pronoun);
  1949. X--- 247,253 ----
  1950. X          }
  1951. X  # endif
  1952. X          } else if (sliparm(mdat)) {
  1953. X!         if ((otmp = which_armor(mon, W_ARM)) != 0) {
  1954. X          if (vis)
  1955. X              pline("%s armor falls around %s!", 
  1956. X                       s_suffix(Monnam(mon)), pronoun);
  1957. X***************
  1958. X*** 257,263 ****
  1959. X          otmp->owornmask &= ~W_ARM;
  1960. X          rel_1_obj(mon, otmp);
  1961. X          }
  1962. X!         if (otmp = which_armor(mon, W_ARMC)) {
  1963. X          if (vis)
  1964. X              if (is_whirly(mon->data))
  1965. X              pline("%s cloak falls, unsupported!", 
  1966. X--- 257,263 ----
  1967. X          otmp->owornmask &= ~W_ARM;
  1968. X          rel_1_obj(mon, otmp);
  1969. X          }
  1970. X!         if ((otmp = which_armor(mon, W_ARMC)) != 0) {
  1971. X          if (vis)
  1972. X              if (is_whirly(mon->data))
  1973. X              pline("%s cloak falls, unsupported!", 
  1974. X***************
  1975. X*** 270,276 ****
  1976. X          rel_1_obj(mon, otmp);
  1977. X          }
  1978. X  # ifdef TOURIST
  1979. X!         if (otmp = which_armor(mon, W_ARMU)) {
  1980. X          if (vis)
  1981. X              if (sliparm(mon->data))
  1982. X              pline("%s seeps right through %s shirt!",
  1983. X--- 270,276 ----
  1984. X          rel_1_obj(mon, otmp);
  1985. X          }
  1986. X  # ifdef TOURIST
  1987. X!         if ((otmp = which_armor(mon, W_ARMU)) != 0) {
  1988. X          if (vis)
  1989. X              if (sliparm(mon->data))
  1990. X              pline("%s seeps right through %s shirt!",
  1991. X***************
  1992. X*** 285,291 ****
  1993. X  # endif
  1994. X      }
  1995. X      if (nohands(mdat) || verysmall(mdat)) {
  1996. X!         if (otmp = which_armor(mon, W_ARMG)) {
  1997. X          if (vis)
  1998. X              pline("%s drops %s gloves%s!", Monnam(mon), ppronoun,
  1999. X                      MON_WEP(mon) ? " and weapon" : "");
  2000. X--- 285,291 ----
  2001. X  # endif
  2002. X      }
  2003. X      if (nohands(mdat) || verysmall(mdat)) {
  2004. X!         if ((otmp = which_armor(mon, W_ARMG)) != 0) {
  2005. X          if (vis)
  2006. X              pline("%s drops %s gloves%s!", Monnam(mon), ppronoun,
  2007. X                      MON_WEP(mon) ? " and weapon" : "");
  2008. X***************
  2009. X*** 294,300 ****
  2010. X          otmp->owornmask &= ~W_ARMG;
  2011. X          rel_1_obj(mon, otmp);
  2012. X          }
  2013. X!         if (otmp = which_armor(mon, W_ARMS)) {
  2014. X          if (vis)
  2015. X              pline("%s can no longer hold %s shield!", Monnam(mon),
  2016. X                                  ppronoun);
  2017. X--- 294,300 ----
  2018. X          otmp->owornmask &= ~W_ARMG;
  2019. X          rel_1_obj(mon, otmp);
  2020. X          }
  2021. X!         if ((otmp = which_armor(mon, W_ARMS)) != 0) {
  2022. X          if (vis)
  2023. X              pline("%s can no longer hold %s shield!", Monnam(mon),
  2024. X                                  ppronoun);
  2025. X***************
  2026. X*** 304,313 ****
  2027. X          otmp->owornmask &= ~W_ARMS;
  2028. X          rel_1_obj(mon, otmp);
  2029. X          }
  2030. X!         if (otmp = which_armor(mon, W_ARMH)) {
  2031. X          if (vis)
  2032. X!             pline("%s helmet falls to the floor!", 
  2033. X!                        s_suffix(Monnam(mon)));
  2034. X          else
  2035. X              You("hear a clank.");
  2036. X          mon->misc_worn_check &= ~W_ARMH;
  2037. X--- 304,313 ----
  2038. X          otmp->owornmask &= ~W_ARMS;
  2039. X          rel_1_obj(mon, otmp);
  2040. X          }
  2041. X!         if ((otmp = which_armor(mon, W_ARMH)) != 0) {
  2042. X          if (vis)
  2043. X!             pline("%s helmet falls to the %s!", 
  2044. X!               s_suffix(Monnam(mon)), surface(mon->mx, mon->my));
  2045. X          else
  2046. X              You("hear a clank.");
  2047. X          mon->misc_worn_check &= ~W_ARMH;
  2048. X***************
  2049. X*** 317,323 ****
  2050. X      }
  2051. X      if (nohands(mdat) || verysmall(mdat) || slithy(mdat) ||
  2052. X          mdat->mlet == S_CENTAUR) {
  2053. X!         if (otmp = which_armor(mon, W_ARMF)) {
  2054. X          if (vis) {
  2055. X              if (is_whirly(mon->data))
  2056. X              pline("%s boots fall away!", 
  2057. X--- 317,323 ----
  2058. X      }
  2059. X      if (nohands(mdat) || verysmall(mdat) || slithy(mdat) ||
  2060. X          mdat->mlet == S_CENTAUR) {
  2061. X!         if ((otmp = which_armor(mon, W_ARMF)) != 0) {
  2062. X          if (vis) {
  2063. X              if (is_whirly(mon->data))
  2064. X              pline("%s boots fall away!", 
  2065. X*** /tmp/da21622    Mon Jul 12 17:35:43 1993
  2066. X--- src/zap.c    Fri Jul  9 15:36:30 1993
  2067. X***************
  2068. X*** 1,4 ****
  2069. X! /*    SCCS Id: @(#)zap.c    3.1    93/05/17    */
  2070. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  2071. X  /* NetHack may be freely redistributed.  See license for details. */
  2072. X  
  2073. X--- 1,4 ----
  2074. X! /*    SCCS Id: @(#)zap.c    3.1    93/06/16    */
  2075. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  2076. X  /* NetHack may be freely redistributed.  See license for details. */
  2077. X  
  2078. X***************
  2079. X*** 425,431 ****
  2080. X      } else {
  2081. X          int chance = rn2(100);
  2082. X  
  2083. X!         return (chance < (obj->oartifact ? achance : ochance));
  2084. X      }
  2085. X  }
  2086. X  
  2087. X--- 425,431 ----
  2088. X      } else {
  2089. X          int chance = rn2(100);
  2090. X  
  2091. X!         return((boolean)(chance < (obj->oartifact ? achance : ochance)));
  2092. X      }
  2093. X  }
  2094. X  
  2095. X***************
  2096. X*** 447,453 ****
  2097. X      /* adjust for "large" quantities of identical things */
  2098. X      if(obj->quan > 4L) zap_odds /= 2;
  2099. X  
  2100. X!     return (! rn2(zap_odds));
  2101. X  }
  2102. X  
  2103. X  /* Use up at least minwt number of things made of material mat.
  2104. X--- 447,453 ----
  2105. X      /* adjust for "large" quantities of identical things */
  2106. X      if(obj->quan > 4L) zap_odds /= 2;
  2107. X  
  2108. X!     return((boolean)(! rn2(zap_odds)));
  2109. X  }
  2110. X  
  2111. X  /* Use up at least minwt number of things made of material mat.
  2112. X***************
  2113. X*** 963,969 ****
  2114. X          case WAN_FIRE:
  2115. X              makeknown(WAN_FIRE);
  2116. X          case FIRE_HORN:
  2117. X-             pline("You've set yourself afire!");
  2118. X              if (Fire_resistance) {
  2119. X              shieldeff(u.ux, u.uy);
  2120. X              You("feel rather warm.");
  2121. X--- 963,968 ----
  2122. X***************
  2123. X*** 970,977 ****
  2124. X  #ifdef POLYSELF
  2125. X              ugolemeffects(AD_FIRE, d(12,6));
  2126. X  #endif
  2127. X!             } else
  2128. X              damage = d(12,6);
  2129. X              destroy_item(SCROLL_CLASS, AD_FIRE);
  2130. X              destroy_item(POTION_CLASS, AD_FIRE);
  2131. X              destroy_item(SPBOOK_CLASS, AD_FIRE);
  2132. X--- 969,978 ----
  2133. X  #ifdef POLYSELF
  2134. X              ugolemeffects(AD_FIRE, d(12,6));
  2135. X  #endif
  2136. X!             } else {
  2137. X!             pline("You've set yourself afire!");
  2138. X              damage = d(12,6);
  2139. X+             }
  2140. X              destroy_item(SCROLL_CLASS, AD_FIRE);
  2141. X              destroy_item(POTION_CLASS, AD_FIRE);
  2142. X              destroy_item(SPBOOK_CLASS, AD_FIRE);
  2143. X***************
  2144. X*** 1258,1264 ****
  2145. X                      stackobj(fobj);
  2146. X                      if(Invisible) newsym(u.ux, u.uy);
  2147. X                  } else {
  2148. X!                     dighole();
  2149. X                  }
  2150. X                  }
  2151. X                  break;
  2152. X--- 1259,1265 ----
  2153. X                      stackobj(fobj);
  2154. X                      if(Invisible) newsym(u.ux, u.uy);
  2155. X                  } else {
  2156. X!                     (void) dighole(FALSE);
  2157. X                  }
  2158. X                  }
  2159. X                  break;
  2160. X***************
  2161. X*** 2175,2180 ****
  2162. X--- 2176,2182 ----
  2163. X          } else {
  2164. X              rangemod -= 3;
  2165. X              if (lev->typ == DRAWBRIDGE_UP) {
  2166. X+             lev->drawbridgemask &= ~DB_UNDER;  /* clear lava */
  2167. X              lev->drawbridgemask |= (lava ? DB_FLOOR : DB_ICE);
  2168. X              } else {
  2169. X              if (!lava)
  2170. END_OF_FILE
  2171. if test 56262 -ne `wc -c <'patches03c'`; then
  2172.     echo shar: \"'patches03c'\" unpacked with wrong size!
  2173. fi
  2174. # end of 'patches03c'
  2175. if test -f 'sys/share/NOTE' -a "${1}" != "-c" ; then 
  2176.   echo shar: Renaming existing file \"'sys/share/NOTE'\" to \"'sys/share/NOTE.orig'\"
  2177.   mv -f 'sys/share/NOTE' 'sys/share/NOTE.orig'
  2178. fi
  2179. echo shar: Extracting \"'sys/share/NOTE'\" \(803 characters\)
  2180. sed "s/^X//" >'sys/share/NOTE' <<'END_OF_FILE'
  2181. XThe files lev_yacc.c, lev_lex.c, lev_comp.h, dgn_yacc.c, dgn_lex.c
  2182. Xand dgn_comp.h in this directory were generated on a Sun, using byacc
  2183. X(4.4BSD yacc) and flex, and were placed here for the convenience of
  2184. Xthose who do not have native lex/yacc on their system.
  2185. X
  2186. XThese files, while widely tested, are NOT guaranteed to work on all
  2187. Xsystems.  In particular, the flex output files (lev_lex.c and dgn_lex.c)
  2188. Xare known NOT to work on the Macintosh, when using MPW (they do work
  2189. Xwith Think C).  If you use MPW, and you do NOT have native lex to generate
  2190. Xyour own files, do one of the following:  Either (a) get/generate these
  2191. Xfiles from/on a UNIX system, using standard lex (not flex), or (b) seek
  2192. Xthe files from another Macintosh/MPW owner, who has lex on his system.
  2193. XSorry, but that's the best we can do now.
  2194. END_OF_FILE
  2195. if test 803 -ne `wc -c <'sys/share/NOTE'`; then
  2196.     echo shar: \"'sys/share/NOTE'\" unpacked with wrong size!
  2197. fi
  2198. # end of 'sys/share/NOTE'
  2199. echo shar: End of archive 2 \(of 18\).
  2200. cp /dev/null ark2isdone
  2201. MISSING=""
  2202. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
  2203.     if test ! -f ark${I}isdone ; then
  2204.     MISSING="${MISSING} ${I}"
  2205.     fi
  2206. done
  2207. if test "${MISSING}" = "" ; then
  2208.     echo You have unpacked all 18 archives.
  2209.     echo "Now execute ./patchit3.sh"
  2210.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2211. else
  2212.     echo You still need to unpack the following archives:
  2213.     echo "        " ${MISSING}
  2214. fi
  2215. ##  End of shell archive.
  2216. exit 0
  2217.