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

  1. Subject:  v17i043:  nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch1b/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 43
  7. Archive-name: nethack31/Patch1b
  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 2 (of 31)."
  20. # Contents:  patches01a
  21. # Wrapped by billr@saab on Fri Mar  5 10:50:41 1993
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f 'patches01a' -a "${1}" != "-c" ; then 
  24.   echo shar: Renaming existing file \"'patches01a'\" to \"'patches01a.orig'\"
  25.   mv -f 'patches01a' 'patches01a.orig'
  26. fi
  27. echo shar: Extracting \"'patches01a'\" \(56557 characters\)
  28. sed "s/^X//" >'patches01a' <<'END_OF_FILE'
  29. X*** /tmp/da07997    Thu Feb 25 10:22:03 1993
  30. X--- src/allmain.c    Thu Feb 11 12:11:02 1993
  31. X***************
  32. X*** 30,39 ****
  33. X      monstr_init();    /* monster strengths */
  34. X      objects_init();
  35. X  
  36. X- #ifdef MULDGN
  37. X-     quest_init();    /* set up dynamic quest data */
  38. X- #endif
  39. X- 
  40. X      (void) encumber_msg(); /* in case they auto-picked up something */
  41. X  
  42. X      for(;;) {
  43. X--- 30,35 ----
  44. X***************
  45. X*** 47,56 ****
  46. X--- 43,58 ----
  47. X  
  48. X          didmove = flags.move;
  49. X          if(flags.move) {    /* actual time passed */
  50. X+ #ifdef POLYSELF
  51. X+             int oldmtimedone;
  52. X+ #endif
  53. X              int wtcap;
  54. X  
  55. X              if (u.utotype) deferred_goto();
  56. X              wtcap = encumber_msg();
  57. X+ #ifdef POLYSELF
  58. X+             oldmtimedone = u.mtimedone;
  59. X+ #endif
  60. X  
  61. X  #ifdef SOUNDS
  62. X              dosounds();
  63. X***************
  64. X*** 201,206 ****
  65. X--- 203,212 ----
  66. X              else if (Underwater)
  67. X              under_water(0);
  68. X  
  69. X+ #ifdef POLYSELF
  70. X+             if ((oldmtimedone && !u.mtimedone) ||
  71. X+             (!oldmtimedone && u.mtimedone)) moverate = 0;
  72. X+ #endif
  73. X          }
  74. X          if(multi < 0) {
  75. X              if(!++multi){
  76. X***************
  77. X*** 358,363 ****
  78. X--- 364,370 ----
  79. X       */
  80. X      display_nhwindow(WIN_STATUS, FALSE);
  81. X      display_nhwindow(WIN_MESSAGE, FALSE);
  82. X+     clear_glyph_buffer();
  83. X      display_nhwindow(WIN_MAP, FALSE);
  84. X  }
  85. X  
  86. X***************
  87. X*** 385,390 ****
  88. X--- 392,398 ----
  89. X  #endif
  90. X  #ifdef MULDGN
  91. X      load_qtlist();    /* load up the quest text info */
  92. X+     quest_init();
  93. X      if(flags.legacy && moves == 1) com_pager(1);
  94. X  #endif
  95. X      mklev();
  96. X*** /tmp/da08013    Thu Feb 25 10:22:07 1993
  97. X--- src/apply.c    Wed Feb 24 13:10:43 1993
  98. X***************
  99. X*** 1,4 ****
  100. X! /*    SCCS Id: @(#)apply.c    3.1    92/12/10          */
  101. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  102. X  /* NetHack may be freely redistributed.  See license for details. */
  103. X  
  104. X--- 1,4 ----
  105. X! /*    SCCS Id: @(#)apply.c    3.1    93/02/19          */
  106. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  107. X  /* NetHack may be freely redistributed.  See license for details. */
  108. X  
  109. X***************
  110. X*** 7,15 ****
  111. X  
  112. X  #ifdef OVLB
  113. X  
  114. X! static const char NEARDATA tools[] = { TOOL_CLASS, 0 };
  115. X  
  116. X! static boolean NEARDATA did_dig_msg;
  117. X  
  118. X  #ifdef TOURIST
  119. X  static int FDECL(use_camera, (struct obj *));
  120. X--- 7,15 ----
  121. X  
  122. X  #ifdef OVLB
  123. X  
  124. X! static NEARDATA const char tools[] = { TOOL_CLASS, 0 };
  125. X  
  126. X! static NEARDATA boolean did_dig_msg;
  127. X  
  128. X  #ifdef TOURIST
  129. X  static int FDECL(use_camera, (struct obj *));
  130. X***************
  131. X*** 47,53 ****
  132. X      register struct monst *mtmp;
  133. X  
  134. X      if(Underwater) {
  135. X!         pline("Using your camera underwater voids the warranty.");
  136. X          return(0);
  137. X      }
  138. X      if(!getdir(NULL)) return(0);
  139. X--- 47,53 ----
  140. X      register struct monst *mtmp;
  141. X  
  142. X      if(Underwater) {
  143. X!         pline("Using your camera underwater would void the warranty.");
  144. X          return(0);
  145. X      }
  146. X      if(!getdir(NULL)) return(0);
  147. X***************
  148. X*** 71,80 ****
  149. X              if(cansee(mtmp->mx,mtmp->my))
  150. X              pline("The flash awakens %s.", mon_nam(mtmp)); /* a3 */
  151. X          } else if (mtmp->data->mlet != S_LIGHT)
  152. X!             if((mtmp->mcansee && haseyes(mtmp->data))
  153. X!                || mtmp->mblinded) {
  154. X              register int tmp = distu(mtmp->mx,mtmp->my);
  155. X-             register int tmp2;
  156. X  
  157. X              if(cansee(mtmp->mx,mtmp->my))
  158. X                  pline("%s is blinded by the flash!", Monnam(mtmp));
  159. X--- 71,78 ----
  160. X              if(cansee(mtmp->mx,mtmp->my))
  161. X              pline("The flash awakens %s.", mon_nam(mtmp)); /* a3 */
  162. X          } else if (mtmp->data->mlet != S_LIGHT)
  163. X!             if(mtmp->mcansee && haseyes(mtmp->data)) {
  164. X              register int tmp = distu(mtmp->mx,mtmp->my);
  165. X  
  166. X              if(cansee(mtmp->mx,mtmp->my))
  167. X                  pline("%s is blinded by the flash!", Monnam(mtmp));
  168. X***************
  169. X*** 92,101 ****
  170. X              if(tmp < 3) {
  171. X                  mtmp->mblinded = 0;
  172. X              } else {
  173. X!                 tmp2 = mtmp->mblinded;
  174. X!                 tmp2 += rnd(1 + 50/tmp);
  175. X!                 if(tmp2 > 127) tmp2 = 127;
  176. X!                 mtmp->mblinded = tmp2;
  177. X              }
  178. X              }
  179. X      }
  180. X--- 90,96 ----
  181. X              if(tmp < 3) {
  182. X                  mtmp->mblinded = 0;
  183. X              } else {
  184. X!                 mtmp->mblinded = rnd(1 + 50/tmp);
  185. X              }
  186. X              }
  187. X      }
  188. X***************
  189. X*** 111,117 ****
  190. X          You("have no free %s!", body_part(HAND));
  191. X          return 0;
  192. X      } else if (obj->owornmask) {
  193. X!         You("can't use it while you're wearing it!");
  194. X          return 0;
  195. X      } else if (obj->cursed) {
  196. X          long old;
  197. X--- 106,112 ----
  198. X          You("have no free %s!", body_part(HAND));
  199. X          return 0;
  200. X      } else if (obj->owornmask) {
  201. X!         You("cannot use it while you're wearing it!");
  202. X          return 0;
  203. X      } else if (obj->cursed) {
  204. X          long old;
  205. X***************
  206. X*** 119,126 ****
  207. X          case 2:
  208. X              old = Glib;
  209. X              Glib += rn1(10, 3);
  210. X!             Your("%s are %s!", makeplural(body_part(HAND)),
  211. X!             (old ? "filthier than ever" : "now slimy"));
  212. X              return 1;
  213. X          case 1:
  214. X              if (!Blindfolded) {
  215. X--- 114,121 ----
  216. X          case 2:
  217. X              old = Glib;
  218. X              Glib += rn1(10, 3);
  219. X!             Your("%s %s!", makeplural(body_part(HAND)),
  220. X!             (old ? "are filthier than ever" : "get slimy"));
  221. X              return 1;
  222. X          case 1:
  223. X              if (!Blindfolded) {
  224. X***************
  225. X*** 131,140 ****
  226. X              make_blinded(Blinded + (long)u.ucreamed - old, TRUE);
  227. X              } else {
  228. X              if (ublindf->cursed) {
  229. X!                 You("pushed your blindfold %s.",
  230. X                  rn2(2) ? "cock-eyed" : "crooked");
  231. X              } else {
  232. X!                 You("pushed your blindfold off.");
  233. X                  Blindf_off(ublindf);
  234. X                  dropx(ublindf);
  235. X              }
  236. X--- 126,135 ----
  237. X              make_blinded(Blinded + (long)u.ucreamed - old, TRUE);
  238. X              } else {
  239. X              if (ublindf->cursed) {
  240. X!                 You("push your blindfold %s.",
  241. X                  rn2(2) ? "cock-eyed" : "crooked");
  242. X              } else {
  243. X!                 You("push your blindfold off.");
  244. X                  Blindf_off(ublindf);
  245. X                  dropx(ublindf);
  246. X              }
  247. X***************
  248. X*** 169,175 ****
  249. X      return 0;
  250. X  }
  251. X  
  252. X! static char hollow_str[] = "hear a hollow sound!  This must be a secret %s!";
  253. X  
  254. X  /* Strictly speaking it makes no sense for usage of a stethoscope to
  255. X     not take any time; however, unless it did, the stethoscope would be
  256. X--- 164,170 ----
  257. X      return 0;
  258. X  }
  259. X  
  260. X! static char hollow_str[] = "hear a hollow sound.  This must be a secret %s!";
  261. X  
  262. X  /* Strictly speaking it makes no sense for usage of a stethoscope to
  263. X     not take any time; however, unless it did, the stethoscope would be
  264. X***************
  265. X*** 183,189 ****
  266. X      register int rx, ry;
  267. X  
  268. X      if(!freehand()) {
  269. X!         You("have no free %s!", body_part(HAND));
  270. X          return;
  271. X      }
  272. X      if (!getdir(NULL)) return;
  273. X--- 178,184 ----
  274. X      register int rx, ry;
  275. X  
  276. X      if(!freehand()) {
  277. X!         You("have no free %s.", body_part(HAND));
  278. X          return;
  279. X      }
  280. X      if (!getdir(NULL)) return;
  281. X***************
  282. X*** 194,200 ****
  283. X          if (Underwater)
  284. X              You("hear faint splashing.");
  285. X          else if (u.dz < 0 || Levitation)
  286. X!             You("can't reach the %s!", u.dz<0 ? "ceiling" : "floor");
  287. X          else if (Is_stronghold(&u.uz))
  288. X              You("hear the crackling of hellfire.");
  289. X          else
  290. X--- 189,195 ----
  291. X          if (Underwater)
  292. X              You("hear faint splashing.");
  293. X          else if (u.dz < 0 || Levitation)
  294. X!             You("can't reach the %s.", u.dz<0 ? "ceiling" : "floor");
  295. X          else if (Is_stronghold(&u.uz))
  296. X              You("hear the crackling of hellfire.");
  297. X          else
  298. X***************
  299. X*** 338,344 ****
  300. X      int spotmon;
  301. X  
  302. X      if(!obj->leashmon && number_leashed() >= MAXLEASHED) {
  303. X!         You("can't leash additional pets.");
  304. X          return;
  305. X      }
  306. X  
  307. X--- 333,339 ----
  308. X      int spotmon;
  309. X  
  310. X      if(!obj->leashmon && number_leashed() >= MAXLEASHED) {
  311. X!         You("cannot leash any more pets.");
  312. X          return;
  313. X      }
  314. X  
  315. X***************
  316. X*** 353,359 ****
  317. X      }
  318. X  
  319. X      if(!(mtmp = m_at(x, y))) {
  320. X!         pline("There is no creature here.");
  321. X          return;
  322. X      }
  323. X  
  324. X--- 348,354 ----
  325. X      }
  326. X  
  327. X      if(!(mtmp = m_at(x, y))) {
  328. X!         pline("There is no creature there.");
  329. X          return;
  330. X      }
  331. X  
  332. X***************
  333. X*** 361,375 ****
  334. X  
  335. X      if(!mtmp->mtame) {
  336. X          if(!spotmon)
  337. X!         pline("There is no creature here.");
  338. X          else
  339. X!         pline("%s is not %s!", Monnam(mtmp), (!obj->leashmon) ?
  340. X!                 "leashable" : "leashed");
  341. X          return;
  342. X      }
  343. X      if(!obj->leashmon) {
  344. X          if(mtmp->mleashed) {
  345. X!             pline("This %s is already leashed!",
  346. X                    spotmon ? l_monnam(mtmp) : "monster");
  347. X              return;
  348. X          }
  349. X--- 356,370 ----
  350. X  
  351. X      if(!mtmp->mtame) {
  352. X          if(!spotmon)
  353. X!         pline("There is no creature there.");
  354. X          else
  355. X!         pline("%s %s leashed!", Monnam(mtmp), (!obj->leashmon) ?
  356. X!                 "cannot be" : "is not");
  357. X          return;
  358. X      }
  359. X      if(!obj->leashmon) {
  360. X          if(mtmp->mleashed) {
  361. X!             pline("This %s is already leashed.",
  362. X                    spotmon ? l_monnam(mtmp) : "monster");
  363. X              return;
  364. X          }
  365. X***************
  366. X*** 381,391 ****
  367. X          return;
  368. X      }
  369. X      if(obj->leashmon != (int)mtmp->m_id) {
  370. X!         pline("This leash is not attached to that creature!");
  371. X          return;
  372. X      } else {
  373. X          if(obj->cursed) {
  374. X!             pline("The leash wouldn't come off!");
  375. X              return;
  376. X          }
  377. X          mtmp->mleashed = 0;
  378. X--- 376,387 ----
  379. X          return;
  380. X      }
  381. X      if(obj->leashmon != (int)mtmp->m_id) {
  382. X!         pline("This leash is not attached to that creature.");
  383. X          return;
  384. X      } else {
  385. X          if(obj->cursed) {
  386. X!             pline("The leash would not come off!");
  387. X!             obj->bknown = TRUE;
  388. X              return;
  389. X          }
  390. X          mtmp->mleashed = 0;
  391. X***************
  392. X*** 469,475 ****
  393. X                          Monnam(mtmp));
  394. X              } else {
  395. X                  if(um_dist(mtmp->mx, mtmp->my, 5)) {
  396. X!                 pline("%s's leash snaps loose!",Monnam(mtmp));
  397. X                  m_unleash(mtmp);
  398. X                  } else {
  399. X                  if(um_dist(mtmp->mx, mtmp->my, 3)) {
  400. X--- 465,472 ----
  401. X                          Monnam(mtmp));
  402. X              } else {
  403. X                  if(um_dist(mtmp->mx, mtmp->my, 5)) {
  404. X!                 pline("%s leash snaps loose!",
  405. X!                     s_suffix(Monnam(mtmp)));
  406. X                  m_unleash(mtmp);
  407. X                  } else {
  408. X                  if(um_dist(mtmp->mx, mtmp->my, 3)) {
  409. X***************
  410. X*** 615,629 ****
  411. X          if(On_stairs(u.ux, u.uy)) {
  412. X          if(u.ux == xdnladder || u.ux == xupladder)
  413. X               pline("The ladder resists your effort.");
  414. X!         else pline("The stairs here are too hard to dig in.");
  415. X          return(0);
  416. X          }
  417. X          if(IS_THRONE(levl[u.ux][u.uy].typ)) {
  418. X!         pline("The throne here is too hard to break apart.");
  419. X          return (0);
  420. X          }
  421. X          if(IS_ALTAR(levl[u.ux][u.uy].typ)) {
  422. X!         pline("The altar here is too hard to break apart.");
  423. X          return (0);
  424. X          }
  425. X          if(t_at(dpx, dpy) && !Can_dig_down(&u.uz)) {
  426. X--- 612,626 ----
  427. X          if(On_stairs(u.ux, u.uy)) {
  428. X          if(u.ux == xdnladder || u.ux == xupladder)
  429. X               pline("The ladder resists your effort.");
  430. X!         else pline("The stairs are too hard to dig in.");
  431. X          return(0);
  432. X          }
  433. X          if(IS_THRONE(levl[u.ux][u.uy].typ)) {
  434. X!         pline("The throne is too hard to break apart.");
  435. X          return (0);
  436. X          }
  437. X          if(IS_ALTAR(levl[u.ux][u.uy].typ)) {
  438. X!         pline("The altar is too hard to break apart.");
  439. X          return (0);
  440. X          }
  441. X          if(t_at(dpx, dpy) && !Can_dig_down(&u.uz)) {
  442. X***************
  443. X*** 631,637 ****
  444. X          return(0);
  445. X          }
  446. X          if(sobj_at(BOULDER, dpx, dpy)) {
  447. X!         pline("There is not enough room here to dig.");
  448. X          return(0);
  449. X          }
  450. X          if(Is_airlevel(&u.uz)) {
  451. X--- 628,634 ----
  452. X          return(0);
  453. X          }
  454. X          if(sobj_at(BOULDER, dpx, dpy)) {
  455. X!         pline("There isn't enough room to dig here.");
  456. X          return(0);
  457. X          }
  458. X          if(Is_airlevel(&u.uz)) {
  459. X***************
  460. X*** 694,700 ****
  461. X          ttmp = maketrap(dpx,dpy,PIT);
  462. X          ttmp->tseen = 1;
  463. X          if(Invisible) newsym(ttmp->tx,ttmp->ty);
  464. X!         You("have dug a pit.");
  465. X          u.utrap = rn1(4,2);
  466. X          u.utraptype = TT_PIT;
  467. X          vision_full_recalc = 1;    /* vision limits change */
  468. X--- 691,697 ----
  469. X          ttmp = maketrap(dpx,dpy,PIT);
  470. X          ttmp->tseen = 1;
  471. X          if(Invisible) newsym(ttmp->tx,ttmp->ty);
  472. X!         You("dig a pit.");
  473. X          u.utrap = rn1(4,2);
  474. X          u.utraptype = TT_PIT;
  475. X          vision_full_recalc = 1;    /* vision limits change */
  476. X***************
  477. X*** 730,740 ****
  478. X                  }
  479. X              }
  480. X              lev->typ = CORR;
  481. X!             digtxt = "You succeeded in cutting away some rock.";
  482. X          } else if(IS_WALL(lev->typ)) {
  483. X              if(shopedge) {
  484. X                      add_damage(dpx, dpy, 10L * ACURRSTR);
  485. X!                 dmgtxt = "dig into";
  486. X              }
  487. X                  if (level.flags.is_maze_lev) {
  488. X                  lev->typ = ROOM;
  489. X--- 727,737 ----
  490. X                  }
  491. X              }
  492. X              lev->typ = CORR;
  493. X!             digtxt = "You succeed in cutting away some rock.";
  494. X          } else if(IS_WALL(lev->typ)) {
  495. X              if(shopedge) {
  496. X                      add_damage(dpx, dpy, 10L * ACURRSTR);
  497. X!                 dmgtxt = "damage";
  498. X              }
  499. X                  if (level.flags.is_maze_lev) {
  500. X                  lev->typ = ROOM;
  501. X***************
  502. X*** 744,757 ****
  503. X                  lev->typ = DOOR;
  504. X                  lev->doormask = D_NODOOR;
  505. X              }
  506. X!             digtxt = "You just made an opening in the wall.";
  507. X          } else if(lev->typ == SDOOR) {
  508. X              lev->typ = DOOR;
  509. X!             digtxt = "You just broke through a secret door.";
  510. X              if(!(lev->doormask & D_TRAPPED))
  511. X                  lev->doormask = D_BROKEN;
  512. X          } else if(closed_door(dpx, dpy)) {
  513. X!             digtxt = "You just broke a hole through the door.";
  514. X              if(shopedge) {
  515. X                      add_damage(dpx, dpy, 400L);
  516. X                  dmgtxt = "break";
  517. X--- 741,754 ----
  518. X                  lev->typ = DOOR;
  519. X                  lev->doormask = D_NODOOR;
  520. X              }
  521. X!             digtxt = "You make an opening in the wall.";
  522. X          } else if(lev->typ == SDOOR) {
  523. X              lev->typ = DOOR;
  524. X!             digtxt = "You break through a secret door!";
  525. X              if(!(lev->doormask & D_TRAPPED))
  526. X                  lev->doormask = D_BROKEN;
  527. X          } else if(closed_door(dpx, dpy)) {
  528. X!             digtxt = "You break through the door.";
  529. X              if(shopedge) {
  530. X                      add_damage(dpx, dpy, 400L);
  531. X                  dmgtxt = "break";
  532. X***************
  533. X*** 780,786 ****
  534. X              mtmp = makemon(&mons[PM_XORN], dpx, dpy); 
  535. X              break;
  536. X              }
  537. X!             if(mtmp) pline("The debris of your dig comes alive!");
  538. X          }
  539. X          if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) {
  540. X              b_trapped("door");
  541. X--- 777,783 ----
  542. X              mtmp = makemon(&mons[PM_XORN], dpx, dpy); 
  543. X              break;
  544. X              }
  545. X!             if(mtmp) pline("The debris from your digging comes to life!");
  546. X          }
  547. X          if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) {
  548. X              b_trapped("door");
  549. X***************
  550. X*** 844,850 ****
  551. X      boolean nohole = !Can_dig_down(&u.uz);
  552. X  
  553. X      if(ttmp && nohole) {
  554. X!         pline("The floor here seems too hard to dig in.");
  555. X      } else {
  556. X          d_level    newlevel;
  557. X  
  558. X--- 841,847 ----
  559. X      boolean nohole = !Can_dig_down(&u.uz);
  560. X  
  561. X      if(ttmp && nohole) {
  562. X!         pline("The floor here is too hard to dig in.");
  563. X      } else {
  564. X          d_level    newlevel;
  565. X  
  566. X***************
  567. X*** 852,857 ****
  568. X--- 849,855 ----
  569. X              pline(
  570. X                 "The %s sloshes furiously for a moment, then subsides.",
  571. X                is_lava(u.ux, u.uy) ? "lava" : "water");
  572. X+             wake_nearby();    /* splashing */
  573. X              return;
  574. X          }
  575. X          if (lev->typ == DRAWBRIDGE_DOWN) {
  576. X***************
  577. X*** 904,910 ****
  578. X                   * destroy the drawbridge.  The following is
  579. X                   * a cop-out. --dlc
  580. X                   */
  581. X!                 pline("The floor here seems too hard to dig in.");
  582. X                  return;
  583. X                  }
  584. X              }
  585. X--- 902,908 ----
  586. X                   * destroy the drawbridge.  The following is
  587. X                   * a cop-out. --dlc
  588. X                   */
  589. X!                 pline("The floor here is too hard to dig in.");
  590. X                  return;
  591. X                  }
  592. X              }
  593. X***************
  594. X*** 911,916 ****
  595. X--- 909,915 ----
  596. X  
  597. X                  lev->drawbridgemask &= DB_DIR;
  598. X              if(typ == LAVAPOOL) lev->drawbridgemask |= DB_LAVA;
  599. X+             liquid_flow:
  600. X              newsym(u.ux,u.uy);
  601. X  
  602. X              pline("As you dig a pit, it fills with %s!",
  603. X***************
  604. X*** 927,937 ****
  605. X              }
  606. X              return;
  607. X          } else if (lev->typ == ICE) {
  608. X!             /* assume we can remove most of the ice by drilling
  609. X!              * without melting it or allowing neighboring water
  610. X!              * to flow in.
  611. X!              */
  612. X!             lev->typ = ROOM;
  613. X          } else if (IS_FOUNTAIN(lev->typ)) {
  614. X              dogushforth(FALSE);
  615. X              dryup(u.ux,u.uy);
  616. X--- 926,943 ----
  617. X              }
  618. X              return;
  619. X          } else if (lev->typ == ICE) {
  620. X!             schar typ = fillholetyp(u.ux,u.uy);
  621. X! 
  622. X!             if(typ == ROOM) {
  623. X!                 if(nohole) {
  624. X!                 /* can't make a trapdoor, so make a pit */
  625. X!                 ttmp = maketrap(u.ux, u.uy, PIT);
  626. X!                 } else
  627. X!                 ttmp = maketrap(u.ux, u.uy, TRAPDOOR);
  628. X!             } else {
  629. X!                 lev->typ = typ;
  630. X!                 goto liquid_flow;
  631. X!             }
  632. X          } else if (IS_FOUNTAIN(lev->typ)) {
  633. X              dogushforth(FALSE);
  634. X              dryup(u.ux,u.uy);
  635. X***************
  636. X*** 943,952 ****
  637. X  #endif
  638. X          /* the following two are here for the wand of digging */
  639. X          } else if(IS_THRONE(levl[u.ux][u.uy].typ)) {
  640. X!             pline("The throne here is too hard to break apart.");
  641. X              return;
  642. X          } else if(IS_ALTAR(levl[u.ux][u.uy].typ)) {
  643. X!             pline("The altar here is too hard to break apart.");
  644. X              return;
  645. X          } else if(ttmp) {
  646. X              ttmp->ttyp = TRAPDOOR;
  647. X--- 949,958 ----
  648. X  #endif
  649. X          /* the following two are here for the wand of digging */
  650. X          } else if(IS_THRONE(levl[u.ux][u.uy].typ)) {
  651. X!             pline("The throne is too hard to break apart.");
  652. X              return;
  653. X          } else if(IS_ALTAR(levl[u.ux][u.uy].typ)) {
  654. X!             pline("The altar is too hard to break apart.");
  655. X              return;
  656. X          } else if(ttmp) {
  657. X              ttmp->ttyp = TRAPDOOR;
  658. X***************
  659. X*** 958,964 ****
  660. X          ttmp->tseen = 1;
  661. X          if(Invisible) newsym(ttmp->tx,ttmp->ty);
  662. X          if(ttmp->ttyp == PIT) {
  663. X!             You("have dug a pit.");
  664. X              if(!Levitation) {
  665. X              u.utrap = rn1(4,2);
  666. X              u.utraptype = TT_PIT;
  667. X--- 964,970 ----
  668. X          ttmp->tseen = 1;
  669. X          if(Invisible) newsym(ttmp->tx,ttmp->ty);
  670. X          if(ttmp->ttyp == PIT) {
  671. X!             You("dig a pit.");
  672. X              if(!Levitation) {
  673. X              u.utrap = rn1(4,2);
  674. X              u.utraptype = TT_PIT;
  675. X***************
  676. X*** 967,973 ****
  677. X              u.utrap = 0;
  678. X              return;
  679. X          } 
  680. X!         pline("You've made a hole in the floor.");
  681. X  
  682. X          /* floor objects get a chance of falling down.
  683. X           * the case where the hero does NOT fall down
  684. X--- 973,979 ----
  685. X              u.utrap = 0;
  686. X              return;
  687. X          } 
  688. X!         pline("You dig a hole through the floor.");
  689. X  
  690. X          /* floor objects get a chance of falling down.
  691. X           * the case where the hero does NOT fall down
  692. X***************
  693. X*** 1072,1078 ****
  694. X          if(Levitation)
  695. X              You("don't have enough leverage.");
  696. X          else
  697. X!             You("cannot reach the ceiling.");
  698. X      } else if(!u.dx && !u.dy && !u.dz) {
  699. X          char buf[BUFSZ];
  700. X          int dam;
  701. X--- 1078,1084 ----
  702. X          if(Levitation)
  703. X              You("don't have enough leverage.");
  704. X          else
  705. X!             You("can't reach the ceiling.");
  706. X      } else if(!u.dx && !u.dy && !u.dz) {
  707. X          char buf[BUFSZ];
  708. X          int dam;
  709. X***************
  710. X*** 1079,1087 ****
  711. X  
  712. X          dam = rnd(2) + dbon() + obj->spe;
  713. X          if (dam <= 0) dam = 1;
  714. X!         You("hit yourself with your own pick-axe.");
  715. X          /* self_pronoun() won't work twice in a sentence */
  716. X!         Strcpy(buf, self_pronoun("killed %sself with %%s own pick-axe",
  717. X              "him"));
  718. X          losehp(dam, self_pronoun(buf, "his"), NO_KILLER_PREFIX);
  719. X          flags.botl=1;
  720. X--- 1085,1093 ----
  721. X  
  722. X          dam = rnd(2) + dbon() + obj->spe;
  723. X          if (dam <= 0) dam = 1;
  724. X!         You("hit yourself with your pick-axe.");
  725. X          /* self_pronoun() won't work twice in a sentence */
  726. X!         Strcpy(buf, self_pronoun("killed %sself with %%s pick-axe",
  727. X              "him"));
  728. X          losehp(dam, self_pronoun(buf, "his"), NO_KILLER_PREFIX);
  729. X          flags.botl=1;
  730. X***************
  731. X*** 1135,1141 ****
  732. X          /* it must be air -- water checked above */
  733. X          You("swing your %s through thin air.", aobjnam(obj, NULL));
  734. X      } else if(Levitation) {
  735. X!         You("cannot reach the floor.");
  736. X      } else if (is_pool(u.ux, u.uy)) {
  737. X          /* Monsters which swim also happen not to be able to dig */
  738. X          You("cannot stay underwater long enough.");
  739. X--- 1141,1147 ----
  740. X          /* it must be air -- water checked above */
  741. X          You("swing your %s through thin air.", aobjnam(obj, NULL));
  742. X      } else if(Levitation) {
  743. X!         You("can't reach the floor.");
  744. X      } else if (is_pool(u.ux, u.uy)) {
  745. X          /* Monsters which swim also happen not to be able to dig */
  746. X          You("cannot stay underwater long enough.");
  747. X***************
  748. X*** 1181,1191 ****
  749. X  #ifdef POLYSELF
  750. X              if(u.umonnum == PM_FLOATING_EYE) {
  751. X              pline(Hallucination ?
  752. X!                   "Yow!  The mirror stared back at you!" :
  753. X                    "Yikes!  You've frozen yourself!");
  754. X              nomul(-rnd((MAXULEV+6) - (int)u.ulevel));
  755. X              } else if (u.usym == S_VAMPIRE)
  756. X!             You("don't seem to reflect anything.");
  757. X              else if(u.umonnum == PM_UMBER_HULK) {
  758. X              pline("Huh?  That doesn't look like you!");
  759. X              make_confused(HConfusion + d(3,4),FALSE);
  760. X--- 1187,1197 ----
  761. X  #ifdef POLYSELF
  762. X              if(u.umonnum == PM_FLOATING_EYE) {
  763. X              pline(Hallucination ?
  764. X!                   "Yow!  The mirror stares back!" :
  765. X                    "Yikes!  You've frozen yourself!");
  766. X              nomul(-rnd((MAXULEV+6) - (int)u.ulevel));
  767. X              } else if (u.usym == S_VAMPIRE)
  768. X!             You("don't have a reflection.");
  769. X              else if(u.umonnum == PM_UMBER_HULK) {
  770. X              pline("Huh?  That doesn't look like you!");
  771. X              make_confused(HConfusion + d(3,4),FALSE);
  772. X***************
  773. X*** 1215,1221 ****
  774. X          return 1;
  775. X      }
  776. X      if(Underwater) {
  777. X!         You("offer the fish a chance to do some makeup.");
  778. X          return 1;
  779. X      }
  780. X      if(u.dz) {
  781. X--- 1221,1229 ----
  782. X          return 1;
  783. X      }
  784. X      if(Underwater) {
  785. X!         You(Hallucination ? 
  786. X!             "give the fish a chance to fix their makeup." :
  787. X!             "reflect the murky water.");
  788. X          return 1;
  789. X      }
  790. X      if(u.dz) {
  791. X***************
  792. X*** 1232,1246 ****
  793. X      mlet = mtmp->data->mlet;
  794. X      if(mtmp->msleep) {
  795. X          if (vis)
  796. X!             pline ("%s is tired and doesn't look at your mirror.",
  797. X                  Monnam(mtmp));
  798. X      } else if (!mtmp->mcansee) {
  799. X          if (vis)
  800. X!         pline("%s can't see anything at the moment.", Monnam(mtmp));
  801. X      /* some monsters do special things */
  802. X      } else if (mlet == S_VAMPIRE || mlet == S_GHOST) {
  803. X          if (vis)
  804. X!         pline ("%s doesn't seem to reflect anything.", Monnam(mtmp));
  805. X      } else if(!mtmp->mcan && mtmp->data == &mons[PM_MEDUSA]) {
  806. X          if (vis)
  807. X              pline("%s is turned to stone!", Monnam(mtmp));
  808. X--- 1240,1254 ----
  809. X      mlet = mtmp->data->mlet;
  810. X      if(mtmp->msleep) {
  811. X          if (vis)
  812. X!             pline ("%s is too tired to look at your mirror.",
  813. X                  Monnam(mtmp));
  814. X      } else if (!mtmp->mcansee) {
  815. X          if (vis)
  816. X!         pline("%s can't see anything right now.", Monnam(mtmp));
  817. X      /* some monsters do special things */
  818. X      } else if (mlet == S_VAMPIRE || mlet == S_GHOST) {
  819. X          if (vis)
  820. X!         pline ("%s doesn't have a reflection.", Monnam(mtmp));
  821. X      } else if(!mtmp->mcan && mtmp->data == &mons[PM_MEDUSA]) {
  822. X          if (vis)
  823. X              pline("%s is turned to stone!", Monnam(mtmp));
  824. X***************
  825. X*** 1254,1260 ****
  826. X       * but Medusa and umber hulks can.
  827. X       */
  828. X          if (vis)
  829. X!             pline("%s is frozen by its reflection.",Monnam(mtmp));
  830. X          else You("hear something stop moving.");
  831. X          mtmp->mcanmove = 0;
  832. X          if ( (int) mtmp->mfrozen + tmp > 127)
  833. X--- 1262,1268 ----
  834. X       * but Medusa and umber hulks can.
  835. X       */
  836. X          if (vis)
  837. X!             pline("%s is frozen by its reflection.", Monnam(mtmp));
  838. X          else You("hear something stop moving.");
  839. X          mtmp->mcanmove = 0;
  840. X          if ( (int) mtmp->mfrozen + tmp > 127)
  841. X***************
  842. X*** 1262,1274 ****
  843. X          else mtmp->mfrozen += tmp;
  844. X      } else if(!mtmp->mcan && mtmp->data == &mons[PM_UMBER_HULK]) {
  845. X          if (vis)
  846. X!             pline ("%s has confused itself!", Monnam(mtmp));
  847. X              mtmp->mconf = 1;
  848. X      } else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
  849. X                           || mtmp->data==&mons[PM_SUCCUBUS])) {
  850. X          if (vis) {
  851. X!                 pline ("%s looks beautiful in your mirror.",Monnam(mtmp));
  852. X!                 pline ("She decides to take it!");
  853. X          } else pline ("It steals your mirror!");
  854. X          setnotworn(obj); /* in case mirror was wielded */
  855. X              freeinv(obj);
  856. X--- 1270,1282 ----
  857. X          else mtmp->mfrozen += tmp;
  858. X      } else if(!mtmp->mcan && mtmp->data == &mons[PM_UMBER_HULK]) {
  859. X          if (vis)
  860. X!             pline ("%s confuses itself!", Monnam(mtmp));
  861. X              mtmp->mconf = 1;
  862. X      } else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
  863. X                           || mtmp->data==&mons[PM_SUCCUBUS])) {
  864. X          if (vis) {
  865. X!                 pline ("%s admires herself in your mirror.", Monnam(mtmp));
  866. X!                 pline ("She takes it!");
  867. X          } else pline ("It steals your mirror!");
  868. X          setnotworn(obj); /* in case mirror was wielded */
  869. X              freeinv(obj);
  870. X***************
  871. X*** 1286,1298 ****
  872. X              ;
  873. X          else if ((mtmp->minvis && !perceives(mtmp->data))
  874. X               || !haseyes(mtmp->data))
  875. X!             pline("%s doesn't seem to be aware of its reflection.",
  876. X              Monnam(mtmp));
  877. X          else
  878. X!             pline("%s doesn't seem to mind %s reflection.",
  879. X!             Monnam(mtmp),
  880. X!             humanoid(mtmp->data) ? (mtmp->female ? "her" : "his")
  881. X!                         : "its");
  882. X      }
  883. X      return 1;
  884. X  }
  885. X--- 1294,1304 ----
  886. X              ;
  887. X          else if ((mtmp->minvis && !perceives(mtmp->data))
  888. X               || !haseyes(mtmp->data))
  889. X!             pline("%s doesn't seem to notice its reflection.",
  890. X              Monnam(mtmp));
  891. X          else
  892. X!             pline("%s ignores %s reflection.",
  893. X!               Monnam(mtmp), his[pronoun_gender(mtmp)]);
  894. X      }
  895. X      return 1;
  896. X  }
  897. X***************
  898. X*** 1304,1310 ****
  899. X      You("ring %s.", the(xname(obj)));
  900. X  
  901. X      if(Underwater) {
  902. X!         pline("But it sounds kind of muffled.");
  903. X          return;
  904. X      }
  905. X          if(obj->otyp == BELL) {
  906. X--- 1310,1319 ----
  907. X      You("ring %s.", the(xname(obj)));
  908. X  
  909. X      if(Underwater) {
  910. X! #ifdef    AMIGA
  911. X!         amii_speaker( obj, "AwDwGwEwDhEhAqDqFwGw", AMII_MUFFLED_VOLUME );
  912. X! #endif
  913. X!         pline("But the sound is muffled.");
  914. X          return;
  915. X      }
  916. X          if(obj->otyp == BELL) {
  917. X***************
  918. X*** 1312,1317 ****
  919. X--- 1321,1329 ----
  920. X              pline(nothing_happens);
  921. X          return;
  922. X          }
  923. X+ #ifdef    AMIGA
  924. X+         amii_speaker( obj, "awdwgwewdhehaqdqfwgw", AMII_MUFFLED_VOLUME );
  925. X+ #endif
  926. X          if(obj->cursed && !rn2(3)) {
  927. X              register struct monst *mtmp;
  928. X  
  929. X***************
  930. X*** 1339,1346 ****
  931. X      }
  932. X      if(invocation_pos(u.ux, u.uy) && 
  933. X                   !On_stairs(u.ux, u.uy) && !u.uswallow) {
  934. X!         pline("%s emits an unnerving high-pitched sound...",
  935. X!                                                   The(xname(obj)));
  936. X          obj->age = moves;
  937. X          if(obj->spe > 0) obj->spe--;
  938. X          wake_nearby();
  939. X--- 1351,1360 ----
  940. X      }
  941. X      if(invocation_pos(u.ux, u.uy) && 
  942. X                   !On_stairs(u.ux, u.uy) && !u.uswallow) {
  943. X!         pline("%s issues an unsettling shrill sound...", The(xname(obj)));
  944. X! #ifdef    AMIGA
  945. X!         amii_speaker( obj, "aefeaefeaefeaefeaefe", AMII_LOUDER_VOLUME );
  946. X! #endif
  947. X          obj->age = moves;
  948. X          if(obj->spe > 0) obj->spe--;
  949. X          wake_nearby();
  950. X***************
  951. X*** 1351,1356 ****
  952. X--- 1365,1373 ----
  953. X          if(obj->spe > 0) {
  954. X              register int cnt = openit();
  955. X          if(cnt == -1) return; /* was swallowed */
  956. X+ #ifdef    AMIGA
  957. X+         amii_speaker( obj, "awawawDwEwCw", AMII_SOFT_VOLUME );
  958. X+ #endif
  959. X          switch(cnt) {
  960. X            case 0:  pline(nothing_happens); break;
  961. X            case 1:  pline("Something opens..."); break;
  962. X***************
  963. X*** 1360,1365 ****
  964. X--- 1377,1385 ----
  965. X          obj->spe--;
  966. X          } else pline(nothing_happens);
  967. X      } else {  /* uncursed */
  968. X+ #ifdef    AMIGA
  969. X+         amii_speaker( obj, "AeFeaeFeAefegW", AMII_OKAY_VOLUME );
  970. X+ #endif
  971. X          if(obj->spe > 0) {
  972. X              register int cnt = findit();
  973. X          if(cnt == 0) pline(nothing_happens);
  974. X***************
  975. X*** 1377,1387 ****
  976. X  register struct obj *obj;
  977. X  {
  978. X      if(Underwater) {
  979. X!         You("can't make fire under water.");
  980. X          return;
  981. X      }
  982. X      if(obj->lamplit) {
  983. X!         You("snuff the candle%s out.", obj->spe > 1 ? "s" : "");
  984. X          obj->lamplit = 0;
  985. X          check_lamps();
  986. X          return;
  987. X--- 1397,1407 ----
  988. X  register struct obj *obj;
  989. X  {
  990. X      if(Underwater) {
  991. X!         You("cannot make fire under water.");
  992. X          return;
  993. X      }
  994. X      if(obj->lamplit) {
  995. X!         You("snuff the candle%s.", obj->spe > 1 ? "s" : "");
  996. X          obj->lamplit = 0;
  997. X          check_lamps();
  998. X          return;
  999. X***************
  1000. X*** 1391,1397 ****
  1001. X          return;
  1002. X      }
  1003. X      if(u.uswallow || obj->cursed) {
  1004. X!         pline("The candle%s flicker%s on for a moment, then die%s.", 
  1005. X              obj->spe > 1 ? "s" : "",
  1006. X              obj->spe > 1 ? "" : "s",
  1007. X              obj->spe > 1 ? "" : "s");
  1008. X--- 1411,1417 ----
  1009. X          return;
  1010. X      }
  1011. X      if(u.uswallow || obj->cursed) {
  1012. X!         pline("The candle%s flicker%s for a moment, then die%s.", 
  1013. X              obj->spe > 1 ? "s" : "",
  1014. X              obj->spe > 1 ? "" : "s",
  1015. X              obj->spe > 1 ? "" : "s");
  1016. X***************
  1017. X*** 1403,1409 ****
  1018. X                 obj->spe,
  1019. X                 obj->spe > 1 ? "s" : "",
  1020. X                 the(xname(obj)));
  1021. X!         pline("%s lit.  %s emits a dim light.",
  1022. X                 obj->spe == 1 ? "It is" : "They are", The(xname(obj)));
  1023. X      } else {
  1024. X          pline("%s's candles burn%s", The(xname(obj)),
  1025. X--- 1423,1430 ----
  1026. X                 obj->spe,
  1027. X                 obj->spe > 1 ? "s" : "",
  1028. X                 the(xname(obj)));
  1029. X!         if (!Blind)
  1030. X!             pline("%s lit.  %s shines dimly.",
  1031. X                 obj->spe == 1 ? "It is" : "They are", The(xname(obj)));
  1032. X      } else {
  1033. X          pline("%s's candles burn%s", The(xname(obj)),
  1034. X***************
  1035. X*** 1414,1421 ****
  1036. X              (obj->spe > 1 ? "s are" : " is"));
  1037. X          obj->age /= 2;
  1038. X      } else {
  1039. X!             if(obj->spe == 7)
  1040. X!                 pline("%s glows with a strange light!", The(xname(obj)));
  1041. X          obj->known = 1;
  1042. X      }
  1043. X      obj->lamplit = 1;
  1044. X--- 1435,1446 ----
  1045. X              (obj->spe > 1 ? "s are" : " is"));
  1046. X          obj->age /= 2;
  1047. X      } else {
  1048. X!             if(obj->spe == 7) {
  1049. X!             if (Blind)
  1050. X!               pline("%s radiates a strange warmth!", The(xname(obj)));
  1051. X!             else
  1052. X!               pline("%s glows with a strange light!", The(xname(obj)));
  1053. X!         }
  1054. X          obj->known = 1;
  1055. X      }
  1056. X      obj->lamplit = 1;
  1057. X***************
  1058. X*** 1472,1478 ****
  1059. X                  (needed > 1L && obj->quan > 1L) ? "s" : "",
  1060. X                  (needed > 1L && obj->quan > 1L) ? "" : "s");
  1061. X          if(obj->unpaid) 
  1062. X!             You("use %s, you bought %s!",
  1063. X                  (needed > 1L && obj->quan > 1L) ? "them" : "it",
  1064. X                  (needed > 1L && obj->quan > 1L) ? "them" : "it");
  1065. X          if(!otmp->spe || otmp->age > obj->age)
  1066. X--- 1497,1503 ----
  1067. X                  (needed > 1L && obj->quan > 1L) ? "s" : "",
  1068. X                  (needed > 1L && obj->quan > 1L) ? "" : "s");
  1069. X          if(obj->unpaid) 
  1070. X!             verbalize("You burn %s, you bought %s!",
  1071. X                  (needed > 1L && obj->quan > 1L) ? "them" : "it",
  1072. X                  (needed > 1L && obj->quan > 1L) ? "them" : "it");
  1073. X          if(!otmp->spe || otmp->age > obj->age)
  1074. X***************
  1075. X*** 1513,1521 ****
  1076. X      if ((candle || otmp->otyp == CANDELABRUM_OF_INVOCATION) &&
  1077. X          otmp->lamplit) {
  1078. X          register boolean many = candle ? otmp->quan > 1L : otmp->spe > 1;
  1079. X!         pline("The %scandle%s flame%s extinguished.",
  1080. X!           (candle ? "" : "candelabrum's "),
  1081. X!           (many ? "s'" : "'s"), (many ? "s are" : " is"));
  1082. X         otmp->lamplit = 0;
  1083. X         check_lamps();
  1084. X         return(TRUE);
  1085. X--- 1538,1547 ----
  1086. X      if ((candle || otmp->otyp == CANDELABRUM_OF_INVOCATION) &&
  1087. X          otmp->lamplit) {
  1088. X          register boolean many = candle ? otmp->quan > 1L : otmp->spe > 1;
  1089. X!         if (!Blind)
  1090. X!         pline("The %scandle%s flame%s extinguished.",
  1091. X!               (candle ? "" : "candelabrum's "),
  1092. X!               (many ? "s'" : "'s"), (many ? "s are" : " is"));
  1093. X         otmp->lamplit = 0;
  1094. X         check_lamps();
  1095. X         return(TRUE);
  1096. X***************
  1097. X*** 1530,1536 ****
  1098. X      if(obj->lamplit) {
  1099. X          if(obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP ||
  1100. X                  obj->otyp == BRASS_LANTERN) {
  1101. X!             Your("lamp is now off.");
  1102. X              obj->lamplit = 0;
  1103. X              check_lamps();
  1104. X              return(TRUE);
  1105. X--- 1556,1562 ----
  1106. X      if(obj->lamplit) {
  1107. X          if(obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP ||
  1108. X                  obj->otyp == BRASS_LANTERN) {
  1109. X!             if (!Blind) Your("lamp is now off.");
  1110. X              obj->lamplit = 0;
  1111. X              check_lamps();
  1112. X              return(TRUE);
  1113. X***************
  1114. X*** 1567,1573 ****
  1115. X          return;
  1116. X      }
  1117. X      if(obj->cursed && !rn2(2))
  1118. X!         pline("%s flicker%s on for a moment, then die%s.", 
  1119. X                 The(xname(obj)),
  1120. X                 obj->quan > 1L ? "" : "s",
  1121. X                 obj->quan > 1L ? "" : "s");
  1122. X--- 1593,1599 ----
  1123. X          return;
  1124. X      }
  1125. X      if(obj->cursed && !rn2(2))
  1126. X!         pline("%s flicker%s for a moment, then die%s.", 
  1127. X                 The(xname(obj)),
  1128. X                 obj->quan > 1L ? "" : "s",
  1129. X                 obj->quan > 1L ? "" : "s");
  1130. X***************
  1131. X*** 1586,1592 ****
  1132. X          if (obj->unpaid && Is_candle(obj) &&
  1133. X              obj->age == 20L * (long)objects[obj->otyp].oc_cost) {
  1134. X              const char *it_them = obj->quan > 1L ? "them" : "it";
  1135. X!             You("use %s, you've bought %s!", it_them, it_them);
  1136. X              bill_dummy_object(obj);
  1137. X          }
  1138. X      }
  1139. X--- 1612,1618 ----
  1140. X          if (obj->unpaid && Is_candle(obj) &&
  1141. X              obj->age == 20L * (long)objects[obj->otyp].oc_cost) {
  1142. X              const char *it_them = obj->quan > 1L ? "them" : "it";
  1143. X!             verbalize("You burn %s, you bought %s!", it_them, it_them);
  1144. X              bill_dummy_object(obj);
  1145. X          }
  1146. X      }
  1147. X***************
  1148. X*** 1613,1619 ****
  1149. X      }
  1150. X  }
  1151. X  
  1152. X! static const char NEARDATA cuddly[] = { TOOL_CLASS, 0 };
  1153. X  
  1154. X  int
  1155. X  dorub()
  1156. X--- 1639,1645 ----
  1157. X      }
  1158. X  }
  1159. X  
  1160. X! static NEARDATA const char cuddly[] = { TOOL_CLASS, 0 };
  1161. X  
  1162. X  int
  1163. X  dorub()
  1164. X***************
  1165. X*** 1683,1694 ****
  1166. X          You("cannot trample %s!", mon_nam(mtmp));
  1167. X          return 0;
  1168. X      } else if (!isok(cc.x, cc.y) ||
  1169. X  #ifdef POLYSELF
  1170. X!         (IS_ROCK(levl[cc.x][cc.y].typ) && !passes_walls(uasmon)) ||
  1171. X! #else
  1172. X!         IS_ROCK(levl[cc.x][cc.y].typ) ||
  1173. X  #endif
  1174. X!         sobj_at(BOULDER, cc.x, cc.x) ) {
  1175. X              You("cannot jump there!");
  1176. X              return 0;
  1177. X      } else {
  1178. X--- 1709,1720 ----
  1179. X          You("cannot trample %s!", mon_nam(mtmp));
  1180. X          return 0;
  1181. X      } else if (!isok(cc.x, cc.y) ||
  1182. X+            ((IS_ROCK(levl[cc.x][cc.y].typ) ||
  1183. X+              sobj_at(BOULDER, cc.x, cc.y) || closed_door(cc.x, cc.y))
  1184. X  #ifdef POLYSELF
  1185. X!             && !(passes_walls(uasmon) && may_passwall(cc.x, cc.y))
  1186. X  #endif
  1187. X!             )) {
  1188. X              You("cannot jump there!");
  1189. X              return 0;
  1190. X      } else {
  1191. X***************
  1192. X*** 1696,1702 ****
  1193. X          switch(u.utraptype) {
  1194. X          case TT_BEARTRAP: {
  1195. X              register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE;
  1196. X!             You("rip yourself out of the bear trap!  Ouch!");
  1197. X              losehp(rnd(10), "jumping out of a bear trap", KILLED_BY);
  1198. X              set_wounded_legs(side, rn1(1000,500));
  1199. X              break;
  1200. X--- 1722,1728 ----
  1201. X          switch(u.utraptype) {
  1202. X          case TT_BEARTRAP: {
  1203. X              register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE;
  1204. X!             You("rip yourself free of the bear trap!  Ouch!");
  1205. X              losehp(rnd(10), "jumping out of a bear trap", KILLED_BY);
  1206. X              set_wounded_legs(side, rn1(1000,500));
  1207. X              break;
  1208. X***************
  1209. X*** 1713,1719 ****
  1210. X              u.utrap = 0;
  1211. X              return 1;
  1212. X          case TT_INFLOOR:
  1213. X!             You("strain your %s, but are still stuck in the floor.",
  1214. X              makeplural(body_part(LEG)));
  1215. X              set_wounded_legs(LEFT_SIDE, rn1(10, 11));
  1216. X              set_wounded_legs(RIGHT_SIDE, rn1(10, 11));
  1217. X--- 1739,1745 ----
  1218. X              u.utrap = 0;
  1219. X              return 1;
  1220. X          case TT_INFLOOR:
  1221. X!             You("strain your %s, but you're still stuck in the floor.",
  1222. X              makeplural(body_part(LEG)));
  1223. X              set_wounded_legs(LEFT_SIDE, rn1(10, 11));
  1224. X              set_wounded_legs(RIGHT_SIDE, rn1(10, 11));
  1225. X***************
  1226. X*** 1747,1753 ****
  1227. X          && !resists_ston(uasmon)
  1228. X  #endif
  1229. X          && !uarmg) {
  1230. X! pline("Tinning a cockatrice corpse without gloves was not a very wise move...");
  1231. X  #if defined(POLYSELF)
  1232. X  /* this will have to change if more monsters can poly */
  1233. X          if(!(poly_when_stoned(uasmon) && polymon(PM_STONE_GOLEM)))
  1234. X--- 1773,1779 ----
  1235. X          && !resists_ston(uasmon)
  1236. X  #endif
  1237. X          && !uarmg) {
  1238. X! pline("Tinning a cockatrice without wearing gloves is a fatal mistake...");
  1239. X  #if defined(POLYSELF)
  1240. X  /* this will have to change if more monsters can poly */
  1241. X          if(!(poly_when_stoned(uasmon) && polymon(PM_STONE_GOLEM)))
  1242. X***************
  1243. X*** 1759,1773 ****
  1244. X          done(STONING);
  1245. X          }
  1246. X      }
  1247. X-     if (mons[corpse->corpsenm].cnutrit == 0) {
  1248. X-         You("can't tin something that insubstantial!");
  1249. X-         return;
  1250. X-     }
  1251. X      if (is_rider(&mons[corpse->corpsenm])) {
  1252. X          revive_corpse(corpse, 0, FALSE);
  1253. X!         verbalize("Yes....  But War does not preserve its enemies...");
  1254. X          return;
  1255. X      }
  1256. X      if(can = mksobj(TIN, FALSE, FALSE)) {
  1257. X          can->corpsenm = corpse->corpsenm;
  1258. X          can->cursed = obj->cursed;
  1259. X--- 1785,1799 ----
  1260. X          done(STONING);
  1261. X          }
  1262. X      }
  1263. X      if (is_rider(&mons[corpse->corpsenm])) {
  1264. X          revive_corpse(corpse, 0, FALSE);
  1265. X!         verbalize("Yes...  But War does not preserve its enemies...");
  1266. X          return;
  1267. X      }
  1268. X+     if (mons[corpse->corpsenm].cnutrit == 0) {
  1269. X+         pline("That's too insubstantial to tin.");
  1270. X+         return;
  1271. X+     }
  1272. X      if(can = mksobj(TIN, FALSE, FALSE)) {
  1273. X          can->corpsenm = corpse->corpsenm;
  1274. X          can->cursed = obj->cursed;
  1275. X***************
  1276. X*** 1775,1784 ****
  1277. X          can->owt = weight(can);
  1278. X          can->known = 1;
  1279. X          can->spe = -1;  /* Mark tinned tins. No spinach allowed... */
  1280. X          can = hold_another_object(can, "You make, but cannot pick up, %s.",
  1281. X                        doname(can), (const char *)0);
  1282. X-         if (carried(corpse)) useup(corpse);
  1283. X-         else useupf(corpse);
  1284. X      } else impossible("Tinning failed.");
  1285. X  }
  1286. X  
  1287. X--- 1801,1822 ----
  1288. X          can->owt = weight(can);
  1289. X          can->known = 1;
  1290. X          can->spe = -1;  /* Mark tinned tins. No spinach allowed... */
  1291. X+         if (carried(corpse)) {
  1292. X+             if(corpse->unpaid) {
  1293. X+             verbalize("You tin it, you bought it!");
  1294. X+             bill_dummy_object(corpse);
  1295. X+         }
  1296. X+             useup(corpse);
  1297. X+         } else {
  1298. X+             if(costly_spot(corpse->ox, corpse->oy) &&
  1299. X+               !corpse->no_charge) {
  1300. X+             verbalize("You tin it, you bought it!");
  1301. X+             bill_dummy_object(corpse);
  1302. X+         }
  1303. X+             useupf(corpse);
  1304. X+         }
  1305. X          can = hold_another_object(can, "You make, but cannot pick up, %s.",
  1306. X                        doname(can), (const char *)0);
  1307. X      } else impossible("Tinning failed.");
  1308. X  }
  1309. X  
  1310. X***************
  1311. X*** 1874,1893 ****
  1312. X      }
  1313. X      x = u.ux + u.dx; y = u.uy + u.dy;
  1314. X      if (!isok(x,y)) {
  1315. X!         You("can't seem to put the figurine there.");
  1316. X          return;
  1317. X      }
  1318. X!     if (IS_ROCK(levl[x][y].typ) && !passes_walls(&mons[obj->corpsenm])) {
  1319. X!         You("can't place a figurine in solid rock!");
  1320. X          return;
  1321. X      }
  1322. X      if (sobj_at(BOULDER,x,y) && !passes_walls(&mons[obj->corpsenm])
  1323. X              && !throws_rocks(&mons[obj->corpsenm])) {
  1324. X!         You("can't fit the figurine on the boulder.");
  1325. X          return;
  1326. X      }
  1327. X      You("%s and it transforms.",
  1328. X!         (u.dx||u.dy) ? "set the figurine besides you" :
  1329. X          (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) ?
  1330. X          "release the figurine" :
  1331. X          (u.dz < 0 ?
  1332. X--- 1912,1932 ----
  1333. X      }
  1334. X      x = u.ux + u.dx; y = u.uy + u.dy;
  1335. X      if (!isok(x,y)) {
  1336. X!         You("cannot put the figurine there.");
  1337. X          return;
  1338. X      }
  1339. X!     if (IS_ROCK(levl[x][y].typ) &&
  1340. X!         !(passes_walls(&mons[obj->corpsenm]) && may_passwall(x,y))) {
  1341. X!         You("cannot place a figurine in solid rock!");
  1342. X          return;
  1343. X      }
  1344. X      if (sobj_at(BOULDER,x,y) && !passes_walls(&mons[obj->corpsenm])
  1345. X              && !throws_rocks(&mons[obj->corpsenm])) {
  1346. X!         You("cannot fit the figurine on the boulder.");
  1347. X          return;
  1348. X      }
  1349. X      You("%s and it transforms.",
  1350. X!         (u.dx||u.dy) ? "set the figurine beside you" :
  1351. X          (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) ?
  1352. X          "release the figurine" :
  1353. X          (u.dz < 0 ?
  1354. X***************
  1355. X*** 1897,1902 ****
  1356. X--- 1936,1943 ----
  1357. X      useup(obj);
  1358. X  }
  1359. X  
  1360. X+ static NEARDATA const char lubricables[] = { ALL_CLASSES, ALLOW_NONE, 0 };
  1361. X+ 
  1362. X  static void
  1363. X  use_grease(obj)
  1364. X  struct obj *obj;
  1365. X***************
  1366. X*** 1903,1923 ****
  1367. X  {
  1368. X      struct obj *otmp;
  1369. X  
  1370. X      if (obj->spe > 0) {
  1371. X!         char allow_all[2];
  1372. X!         if (obj->cursed && !rn2(2)) {
  1373. X!             pline("The %s slips from your fingers!",xname(obj));
  1374. X              dropx(obj);
  1375. X!             obj->spe -= 1;
  1376. X              return;
  1377. X          }
  1378. X!         allow_all[0] = ALL_CLASSES; allow_all[1] = '\0';
  1379. X!         otmp = getobj(allow_all,"grease");
  1380. X!         if (otmp) {
  1381. X!             You("cover your %s with a thick layer of grease.",xname(otmp));
  1382. X              otmp->greased = 1;
  1383. X!             obj->spe -= 1;
  1384. X          }
  1385. X      }
  1386. X  }
  1387. X  
  1388. X--- 1944,1979 ----
  1389. X  {
  1390. X      struct obj *otmp;
  1391. X  
  1392. X+     if (Glib) {
  1393. X+         dropx(obj);
  1394. X+         pline("%s slips from your %s.", The(xname(obj)),
  1395. X+           makeplural(body_part(FINGER)));
  1396. X+         return;
  1397. X+     }
  1398. X+ 
  1399. X      if (obj->spe > 0) {
  1400. X!         if ((obj->cursed || Fumbling) && !rn2(2)) {
  1401. X!             obj->spe--;
  1402. X              dropx(obj);
  1403. X!             pline("%s slips from your %s.", The(xname(obj)),
  1404. X!                   makeplural(body_part(FINGER)));
  1405. X              return;
  1406. X          }
  1407. X!         otmp = getobj(lubricables, "grease");
  1408. X!         if (!otmp) return;
  1409. X!         obj->spe--;
  1410. X!         if (otmp != &zeroobj) {
  1411. X!             You("cover your %s with a thick layer of grease.",
  1412. X!                 xname(otmp));
  1413. X              otmp->greased = 1;
  1414. X!         } else {
  1415. X!             Glib += rnd(15);
  1416. X!             You("coat your %s with grease.",
  1417. X!                 makeplural(body_part(FINGER)));
  1418. X          }
  1419. X+     } else {
  1420. X+         pline("%s %s empty.", The(xname(obj)),
  1421. X+             obj->known ? "is" : "seems to be");
  1422. X      }
  1423. X  }
  1424. X  
  1425. X***************
  1426. X*** 1940,1947 ****
  1427. X              else Blindf_off(obj);
  1428. X          } 
  1429. X          else if (!ublindf) Blindf_on(obj);
  1430. X!         else You("are already %s", ublindf->otyp == TOWEL ?
  1431. X!              "covered by a towel." : "wearing a blindfold!");
  1432. X          break;
  1433. X      case LARGE_BOX:
  1434. X      case CHEST:
  1435. X--- 1996,2003 ----
  1436. X              else Blindf_off(obj);
  1437. X          } 
  1438. X          else if (!ublindf) Blindf_on(obj);
  1439. X!         else You("are already %s.", ublindf->otyp == TOWEL ?
  1440. X!              "covered by a towel" : "wearing a blindfold");
  1441. X          break;
  1442. X      case LARGE_BOX:
  1443. X      case CHEST:
  1444. X***************
  1445. X*** 1955,1961 ****
  1446. X          if(obj->spe > 0) {
  1447. X              register int cnt = 1;
  1448. X  
  1449. X!             obj->spe -= 1;
  1450. X              if(!rn2(23)) cnt += rn2(7) + 1;
  1451. X              while(cnt--)
  1452. X                  (void) makemon((struct permonst *) 0, u.ux, u.uy);
  1453. X--- 2011,2017 ----
  1454. X          if(obj->spe > 0) {
  1455. X              register int cnt = 1;
  1456. X  
  1457. X!             obj->spe--;
  1458. X              if(!rn2(23)) cnt += rn2(7) + 1;
  1459. X              while(cnt--)
  1460. X                  (void) makemon((struct permonst *) 0, u.ux, u.uy);
  1461. X***************
  1462. X*** 2057,2075 ****
  1463. X      case DRUM_OF_EARTHQUAKE:
  1464. X          res = do_play_instrument(obj);
  1465. X          break;
  1466. X!     case HORN_OF_PLENTY:
  1467. X          if (obj->spe > 0) {
  1468. X              struct obj *otmp;
  1469. X              const char *what;
  1470. X  
  1471. X! #ifdef MAC
  1472. X!             char melody [ 3 ] = { 0 , 0 , 0 } ;
  1473. X!             melody [ 0 ] = rn2 ( 8 ) + 'A' ;
  1474. X!             melody [ 1 ] = rn2 ( 8 ) + 'A' ;
  1475. X!             mac_speaker ( obj , & melody ) ;
  1476. X! #endif
  1477. X! 
  1478. X!             obj->spe -= 1;
  1479. X              if (!rn2(13)) {
  1480. X              otmp = mkobj(POTION_CLASS, FALSE);
  1481. X              if (objects[otmp->otyp].oc_magic) do {
  1482. X--- 2113,2124 ----
  1483. X      case DRUM_OF_EARTHQUAKE:
  1484. X          res = do_play_instrument(obj);
  1485. X          break;
  1486. X!     case HORN_OF_PLENTY:    /* not a musical instrument */
  1487. X          if (obj->spe > 0) {
  1488. X              struct obj *otmp;
  1489. X              const char *what;
  1490. X  
  1491. X!             obj->spe--;
  1492. X              if (!rn2(13)) {
  1493. X              otmp = mkobj(POTION_CLASS, FALSE);
  1494. X              if (objects[otmp->otyp].oc_magic) do {
  1495. X***************
  1496. X*** 2086,2092 ****
  1497. X              otmp->blessed = obj->blessed;
  1498. X              otmp->cursed = obj->cursed;
  1499. X              otmp->owt = weight(otmp);
  1500. X!             otmp = hold_another_object(otmp, u.uswallow ?
  1501. X                             "Oops!  %s away from you!" :
  1502. X                             "Oops!  %s to the floor!",
  1503. X                             The(aobjnam(otmp, "slip")),
  1504. X--- 2135,2143 ----
  1505. X              otmp->blessed = obj->blessed;
  1506. X              otmp->cursed = obj->cursed;
  1507. X              otmp->owt = weight(otmp);
  1508. X!             otmp = hold_another_object(otmp,
  1509. X!                     (u.uswallow || Is_airlevel(&u.uz) ||
  1510. X!                      u.uinwater || Is_waterlevel(&u.uz)) ?
  1511. X                             "Oops!  %s away from you!" :
  1512. X                             "Oops!  %s to the floor!",
  1513. X                             The(aobjnam(otmp, "slip")),
  1514. X*** /tmp/da08021    Thu Feb 25 10:22:11 1993
  1515. X--- src/artifact.c    Tue Feb 23 15:12:12 1993
  1516. X***************
  1517. X*** 1,4 ****
  1518. X! /*    SCCS Id: @(#)artifact.c    3.1    93/01/17    */
  1519. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1520. X  /* NetHack may be freely redistributed.  See license for details. */
  1521. X  
  1522. X--- 1,4 ----
  1523. X! /*    SCCS Id: @(#)artifact.c    3.1    93/02/17    */
  1524. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1525. X  /* NetHack may be freely redistributed.  See license for details. */
  1526. X  
  1527. X***************
  1528. X*** 192,197 ****
  1529. X--- 192,213 ----
  1530. X      return a;
  1531. X  }
  1532. X  
  1533. X+ /*
  1534. X+  * This function is used to un-create an artifact.  Normally, when an artifact
  1535. X+  * is destroyed, it cannot be re-created by any means.  However, if you call
  1536. X+  * this function _before_ destroying the object, then the artifact can be
  1537. X+  * re-created later on.  Currently used only by the wish code.
  1538. X+  */
  1539. X+ void
  1540. X+ artifact_unexist(otmp)
  1541. X+     register struct obj *otmp;
  1542. X+ {
  1543. X+     if (otmp->oartifact && artiexist[otmp->oartifact])
  1544. X+     artiexist[otmp->oartifact] = 0;
  1545. X+     else
  1546. X+     impossible("Destroying non-existing artifact?!");
  1547. X+ }
  1548. X+ 
  1549. X  #endif /* OVLB */
  1550. X  #ifdef OVL0
  1551. X  
  1552. X***************
  1553. X*** 401,407 ****
  1554. X      char buf[BUFSZ];
  1555. X  
  1556. X      if (!yours) return 0;
  1557. X!     You("feel a blast of power flow from %s!", the(xname(obj)));
  1558. X      dmg = d((Antimagic ? 2 : 4) , ((oart->spfx & SPFX_INTEL) ? 10 : 4));
  1559. X      Sprintf(buf, "touching %s", oart->name);
  1560. X      losehp(dmg, buf, KILLED_BY);
  1561. X--- 417,423 ----
  1562. X      char buf[BUFSZ];
  1563. X  
  1564. X      if (!yours) return 0;
  1565. X!     pline("You are blasted by %s power!", s_suffix(the(xname(obj))));
  1566. X      dmg = d((Antimagic ? 2 : 4) , ((oart->spfx & SPFX_INTEL) ? 10 : 4));
  1567. X      Sprintf(buf, "touching %s", oart->name);
  1568. X      losehp(dmg, buf, KILLED_BY);
  1569. X***************
  1570. X*** 410,416 ****
  1571. X  
  1572. X      /* can pick it up unless you're totally non-synch'd with the artifact */
  1573. X      if(badclass && badalign && (oart->spfx & SPFX_INTEL)) {
  1574. X!     if (yours) pline("%s refuses to be held by you!", The(xname(obj)));
  1575. X      return 0;
  1576. X      }
  1577. X  
  1578. X--- 426,432 ----
  1579. X  
  1580. X      /* can pick it up unless you're totally non-synch'd with the artifact */
  1581. X      if(badclass && badalign && (oart->spfx & SPFX_INTEL)) {
  1582. X!     if (yours) pline("%s evades your grasp!", The(xname(obj)));
  1583. X      return 0;
  1584. X      }
  1585. X  
  1586. X***************
  1587. X*** 550,556 ****
  1588. X      }
  1589. X      if (attacks(AD_COLD, otmp)) {
  1590. X          if (realizes_damage) {
  1591. X!             pline("The chilling blade freezes %s!", hittee);
  1592. X              return TRUE;
  1593. X          }
  1594. X      }
  1595. X--- 566,572 ----
  1596. X      }
  1597. X      if (attacks(AD_COLD, otmp)) {
  1598. X          if (realizes_damage) {
  1599. X!             pline("The ice-cold blade freezes %s!", hittee);
  1600. X              return TRUE;
  1601. X          }
  1602. X      }
  1603. X***************
  1604. X*** 558,564 ****
  1605. X          if (realizes_damage) {
  1606. X              if(youattack && otmp != uwep)
  1607. X                  pline("%s hits %s!", The(xname(otmp)), hittee);
  1608. X!             pline("A bolt of lightning zaps %s!", hittee);
  1609. X              return TRUE;
  1610. X          }
  1611. X      }
  1612. X--- 574,580 ----
  1613. X          if (realizes_damage) {
  1614. X              if(youattack && otmp != uwep)
  1615. X                  pline("%s hits %s!", The(xname(otmp)), hittee);
  1616. X!             pline("Lightning strikes %s!", hittee);
  1617. X              return TRUE;
  1618. X          }
  1619. X      }
  1620. X***************
  1621. X*** 723,729 ****
  1622. X                  }
  1623. X              } else if (youdefend && !MB_RESISTED_ATTACK
  1624. X                     && (attack_index == MB_INDEX_PURGE)) {
  1625. X!                 You("lose some magical energy!");
  1626. X                  if (u.uenmax > 0) u.uenmax--;
  1627. X                  if (u.uen > 0) u.uen--;
  1628. X                      flags.botl = 1;
  1629. X--- 739,745 ----
  1630. X                  }
  1631. X              } else if (youdefend && !MB_RESISTED_ATTACK
  1632. X                     && (attack_index == MB_INDEX_PURGE)) {
  1633. X!                 You("lose magical energy!");
  1634. X                  if (u.uenmax > 0) u.uenmax--;
  1635. X                  if (u.uen > 0) u.uen--;
  1636. X                      flags.botl = 1;
  1637. X***************
  1638. X*** 800,809 ****
  1639. X          if (!youdefend) {
  1640. X              if (!has_head(mdef->data) || notonhead) {
  1641. X                  if (youattack)
  1642. X!                     pline("Somehow you miss %s wildly.",
  1643. X                          mon_nam(mdef));
  1644. X                  else if (vis)
  1645. X!                     pline("Somehow %s misses wildly.",
  1646. X                          mon_nam(magr));
  1647. X                  *dmgptr = 0;
  1648. X                  return (youattack || vis);
  1649. X--- 816,825 ----
  1650. X          if (!youdefend) {
  1651. X              if (!has_head(mdef->data) || notonhead) {
  1652. X                  if (youattack)
  1653. X!                     pline("Somehow, you miss %s wildly.",
  1654. X                          mon_nam(mdef));
  1655. X                  else if (vis)
  1656. X!                     pline("Somehow, %s misses wildly.",
  1657. X                          mon_nam(magr));
  1658. X                  *dmgptr = 0;
  1659. X                  return (youattack || vis);
  1660. X***************
  1661. X*** 817,823 ****
  1662. X          } else {
  1663. X  #ifdef POLYSELF
  1664. X              if (!has_head(uasmon)) {
  1665. X!                 pline("Somehow %s misses you wildly.",
  1666. X                      mon_nam(magr));
  1667. X                  *dmgptr = 0;
  1668. X                  return TRUE;
  1669. X--- 833,839 ----
  1670. X          } else {
  1671. X  #ifdef POLYSELF
  1672. X              if (!has_head(uasmon)) {
  1673. X!                 pline("Somehow, %s misses you wildly.",
  1674. X                      mon_nam(magr));
  1675. X                  *dmgptr = 0;
  1676. X                  return TRUE;
  1677. X***************
  1678. X*** 884,890 ****
  1679. X  }
  1680. X  
  1681. X  static const char recharge_type[] = { ALLOW_COUNT, ALL_CLASSES, 0 };
  1682. X! static const char NEARDATA invoke_types[] =
  1683. X      { ALL_CLASSES, WEAPON_CLASS, ARMOR_CLASS, RING_CLASS, AMULET_CLASS,
  1684. X            TOOL_CLASS, 0 };
  1685. X  
  1686. X--- 900,906 ----
  1687. X  }
  1688. X  
  1689. X  static const char recharge_type[] = { ALLOW_COUNT, ALL_CLASSES, 0 };
  1690. X! static NEARDATA const char invoke_types[] =
  1691. X      { ALL_CLASSES, WEAPON_CLASS, ARMOR_CLASS, RING_CLASS, AMULET_CLASS,
  1692. X            TOOL_CLASS, 0 };
  1693. X  
  1694. X***************
  1695. X*** 1021,1027 ****
  1696. X          You("feel very disoriented for a moment.");
  1697. X          } else {
  1698. X          if(!Blind) You("are surrounded by a shimmering sphere!");
  1699. X!         else You("momentarily feel weightless.");
  1700. X          goto_level(&newlev, FALSE, FALSE, FALSE);
  1701. X          }
  1702. X          break;
  1703. X--- 1037,1043 ----
  1704. X          You("feel very disoriented for a moment.");
  1705. X          } else {
  1706. X          if(!Blind) You("are surrounded by a shimmering sphere!");
  1707. X!         else You("feel weightless for a moment.");
  1708. X          goto_level(&newlev, FALSE, FALSE, FALSE);
  1709. X          }
  1710. X          break;
  1711. X***************
  1712. X*** 1048,1060 ****
  1713. X      nothing_special:
  1714. X          /* you had the property from some other source too */
  1715. X          if (carried(obj))
  1716. X!         You("feel a surge of power, but notice no effect.");
  1717. X          return 1;
  1718. X      }
  1719. X      switch(oart->inv_prop) {
  1720. X      case CONFLICT:
  1721. X          if(on) You("feel like a rabble-rouser.");
  1722. X!         else You("feel the tension decrease in your vicinity.");
  1723. X          break;
  1724. X      case LEVITATION:
  1725. X          if(on) float_up();
  1726. X--- 1064,1076 ----
  1727. X      nothing_special:
  1728. X          /* you had the property from some other source too */
  1729. X          if (carried(obj))
  1730. X!         You("feel a surge of power, but nothing seems to happen.");
  1731. X          return 1;
  1732. X      }
  1733. X      switch(oart->inv_prop) {
  1734. X      case CONFLICT:
  1735. X          if(on) You("feel like a rabble-rouser.");
  1736. X!         else You("feel the tension decrease around you.");
  1737. X          break;
  1738. X      case LEVITATION:
  1739. X          if(on) float_up();
  1740. X*** /tmp/da08029    Thu Feb 25 10:22:14 1993
  1741. X--- src/attrib.c    Thu Feb 18 10:58:23 1993
  1742. X***************
  1743. X*** 1,4 ****
  1744. X! /*    SCCS Id: @(#)attrib.c    3.1    92/10/26    */
  1745. X  /*    Copyright 1988, 1989, 1990, 1992, M. Stephenson          */
  1746. X  /* NetHack may be freely redistributed.  See license for details. */
  1747. X  
  1748. X--- 1,4 ----
  1749. X! /*    SCCS Id: @(#)attrib.c    3.1    93/02/17    */
  1750. X  /*    Copyright 1988, 1989, 1990, 1992, M. Stephenson          */
  1751. X  /* NetHack may be freely redistributed.  See license for details. */
  1752. X  
  1753. X***************
  1754. X*** 156,162 ****
  1755. X              { A_NEUTRAL, 0 },  12, 10, 14,  1,  0 };
  1756. X  
  1757. X  static long next_check = 600L;    /* arbitrary first setting */
  1758. X! static const struct clattr NEARDATA *NDECL(clx);
  1759. X  static void NDECL(init_align);
  1760. X  static void NDECL(exerper);
  1761. X  
  1762. X--- 156,162 ----
  1763. X              { A_NEUTRAL, 0 },  12, 10, 14,  1,  0 };
  1764. X  
  1765. X  static long next_check = 600L;    /* arbitrary first setting */
  1766. X! static NEARDATA const struct clattr *NDECL(clx);
  1767. X  static void NDECL(init_align);
  1768. X  static void NDECL(exerper);
  1769. X  
  1770. X***************
  1771. X*** 449,455 ****
  1772. X                  break;
  1773. X              case A_WIS: You((mod_val >0) ?
  1774. X                      "must have been very observant." :
  1775. X!                     "must not have been paying attention.");
  1776. X                  break;
  1777. X              case A_DEX: You((mod_val >0) ?
  1778. X                      "must have been working on your reflexes." :
  1779. X--- 449,455 ----
  1780. X                  break;
  1781. X              case A_WIS: You((mod_val >0) ?
  1782. X                      "must have been very observant." :
  1783. X!                     "haven't been paying attention.");
  1784. X                  break;
  1785. X              case A_DEX: You((mod_val >0) ?
  1786. X                      "must have been working on your reflexes." :
  1787. X***************
  1788. X*** 457,463 ****
  1789. X                  break;
  1790. X              case A_CON: You((mod_val >0) ?
  1791. X                      "must be leading a healthy life-style." :
  1792. X!                     "must not have been watching your health.");
  1793. X                  break;
  1794. X              }
  1795. X          }
  1796. X--- 457,463 ----
  1797. X                  break;
  1798. X              case A_CON: You((mod_val >0) ?
  1799. X                      "must be leading a healthy life-style." :
  1800. X!                     "haven't been watching your health.");
  1801. X                  break;
  1802. X              }
  1803. X          }
  1804. X*** /tmp/da08037    Thu Feb 25 10:22:16 1993
  1805. X--- src/ball.c    Thu Feb 18 10:58:25 1993
  1806. X***************
  1807. X*** 1,4 ****
  1808. X! /*    SCCS Id: @(#)ball.c    3.1    92/11/04    */
  1809. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1810. X  /* NetHack may be freely redistributed.  See license for details. */
  1811. X  
  1812. X--- 1,4 ----
  1813. X! /*    SCCS Id: @(#)ball.c    3.1    93/02/17    */
  1814. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1815. X  /* NetHack may be freely redistributed.  See license for details. */
  1816. X  
  1817. X***************
  1818. X*** 367,386 ****
  1819. X  
  1820. X      if ((is_pool(uchain->ox, uchain->oy) &&
  1821. X              (levl[uchain->ox][uchain->oy].typ == POOL ||
  1822. X!              !is_pool(uball->ox, uball->oy) || 
  1823. X               levl[uball->ox][uball->oy].typ == POOL))
  1824. X!         || ((t = t_at(uchain->ox, uchain->oy)) && 
  1825. X              (t->ttyp == PIT ||
  1826. X               t->ttyp == SPIKED_PIT ||
  1827. X               t->ttyp == TRAPDOOR)) ) {
  1828. X  
  1829. X          if (Levitation) {
  1830. X!         You("feel a tug from your iron ball.");
  1831. X          if (t) t->tseen = 1;
  1832. X          } else {
  1833. X          struct monst *victim;
  1834. X  
  1835. X!         You("are jerked back by your iron ball!");
  1836. X          if (victim = m_at(uchain->ox, uchain->oy)) {
  1837. X              int tmp;
  1838. X  
  1839. X--- 367,386 ----
  1840. X  
  1841. X      if ((is_pool(uchain->ox, uchain->oy) &&
  1842. X              (levl[uchain->ox][uchain->oy].typ == POOL ||
  1843. X!              !is_pool(uball->ox, uball->oy) ||
  1844. X               levl[uball->ox][uball->oy].typ == POOL))
  1845. X!         || ((t = t_at(uchain->ox, uchain->oy)) &&
  1846. X              (t->ttyp == PIT ||
  1847. X               t->ttyp == SPIKED_PIT ||
  1848. X               t->ttyp == TRAPDOOR)) ) {
  1849. X  
  1850. X          if (Levitation) {
  1851. X!         You("feel a tug from the iron ball.");
  1852. X          if (t) t->tseen = 1;
  1853. X          } else {
  1854. X          struct monst *victim;
  1855. X  
  1856. X!         You("are jerked back by the iron ball!");
  1857. X          if (victim = m_at(uchain->ox, uchain->oy)) {
  1858. X              int tmp;
  1859. X  
  1860. X***************
  1861. X*** 556,562 ****
  1862. X  
  1863. X      if (forward) {
  1864. X          if(rn2(6)) {
  1865. X!             You("get dragged downstairs by the iron ball.");
  1866. X              losehp(rnd(6), "dragged downstairs by an iron ball",
  1867. X                  NO_KILLER_PREFIX);
  1868. X              litter();
  1869. X--- 556,562 ----
  1870. X  
  1871. X      if (forward) {
  1872. X          if(rn2(6)) {
  1873. X!             pline("The iron ball drags you downstairs!");
  1874. X              losehp(rnd(6), "dragged downstairs by an iron ball",
  1875. X                  NO_KILLER_PREFIX);
  1876. X              litter();
  1877. X***************
  1878. X*** 569,575 ****
  1879. X              dragchance -= 2;
  1880. X          } 
  1881. X          if( (int) dragchance >= rnd(6)) {
  1882. X!             You("get dragged downstairs by the iron ball.");
  1883. X              losehp(rnd(3), "dragged downstairs by an iron ball",
  1884. X                  NO_KILLER_PREFIX);
  1885. X              exercise(A_STR, FALSE);
  1886. X--- 569,575 ----
  1887. X              dragchance -= 2;
  1888. X          } 
  1889. X          if( (int) dragchance >= rnd(6)) {
  1890. X!             pline("The iron ball drags you downstairs!");
  1891. X              losehp(rnd(3), "dragged downstairs by an iron ball",
  1892. X                  NO_KILLER_PREFIX);
  1893. X              exercise(A_STR, FALSE);
  1894. X*** /tmp/da08045    Thu Feb 25 10:22:19 1993
  1895. X--- src/bones.c    Thu Feb 18 11:17:46 1993
  1896. X***************
  1897. X*** 165,171 ****
  1898. X  
  1899. X      if(ledger_no(&u.uz) <= 0 || ledger_no(&u.uz) > maxledgerno()) return;
  1900. X      if(no_bones_level(&u.uz)) return; /* no bones for specific levels */
  1901. X!     if(!rn2(1 + (depth(&u.uz)>>2)) /* fewer ghosts on low levels */
  1902. X  #ifdef WIZARD
  1903. X          && !wizard
  1904. X  #endif
  1905. X--- 165,178 ----
  1906. X  
  1907. X      if(ledger_no(&u.uz) <= 0 || ledger_no(&u.uz) > maxledgerno()) return;
  1908. X      if(no_bones_level(&u.uz)) return; /* no bones for specific levels */
  1909. X!     if(!Is_branchlev(&u.uz)) {
  1910. X!         /* no bones on non-branches with portals */
  1911. X!         for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
  1912. X!         if (ttmp->ttyp == MAGIC_PORTAL) return;
  1913. X!     }
  1914. X! 
  1915. X!     if(depth(&u.uz) <= 0 ||        /* bulletproofing for endgame */
  1916. X!        !rn2(1 + (depth(&u.uz)>>2)) /* fewer ghosts on low levels */
  1917. X  #ifdef WIZARD
  1918. X          && !wizard
  1919. X  #endif
  1920. X***************
  1921. X*** 259,265 ****
  1922. X          if(mtmp->mtame) mtmp->mtame = mtmp->mpeaceful = 0;
  1923. X      }
  1924. X      for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) {
  1925. X-             if(ttmp->ttyp == MAGIC_PORTAL) deltrap(ttmp);
  1926. X          ttmp->tseen = 0;
  1927. X      }
  1928. X      resetobjs(fobj,FALSE);
  1929. X--- 266,271 ----
  1930. X*** /tmp/da08053    Thu Feb 25 10:22:21 1993
  1931. X--- src/botl.c    Fri Feb 19 11:01:43 1993
  1932. X***************
  1933. X*** 30,36 ****
  1934. X  #ifndef OVLB
  1935. X  STATIC_DCL int mrank_sz;
  1936. X  #else /* OVLB */
  1937. X! STATIC_OVL int NEARDATA mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */
  1938. X  #endif /* OVLB */
  1939. X  
  1940. X  struct rank_title {
  1941. X--- 30,36 ----
  1942. X  #ifndef OVLB
  1943. X  STATIC_DCL int mrank_sz;
  1944. X  #else /* OVLB */
  1945. X! STATIC_OVL NEARDATA int mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */
  1946. X  #endif /* OVLB */
  1947. X  
  1948. X  struct rank_title {
  1949. X***************
  1950. X*** 99,111 ****
  1951. X      {"Elentar",    "Elentari"}    /* Star-king, -queen (Q.) */
  1952. X    } },
  1953. X    {                    'H',0,    PM_HEALER, {
  1954. X!     {"Barber",    "Midwife"},
  1955. X!     {"Leech",    0},
  1956. X      {"Embalmer",    0},
  1957. X      {"Dresser",    0},
  1958. X!     {"Bone Setter",    0},
  1959. X      {"Herbalist",    0},
  1960. X!     {"Apothecary",    0},
  1961. X      {"Physician",    0},
  1962. X      {"Chirurgeon",    0}
  1963. X    } },
  1964. X--- 99,111 ----
  1965. X      {"Elentar",    "Elentari"}    /* Star-king, -queen (Q.) */
  1966. X    } },
  1967. X    {                    'H',0,    PM_HEALER, {
  1968. X!     {"Rhizotomist",  0},
  1969. X!     {"Empiric",    0},
  1970. X      {"Embalmer",    0},
  1971. X      {"Dresser",    0},
  1972. X!     {"Medici ossium",    0},
  1973. X      {"Herbalist",    0},
  1974. X!     {"Magister",    0},
  1975. X      {"Physician",    0},
  1976. X      {"Chirurgeon",    0}
  1977. X    } },
  1978. X***************
  1979. X*** 286,291 ****
  1980. X--- 286,305 ----
  1981. X  #endif /* OVLB */
  1982. X  #ifdef OVL0
  1983. X  
  1984. X+ #ifdef SCORE_ON_BOTL
  1985. X+ long
  1986. X+ botl_score()
  1987. X+ {
  1988. X+     int deepest = deepest_lev_reached(FALSE);
  1989. X+     long ugold = u.ugold + hidden_gold();
  1990. X+ 
  1991. X+     if ((ugold -= u.ugold0) < 0L) ugold = 0L;
  1992. X+     return ugold + u.urexp + (long)(50 * (deepest - 1))
  1993. X+               + (long)(deepest > 30 ? 10000 :
  1994. X+                    deepest > 20 ? 1000*(deepest - 20) : 0);
  1995. X+ }
  1996. X+ #endif
  1997. X+ 
  1998. X  static void
  1999. X  bot1()
  2000. X  {
  2001. X***************
  2002. X*** 335,350 ****
  2003. X      Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? "  Chaotic" :
  2004. X              (u.ualign.type == A_NEUTRAL) ? "  Neutral" : "  Lawful");
  2005. X  #ifdef SCORE_ON_BOTL
  2006. X!     if (flags.showscore) {
  2007. X!         int deepest = deepest_lev_reached(FALSE);
  2008. X!         long ugold = u.ugold + hidden_gold();
  2009. X! 
  2010. X!         if ((ugold -= u.ugold0) < 0L) ugold = 0L;
  2011. X!         Sprintf(nb = eos(nb), " S:%ld",
  2012. X!             ugold + u.urexp + (long)(50 * (deepest - 1))
  2013. X!               + (long)(deepest > 30 ? 10000 :
  2014. X!                    deepest > 20 ? 1000*(deepest - 20) : 0));
  2015. X!     }
  2016. X  #endif
  2017. X      curs(WIN_STATUS, 1, 0);
  2018. X      putstr(WIN_STATUS, 0, newbot1);
  2019. X--- 349,356 ----
  2020. X      Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? "  Chaotic" :
  2021. X              (u.ualign.type == A_NEUTRAL) ? "  Neutral" : "  Lawful");
  2022. X  #ifdef SCORE_ON_BOTL
  2023. X!     if (flags.showscore)
  2024. X!         Sprintf(nb = eos(nb), " S:%ld", botl_score());
  2025. X  #endif
  2026. X      curs(WIN_STATUS, 1, 0);
  2027. X      putstr(WIN_STATUS, 0, newbot1);
  2028. X
  2029. END_OF_FILE
  2030. if test 56557 -ne `wc -c <'patches01a'`; then
  2031.     echo shar: \"'patches01a'\" unpacked with wrong size!
  2032. fi
  2033. # end of 'patches01a'
  2034. echo shar: End of archive 2 \(of 31\).
  2035. cp /dev/null ark2isdone
  2036. MISSING=""
  2037. 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
  2038.     if test ! -f ark${I}isdone ; then
  2039.     MISSING="${MISSING} ${I}"
  2040.     fi
  2041. done
  2042. if test "${MISSING}" = "" ; then
  2043.     echo You have unpacked all 31 archives.
  2044.     echo "Now execute 'patchit.sh'"
  2045.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2046. else
  2047.     echo You still need to unpack the following archives:
  2048.     echo "        " ${MISSING}
  2049. fi
  2050. ##  End of shell archive.
  2051. exit 0
  2052.