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

  1. Subject:  v17i049:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch1h/31
  2. Newsgroups: comp.sources.games
  3. Approved: billr@saab.CNA.TEK.COM
  4.  
  5. Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
  6. Posting-number: Volume 17, Issue 49
  7. Archive-name: nethack31/Patch1h
  8. Patch-To: nethack31: Volume 16, Issue 1-116
  9. Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11
  10.  
  11.  
  12.  
  13. #! /bin/sh
  14. # This is a shell archive.  Remove anything before this line, then unpack
  15. # it by saving it into a file and typing "sh file".  To overwrite existing
  16. # files, type "sh file -c".  You can also feed this as standard input via
  17. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  18. # will see the following message at the end:
  19. #        "End of archive 8 (of 31)."
  20. # Contents:  patches01i sys/amiga/hackwb.hlp
  21. # Wrapped by billr@saab on Fri Mar  5 10:50:43 1993
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f 'patches01i' -a "${1}" != "-c" ; then 
  24.   echo shar: Renaming existing file \"'patches01i'\" to \"'patches01i.orig'\"
  25.   mv -f 'patches01i' 'patches01i.orig'
  26. fi
  27. echo shar: Extracting \"'patches01i'\" \(54136 characters\)
  28. sed "s/^X//" >'patches01i' <<'END_OF_FILE'
  29. X*** /tmp/da08606    Thu Feb 25 10:25:21 1993
  30. X--- src/sounds.c    Thu Feb 18 10:59:37 1993
  31. X***************
  32. X*** 1,4 ****
  33. X! /*    SCCS Id: @(#)sounds.c    3.1    92/07/07
  34. X  /*     Copyright (c) 1989 Janet Walz, Mike Threepoint */
  35. X  /* NetHack may be freely redistributed.  See license for details. */
  36. X  
  37. X--- 1,4 ----
  38. X! /*    SCCS Id: @(#)sounds.c    3.1    93/02/09
  39. X  /*     Copyright (c) 1989 Janet Walz, Mike Threepoint */
  40. X  /* NetHack may be freely redistributed.  See license for details. */
  41. X  
  42. X***************
  43. X*** 64,74 ****
  44. X          You("hear the tones of courtly conversation.");
  45. X          break;
  46. X          case 1:
  47. X!         You("hear a sceptre being pounded in judgment.");
  48. X          break;
  49. X          case 2:
  50. X!         pline("Someone just shouted \"Off with %s head!\"",
  51. X!             flags.female ? "her" : "his");
  52. X          break;
  53. X          case 3:
  54. X          You("hear Queen Beruthiel's cats!");
  55. X--- 64,74 ----
  56. X          You("hear the tones of courtly conversation.");
  57. X          break;
  58. X          case 1:
  59. X!         You("hear a sceptre pounded in judgment.");
  60. X          break;
  61. X          case 2:
  62. X!         pline("Someone shouts \"Off with %s head!\"",
  63. X!               his[flags.female]);
  64. X          break;
  65. X          case 3:
  66. X          You("hear Queen Beruthiel's cats!");
  67. X***************
  68. X*** 186,195 ****
  69. X      if (level.flags.has_zoo && !rn2(200)) {
  70. X      switch (rn2(2)+hallu) {
  71. X          case 0:
  72. X!     You("hear a sound reminding you of an elephant stepping on a peanut.");
  73. X          break;
  74. X          case 1:
  75. X!         You("hear a sound reminding you of a trained seal.");
  76. X          break;
  77. X          case 2:
  78. X          You("hear Doctor Doolittle!");
  79. X--- 186,195 ----
  80. X      if (level.flags.has_zoo && !rn2(200)) {
  81. X      switch (rn2(2)+hallu) {
  82. X          case 0:
  83. X!         You("hear a sound reminiscent of an elephant stepping on a peanut.");
  84. X          break;
  85. X          case 1:
  86. X!         You("hear a sound reminiscent of a seal barking.");
  87. X          break;
  88. X          case 2:
  89. X          You("hear Doctor Doolittle!");
  90. X***************
  91. X*** 421,427 ****
  92. X  #endif
  93. X      case MS_BONES:
  94. X          pline("%s rattles noisily.", Monnam(mtmp));
  95. X!         You("freeze momentarily.");
  96. X          nomul(-2);
  97. X          break;
  98. X      case MS_HUMANOID:
  99. X--- 421,427 ----
  100. X  #endif
  101. X      case MS_BONES:
  102. X          pline("%s rattles noisily.", Monnam(mtmp));
  103. X!         You("freeze for a moment.");
  104. X          nomul(-2);
  105. X          break;
  106. X      case MS_HUMANOID:
  107. X***************
  108. X*** 449,455 ****
  109. X          else if (likes_magic(mtmp->data))
  110. X          pline("%s talks about spellcraft.", Monnam(mtmp));
  111. X          else if (carnivorous(mtmp->data))
  112. X!         pline("%s discusses what kinds of meat are safe to eat.", Monnam(mtmp));
  113. X          else switch (monsndx(mtmp->data)){
  114. X          case PM_HOBBIT:
  115. X              if (mtmp->mhpmax - mtmp->mhp >= 10)
  116. X--- 449,455 ----
  117. X          else if (likes_magic(mtmp->data))
  118. X          pline("%s talks about spellcraft.", Monnam(mtmp));
  119. X          else if (carnivorous(mtmp->data))
  120. X!         pline("%s discusses hunting.", Monnam(mtmp));
  121. X          else switch (monsndx(mtmp->data)){
  122. X          case PM_HOBBIT:
  123. X              if (mtmp->mhpmax - mtmp->mhp >= 10)
  124. X***************
  125. X*** 460,468 ****
  126. X--- 460,470 ----
  127. X          case PM_ARCHEOLOGIST:
  128. X  pline("%s describes a recent article in \"Spelunker Today\" magazine.", Monnam(mtmp));
  129. X              break;
  130. X+ # ifdef TOURIST
  131. X          case PM_TOURIST:
  132. X              verbalize("Aloha.");
  133. X              break;
  134. X+ # endif
  135. X          default:
  136. X              pline("%s discusses dungeon exploration.", Monnam(mtmp));
  137. X          }
  138. X***************
  139. X*** 632,638 ****
  140. X  
  141. X  #ifdef POLYSELF
  142. X      if (uasmon->msound == MS_SILENT) {
  143. X!     Your("current form seems unable to speak.");
  144. X      return(0);
  145. X      }
  146. X  #endif
  147. X--- 634,640 ----
  148. X  
  149. X  #ifdef POLYSELF
  150. X      if (uasmon->msound == MS_SILENT) {
  151. X!     pline("As %s, you cannot speak.", an(uasmon->mname));
  152. X      return(0);
  153. X      }
  154. X  #endif
  155. X***************
  156. X*** 645,651 ****
  157. X      return(0);
  158. X      }
  159. X      if (Underwater) {
  160. X!     pline("All you can utter is a mouthful of air bubbles.");
  161. X      return(0);
  162. X      }
  163. X  
  164. X--- 647,653 ----
  165. X      return(0);
  166. X      }
  167. X      if (Underwater) {
  168. X!     pline("Your speech is unintelligible underwater.");
  169. X      return(0);
  170. X      }
  171. X  
  172. X*** /tmp/da08614    Thu Feb 25 10:25:23 1993
  173. X--- src/sp_lev.c    Wed Feb 24 22:34:59 1993
  174. X***************
  175. X*** 67,82 ****
  176. X  #define NewTab(type, size)    (type **) alloc(sizeof(type *) * size)
  177. X  #define Free(ptr)        if(ptr) free((genericptr_t) (ptr))
  178. X  
  179. X! static walk NEARDATA walklist[50];
  180. X  extern int min_rx, max_rx, min_ry, max_ry; /* from mkmap.c */
  181. X  
  182. X  static char Map[COLNO][ROWNO];
  183. X  static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10];
  184. X  static aligntyp    ralign[3] = { AM_CHAOTIC, AM_NEUTRAL, AM_LAWFUL };
  185. X! static xchar NEARDATA xstart, NEARDATA ystart;
  186. X! static char NEARDATA xsize, NEARDATA ysize;
  187. X  
  188. X! static void FDECL(make_walls_nondiggable, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P));
  189. X  static int NDECL(rnddoor);
  190. X  static int NDECL(rndtrap);
  191. X  static void FDECL(get_location, (schar *,schar *,int));
  192. X--- 67,82 ----
  193. X  #define NewTab(type, size)    (type **) alloc(sizeof(type *) * size)
  194. X  #define Free(ptr)        if(ptr) free((genericptr_t) (ptr))
  195. X  
  196. X! static NEARDATA walk walklist[50];
  197. X  extern int min_rx, max_rx, min_ry, max_ry; /* from mkmap.c */
  198. X  
  199. X  static char Map[COLNO][ROWNO];
  200. X  static char robjects[10], rloc_x[10], rloc_y[10], rmonst[10];
  201. X  static aligntyp    ralign[3] = { AM_CHAOTIC, AM_NEUTRAL, AM_LAWFUL };
  202. X! static NEARDATA xchar xstart, ystart;
  203. X! static NEARDATA char xsize, ysize;
  204. X  
  205. X! static void FDECL(set_wall_property, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,int));
  206. X  static int NDECL(rnddoor);
  207. X  static int NDECL(rndtrap);
  208. X  static void FDECL(get_location, (schar *,schar *,int));
  209. X***************
  210. X*** 96,107 ****
  211. X  lev_init init_lev;
  212. X  
  213. X  /*
  214. X!  * Make walls of the area (x1, y1, x2, y2) non diggable
  215. X   */
  216. X  
  217. X  static void
  218. X! make_walls_nondiggable(x1,y1,x2,y2)
  219. X  xchar x1, y1, x2, y2;
  220. X  {
  221. X      register xchar x, y;
  222. X  
  223. X--- 96,108 ----
  224. X  lev_init init_lev;
  225. X  
  226. X  /*
  227. X!  * Make walls of the area (x1, y1, x2, y2) non diggable/non passwall-able
  228. X   */
  229. X  
  230. X  static void
  231. X! set_wall_property(x1,y1,x2,y2, prop)
  232. X  xchar x1, y1, x2, y2;
  233. X+ int prop;
  234. X  {
  235. X      register xchar x, y;
  236. X  
  237. X***************
  238. X*** 108,114 ****
  239. X      for(y = y1; y <= y2; y++)
  240. X          for(x = x1; x <= x2; x++)
  241. X          if(IS_STWALL(levl[x][y].typ))
  242. X!             levl[x][y].diggable |= W_NONDIGGABLE;
  243. X  }
  244. X  
  245. X  /*
  246. X--- 109,115 ----
  247. X      for(y = y1; y <= y2; y++)
  248. X          for(x = x1; x <= x2; x++)
  249. X          if(IS_STWALL(levl[x][y].typ))
  250. X!             levl[x][y].diggable |= prop;
  251. X  }
  252. X  
  253. X  /*
  254. X***************
  255. X*** 843,849 ****
  256. X          /* changed mpeaceful again; have to reset malign */
  257. X          set_malign(mtmp);
  258. X          }
  259. X!         if (m->asleep >= 0) mtmp->msleep = m->asleep;
  260. X      }
  261. X  }
  262. X  
  263. X--- 844,860 ----
  264. X          /* changed mpeaceful again; have to reset malign */
  265. X          set_malign(mtmp);
  266. X          }
  267. X!         if (m->asleep >= 0) {
  268. X! #ifdef UNIXPC
  269. X!         /* optimizer bug strikes again */
  270. X!         if (m->asleep)
  271. X!             mtmp->msleep = TRUE;
  272. X!         else
  273. X!             mtmp->msleep = FALSE;
  274. X! #else
  275. X!         mtmp->msleep = m->asleep;
  276. X! #endif
  277. X!         }
  278. X      }
  279. X  }
  280. X  
  281. X***************
  282. X*** 1035,1040 ****
  283. X--- 1046,1055 ----
  284. X          get_location(&x, &y, DRY);
  285. X      }
  286. X      levl[x][y].typ = typ;
  287. X+     if (typ == FOUNTAIN)
  288. X+         level.flags.nfountains++;
  289. X+     else if (typ == SINK)
  290. X+         level.flags.nsinks++;
  291. X  }
  292. X  
  293. X  /* 
  294. X***************
  295. X*** 1294,1349 ****
  296. X      if (!croom || croom->rtype == OROOM)
  297. X          return;
  298. X  
  299. X!     if(prefilled) {
  300. X!         switch(croom->rtype) {
  301. X          case COURT:
  302. X!         level.flags.has_court = 1;
  303. X          break;
  304. X  #ifdef ARMY
  305. X          case BARRACKS:
  306. X!         level.flags.has_barracks = 1;
  307. X          break;
  308. X  #endif
  309. X!         case ZOO:
  310. X!         level.flags.has_zoo = 1;
  311. X          break;
  312. X-         case MORGUE:
  313. X-         level.flags.has_morgue = 1;
  314. X-         break;
  315. X          case SWAMP:
  316. X!         level.flags.has_swamp = 1;
  317. X          break;
  318. X-         case BEEHIVE:
  319. X-         level.flags.has_beehive = 1;
  320. X-         break;
  321. X-         }
  322. X-         return;
  323. X      }
  324. X-     /* Vault ? */
  325. X-     if (croom->rtype == VAULT) {
  326. X-         int x,y;
  327. X-         for (x=croom->lx;x<=croom->hx;x++)
  328. X-             for (y=croom->ly;y<=croom->hy;y++)
  329. X-             mkgold((long)rn1(depth(&u.uz)*100, 51), x, y);
  330. X-         return;
  331. X-     }
  332. X- 
  333. X-     /* Shop ? */
  334. X-     if (croom->rtype >= SHOPBASE) {
  335. X-         stock_room(croom->rtype - SHOPBASE, croom);
  336. X-         return;
  337. X-     }
  338. X- 
  339. X-     /* Zoo ? */
  340. X-     switch (croom->rtype) {
  341. X-           case COURT:
  342. X-           case ZOO:
  343. X-           case BEEHIVE:
  344. X-           case MORGUE:
  345. X-           case BARRACKS:
  346. X-         fill_zoo(croom);
  347. X-         break;
  348. X-     }
  349. X  }
  350. X  
  351. X  static void
  352. X--- 1309,1367 ----
  353. X      if (!croom || croom->rtype == OROOM)
  354. X          return;
  355. X  
  356. X!     if (!prefilled) {
  357. X!         int x,y;
  358. X! 
  359. X!         /* Shop ? */
  360. X!         if (croom->rtype >= SHOPBASE) {
  361. X!             stock_room(croom->rtype - SHOPBASE, croom);
  362. X!             level.flags.has_shop = TRUE;
  363. X!             return;
  364. X!         }
  365. X! 
  366. X!         switch (croom->rtype) {
  367. X!         case VAULT:
  368. X!             for (x=croom->lx;x<=croom->hx;x++)
  369. X!             for (y=croom->ly;y<=croom->hy;y++)
  370. X!                 mkgold((long)rn1(abs(depth(&u.uz))*100, 51), x, y);
  371. X!             break;
  372. X!         case COURT:
  373. X!         case ZOO:
  374. X!         case BEEHIVE:
  375. X!         case MORGUE:
  376. X!         case BARRACKS:
  377. X!             fill_zoo(croom);
  378. X!             break;
  379. X!         }
  380. X!     }
  381. X!     switch (croom->rtype) {
  382. X!         case VAULT:
  383. X!         level.flags.has_vault = TRUE;
  384. X!         break;
  385. X!         case ZOO:
  386. X!         level.flags.has_zoo = TRUE;
  387. X!         break;
  388. X          case COURT:
  389. X!         level.flags.has_court = TRUE;
  390. X          break;
  391. X+         case MORGUE:
  392. X+         level.flags.has_morgue = TRUE;
  393. X+         break;
  394. X+         case BEEHIVE:
  395. X+         level.flags.has_beehive = TRUE;
  396. X+         break;
  397. X  #ifdef ARMY
  398. X          case BARRACKS:
  399. X!         level.flags.has_barracks = TRUE;
  400. X          break;
  401. X  #endif
  402. X!         case TEMPLE:
  403. X!         level.flags.has_temple = TRUE;
  404. X          break;
  405. X          case SWAMP:
  406. X!         level.flags.has_swamp = TRUE;
  407. X          break;
  408. X      }
  409. X  }
  410. X  
  411. X  static void
  412. X***************
  413. X*** 2263,2270 ****
  414. X          get_location(&tmpdig.x1, &tmpdig.y1, DRY|WET);
  415. X          get_location(&tmpdig.x2, &tmpdig.y2, DRY|WET);
  416. X  
  417. X!         make_walls_nondiggable(tmpdig.x1, tmpdig.y1,
  418. X!                        tmpdig.x2, tmpdig.y2);
  419. X      }
  420. X  
  421. X      Fread((genericptr_t) &n, 1, sizeof(n), fd);
  422. X--- 2281,2300 ----
  423. X          get_location(&tmpdig.x1, &tmpdig.y1, DRY|WET);
  424. X          get_location(&tmpdig.x2, &tmpdig.y2, DRY|WET);
  425. X  
  426. X!         set_wall_property(tmpdig.x1, tmpdig.y1,
  427. X!                   tmpdig.x2, tmpdig.y2, W_NONDIGGABLE);
  428. X!     }
  429. X! 
  430. X!     Fread((genericptr_t) &n, 1, sizeof(n), fd);
  431. X!                         /* Number of non_passables */
  432. X!     while(n--) {
  433. X!         Fread((genericptr_t)&tmpdig, 1, sizeof(tmpdig), fd);
  434. X! 
  435. X!         get_location(&tmpdig.x1, &tmpdig.y1, DRY|WET);
  436. X!         get_location(&tmpdig.x2, &tmpdig.y2, DRY|WET);
  437. X! 
  438. X!         set_wall_property(tmpdig.x1, tmpdig.y1,
  439. X!                   tmpdig.x2, tmpdig.y2, W_NONPASSWALL);
  440. X      }
  441. X  
  442. X      Fread((genericptr_t) &n, 1, sizeof(n), fd);
  443. X*** /tmp/da08638    Thu Feb 25 10:25:32 1993
  444. X--- src/timeout.c    Fri Feb 12 10:25:41 1993
  445. X***************
  446. X*** 14,20 ****
  447. X  #ifdef OVLB
  448. X  
  449. X  /* He is being petrified - dialogue by inmet!tower */
  450. X! static const char NEARDATA *stoned_texts[] = {
  451. X      "You are slowing down.",        /* 5 */
  452. X      "Your limbs are stiffening.",        /* 4 */
  453. X      "Your limbs have turned to stone.",    /* 3 */
  454. X--- 14,20 ----
  455. X  #ifdef OVLB
  456. X  
  457. X  /* He is being petrified - dialogue by inmet!tower */
  458. X! static NEARDATA const char *stoned_texts[] = {
  459. X      "You are slowing down.",        /* 5 */
  460. X      "Your limbs are stiffening.",        /* 4 */
  461. X      "Your limbs have turned to stone.",    /* 3 */
  462. X***************
  463. X*** 36,42 ****
  464. X  }
  465. X  
  466. X  /* He is getting sicker and sicker prior to vomiting */
  467. X! static const char NEARDATA *vomiting_texts[] = {
  468. X      "You are feeling mildly nauseous.",    /* 14 */
  469. X      "You feel slightly confused.",        /* 11 */
  470. X      "You can't seem to think straight.",    /* 8 */
  471. X--- 36,42 ----
  472. X  }
  473. X  
  474. X  /* He is getting sicker and sicker prior to vomiting */
  475. X! static NEARDATA const char *vomiting_texts[] = {
  476. X      "You are feeling mildly nauseous.",    /* 14 */
  477. X      "You feel slightly confused.",        /* 11 */
  478. X      "You can't seem to think straight.",    /* 8 */
  479. X***************
  480. X*** 67,73 ****
  481. X      exercise(A_CON, FALSE);
  482. X  }
  483. X  
  484. X! static const char NEARDATA *choke_texts[] = {
  485. X      "You find it hard to breathe.",
  486. X      "You're gasping for air.",
  487. X      "You can no longer breathe.",
  488. X--- 67,73 ----
  489. X      exercise(A_CON, FALSE);
  490. X  }
  491. X  
  492. X! static NEARDATA const char *choke_texts[] = {
  493. X      "You find it hard to breathe.",
  494. X      "You're gasping for air.",
  495. X      "You can no longer breathe.",
  496. X***************
  497. X*** 334,343 ****
  498. X  void
  499. X  burn_lamps()
  500. X  {
  501. X!     register struct obj *obj;
  502. X  
  503. X      /* Note: magic lamps never go out as long as the genie's inside */
  504. X!     for(obj=invent; obj; obj=obj->nobj) {
  505. X          if ((obj->otyp == OIL_LAMP || obj->otyp == BRASS_LANTERN)
  506. X                              && obj->lamplit) {
  507. X          obj->age--;
  508. X--- 334,344 ----
  509. X  void
  510. X  burn_lamps()
  511. X  {
  512. X!     register struct obj *obj, *obj2;
  513. X  
  514. X      /* Note: magic lamps never go out as long as the genie's inside */
  515. X!     for (obj=invent; obj; obj=obj2) {
  516. X!         obj2 = obj->nobj;
  517. X          if ((obj->otyp == OIL_LAMP || obj->otyp == BRASS_LANTERN)
  518. X                              && obj->lamplit) {
  519. X          obj->age--;
  520. X***************
  521. X*** 376,382 ****
  522. X          }
  523. X          if ((obj->otyp == CANDELABRUM_OF_INVOCATION || Is_candle(obj)) &&
  524. X              obj->lamplit)
  525. X!         age_candle(obj);
  526. X      }
  527. X  }
  528. X  
  529. X--- 377,383 ----
  530. X          }
  531. X          if ((obj->otyp == CANDELABRUM_OF_INVOCATION || Is_candle(obj)) &&
  532. X              obj->lamplit)
  533. X!         age_candle(obj);    /* candles may vanish */
  534. X      }
  535. X  }
  536. X  
  537. X*** /tmp/da08646    Thu Feb 25 10:25:35 1993
  538. X--- src/topten.c    Fri Feb 12 13:01:02 1993
  539. X***************
  540. X*** 62,68 ****
  541. X  static int FDECL(classmon, (CHAR_P,BOOLEAN_P));
  542. X  
  543. X  /* must fit with end.c */
  544. X! const char NEARDATA *killed_by_prefix[] = {
  545. X      "killed by ", "choked on ", "poisoned by ", "", "drowned in ",
  546. X      "", "crushed to death by ", "petrified by ", "",
  547. X      "", "",
  548. X--- 62,68 ----
  549. X  static int FDECL(classmon, (CHAR_P,BOOLEAN_P));
  550. X  
  551. X  /* must fit with end.c */
  552. X! NEARDATA const char *killed_by_prefix[] = {
  553. X      "killed by ", "choked on ", "poisoned by ", "", "drowned in ",
  554. X      "", "crushed to death by ", "petrified by ", "",
  555. X      "", "",
  556. X***************
  557. X*** 148,153 ****
  558. X--- 148,157 ----
  559. X  #else
  560. X  #define    HUP    if(!done_hup)
  561. X  #endif
  562. X+ 
  563. X+ #ifdef TOS
  564. X+     restore_colors();    /* make sure the screen is black on white */
  565. X+ #endif
  566. X      /* create a new 'topten' entry */
  567. X      t0 = newttentry();
  568. X      /* deepest_lev_reached() is in terms of depth(), and reporting the
  569. X***************
  570. X*** 172,182 ****
  571. X          default: impossible("bad killer format?");
  572. X          case KILLED_BY_AN:
  573. X              Strcat(t0->death, killed_by_prefix[how]);
  574. X!             (void) strncat(t0->death, an(killer), DTHSZ);
  575. X              break;
  576. X          case KILLED_BY:
  577. X              Strcat(t0->death, killed_by_prefix[how]);
  578. X!             (void) strncat(t0->death, killer, DTHSZ);
  579. X              break;
  580. X          case NO_KILLER_PREFIX:
  581. X              (void) strncat(t0->death, killer, DTHSZ);
  582. X--- 176,188 ----
  583. X          default: impossible("bad killer format?");
  584. X          case KILLED_BY_AN:
  585. X              Strcat(t0->death, killed_by_prefix[how]);
  586. X!             (void) strncat(t0->death, an(killer),
  587. X!                         DTHSZ-strlen(t0->death));
  588. X              break;
  589. X          case KILLED_BY:
  590. X              Strcat(t0->death, killed_by_prefix[how]);
  591. X!             (void) strncat(t0->death, killer,
  592. X!                         DTHSZ-strlen(t0->death));
  593. X              break;
  594. X          case NO_KILLER_PREFIX:
  595. X              (void) strncat(t0->death, killer, DTHSZ);
  596. X*** /tmp/da08654    Thu Feb 25 10:25:37 1993
  597. X--- src/track.c    Thu Feb 11 13:28:07 1993
  598. X***************
  599. X*** 7,14 ****
  600. X  
  601. X  #define    UTSZ    50
  602. X  
  603. X! STATIC_VAR int NEARDATA utcnt, NEARDATA utpnt;
  604. X! STATIC_VAR coord NEARDATA utrack[UTSZ];
  605. X  
  606. X  #ifdef OVLB
  607. X  void
  608. X--- 7,14 ----
  609. X  
  610. X  #define    UTSZ    50
  611. X  
  612. X! STATIC_VAR NEARDATA int utcnt, utpnt;
  613. X! STATIC_VAR NEARDATA coord utrack[UTSZ];
  614. X  
  615. X  #ifdef OVLB
  616. X  void
  617. X*** /tmp/da08662    Thu Feb 25 10:25:39 1993
  618. X--- src/trap.c    Tue Feb 23 09:38:07 1993
  619. X***************
  620. X*** 1,4 ****
  621. X! /*    SCCS Id: @(#)trap.c    3.1    92/12/10    */
  622. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  623. X  /* NetHack may be freely redistributed.  See license for details. */
  624. X  
  625. X--- 1,4 ----
  626. X! /*    SCCS Id: @(#)trap.c    3.1    93/02/13    */
  627. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  628. X  /* NetHack may be freely redistributed.  See license for details. */
  629. X  
  630. X***************
  631. X*** 57,64 ****
  632. X  int type;
  633. X  boolean print;
  634. X  {
  635. X!     static const char NEARDATA *action[] = { "smoulder", "rust", "rot", "corrode" };
  636. X!     static const char NEARDATA *msg[] =  { "burnt", "rusted", "rotten", "corroded" };
  637. X      boolean vulnerable = FALSE;
  638. X      boolean plural;
  639. X      boolean grprot = FALSE;
  640. X--- 57,64 ----
  641. X  int type;
  642. X  boolean print;
  643. X  {
  644. X!     static NEARDATA const char *action[] = { "smoulder", "rust", "rot", "corrode" };
  645. X!     static NEARDATA const char *msg[] =  { "burnt", "rusted", "rotten", "corroded" };
  646. X      boolean vulnerable = FALSE;
  647. X      boolean plural;
  648. X      boolean grprot = FALSE;
  649. X***************
  650. X*** 76,88 ****
  651. X  
  652. X      plural = is_gloves(otmp) || is_boots(otmp);
  653. X  
  654. X!     if (!vulnerable)
  655. X          if (flags.verbose)
  656. X              Your("%s %s not affected.", ostr, plural ? "are" : "is");
  657. X!     else if (otmp->oeroded < MAX_ERODE) {
  658. X!         if (grprot && otmp->greased)
  659. X              grease_protect(otmp,ostr,plural);
  660. X!         else if (otmp->oerodeproof || (otmp->blessed && !rnl(4))) {
  661. X              if (flags.verbose)
  662. X                  pline("Somehow, your %s %s not affected.",
  663. X                      ostr, plural ? "are" : "is");
  664. X--- 76,88 ----
  665. X  
  666. X      plural = is_gloves(otmp) || is_boots(otmp);
  667. X  
  668. X!     if (!vulnerable) {
  669. X          if (flags.verbose)
  670. X              Your("%s %s not affected.", ostr, plural ? "are" : "is");
  671. X!     } else if (otmp->oeroded < MAX_ERODE) {
  672. X!         if (grprot && otmp->greased) {
  673. X              grease_protect(otmp,ostr,plural);
  674. X!         } else if (otmp->oerodeproof || (otmp->blessed && !rnl(4))) {
  675. X              if (flags.verbose)
  676. X                  pline("Somehow, your %s %s not affected.",
  677. X                      ostr, plural ? "are" : "is");
  678. X***************
  679. X*** 93,103 ****
  680. X                  otmp->oeroded ? " further" : "");
  681. X              otmp->oeroded++;
  682. X          }
  683. X!     } else
  684. X          if (flags.verbose)
  685. X              Your("%s %s%s completely %s.", ostr,
  686. X                   Blind ? "feel" : "look",
  687. X                   plural ? "" : "s", msg[type]);
  688. X      return(TRUE);
  689. X  }
  690. X  
  691. X--- 93,104 ----
  692. X                  otmp->oeroded ? " further" : "");
  693. X              otmp->oeroded++;
  694. X          }
  695. X!     } else {
  696. X          if (flags.verbose)
  697. X              Your("%s %s%s completely %s.", ostr,
  698. X                   Blind ? "feel" : "look",
  699. X                   plural ? "" : "s", msg[type]);
  700. X+     }
  701. X      return(TRUE);
  702. X  }
  703. X  
  704. X***************
  705. X*** 126,132 ****
  706. X      register struct trap *ttmp;
  707. X      register boolean oldplace;
  708. X  
  709. X!     if (ttmp = t_at(x,y)) {
  710. X          oldplace = TRUE;
  711. X          if (u.utrap && (x == u.ux) && (y == u.uy) && 
  712. X            ((u.utraptype == TT_BEARTRAP && typ != BEAR_TRAP) ||
  713. X--- 127,133 ----
  714. X      register struct trap *ttmp;
  715. X      register boolean oldplace;
  716. X  
  717. X!     if ((ttmp = t_at(x,y)) != 0) {
  718. X          oldplace = TRUE;
  719. X          if (u.utrap && (x == u.ux) && (y == u.uy) && 
  720. X            ((u.utraptype == TT_BEARTRAP && typ != BEAR_TRAP) ||
  721. X***************
  722. X*** 174,180 ****
  723. X      boolean    tmp1, tmp2, tmp3, tmp4;
  724. X  # ifdef POLYSELF
  725. X      tmp1 = isok(x,y) && (!IS_ROCK(levl[x][y].typ) ||
  726. X!         passes_walls(uasmon)) && !MON_AT(x, y);
  727. X  # else
  728. X      tmp1 = isok(x,y) && !IS_ROCK(levl[x][y].typ) && !MON_AT(x, y);
  729. X  # endif
  730. X--- 175,181 ----
  731. X      boolean    tmp1, tmp2, tmp3, tmp4;
  732. X  # ifdef POLYSELF
  733. X      tmp1 = isok(x,y) && (!IS_ROCK(levl[x][y].typ) ||
  734. X!         (passes_walls(uasmon) && may_passwall(x,y))) && !MON_AT(x, y);
  735. X  # else
  736. X      tmp1 = isok(x,y) && !IS_ROCK(levl[x][y].typ) && !MON_AT(x, y);
  737. X  # endif
  738. X***************
  739. X*** 191,197 ****
  740. X  #else
  741. X      return( isok(x,y) &&
  742. X  # ifdef POLYSELF
  743. X!         (!IS_ROCK(levl[x][y].typ) || passes_walls(uasmon)) &&
  744. X  # else
  745. X          !IS_ROCK(levl[x][y].typ) &&
  746. X  # endif
  747. X--- 192,199 ----
  748. X  #else
  749. X      return( isok(x,y) &&
  750. X  # ifdef POLYSELF
  751. X!         (!IS_ROCK(levl[x][y].typ) ||
  752. X!          (passes_walls(uasmon) && may_passwall(x,y))) &&
  753. X  # else
  754. X          !IS_ROCK(levl[x][y].typ) &&
  755. X  # endif
  756. X***************
  757. X*** 317,325 ****
  758. X  #else
  759. X         !(ttype == PIT || ttype == SPIKED_PIT) &&
  760. X  #endif
  761. X!        !(ttype == MAGIC_PORTAL || ttype == ANTI_MAGIC) && !rn2(5))
  762. X          You("escape a%s.", traps[ttype]);
  763. X!     else {
  764. X          seetrap(trap);
  765. X          switch(ttype) {
  766. X          case ARROW_TRAP:
  767. X--- 319,327 ----
  768. X  #else
  769. X         !(ttype == PIT || ttype == SPIKED_PIT) &&
  770. X  #endif
  771. X!        !(ttype == MAGIC_PORTAL || ttype == ANTI_MAGIC) && !rn2(5)) {
  772. X          You("escape a%s.", traps[ttype]);
  773. X!     } else {
  774. X          seetrap(trap);
  775. X          switch(ttype) {
  776. X          case ARROW_TRAP:
  777. X***************
  778. X*** 327,335 ****
  779. X              otmp = mksobj(ARROW, TRUE, FALSE);
  780. X              otmp->quan = 1L;
  781. X              otmp->owt = weight(otmp);
  782. X!             if(thitu(8,dmgval(otmp,uasmon),otmp,"arrow"))
  783. X              obfree(otmp, (struct obj *)0);
  784. X!             else {
  785. X              place_object(otmp, u.ux, u.uy);
  786. X              otmp->nobj = fobj;
  787. X              fobj = otmp;        
  788. X--- 329,337 ----
  789. X              otmp = mksobj(ARROW, TRUE, FALSE);
  790. X              otmp->quan = 1L;
  791. X              otmp->owt = weight(otmp);
  792. X!             if(thitu(8,dmgval(otmp,uasmon),otmp,"arrow")) {
  793. X              obfree(otmp, (struct obj *)0);
  794. X!             } else {
  795. X              place_object(otmp, u.ux, u.uy);
  796. X              otmp->nobj = fobj;
  797. X              fobj = otmp;        
  798. X***************
  799. X*** 366,377 ****
  800. X      pline("A trap door in the ceiling opens and a rock falls on your %s!",
  801. X                  body_part(HEAD));
  802. X  
  803. X!             if (uarmh)
  804. X                  if(is_metallic(uarmh)) {
  805. X                  pline("Fortunately, you are wearing a hard helmet.");
  806. X                  dmg = 2;
  807. X!                 } else if (flags.verbose)
  808. X                   Your("%s does not protect you.", xname(uarmh));
  809. X  
  810. X              stackobj(otmp);
  811. X              newsym(u.ux,u.uy);    /* map the rock */
  812. X--- 368,381 ----
  813. X      pline("A trap door in the ceiling opens and a rock falls on your %s!",
  814. X                  body_part(HEAD));
  815. X  
  816. X!             if (uarmh) {
  817. X                  if(is_metallic(uarmh)) {
  818. X                  pline("Fortunately, you are wearing a hard helmet.");
  819. X                  dmg = 2;
  820. X!                 } else if (flags.verbose) {
  821. X                   Your("%s does not protect you.", xname(uarmh));
  822. X+                 }
  823. X+             }
  824. X  
  825. X              stackobj(otmp);
  826. X              newsym(u.ux,u.uy);    /* map the rock */
  827. X***************
  828. X*** 447,453 ****
  829. X              } else
  830. X              if (u.umonnum == PM_GREMLIN && rn2(3)) {
  831. X              pline("A gush of water hits you!");
  832. X!             if(mtmp = cloneu()) {
  833. X                  mtmp->mhpmax = (u.mhmax /= 2);
  834. X                  You("multiply.");
  835. X              }
  836. X--- 451,457 ----
  837. X              } else
  838. X              if (u.umonnum == PM_GREMLIN && rn2(3)) {
  839. X              pline("A gush of water hits you!");
  840. X!             if ((mtmp = cloneu()) != 0) {
  841. X                  mtmp->mhpmax = (u.mhmax /= 2);
  842. X                  You("multiply.");
  843. X              }
  844. X***************
  845. X*** 505,513 ****
  846. X  #endif
  847. X              ) {
  848. X              if(Blind) break;
  849. X!             if(trap->tseen)
  850. X                  You("see a pit below you.");
  851. X!             else {
  852. X                  pline("A pit opens up under you!");
  853. X                  You("don't fall in!");
  854. X              }
  855. X--- 509,517 ----
  856. X  #endif
  857. X              ) {
  858. X              if(Blind) break;
  859. X!             if(trap->tseen) {
  860. X                  You("see a pit below you.");
  861. X!             } else {
  862. X                  pline("A pit opens up under you!");
  863. X                  You("don't fall in!");
  864. X              }
  865. X***************
  866. X*** 657,666 ****
  867. X          case STATUE_TRAP:
  868. X              deltrap(trap);
  869. X              newsym(u.ux,u.uy);    /* get rid of trap symbol */
  870. X!             for(otmp=level.objects[u.ux][u.uy];
  871. X                          otmp; otmp = otmp->nexthere)
  872. X!             if(otmp->otyp == STATUE)
  873. X!                 if(mtmp=makemon(&mons[otmp->corpsenm],u.ux,u.uy)) {
  874. X                  pline("The statue comes to life!");
  875. X                  /* mimic statues become seen mimics */
  876. X                  if(mtmp->m_ap_type) seemimic(mtmp);
  877. X--- 661,671 ----
  878. X          case STATUE_TRAP:
  879. X              deltrap(trap);
  880. X              newsym(u.ux,u.uy);    /* get rid of trap symbol */
  881. X!             for (otmp = level.objects[u.ux][u.uy];
  882. X                          otmp; otmp = otmp->nexthere)
  883. X!             if (otmp->otyp == STATUE)
  884. X!                 if ((mtmp = makemon(&mons[otmp->corpsenm],
  885. X!                         u.ux, u.uy)) != 0) {
  886. X                  pline("The statue comes to life!");
  887. X                  /* mimic statues become seen mimics */
  888. X                  if(mtmp->m_ap_type) seemimic(mtmp);
  889. X***************
  890. X*** 715,720 ****
  891. X--- 720,726 ----
  892. X              pline("KAABLAMM!!!  You triggered a land mine!");
  893. X              set_wounded_legs(LEFT_SIDE, rn1(35, 41));
  894. X              set_wounded_legs(RIGHT_SIDE, rn1(35, 41));
  895. X+             exercise(A_DEX, FALSE);
  896. X              }
  897. X              losehp(rnd(16), "land mine", KILLED_BY_AN);
  898. X              /* wake everything on the level */
  899. X***************
  900. X*** 804,810 ****
  901. X      if(!trap) {
  902. X          mtmp->mtrapped = 0;    /* perhaps teleported? */
  903. X      } else if (mtmp->mtrapped) {    /* was in trap */
  904. X!         if(!rn2(40)) 
  905. X              if (sobj_at(BOULDER, mtmp->mx, mtmp->my) && 
  906. X                  ((trap->ttyp == PIT) || 
  907. X                   (trap->ttyp == SPIKED_PIT))) {
  908. X--- 810,816 ----
  909. X      if(!trap) {
  910. X          mtmp->mtrapped = 0;    /* perhaps teleported? */
  911. X      } else if (mtmp->mtrapped) {    /* was in trap */
  912. X!         if(!rn2(40)) {
  913. X              if (sobj_at(BOULDER, mtmp->mx, mtmp->my) && 
  914. X                  ((trap->ttyp == PIT) || 
  915. X                   (trap->ttyp == SPIKED_PIT))) {
  916. X***************
  917. X*** 814,819 ****
  918. X--- 820,826 ----
  919. X                  }
  920. X              } else
  921. X                  mtmp->mtrapped = 0;
  922. X+         }
  923. X      } else {
  924. X          register int tt = trap->ttyp;
  925. X  
  926. X***************
  927. X*** 874,889 ****
  928. X          case BEAR_TRAP:
  929. X              if(mptr->msize > MZ_SMALL &&
  930. X                 !amorphous(mptr) && !is_flyer(mptr)) {
  931. X!                 mtmp->mtrapped = 1;
  932. X!                 if(in_sight) {
  933. X!                   pline("%s is caught in a bear trap!",
  934. X!                     Monnam(mtmp));
  935. X!                   seetrap(trap);
  936. X!                 } else
  937. X!                     if((mptr == &mons[PM_OWLBEAR]
  938. X!                     || mptr == &mons[PM_BUGBEAR])
  939. X!                     && flags.soundok)
  940. X!                 You("hear the roaring of an angry bear!");
  941. X              }
  942. X              break;
  943. X  
  944. X--- 881,897 ----
  945. X          case BEAR_TRAP:
  946. X              if(mptr->msize > MZ_SMALL &&
  947. X                 !amorphous(mptr) && !is_flyer(mptr)) {
  948. X!                 mtmp->mtrapped = 1;
  949. X!                 if(in_sight) {
  950. X!                 pline("%s is caught in a bear trap!",
  951. X!                       Monnam(mtmp));
  952. X!                 seetrap(trap);
  953. X!                 } else {
  954. X!                 if((mptr == &mons[PM_OWLBEAR]
  955. X!                     || mptr == &mons[PM_BUGBEAR])
  956. X!                    && flags.soundok)
  957. X!                     You("hear the roaring of an angry bear!");
  958. X!                 }
  959. X              }
  960. X              break;
  961. X  
  962. X***************
  963. X*** 912,918 ****
  964. X                      pline("May %s rust in peace.",
  965. X                                  mon_nam(mtmp));
  966. X                  mondied(mtmp);
  967. X!                 trapkilled = TRUE;
  968. X              } else if (mptr == &mons[PM_GREMLIN] && rn2(3)) {
  969. X                  struct monst *mtmp2 = clone_mon(mtmp);
  970. X  
  971. X--- 920,929 ----
  972. X                      pline("May %s rust in peace.",
  973. X                                  mon_nam(mtmp));
  974. X                  mondied(mtmp);
  975. X! #ifdef MUSE
  976. X!                 if (mtmp->mhp <= 0)
  977. X! #endif
  978. X!                     trapkilled = TRUE;
  979. X              } else if (mptr == &mons[PM_GREMLIN] && rn2(3)) {
  980. X                  struct monst *mtmp2 = clone_mon(mtmp);
  981. X  
  982. X***************
  983. X*** 957,964 ****
  984. X--- 968,982 ----
  985. X                      pline("%s falls into a pit!", Monnam(mtmp));
  986. X                      seetrap(trap);
  987. X                  }
  988. X+ #ifdef MUSE
  989. X+                 mselftouch(mtmp, "Falling, ", FALSE);
  990. X+                 if(mtmp->mhp <= 0 ||
  991. X+                     thitm(0, mtmp, (struct obj *)0,
  992. X+                      rnd((tt==PIT) ? 6 : 10)))
  993. X+ #else
  994. X                  if(thitm(0, mtmp, (struct obj *)0,
  995. X                       rnd((tt==PIT) ? 6 : 10)))
  996. X+ #endif
  997. X                      trapkilled = TRUE;
  998. X              }
  999. X              break;
  1000. X***************
  1001. X*** 1166,1172 ****
  1002. X  selftouch(arg)
  1003. X  const char *arg;
  1004. X  {
  1005. X!     if(uwep && (uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE)
  1006. X  #ifdef POLYSELF
  1007. X              && !resists_ston(uasmon)
  1008. X  #endif
  1009. X--- 1184,1190 ----
  1010. X  selftouch(arg)
  1011. X  const char *arg;
  1012. X  {
  1013. X!     if(uwep && uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE
  1014. X  #ifdef POLYSELF
  1015. X              && !resists_ston(uasmon)
  1016. X  #endif
  1017. X***************
  1018. X*** 1183,1189 ****
  1019. X--- 1201,1235 ----
  1020. X      }
  1021. X  }
  1022. X  
  1023. X+ #ifdef MUSE
  1024. X  void
  1025. X+ mselftouch(mon,arg,byplayer)
  1026. X+ struct monst *mon;
  1027. X+ const char *arg;
  1028. X+ boolean byplayer;
  1029. X+ {
  1030. X+     struct obj *mwep = MON_WEP(mon);
  1031. X+ 
  1032. X+     if (mwep && mwep->otyp == CORPSE && mwep->corpsenm == PM_COCKATRICE
  1033. X+             && !resists_ston(mon->data)) {
  1034. X+         if (cansee(mon->mx, mon->my)) {
  1035. X+             pline("%s%s touches the cockatrice corpse.",
  1036. X+                 arg ? arg : "", arg ? mon_nam(mon) : Monnam(mon));
  1037. X+             pline("%s turns to stone.", Monnam(mon));
  1038. X+         }
  1039. X+         if (poly_when_stoned(mon->data)) {
  1040. X+             mon_to_stone(mon);
  1041. X+             return;
  1042. X+         }
  1043. X+         if (byplayer) {
  1044. X+             stoned = TRUE;
  1045. X+             xkilled(mon,0);
  1046. X+         } else monstone(mon);
  1047. X+     }
  1048. X+ }
  1049. X+ #endif
  1050. X+ 
  1051. X+ void
  1052. X  float_up()
  1053. X  {
  1054. X      if(u.utrap) {
  1055. X***************
  1056. X*** 1279,1285 ****
  1057. X          else if (!u.uinwater && !no_msg) {
  1058. X              if (Hallucination)
  1059. X                  pline("Bummer!  You've %s.",
  1060. X!                       is_pool(u.ux,u.uy) ?
  1061. X                            "splashed down" : "hit the ground");
  1062. X              else
  1063. X                  You("float gently to the %s.",
  1064. X--- 1325,1331 ----
  1065. X          else if (!u.uinwater && !no_msg) {
  1066. X              if (Hallucination)
  1067. X                  pline("Bummer!  You've %s.",
  1068. X!                       is_pool(u.ux,u.uy) ?
  1069. X                            "splashed down" : "hit the ground");
  1070. X              else
  1071. X                  You("float gently to the %s.",
  1072. X***************
  1073. X*** 1337,1345 ****
  1074. X                  || wizard
  1075. X  #endif
  1076. X                      ) {
  1077. X!         if (unconscious())
  1078. X          pline("Being unconscious, you cannot control your teleport.");
  1079. X!         else {
  1080. X              pline("To what position do you want to be teleported?");
  1081. X              cc.x = u.ux;
  1082. X              cc.y = u.uy;
  1083. X--- 1383,1391 ----
  1084. X                  || wizard
  1085. X  #endif
  1086. X                      ) {
  1087. X!         if (unconscious()) {
  1088. X          pline("Being unconscious, you cannot control your teleport.");
  1089. X!         } else {
  1090. X              pline("To what position do you want to be teleported?");
  1091. X              cc.x = u.ux;
  1092. X              cc.y = u.uy;
  1093. X***************
  1094. X*** 1516,1523 ****
  1095. X          char buf[BUFSZ];
  1096. X  
  1097. X          do {
  1098. X!           getlin("To what level do you want to teleport? [type a number]",
  1099. X              buf);
  1100. X          } while(!digit(buf[0]) && (buf[0] != '-' || !digit(buf[1])));
  1101. X          newlev = atoi(buf);
  1102. X  
  1103. X--- 1562,1571 ----
  1104. X          char buf[BUFSZ];
  1105. X  
  1106. X          do {
  1107. X!         getlin("To what level do you want to teleport? [type a number]",
  1108. X              buf);
  1109. X+         if (!strcmp(buf,"\033"))    /* cancelled */
  1110. X+             return;
  1111. X          } while(!digit(buf[0]) && (buf[0] != '-' || !digit(buf[1])));
  1112. X          newlev = atoi(buf);
  1113. X  
  1114. X***************
  1115. X*** 1597,1603 ****
  1116. X          } else
  1117. X              You("are now high above the clouds...");
  1118. X  
  1119. X!         if(Levitation || is_floater(uasmon)) {
  1120. X              You("float gently down to earth.");
  1121. X              u.uz.dnum = 0; /* he might have been in another dgn */
  1122. X              newlev = 1;
  1123. X--- 1645,1655 ----
  1124. X          } else
  1125. X              You("are now high above the clouds...");
  1126. X  
  1127. X!         if(Levitation
  1128. X! #ifdef POLYSELF
  1129. X!            || is_floater(uasmon)
  1130. X! #endif
  1131. X!            ) {
  1132. X              You("float gently down to earth.");
  1133. X              u.uz.dnum = 0; /* he might have been in another dgn */
  1134. X              newlev = 1;
  1135. X***************
  1136. X*** 1802,1814 ****
  1137. X  }
  1138. X  
  1139. X  void
  1140. X! water_damage(obj,force)
  1141. X  register struct obj *obj;
  1142. X! register boolean force;
  1143. X  {
  1144. X      /* Scrolls, spellbooks, potions, weapons and
  1145. X         pieces of armor may get affected by the water */
  1146. X!     for(; obj; obj = obj->nobj) {
  1147. X  
  1148. X          (void) snuff_lit(obj);
  1149. X  
  1150. X--- 1854,1866 ----
  1151. X  }
  1152. X  
  1153. X  void
  1154. X! water_damage(obj, force, here)
  1155. X  register struct obj *obj;
  1156. X! register boolean force, here;
  1157. X  {
  1158. X      /* Scrolls, spellbooks, potions, weapons and
  1159. X         pieces of armor may get affected by the water */
  1160. X!     for (; obj; obj = (here ? obj->nexthere : obj->nobj)) {
  1161. X  
  1162. X          (void) snuff_lit(obj);
  1163. X  
  1164. X***************
  1165. X*** 1816,1822 ****
  1166. X              if (force || !rn2(2)) obj->greased = 0;
  1167. X          } else if(Is_container(obj) && !Is_box(obj) &&
  1168. X              (obj->otyp != OILSKIN_SACK || (obj->cursed && !rn2(3)))) {
  1169. X!             water_damage(obj->cobj,force);
  1170. X          } else if(obj->oclass == SCROLL_CLASS && (force || rn2(12) > Luck)
  1171. X  #ifdef MAIL
  1172. X                && obj->otyp != SCR_MAIL
  1173. X--- 1868,1874 ----
  1174. X              if (force || !rn2(2)) obj->greased = 0;
  1175. X          } else if(Is_container(obj) && !Is_box(obj) &&
  1176. X              (obj->otyp != OILSKIN_SACK || (obj->cursed && !rn2(3)))) {
  1177. X!             water_damage(obj->cobj, force, FALSE);
  1178. X          } else if(obj->oclass == SCROLL_CLASS && (force || rn2(12) > Luck)
  1179. X  #ifdef MAIL
  1180. X                && obj->otyp != SCR_MAIL
  1181. X***************
  1182. X*** 1909,1915 ****
  1183. X  
  1184. X      /* happily wading in the same contiguous pool */
  1185. X      if (u.uinwater && is_pool(u.ux-u.dx,u.uy-u.dy) &&
  1186. X!        Magical_breathing) {
  1187. X          /* water effects on objects every now and then */
  1188. X          if (!rn2(5)) inpool_ok = TRUE;
  1189. X          else return(FALSE);
  1190. X--- 1961,1971 ----
  1191. X  
  1192. X      /* happily wading in the same contiguous pool */
  1193. X      if (u.uinwater && is_pool(u.ux-u.dx,u.uy-u.dy) &&
  1194. X!         (
  1195. X! #ifdef POLYSELF
  1196. X!          is_swimmer(uasmon) ||
  1197. X! #endif
  1198. X!          Magical_breathing)) {
  1199. X          /* water effects on objects every now and then */
  1200. X          if (!rn2(5)) inpool_ok = TRUE;
  1201. X          else return(FALSE);
  1202. X***************
  1203. X*** 1926,1943 ****
  1204. X              Hallucination ? "the Titanic" : "a rock");
  1205. X      }
  1206. X  
  1207. X!     water_damage(invent,FALSE);
  1208. X  
  1209. X  #ifdef POLYSELF
  1210. X      if(u.umonnum == PM_GREMLIN && rn2(3)) {
  1211. X          struct monst *mtmp;
  1212. X!         if(mtmp = cloneu()) {
  1213. X              mtmp->mhpmax = (u.mhmax /= 2);
  1214. X              You("multiply.");
  1215. X          }
  1216. X      }
  1217. X  
  1218. X!     if(is_swimmer(uasmon)) return(FALSE);
  1219. X  #endif
  1220. X      if (inpool_ok) return(FALSE);
  1221. X  #ifdef WALKIES
  1222. X--- 1982,2005 ----
  1223. X              Hallucination ? "the Titanic" : "a rock");
  1224. X      }
  1225. X  
  1226. X!     water_damage(invent, FALSE, FALSE);
  1227. X  
  1228. X  #ifdef POLYSELF
  1229. X      if(u.umonnum == PM_GREMLIN && rn2(3)) {
  1230. X          struct monst *mtmp;
  1231. X!         if ((mtmp = cloneu()) != 0) {
  1232. X              mtmp->mhpmax = (u.mhmax /= 2);
  1233. X              You("multiply.");
  1234. X          }
  1235. X      }
  1236. X  
  1237. X!     if(is_swimmer(uasmon) && !inpool_ok) {
  1238. X!         if (Punished) placebc();
  1239. X!         u.uinwater = 1;
  1240. X!         under_water(1);
  1241. X!         vision_full_recalc = 1;
  1242. X!         return(FALSE);
  1243. X!     }
  1244. X  #endif
  1245. X      if (inpool_ok) return(FALSE);
  1246. X  #ifdef WALKIES
  1247. X***************
  1248. X*** 1956,1961 ****
  1249. X--- 2018,2024 ----
  1250. X          if (Punished) placebc();
  1251. X          u.uinwater = 1;
  1252. X          under_water(1);
  1253. X+         vision_full_recalc = 1;
  1254. X          return(FALSE);
  1255. X      }
  1256. X      if((Teleportation || can_teleport(uasmon)) &&
  1257. X***************
  1258. X*** 2305,2315 ****
  1259. X          case 0:
  1260. X              pline("A cloud of %s gas billows from %s",
  1261. X                    hcolor(), the(xname(obj)));
  1262. X!             if(!Stunned)
  1263. X                  if (Hallucination)
  1264. X                  pline("What a groovy feeling!");
  1265. X                  else
  1266. X                  You("stagger and your vision blurs...");
  1267. X              make_stunned(HStun + rn1(7, 16),FALSE);
  1268. X              make_hallucinated(HHallucination + rn1(5, 16),FALSE,0L);
  1269. X              break;
  1270. X--- 2368,2381 ----
  1271. X          case 0:
  1272. X              pline("A cloud of %s gas billows from %s",
  1273. X                    hcolor(), the(xname(obj)));
  1274. X!             if(!Stunned) {
  1275. X                  if (Hallucination)
  1276. X                  pline("What a groovy feeling!");
  1277. X+                 else if (Blind)
  1278. X+                 You("stagger and get dizzy...");
  1279. X                  else
  1280. X                  You("stagger and your vision blurs...");
  1281. X+             }
  1282. X              make_stunned(HStun + rn1(7, 16),FALSE);
  1283. X              make_hallucinated(HHallucination + rn1(5, 16),FALSE,0L);
  1284. X              break;
  1285. X***************
  1286. X*** 2410,2417 ****
  1287. X              int yy = mon->my;
  1288. X  
  1289. X              monkilled(mon, "", AD_PHYS);
  1290. X!             newsym(xx, yy);
  1291. X!             trapkilled = TRUE;
  1292. X          }
  1293. X      }
  1294. X      if (obj && (!strike || d_override)) {
  1295. X--- 2476,2489 ----
  1296. X              int yy = mon->my;
  1297. X  
  1298. X              monkilled(mon, "", AD_PHYS);
  1299. X! #ifdef MUSE
  1300. X!             if (mon->mhp <= 0) {
  1301. X! #endif
  1302. X!                 newsym(xx, yy);
  1303. X!                 trapkilled = TRUE;
  1304. X! #ifdef MUSE
  1305. X!             }
  1306. X! #endif
  1307. X          }
  1308. X      }
  1309. X      if (obj && (!strike || d_override)) {
  1310. X*** /tmp/da08670    Thu Feb 25 10:25:43 1993
  1311. X--- src/u_init.c    Mon Feb 22 12:24:29 1993
  1312. X***************
  1313. X*** 1,4 ****
  1314. X! /*    SCCS Id: @(#)u_init.c    3.1    92/11/13    */
  1315. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1316. X  /* NetHack may be freely redistributed.  See license for details. */
  1317. X  
  1318. X--- 1,4 ----
  1319. X! /*    SCCS Id: @(#)u_init.c    3.1    93/02/21    */
  1320. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1321. X  /* NetHack may be freely redistributed.  See license for details. */
  1322. X  
  1323. X***************
  1324. X*** 22,27 ****
  1325. X--- 22,29 ----
  1326. X  #define    UNDEF_SPE    '\177'
  1327. X  #define    UNDEF_BLESS    2
  1328. X  
  1329. X+ static boolean random_role = FALSE;
  1330. X+ 
  1331. X  /* all roles must all have distinct first letter */
  1332. X  const char *roles[] = {    /* also used in options.c and winxxx.c */
  1333. X              /* roles[2] and [6] are changed for females */
  1334. X***************
  1335. X*** 260,265 ****
  1336. X--- 262,271 ----
  1337. X          terminate(0);
  1338. X      }
  1339. X      i = role_index(pc);
  1340. X+     if (random_role) {
  1341. X+         pline("This game you will be %s.", an(roles[i]));
  1342. X+         display_nhwindow(WIN_MESSAGE, TRUE);
  1343. X+     }
  1344. X  
  1345. X      (void) strncpy(pl_character, roles[i], PL_CSIZ-1);
  1346. X      pl_character[PL_CSIZ-1] = 0;
  1347. X***************
  1348. X*** 475,480 ****
  1349. X--- 481,488 ----
  1350. X      if (discover)
  1351. X          ini_inv(Wishing);
  1352. X  #endif
  1353. X+     u.ugold0 += hidden_gold();    /* in case sack has gold in it */
  1354. X+ 
  1355. X      find_ac();            /* get initial ac value */
  1356. X      init_attr(75);            /* init attribute values */
  1357. X      max_rank_sz();            /* set max str size for class ranks */
  1358. X***************
  1359. X*** 518,527 ****
  1360. X           */
  1361. X          if (undefined) {
  1362. X  #ifdef POLYSELF
  1363. X!             static unsigned NEARDATA nocreate = STRANGE_OBJECT;
  1364. X!             static unsigned NEARDATA nocreate2 = STRANGE_OBJECT;
  1365. X  #endif
  1366. X!             static unsigned NEARDATA nocreate3 = STRANGE_OBJECT;
  1367. X  
  1368. X              while(obj->otyp == WAN_WISHING
  1369. X  #ifdef POLYSELF
  1370. X--- 526,535 ----
  1371. X           */
  1372. X          if (undefined) {
  1373. X  #ifdef POLYSELF
  1374. X!             static NEARDATA unsigned nocreate = STRANGE_OBJECT;
  1375. X!             static NEARDATA unsigned nocreate2 = STRANGE_OBJECT;
  1376. X  #endif
  1377. X!             static NEARDATA unsigned nocreate3 = STRANGE_OBJECT;
  1378. X  
  1379. X              while(obj->otyp == WAN_WISHING
  1380. X  #ifdef POLYSELF
  1381. X***************
  1382. X*** 649,664 ****
  1383. X  }
  1384. X  
  1385. X  void
  1386. X! plnamesuffix() {
  1387. X      register char *p;
  1388. X      if ((p = rindex(plname, '-')) != 0) {
  1389. X!         *p = 0;
  1390. X          pl_character[0] = p[1];
  1391. X!         pl_character[1] = 0;
  1392. X          if(!plname[0]) {
  1393. X              askname();
  1394. X              plnamesuffix();
  1395. X          }
  1396. X      }
  1397. X  }
  1398. X  
  1399. X--- 657,680 ----
  1400. X  }
  1401. X  
  1402. X  void
  1403. X! plnamesuffix()
  1404. X! {
  1405. X      register char *p;
  1406. X      if ((p = rindex(plname, '-')) != 0) {
  1407. X!         *p = '\0';
  1408. X          pl_character[0] = p[1];
  1409. X!         pl_character[1] = '\0';
  1410. X!         random_role = FALSE;
  1411. X          if(!plname[0]) {
  1412. X              askname();
  1413. X              plnamesuffix();
  1414. X          }
  1415. X+     }
  1416. X+     if (pl_character[0] == '@') {    /* explicit request for random class */
  1417. X+         int i = rn2((int)strlen(pl_classes));
  1418. X+         pl_character[0] = pl_classes[i];
  1419. X+         pl_character[1] = '\0';
  1420. X+         random_role = TRUE;
  1421. X      }
  1422. X  }
  1423. X  
  1424. X*** /tmp/da08678    Thu Feb 25 10:25:45 1993
  1425. X--- src/uhitm.c    Tue Feb 23 16:35:40 1993
  1426. X***************
  1427. X*** 1,4 ****
  1428. X! /*    SCCS Id: @(#)uhitm.c    3.1    92/12/10    */
  1429. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1430. X  /* NetHack may be freely redistributed.  See license for details. */
  1431. X  
  1432. X--- 1,4 ----
  1433. X! /*    SCCS Id: @(#)uhitm.c    3.1    93/02/18    */
  1434. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1435. X  /* NetHack may be freely redistributed.  See license for details. */
  1436. X  
  1437. X***************
  1438. X*** 102,108 ****
  1439. X              else if ((obj = level.objects[mtmp->mx][mtmp->my]) != 0)
  1440. X                  pline("Wait!  There's %s hiding under %s!",
  1441. X                      an(l_monnam(mtmp)), doname(obj));
  1442. X!             wakeup(mtmp);
  1443. X              mtmp->data->mflags3 &= ~M3_WAITMASK;
  1444. X              return(TRUE);
  1445. X          }
  1446. X--- 102,108 ----
  1447. X              else if ((obj = level.objects[mtmp->mx][mtmp->my]) != 0)
  1448. X                  pline("Wait!  There's %s hiding under %s!",
  1449. X                      an(l_monnam(mtmp)), doname(obj));
  1450. X!             mtmp->msleep = 0;
  1451. X              mtmp->data->mflags3 &= ~M3_WAITMASK;
  1452. X              return(TRUE);
  1453. X          }
  1454. X***************
  1455. X*** 350,356 ****
  1456. X  struct monst *mon;
  1457. X  int tmp;
  1458. X  {
  1459. X!     static int NEARDATA malive;
  1460. X      boolean mhit = (tmp > (dieroll = rnd(20)) || u.uswallow);
  1461. X  
  1462. X      if(tmp > dieroll) exercise(A_DEX, TRUE);
  1463. X--- 350,356 ----
  1464. X  struct monst *mon;
  1465. X  int tmp;
  1466. X  {
  1467. X!     static NEARDATA int malive;
  1468. X      boolean mhit = (tmp > (dieroll = rnd(20)) || u.uswallow);
  1469. X  
  1470. X      if(tmp > dieroll) exercise(A_DEX, TRUE);
  1471. X***************
  1472. X*** 426,438 ****
  1473. X             obj->otyp == UNICORN_HORN || obj->oclass == ROCK_CLASS) {
  1474. X  
  1475. X          /* If not a melee weapon, and either not thrown, or thrown */
  1476. X!         /* and a bow (bows are >BOOMERANG), or thrown and a missile */
  1477. X!         /* without a propellor (missiles are <DART), do 1-2 points */
  1478. X!         if((obj->otyp >= BOW || obj->otyp < DART)
  1479. X              && obj->otyp != PICK_AXE && obj->otyp != UNICORN_HORN
  1480. X              && (!thrown ||
  1481. X                  (obj->oclass != ROCK_CLASS &&
  1482. X!                 (obj->otyp > BOOMERANG ||
  1483. X                  (obj->otyp < DART &&
  1484. X                      (!uwep ||
  1485. X                      objects[obj->otyp].w_propellor !=
  1486. X--- 426,438 ----
  1487. X             obj->otyp == UNICORN_HORN || obj->oclass == ROCK_CLASS) {
  1488. X  
  1489. X          /* If not a melee weapon, and either not thrown, or thrown */
  1490. X!         /* and a bow (bows are >= BOW), or thrown and a missile */
  1491. X!         /* without a propellor (which means <DART), do 1-2 points */
  1492. X!         if((obj->otyp >= BOW || obj->otyp < BOOMERANG)
  1493. X              && obj->otyp != PICK_AXE && obj->otyp != UNICORN_HORN
  1494. X              && (!thrown ||
  1495. X                  (obj->oclass != ROCK_CLASS &&
  1496. X!                 (obj->otyp >= BOW ||
  1497. X                  (obj->otyp < DART &&
  1498. X                      (!uwep ||
  1499. X                      objects[obj->otyp].w_propellor !=
  1500. X***************
  1501. X*** 448,453 ****
  1502. X--- 448,454 ----
  1503. X              artifact_hit(&youmonst, mon, obj, &tmp, dieroll)) {
  1504. X              if(mon->mhp <= 0) /* artifact killed monster */
  1505. X                  return FALSE;
  1506. X+             if (tmp == 0) return TRUE;
  1507. X              hittxt = TRUE;
  1508. X              }
  1509. X              if (objects[obj->otyp].oc_material == SILVER
  1510. X***************
  1511. X*** 662,673 ****
  1512. X      if(mon->mhp < 1)
  1513. X          destroyed = TRUE;
  1514. X      if(mon->mtame && (!mon->mflee || mon->mfleetim)) {
  1515. X! #ifdef SOUNDS
  1516. X!         if (rn2(8)) yelp(mon);
  1517. X!         else growl(mon); /* give them a moment's worry */
  1518. X! #endif
  1519. X!         mon->mtame--;
  1520. X!         if(!mon->mtame) newsym(mon->mx, mon->my);
  1521. X          mon->mflee = TRUE;        /* Rick Richardson */
  1522. X          mon->mfleetim += 10*rnd(tmp);
  1523. X      }
  1524. X--- 663,669 ----
  1525. X      if(mon->mhp < 1)
  1526. X          destroyed = TRUE;
  1527. X      if(mon->mtame && (!mon->mflee || mon->mfleetim)) {
  1528. X!         abuse_dog(mon);
  1529. X          mon->mflee = TRUE;        /* Rick Richardson */
  1530. X          mon->mfleetim += 10*rnd(tmp);
  1531. X      }
  1532. X***************
  1533. X*** 758,764 ****
  1534. X          && u.umonnum != PM_BALROG) {
  1535. X          struct monst *dtmp;
  1536. X          pline("Some hell-p has arrived!");
  1537. X!         if((dtmp = makemon(!rn2(6) ? &mons[ndemon()] : uasmon, u.ux, u.uy)))
  1538. X          (void)tamedog(dtmp, (struct obj *)0);
  1539. X          exercise(A_WIS, TRUE);
  1540. X          return(0);
  1541. X--- 754,761 ----
  1542. X          && u.umonnum != PM_BALROG) {
  1543. X          struct monst *dtmp;
  1544. X          pline("Some hell-p has arrived!");
  1545. X!         if((dtmp = makemon(!rn2(6) ? &mons[ndemon(u.ualign.type)] :
  1546. X!                      uasmon, u.ux, u.uy)))
  1547. X          (void)tamedog(dtmp, (struct obj *)0);
  1548. X          exercise(A_WIS, TRUE);
  1549. X          return(0);
  1550. X***************
  1551. X*** 859,873 ****
  1552. X              }
  1553. X              if (stealoid) {
  1554. X              boolean stolen = FALSE;
  1555. X-             /* Is "he"/"his" always correct? */
  1556. X              if (gender(mdef) == u.mfemale &&
  1557. X                          uasmon->mlet == S_NYMPH)
  1558. X      You("charm %s.  She gladly hands over her possessions.", mon_nam(mdef));
  1559. X              else
  1560. X!         You("seduce %s and %s starts to take off %s clothes.",
  1561. X!                 mon_nam(mdef),
  1562. X!                 gender(mdef) ? "she" : "he",
  1563. X!                 gender(mdef) ? "her" : "his");
  1564. X              while(mdef->minvent) {
  1565. X                  otmp = mdef->minvent;
  1566. X                  mdef->minvent = otmp->nobj;
  1567. X--- 856,868 ----
  1568. X              }
  1569. X              if (stealoid) {
  1570. X              boolean stolen = FALSE;
  1571. X              if (gender(mdef) == u.mfemale &&
  1572. X                          uasmon->mlet == S_NYMPH)
  1573. X      You("charm %s.  She gladly hands over her possessions.", mon_nam(mdef));
  1574. X              else
  1575. X!             You("seduce %s and %s starts to take off %s clothes.",
  1576. X!                 mon_nam(mdef), he[pronoun_gender(mdef)],
  1577. X!                 his[pronoun_gender(mdef)]);
  1578. X              while(mdef->minvent) {
  1579. X                  otmp = mdef->minvent;
  1580. X                  mdef->minvent = otmp->nobj;
  1581. X***************
  1582. X*** 892,898 ****
  1583. X                  impossible("Player steal fails!");
  1584. X              else {
  1585. X                  pline("%s finishes taking off %s suit.",
  1586. X!                    Monnam(mdef), gender(mdef) ? "her" : "his");
  1587. X                  You("steal %s!", doname(stealoid));
  1588. X  # if defined(ARMY) && !defined(MUSE)
  1589. X                  mdef->data = &mons[PM_UNARMORED_SOLDIER];
  1590. X--- 887,893 ----
  1591. X                  impossible("Player steal fails!");
  1592. X              else {
  1593. X                  pline("%s finishes taking off %s suit.",
  1594. X!                       Monnam(mdef), his[pronoun_gender(mdef)]);
  1595. X                  You("steal %s!", doname(stealoid));
  1596. X  # if defined(ARMY) && !defined(MUSE)
  1597. X                  mdef->data = &mons[PM_UNARMORED_SOLDIER];
  1598. X***************
  1599. X*** 910,915 ****
  1600. X--- 905,915 ----
  1601. X  #ifdef MUSE
  1602. X              possibly_unwield(mdef);
  1603. X              otmp->owornmask = 0L;
  1604. X+             mselftouch(mdef, (const char *)0, TRUE);
  1605. X+             if (mdef->mhp <= 0) {
  1606. X+                 tmp = 1; /* avoid early return from damageum */
  1607. X+                 break;
  1608. X+             }
  1609. X  #endif
  1610. X             }
  1611. X          }
  1612. X***************
  1613. X*** 959,969 ****
  1614. X              int xtmp = d(2,6);
  1615. X              pline("%s suddenly seems weaker!", Monnam(mdef));
  1616. X              mdef->mhpmax -= xtmp;
  1617. X!             if ((mdef->mhp -= xtmp) <= 0 || !mdef->m_lev--) {
  1618. X                  pline("%s dies!", Monnam(mdef));
  1619. X                  xkilled(mdef,0);
  1620. X                  return(2);
  1621. X              }
  1622. X          }
  1623. X          tmp = 0;
  1624. X          break;
  1625. X--- 959,970 ----
  1626. X              int xtmp = d(2,6);
  1627. X              pline("%s suddenly seems weaker!", Monnam(mdef));
  1628. X              mdef->mhpmax -= xtmp;
  1629. X!             if ((mdef->mhp -= xtmp) <= 0 || !mdef->m_lev) {
  1630. X                  pline("%s dies!", Monnam(mdef));
  1631. X                  xkilled(mdef,0);
  1632. X                  return(2);
  1633. X              }
  1634. X+             mdef->m_lev--;
  1635. X          }
  1636. X          tmp = 0;
  1637. X          break;
  1638. X***************
  1639. X*** 1008,1016 ****
  1640. X  #ifdef MUSE
  1641. X          if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
  1642. X              pline("%s helmet blocks your attack to %s head.",
  1643. X!               s_suffix(Monnam(mdef)),
  1644. X!               (Blind || !humanoid(mdef->data)) ? "its" :
  1645. X!                 (mdef->female ? "her" : "his"));
  1646. X              break;
  1647. X          }
  1648. X  #endif
  1649. X--- 1009,1015 ----
  1650. X  #ifdef MUSE
  1651. X          if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
  1652. X              pline("%s helmet blocks your attack to %s head.",
  1653. X!               s_suffix(Monnam(mdef)), his[pronoun_gender(mdef)]);
  1654. X              break;
  1655. X          }
  1656. X  #endif
  1657. X*** /tmp/da08686    Thu Feb 25 10:25:48 1993
  1658. X--- src/vault.c    Tue Feb  9 15:55:34 1993
  1659. X***************
  1660. X*** 253,259 ****
  1661. X          mongone(guard);
  1662. X          return;
  1663. X      }
  1664. X-     clear_nhwindow(WIN_MESSAGE);
  1665. X      verbalize("I don't know you.");
  1666. X      if (!u.ugold && !hidden_gold())
  1667. X          verbalize("Please follow me.");
  1668. X--- 253,258 ----
  1669. X***************
  1670. X*** 330,341 ****
  1671. X      for(x = lowx-1; x <= hix+1; x++)
  1672. X          for(y = lowy-1; y <= hiy+1; y += (hiy-lowy+2)) {
  1673. X          if(!IS_WALL(levl[x][y].typ) && !in_fcorridor(grd, x, y)) {
  1674. X!             struct monst *mon;
  1675. X! 
  1676. X!             if((mon = m_at(x, y)) && grd->mx != x && grd->my != y) {
  1677. X              if (mon->data->msound != MS_SILENT)
  1678. X!                 You("hear a scream.");
  1679. X!             rloc(m_at(x,y));
  1680. X              }
  1681. X              if ((gold = g_at(x, y)) != 0) {
  1682. X              move_gold(gold, EGD(grd)->vroom);
  1683. X--- 329,339 ----
  1684. X      for(x = lowx-1; x <= hix+1; x++)
  1685. X          for(y = lowy-1; y <= hiy+1; y += (hiy-lowy+2)) {
  1686. X          if(!IS_WALL(levl[x][y].typ) && !in_fcorridor(grd, x, y)) {
  1687. X!             if(MON_AT(x, y) && grd->mx != x && grd->my != y) {
  1688. X!             struct monst *mon = m_at(x,y);
  1689. X              if (mon->data->msound != MS_SILENT)
  1690. X!                 yelp(mon);
  1691. X!             rloc(mon);
  1692. X              }
  1693. X              if ((gold = g_at(x, y)) != 0) {
  1694. X              move_gold(gold, EGD(grd)->vroom);
  1695. X***************
  1696. X*** 368,375 ****
  1697. X          for(y = lowy; y <= hiy; y++) {
  1698. X          if(!IS_WALL(levl[x][y].typ) && !in_fcorridor(grd, x, y)) {
  1699. X              if(MON_AT(x, y) && grd->mx != x && grd->my != y) {
  1700. X!             You("hear a scream.");
  1701. X!             rloc(m_at(x,y));
  1702. X              }
  1703. X              if ((gold = g_at(x, y)) != 0) {
  1704. X              move_gold(gold, EGD(grd)->vroom);
  1705. X--- 366,375 ----
  1706. X          for(y = lowy; y <= hiy; y++) {
  1707. X          if(!IS_WALL(levl[x][y].typ) && !in_fcorridor(grd, x, y)) {
  1708. X              if(MON_AT(x, y) && grd->mx != x && grd->my != y) {
  1709. X!             struct monst *mon = m_at(x,y);
  1710. X!             if (mon->data->msound != MS_SILENT)
  1711. X!                 yelp(mon);
  1712. X!             rloc(mon);
  1713. X              }
  1714. X              if ((gold = g_at(x, y)) != 0) {
  1715. X              move_gold(gold, EGD(grd)->vroom);
  1716. X***************
  1717. X*** 483,489 ****
  1718. X                  l_monnam(grd));
  1719. X              return(-1);
  1720. X          } else {
  1721. X!             verbalize("Well, be gone your way.");
  1722. X              wallify_vault(grd);
  1723. X              egrd->gddone = 1;
  1724. X              goto cleanup;
  1725. X--- 483,489 ----
  1726. X                  l_monnam(grd));
  1727. X              return(-1);
  1728. X          } else {
  1729. X!             verbalize("Well, begone.");
  1730. X              wallify_vault(grd);
  1731. X              egrd->gddone = 1;
  1732. X              goto cleanup;
  1733. X***************
  1734. X*** 708,715 ****
  1735. X          gx = rooms[EGD(grd)->vroom].lx + rn2(2);
  1736. X          gy = rooms[EGD(grd)->vroom].ly + rn2(2);
  1737. X          Sprintf(buf,
  1738. X!         "To Croesus: here's the gold recovered from the %s %s...",
  1739. X!         player_mon()->mname, plname);
  1740. X          make_engr_at(gx, gy, buf, 0L, ENGRAVE);
  1741. X      }
  1742. X      place_object(gold = mkgoldobj(u.ugold), gx, gy);
  1743. X--- 708,715 ----
  1744. X          gx = rooms[EGD(grd)->vroom].lx + rn2(2);
  1745. X          gy = rooms[EGD(grd)->vroom].ly + rn2(2);
  1746. X          Sprintf(buf,
  1747. X!         "To Croesus: here's the gold recovered from %s the %s.",
  1748. X!         plname, player_mon()->mname);
  1749. X          make_engr_at(gx, gy, buf, 0L, ENGRAVE);
  1750. X      }
  1751. X      place_object(gold = mkgoldobj(u.ugold), gx, gy);
  1752. X*** /tmp/da08694    Thu Feb 25 10:25:51 1993
  1753. X--- src/version.c    Fri Feb  5 11:20:43 1993
  1754. X***************
  1755. X*** 5,11 ****
  1756. X  #include    "hack.h"
  1757. X  #include    "date.h"
  1758. X  #ifndef BETA
  1759. X! # if defined(MICRO) && !defined(AMIGA) && !defined(TOS)
  1760. X  # include    "patchlev.h"
  1761. X  # else
  1762. X  # include    "patchlevel.h"
  1763. X--- 5,11 ----
  1764. X  #include    "hack.h"
  1765. X  #include    "date.h"
  1766. X  #ifndef BETA
  1767. X! # if defined(MICRO) && !defined(AMIGA) && !defined(TOS) && !defined(OS2_HPFS)
  1768. X  # include    "patchlev.h"
  1769. X  # else
  1770. X  # include    "patchlevel.h"
  1771. X*** /tmp/da08702    Thu Feb 25 10:25:53 1993
  1772. X--- src/vision.c    Wed Feb  3 16:37:18 1993
  1773. X***************
  1774. X*** 484,490 ****
  1775. X              next_rmax[row] = max(next_rmax[row], col);
  1776. X              next_array[row][col] = IN_SIGHT;
  1777. X          }
  1778. X!         }
  1779. X  
  1780. X      /* if in a pit, just update for immediate locations */
  1781. X      else if (u.utrap && u.utraptype == TT_PIT) {
  1782. X--- 484,490 ----
  1783. X              next_rmax[row] = max(next_rmax[row], col);
  1784. X              next_array[row][col] = IN_SIGHT;
  1785. X          }
  1786. X!     }
  1787. X  
  1788. X      /* if in a pit, just update for immediate locations */
  1789. X      else if (u.utrap && u.utraptype == TT_PIT) {
  1790. X*** /tmp/da07333    Thu Feb 25 10:19:14 1993
  1791. X--- dat/oracles.txt    Sun Feb 21 16:16:26 1993
  1792. X***************
  1793. X*** 9,14 ****
  1794. X--- 9,16 ----
  1795. X  If thou hast had trouble with rust on thy armor or weapons, thou shouldst
  1796. X  know that thou canst prevent this by, while in a confused state, reading the
  1797. X  magical parchments which normally are used to cause their enchantment.
  1798. X+ Unguents of lubrication may provide similar protection, albeit of a
  1799. X+ transitory nature.
  1800. X  -----
  1801. X  Behold the cockatrice, whose diminutive stature belies its hidden might.  The
  1802. X  cockatrice can petrify any ordinary being it contacts--save those wise
  1803. X***************
  1804. X*** 15,37 ****
  1805. X  adventurers who eat a dead lizard or blob of acid when they feel themselves
  1806. X  slowly turning to stone.
  1807. X  -----
  1808. X! While some wayfarers rely on finding finished armour in the dungeon, the
  1809. X! resourceful consider dragon scales as truly enchanting raw material and
  1810. X! realize that dragon scale mail is an excellent investment.
  1811. X  -----
  1812. X! It is well known among travelers that extra-healing draughts may clear thy
  1813. X! senses when thou art addled by hallucinations.  But never forget, the lowly
  1814. X! potion which makes one sick may be used for the same purpose.
  1815. X  -----
  1816. X! While the consumption of lizard flesh or water beloved of the gods may
  1817. X! straighten thy head after confusion, the application of the horn of a
  1818. X! creature of utmost purity can alleviate many other afflictions as well.
  1819. X  -----
  1820. X! If thou wishest to travel quickly between distant levels, thou must be
  1821. X! able to control thy teleports, and be confused, and read the scroll
  1822. X! which usually teleports thyself around on the level.  Daring adventurers
  1823. X! have also performed the same feat sans need for scrolls or potions by
  1824. X! stepping on the correct type of trap.
  1825. X  -----
  1826. X  Almost all adventurers who come this way hope to pass the dread Medusa.  To
  1827. X  do this, the best advice is to keep thine eyes blindfolded and to cause the
  1828. X--- 17,39 ----
  1829. X  adventurers who eat a dead lizard or blob of acid when they feel themselves
  1830. X  slowly turning to stone.
  1831. X  -----
  1832. X! While some wayfarers rely on scrounging finished armour in the dungeon, the
  1833. X! resourceful know the mystical means by which mail may be fashioned out of
  1834. X! scales from a dragon's hide.
  1835. X  -----
  1836. X! It is customarily known among travelers that extra-healing draughts may clear
  1837. X! thy senses when thou art addled by delusory visions.  But never forget, the
  1838. X! lowly potion which makes one sick may be used for the same purpose.
  1839. X  -----
  1840. X! While the consumption of lizard flesh or water beloved of the gods may clear
  1841. X! the muddled head, the application of the horn of a creature of utmost purity
  1842. X! can alleviate many other afflictions as well.
  1843. X  -----
  1844. X! If thou wouldst travel quickly between distant locations, thou must be
  1845. X! able to control thy teleports, and in a confused state misread the scroll
  1846. X! which usually teleports thyself locally.  Daring adventurers have also
  1847. X! performed the same feat sans need for scrolls or potions by stepping into
  1848. X! a particular ambuscade.
  1849. X  -----
  1850. X  Almost all adventurers who come this way hope to pass the dread Medusa.  To
  1851. X  do this, the best advice is to keep thine eyes blindfolded and to cause the
  1852. X***************
  1853. X*** 52,58 ****
  1854. X  even so, few hath developed the skill to identify enchanted rings by the
  1855. X  transfigurations effected upon the voracious device's frame.
  1856. X  -----
  1857. X! The meat of enchanted creatures will ofttimes convey magical properties
  1858. X  unto the consumer.  A fresh corpse of floating eye doth fetch a high
  1859. X  price among wizards for its utility in conferring Telepathy, by which
  1860. X  the sightless may locate surrounding minds.
  1861. X--- 54,60 ----
  1862. X  even so, few hath developed the skill to identify enchanted rings by the
  1863. X  transfigurations effected upon the voracious device's frame.
  1864. X  -----
  1865. X! The meat of enchanted creatures ofttimes conveyeth magical properties
  1866. X  unto the consumer.  A fresh corpse of floating eye doth fetch a high
  1867. X  price among wizards for its utility in conferring Telepathy, by which
  1868. X  the sightless may locate surrounding minds.
  1869. X***************
  1870. X*** 66,77 ****
  1871. X  powers echo throughout legend.  Learned wayfarers can reproduce blades of
  1872. X  elven lineage, hated of the orcs, without the need for such intervention.
  1873. X  -----
  1874. X- Adventurers searching for Medusa or the Wizard of Yendor needst not wait until
  1875. X- their dungeon level corresponds with their enemies' to know their location.
  1876. X- Eat a floating eye, blind thyself, and use a mirror in thine own direction,
  1877. X- and provided thou art lucky, thou shalt know the approximate locations of
  1878. X- thine enemies.
  1879. X- -----
  1880. X  There are many stories of a mighty amulet, the origins of which are said
  1881. X  to be ancient Yendor.  This amulet doth have awesome power, and the gods
  1882. X  desireth it greatly.  Mortals mayst tap only portions of its terrible
  1883. X--- 68,73 ----
  1884. X***************
  1885. X*** 88,100 ****
  1886. X  read from Moloch's book, shall cause the earth to tremble mightily.  The
  1887. X  light of an enchanted candelabrum shall show thee the way.
  1888. X  -----
  1889. X! In the nethermost recesses of the dungeon, there standeth a castle, wherein
  1890. X! layeth a wand of wishes.  If thou wouldst gain entry, bear with thee an
  1891. X! instrument of music, for the drawbridge may be charmed down with the proper
  1892. X! melody.  What notes comprise it only the gods know, but a musical mastermind
  1893. X! may yet succeed by witful improvization.  However, the less perspicacious are
  1894. X! not without recourse, should they be prepared to circumambulate the castle to
  1895. X! the postern.
  1896. X  ----- ELBERETH
  1897. X  The name of Elbereth may strike fear into the hearts of thine enemies, if
  1898. X  thou doest write it upon the ground at thy feet.  If thou maintain the utmost
  1899. X--- 84,96 ----
  1900. X  read from Moloch's book, shall cause the earth to tremble mightily.  The
  1901. X  light of an enchanted candelabrum shall show thee the way.
  1902. X  -----
  1903. X! In the deepest recesses of the Dungeons of Doom, guarding access to the
  1904. X! nether regions, there standeth a castle, wherein layeth a wand of wishes.
  1905. X! If thou wouldst gain entry, bear with thee an instrument of music, for the
  1906. X! pontlevis may be charmed down with the proper melody.  What notes comprise
  1907. X! it only the gods know, but a musical mastermind may yet succeed by witful
  1908. X! improvization.  However, the less perspicacious are not without recourse,
  1909. X! should they be prepared to circumambulate the castle to the postern.
  1910. X  ----- ELBERETH
  1911. X  The name of Elbereth may strike fear into the hearts of thine enemies, if
  1912. X  thou doest write it upon the ground at thy feet.  If thou maintain the utmost
  1913. X
  1914. END_OF_FILE
  1915. if test 54136 -ne `wc -c <'patches01i'`; then
  1916.     echo shar: \"'patches01i'\" unpacked with wrong size!
  1917. fi
  1918. # end of 'patches01i'
  1919. if test -f 'sys/amiga/hackwb.hlp' -a "${1}" != "-c" ; then 
  1920.   echo shar: Renaming existing file \"'sys/amiga/hackwb.hlp'\" to \"'sys/amiga/hackwb.hlp.orig'\"
  1921.   mv -f 'sys/amiga/hackwb.hlp' 'sys/amiga/hackwb.hlp.orig'
  1922. fi
  1923. echo shar: Extracting \"'sys/amiga/hackwb.hlp'\" \(2203 characters\)
  1924. sed "s/^X//" >'sys/amiga/hackwb.hlp' <<'END_OF_FILE'
  1925. XHackWB provides a WorkBench-like setting for NetHack - if
  1926. Xyou know how to use WorkBench you know how to use HackWb.
  1927. XIf you prefer a command line interface, use HackCli.
  1928. XHappy Hacking!
  1929. X
  1930. XMain Window
  1931. X    Single click to select a game.
  1932. X    Double click to start a game.
  1933. X    Use the NewGame icon to start a new game.
  1934. X
  1935. XOptions Window
  1936. X    Click on the options to toggle them on/off or enter
  1937. X    strings as appropriate.
  1938. X
  1939. XEdit Game Definition Window
  1940. X    Enter name of player and select load to load previously
  1941. X    saved game definition.
  1942. X
  1943. XProject Menu
  1944. X Help        - This file...
  1945. X About       - Credit where credit is due...
  1946. X Top Scores  - View the score file.
  1947. X Recover     - Recover a game which was interrupted by a
  1948. X               GURU, Software Failure, or other disaster.
  1949. X Edit Default Game - The file wbdefaults.def is always
  1950. X               loaded to provide the default ToolTypes
  1951. X               information for the NewGame icon (specifying
  1952. X               options, character name and character type).
  1953. X               The window opened by this selection allows
  1954. X               you to edit this information as well as
  1955. X               create new "games" by changing wbdefaults to
  1956. X               a different name and using save/load.
  1957. X Edit Configuration - The string data in nethack.cnf can be
  1958. X               edited saved and loaded using the requester
  1959. X               opened by this selection.
  1960. X
  1961. XGame Menu
  1962. X Info        - This selection lets you edit the tooltypes
  1963. X               entries for the selected icons.  The Edit
  1964. X               Game Configuration  gadget lets you change
  1965. X               the options that "Edit Default Game" let you
  1966. X               enter.  
  1967. X Change Comment  - Lets you set a comment string for the
  1968. X               save file.
  1969. X Set Options - takes you directly to the options editing
  1970. X               requester.
  1971. X Copy Options - Creates a new icon with the same options as
  1972. X               the selected game.  The new Icon has no saved
  1973. X               game associated with it.
  1974. X Discard     - Deletes the icon and any saved game
  1975. X               associated with it.
  1976. X Rename      - Lets you rename the Icon file and saved game.
  1977. X               The information in the save file is not
  1978. X               changed.
  1979. END_OF_FILE
  1980. if test 2203 -ne `wc -c <'sys/amiga/hackwb.hlp'`; then
  1981.     echo shar: \"'sys/amiga/hackwb.hlp'\" unpacked with wrong size!
  1982. fi
  1983. # end of 'sys/amiga/hackwb.hlp'
  1984. echo shar: End of archive 8 \(of 31\).
  1985. cp /dev/null ark8isdone
  1986. MISSING=""
  1987. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ; do
  1988.     if test ! -f ark${I}isdone ; then
  1989.     MISSING="${MISSING} ${I}"
  1990.     fi
  1991. done
  1992. if test "${MISSING}" = "" ; then
  1993.     echo You have unpacked all 31 archives.
  1994.     echo "Now execute 'patchit.sh'"
  1995.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1996. else
  1997.     echo You still need to unpack the following archives:
  1998.     echo "        " ${MISSING}
  1999. fi
  2000. ##  End of shell archive.
  2001. exit 0
  2002.