home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume16 / nethack31 / patch1h / patches01i
Text File  |  1993-03-05  |  54KB  |  1,886 lines

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