home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume16 / nethack31 / patch1n / patches01g
Text File  |  1993-03-05  |  53KB  |  1,899 lines

  1. *** /tmp/da08437    Thu Feb 25 10:24:27 1993
  2. --- src/objnam.c    Tue Feb 23 17:03:14 1993
  3. ***************
  4. *** 1,4 ****
  5. ! /*    SCCS Id: @(#)objnam.c    3.1    92/12/13    */
  6.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  7.   /* NetHack may be freely redistributed.  See license for details. */
  8.   
  9. --- 1,4 ----
  10. ! /*    SCCS Id: @(#)objnam.c    3.1    93/02/12    */
  11.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  12.   /* NetHack may be freely redistributed.  See license for details. */
  13.   
  14. ***************
  15. *** 167,182 ****
  16.   register struct obj *obj;
  17.   {
  18.   #ifdef LINT    /* lint may handle static decl poorly -- static char bufr[]; */
  19. ! char bufr[BUFSZ];
  20.   #else
  21. ! static char bufr[BUFSZ];
  22.   #endif
  23. ! register char *buf = &(bufr[PREFIX]);    /* leave room for "17 -3 " */
  24. ! register int typ = obj->otyp;
  25. ! register int nn = objects[typ].oc_name_known;
  26. ! register const char *actualn = OBJ_NAME(objects[typ]);
  27. ! register const char *dn = OBJ_DESCR(objects[typ]);
  28. ! register const char *un = objects[typ].oc_uname;
  29.   
  30.       if (pl_character[0] == 'S' && Japanese_item_name(typ))
  31.           actualn = Japanese_item_name(typ);
  32. --- 167,182 ----
  33.   register struct obj *obj;
  34.   {
  35.   #ifdef LINT    /* lint may handle static decl poorly -- static char bufr[]; */
  36. !     char bufr[BUFSZ];
  37.   #else
  38. !     static char bufr[BUFSZ];
  39.   #endif
  40. !     register char *buf = &(bufr[PREFIX]);    /* leave room for "17 -3 " */
  41. !     register int typ = obj->otyp;
  42. !     register int nn = objects[typ].oc_name_known;
  43. !     register const char *actualn = OBJ_NAME(objects[typ]);
  44. !     register const char *dn = OBJ_DESCR(objects[typ]);
  45. !     register const char *un = objects[typ].oc_uname;
  46.   
  47.       if (pl_character[0] == 'S' && Japanese_item_name(typ))
  48.           actualn = Japanese_item_name(typ);
  49. ***************
  50. *** 385,398 ****
  51.       default:
  52.           Sprintf(buf,"glorkum %d %d %d", obj->oclass, typ, obj->spe);
  53.       }
  54. !     if(obj->quan != 1L) Strcpy(buf, makeplural(buf));
  55.   
  56. !     if(obj->onamelth &&
  57. !        (!obj->oartifact || !objects[obj->otyp].oc_unique)) {
  58.           Strcat(buf, " named ");
  59.           nameit:
  60.           Strcat(buf, ONAME(obj));
  61.       }
  62.       return(buf);
  63.   }
  64.   
  65. --- 385,400 ----
  66.       default:
  67.           Sprintf(buf,"glorkum %d %d %d", obj->oclass, typ, obj->spe);
  68.       }
  69. !     if (obj->quan != 1L) Strcpy(buf, makeplural(buf));
  70.   
  71. !     if (obj->onamelth &&
  72. !         (!obj->oartifact || !objects[obj->otyp].oc_unique)) {
  73.           Strcat(buf, " named ");
  74.           nameit:
  75.           Strcat(buf, ONAME(obj));
  76.       }
  77. +     if (!strncmpi(buf, "the ", 4)) buf += 4;
  78.       return(buf);
  79.   }
  80.   
  81. ***************
  82. *** 487,493 ****
  83.               Strcat(prefix,
  84.                      is_rustprone(obj) ? "rusty " :
  85.                      is_corrodeable(obj) ? "corroded " :
  86. !                    is_flammable(obj) ? "burnt " : "");
  87.           } else if (obj->rknown && obj->oerodeproof)
  88.               Strcat(prefix,
  89.                      is_rustprone(obj) ? "rustproof " :
  90. --- 489,495 ----
  91.               Strcat(prefix,
  92.                      is_rustprone(obj) ? "rusty " :
  93.                      is_corrodeable(obj) ? "corroded " :
  94. !                    is_flammable(obj) ? "burnt " : "eroded ");
  95.           } else if (obj->rknown && obj->oerodeproof)
  96.               Strcat(prefix,
  97.                      is_rustprone(obj) ? "rustproof " :
  98. ***************
  99. *** 904,910 ****
  100.   
  101.       /* same singular and plural */
  102.       /* note: also swine, trout, grouse */
  103. !     if ((len >= 7 && !strcmp(spot-6, "samurai")) ||
  104.   #ifdef TUTTI_FRUTTI
  105.           (len >= 5 &&
  106.            (!strcmp(spot-4, "manes") || !strcmp(spot-4, "sheep"))) ||
  107. --- 906,912 ----
  108.   
  109.       /* same singular and plural */
  110.       /* note: also swine, trout, grouse */
  111. !     if ((len >= 2 && !strcmp(spot-1, "ai")) || /* samurai, Uruk-hai */
  112.   #ifdef TUTTI_FRUTTI
  113.           (len >= 5 &&
  114.            (!strcmp(spot-4, "manes") || !strcmp(spot-4, "sheep"))) ||
  115. ***************
  116. *** 971,977 ****
  117.       }
  118.   
  119.       /* Japanese words: plurals are the same as singlar */
  120. !     if (len == 2 && !strcmp(str, "ya"))
  121.           goto bottom;
  122.   
  123.       /* Default: append an 's' */
  124. --- 973,980 ----
  125.       }
  126.   
  127.       /* Japanese words: plurals are the same as singlar */
  128. !     if ((len == 2 && !strcmp(str, "ya")) ||
  129. !         (len > 2 && !strcmp(spot-2, " ya")))
  130.           goto bottom;
  131.   
  132.       /* Default: append an 's' */
  133. ***************
  134. *** 1535,1540 ****
  135. --- 1538,1544 ----
  136.           p = eos(bp);
  137.           if(!BSTRCMP(bp, p-8, "fountain")) {
  138.               levl[u.ux][u.uy].typ = FOUNTAIN;
  139. +             level.flags.nfountains++;
  140.               if(!strncmpi(bp, "magic ", 6))
  141.                   levl[u.ux][u.uy].blessedftn = 1;
  142.               pline("A %sfountain.",
  143. ***************
  144. *** 1542,1547 ****
  145. --- 1546,1560 ----
  146.               newsym(u.ux, u.uy);
  147.               return(&zeroobj);
  148.           }
  149. + # ifdef SINKS
  150. +         if(!BSTRCMP(bp, p-4, "sink")) {
  151. +             levl[u.ux][u.uy].typ = SINK;
  152. +             level.flags.nsinks++;
  153. +             pline("A sink.");
  154. +             newsym(u.ux, u.uy);
  155. +             return &zeroobj;
  156. +         }
  157. + # endif
  158.           if(!BSTRCMP(bp, p-5, "altar")) {
  159.               aligntyp al;
  160.   
  161. ***************
  162. *** 1670,1685 ****
  163.               typ = SPE_BLANK_PAPER;
  164.               break;
  165.           }
  166. !     /* venom isn't really an object and can't be wished for; but allow
  167. !      * wizards to wish for it since it's faster than polymorphing and
  168. !      * spitting.
  169. !      */
  170. !     if(let == VENOM_CLASS)
  171.   #ifdef WIZARD
  172. !         if (!wizard)
  173.   #endif
  174. !             return((struct obj *)0);
  175.   
  176.       if(typ) {
  177.           otmp = mksobj(typ, TRUE, FALSE);
  178. --- 1683,1695 ----
  179.               typ = SPE_BLANK_PAPER;
  180.               break;
  181.           }
  182. !     /* catch any other non-wishable objects */
  183. !     if (objects[typ].oc_nowish
  184.   #ifdef WIZARD
  185. !         && !wizard
  186.   #endif
  187. !         )
  188. !         return((struct obj *)0);
  189.   
  190.       if(typ) {
  191.           otmp = mksobj(typ, TRUE, FALSE);
  192. ***************
  193. *** 1696,1701 ****
  194. --- 1706,1712 ----
  195.   #ifdef WIZARD
  196.           wizard ||
  197.   #endif
  198. +          (cnt <= 7 && Is_candle(otmp)) ||
  199.            (cnt <= 20 &&
  200.             ((let == WEAPON_CLASS && typ <= SHURIKEN) || (typ == ROCK)))))
  201.               otmp->quan = (long) cnt;
  202. ***************
  203. *** 1858,1863 ****
  204. --- 1869,1889 ----
  205.           otmp = oname(otmp, name, 0);
  206.           if (otmp->oartifact) otmp->quan = 1L;
  207.       }
  208. +     /* more wishing abuse: don't allow wishing for certain artifacts */
  209. +     /* and make them pay; charge them for the wish anyway! */
  210. +     if ((is_quest_artifact(otmp) || 
  211. +          (otmp->oartifact && rn2(nartifact_exist()) > 1))
  212. + # ifdef WIZARD
  213. +         && !wizard
  214. + # endif
  215. +         ) {
  216. +         artifact_unexist(otmp);
  217. +         obfree(otmp, (struct obj *) 0);
  218. +         otmp = &zeroobj;
  219. +         pline("For a moment, you feel something in your %s, but it disappears!", makeplural(body_part(HAND)));
  220. +     }
  221. +     
  222.       otmp->owt = weight(otmp);
  223.       if (very && otmp->otyp == HEAVY_IRON_BALL) otmp->owt += 160;
  224.       if (halfeaten && otmp->oclass == FOOD_CLASS) {
  225. *** /tmp/da08445    Thu Feb 25 10:24:31 1993
  226. --- src/options.c    Mon Feb 22 11:02:49 1993
  227. ***************
  228. *** 1,4 ****
  229. ! /*    SCCS Id: @(#)options.c    3.1    92/11/14    */
  230.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  231.   /* NetHack may be freely redistributed.  See license for details. */
  232.   
  233. --- 1,4 ----
  234. ! /*    SCCS Id: @(#)options.c    3.1    93/02/19    */
  235.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  236.   /* NetHack may be freely redistributed.  See license for details. */
  237.   
  238. ***************
  239. *** 9,15 ****
  240.   /*
  241.    *  NOTE:  If you add (or delete) an option, please update the short
  242.    *  options help (option_help()), the long options help (dat/opthelp),
  243. !  *  and the current options setting display function (doset()).
  244.    */
  245.   
  246.   #if defined(TOS) && defined(TEXTCOLOR)
  247. --- 9,16 ----
  248.   /*
  249.    *  NOTE:  If you add (or delete) an option, please update the short
  250.    *  options help (option_help()), the long options help (dat/opthelp),
  251. !  *  and the current options setting display function (doset()),
  252. !  *  and also the Guidebooks.
  253.    */
  254.   
  255.   #if defined(TOS) && defined(TEXTCOLOR)
  256. ***************
  257. *** 20,33 ****
  258.   extern char inv_order[];    /* from invent.c */
  259.   
  260.   static boolean initial, from_file;
  261. - static boolean NEARDATA set_order;
  262.   
  263.   static void FDECL(nmcpy, (char *, const char *, int));
  264.   static void FDECL(escapes, (const char *, char *));
  265.   static void FDECL(rejectoption, (const char *));
  266.   static void FDECL(badoption, (const char *));
  267.   static char *FDECL(string_for_env_opt, (const char *, char *));
  268. ! static int FDECL(change_inv_order, (char *, int));
  269.   static void FDECL(oc_to_str, (char *, char *));
  270.   
  271.   static struct Bool_Opt
  272. --- 21,34 ----
  273.   extern char inv_order[];    /* from invent.c */
  274.   
  275.   static boolean initial, from_file;
  276.   
  277.   static void FDECL(nmcpy, (char *, const char *, int));
  278.   static void FDECL(escapes, (const char *, char *));
  279.   static void FDECL(rejectoption, (const char *));
  280.   static void FDECL(badoption, (const char *));
  281. + static char *FDECL(string_for_opt, (char *));
  282.   static char *FDECL(string_for_env_opt, (const char *, char *));
  283. ! static int FDECL(change_inv_order, (char *));
  284.   static void FDECL(oc_to_str, (char *, char *));
  285.   
  286.   static struct Bool_Opt
  287. ***************
  288. *** 72,78 ****
  289.       {"legacy",&flags.legacy, TRUE},
  290.       {"lit_corridor", &flags.lit_corridor, FALSE},
  291.   #ifdef MAC_GRAPHICS_ENV
  292. !     {"MACgraphics", &flags.MACgraphics, TRUE},
  293.   #endif
  294.   #ifdef NEWS
  295.       {"news", &flags.news, TRUE},
  296. --- 73,79 ----
  297.       {"legacy",&flags.legacy, TRUE},
  298.       {"lit_corridor", &flags.lit_corridor, FALSE},
  299.   #ifdef MAC_GRAPHICS_ENV
  300. !     {"Macgraphics", &flags.MACgraphics, TRUE},
  301.   #endif
  302.   #ifdef NEWS
  303.       {"news", &flags.news, TRUE},
  304. ***************
  305. *** 79,84 ****
  306. --- 80,88 ----
  307.   #endif
  308.       {"null", &flags.null, TRUE},
  309.       {"number_pad", &flags.num_pad, FALSE},
  310. + #ifdef MAC
  311. +     {"page_wait", &flags.page_wait, TRUE},
  312. + #endif
  313.       {"pickup", &flags.pickup, TRUE},
  314.   #ifdef MAC
  315.       {"popup_dialog", &flags.popup_dialog, FALSE},
  316. ***************
  317. *** 87,93 ****
  318.       {"rawio", &flags.rawio, FALSE},
  319.   #endif
  320.       {"rest_on_space", &flags.rest_on_space, FALSE},
  321. !     {"safepet", &flags.safe_dog, TRUE},
  322.   #ifdef EXP_ON_BOTL
  323.       {"showexp", &flags.showexp, FALSE},
  324.   #endif
  325. --- 91,97 ----
  326.       {"rawio", &flags.rawio, FALSE},
  327.   #endif
  328.       {"rest_on_space", &flags.rest_on_space, FALSE},
  329. !     {"safe_pet", &flags.safe_dog, TRUE},
  330.   #ifdef EXP_ON_BOTL
  331.       {"showexp", &flags.showexp, FALSE},
  332.   #endif
  333. ***************
  334. *** 129,135 ****
  335.               monsyms[i] = (uchar) def_monsyms[i];
  336.   
  337.       switch_graphics(ASCII_GRAPHICS);    /* set default characters */
  338. ! #ifdef UNIX
  339.       /*
  340.        * Set defaults for some options depending on what we can
  341.        * detect about the environment's capabilities.
  342. --- 133,139 ----
  343.               monsyms[i] = (uchar) def_monsyms[i];
  344.   
  345.       switch_graphics(ASCII_GRAPHICS);    /* set default characters */
  346. ! #if defined(UNIX) && defined(TTY_GRAPHICS)
  347.       /*
  348.        * Set defaults for some options depending on what we can
  349.        * detect about the environment's capabilities.
  350. ***************
  351. *** 144,156 ****
  352.           flags.use_color = TRUE;
  353.   # endif
  354.       }
  355. ! #endif /* UNIX */
  356.   #if defined(UNIX) || defined(VMS)
  357.       /* detect whether a "vt" terminal can handle alternate charsets */
  358.       if (!strncmpi(getenv("TERM"), "vt", 2) && (AS && AE) &&
  359.           !strcmp(AS, "\016") && !strcmp(AE, "\017")) {
  360.           switch_graphics(DEC_GRAPHICS);
  361.       }
  362.   #endif /* UNIX || VMS */
  363.   
  364.   #ifdef MAC_GRAPHICS_ENV
  365. --- 148,162 ----
  366.           flags.use_color = TRUE;
  367.   # endif
  368.       }
  369. ! #endif /* UNIX && TTY_GRAPHICS */
  370.   #if defined(UNIX) || defined(VMS)
  371. + # ifdef TTY_GRAPHICS
  372.       /* detect whether a "vt" terminal can handle alternate charsets */
  373.       if (!strncmpi(getenv("TERM"), "vt", 2) && (AS && AE) &&
  374.           !strcmp(AS, "\016") && !strcmp(AE, "\017")) {
  375.           switch_graphics(DEC_GRAPHICS);
  376.       }
  377. + # endif
  378.   #endif /* UNIX || VMS */
  379.   
  380.   #ifdef MAC_GRAPHICS_ENV
  381. ***************
  382. *** 186,192 ****
  383.       /* result in the player's preferred fruit [better than "\033"].    */
  384.       obj_descr[SLIME_MOLD].oc_name = "fruit";
  385.   #endif
  386. !     if(flags.female)  {    /* should have been set in NETHACKOPTIONS */
  387.           roles[2] = "Cavewoman";
  388.           roles[6] = "Priestess";
  389.       }
  390. --- 192,198 ----
  391.       /* result in the player's preferred fruit [better than "\033"].    */
  392.       obj_descr[SLIME_MOLD].oc_name = "fruit";
  393.   #endif
  394. !     if (flags.female)  {    /* should have been set in NETHACKOPTIONS */
  395.           roles[2] = "Cavewoman";
  396.           roles[6] = "Priestess";
  397.       }
  398. ***************
  399. *** 292,302 ****
  400.   badoption(opts)
  401.   const char *opts;
  402.   {
  403. !     if(!initial) {
  404. !         if(!strncmp(opts, "h", 1) || !strncmp(opts, "?", 1))
  405.           option_help();
  406.           else
  407. !         pline("Unknown option: %s.  Enter \"?g\" for help.", opts);
  408.           return;
  409.       }
  410.   # ifdef AMIGA
  411. --- 298,308 ----
  412.   badoption(opts)
  413.   const char *opts;
  414.   {
  415. !     if (!initial) {
  416. !         if (!strncmp(opts, "h", 1) || !strncmp(opts, "?", 1))
  417.           option_help();
  418.           else
  419. !         pline("Bad syntax: %s.  Enter \"?g\" for help.", opts);
  420.           return;
  421.       }
  422.   # ifdef AMIGA
  423. ***************
  424. *** 313,329 ****
  425.   }
  426.   
  427.   static char *
  428. ! string_for_env_opt(optname, opts)
  429. ! const char *optname;
  430.   char *opts;
  431.   {
  432.       register char *colon;
  433.   
  434. !     if(!initial) {
  435. !         rejectoption(optname);
  436. !         return NULL;
  437. !     }
  438. !     colon = index(opts,':');
  439.       if(!colon) {
  440.           badoption(opts);
  441.           return NULL;
  442. --- 319,330 ----
  443.   }
  444.   
  445.   static char *
  446. ! string_for_opt(opts)
  447.   char *opts;
  448.   {
  449.       register char *colon;
  450.   
  451. !     colon = index(opts, ':');
  452.       if(!colon) {
  453.           badoption(opts);
  454.           return NULL;
  455. ***************
  456. *** 331,351 ****
  457.       return ++colon;
  458.   }
  459.   
  460.   /*
  461.    * Change the inventory order, using the given string as the new order.
  462.    * Missing characters in the new order are filled in at the end from
  463.    * the current inv_order.
  464.    *
  465. !  * This routine always returns 1 unless the parameter 'fail' is true
  466. !  * and there is a duplicate or bad char in the string.
  467.    */
  468.   static int
  469. ! change_inv_order(op, fail)
  470. !     char *op;
  471. !     int  fail;    /* If TRUE, return 0 if any duplicates or bad chars. */
  472.   {
  473.       int oc_sym, num;
  474. !     char *sp, *tmp, buf[BUFSZ];
  475.   
  476.       for (sp = op; *sp; sp++) {
  477.       oc_sym = def_char_to_objclass(*sp);
  478. --- 332,363 ----
  479.       return ++colon;
  480.   }
  481.   
  482. + static char *
  483. + string_for_env_opt(optname, opts)
  484. + const char *optname;
  485. + char *opts;
  486. + {
  487. +     if(!initial) {
  488. +         rejectoption(optname);
  489. +         return NULL;
  490. +     }
  491. +     return string_for_opt(opts);
  492. + }
  493.   /*
  494.    * Change the inventory order, using the given string as the new order.
  495.    * Missing characters in the new order are filled in at the end from
  496.    * the current inv_order.
  497.    *
  498. !  * This routine returns 1 unless there is a duplicate or bad char in
  499. !  * the string.
  500.    */
  501.   static int
  502. ! change_inv_order(op)
  503. ! char *op;
  504.   {
  505.       int oc_sym, num;
  506. !     char *sp, buf[BUFSZ];
  507.   
  508.       for (sp = op; *sp; sp++) {
  509.       oc_sym = def_char_to_objclass(*sp);
  510. ***************
  511. *** 352,365 ****
  512.   
  513.       /* Remove bad or duplicate entries. */
  514.       if (oc_sym == MAXOCLASSES ||
  515. !         (!index(inv_order, oc_sym)) || (index(sp+1, *sp))) {
  516.   
  517. !         if (fail) return 0;
  518. !         for(tmp = sp; *tmp; tmp++)
  519. !         tmp[0] = tmp[1];
  520. !         sp--;
  521. !     } else
  522. !         *sp = (char) oc_sym;
  523.       } 
  524.       Strcpy(buf, op);
  525.       for (sp = inv_order, num = strlen(buf); *sp; sp++)
  526. --- 364,374 ----
  527.   
  528.       /* Remove bad or duplicate entries. */
  529.       if (oc_sym == MAXOCLASSES ||
  530. !         (!index(inv_order, oc_sym)) || (index(sp+1, *sp)))
  531.   
  532. !         return 0;
  533. !     *sp = (char) oc_sym;
  534.       } 
  535.       Strcpy(buf, op);
  536.       for (sp = inv_order, num = strlen(buf); *sp; sp++)
  537. ***************
  538. *** 393,489 ****
  539.       op = eos(opts);
  540.       while (--op >= opts && isspace(*op)) *op = '\0';
  541.   
  542. !     if(!*opts) return;
  543.       negated = FALSE;
  544. !     while((*opts == '!') || !strncmpi(opts, "no", 2)) {
  545. !         if(*opts == '!') opts++; else opts += 2;
  546.           negated = !negated;
  547.       }
  548.       
  549. ! #if defined(MICRO) && !defined(AMIGA)
  550. !     /* included for compatibility with old NetHack.cnf files */
  551. !     if (!strncmp(opts, "IBM_", 4)) {
  552. !         flags.BIOS = !negated;
  553. !         return;
  554. !     }
  555.   
  556. !     /* put here cause it has to come from the config file */
  557. !     if (!strncmpi(opts, "raw", 3)) {
  558. !         if (initial)
  559. !             flags.rawio = !negated;
  560. !         else
  561. !             rejectoption("rawio");
  562. !         return;
  563. !     }
  564. ! #endif /* MICRO */
  565. ! #if defined(TOS) && defined(TEXTCOLOR)
  566. !     if (!strncmpi(opts, "col", 3)) {
  567. !         flags.use_color = !negated;
  568. !         if (flags.BIOS && !initial) {
  569. !             if (colors_changed)
  570. !                 restore_colors();
  571. !             else
  572. !                 set_colors();
  573. !         }
  574. !     }
  575. ! #endif
  576. !     /* other special-case boolean options */
  577. ! #ifdef TERMLIB
  578. !     if (!strncmpi(opts, "DEC", 3)) {
  579. ! #ifdef REINCARNATION
  580. !         if (!initial && Is_rogue_level(&u.uz))
  581. !             assign_rogue_graphics(FALSE);
  582. ! #endif
  583. !         flags.DECgraphics = !negated;
  584. !         need_redraw = TRUE;
  585. !         switch_graphics(flags.DECgraphics ?
  586. !                 DEC_GRAPHICS : ASCII_GRAPHICS);
  587. ! #ifdef REINCARNATION
  588. !         if (!initial && Is_rogue_level(&u.uz))
  589. !             assign_rogue_graphics(TRUE);
  590. ! #endif
  591. !         return;
  592. !     }
  593. ! #endif /* TERMLIB */
  594. ! #ifdef ASCIIGRAPH
  595. !     if (!strncmpi(opts, "IBMg", 4)) {
  596. ! #ifdef REINCARNATION
  597. !         if (!initial && Is_rogue_level(&u.uz))
  598. !             assign_rogue_graphics(FALSE);
  599. ! #endif
  600. !         flags.IBMgraphics = !negated;
  601. !         need_redraw = TRUE;
  602. !         switch_graphics(flags.IBMgraphics ?
  603. !                 IBM_GRAPHICS : ASCII_GRAPHICS);
  604. ! #ifdef REINCARNATION
  605. !         if (!initial && Is_rogue_level(&u.uz))
  606. !             assign_rogue_graphics(TRUE);
  607. ! #endif
  608. !         return;
  609. !     }
  610. ! #endif /* ASCIIGRAPH */
  611. ! #ifdef MAC_GRAPHICS_ENV
  612. !     if (!strncmpi(opts, "MACg", 4)) {
  613. ! #ifdef REINCARNATION
  614. !         if (!initial && Is_rogue_level(&u.uz))
  615. !             assign_rogue_graphics(FALSE);
  616. ! #endif
  617. !         flags.MACgraphics = !negated;
  618. !         need_redraw = TRUE;
  619. !         switch_graphics(flags.MACgraphics ?
  620. !                 MAC_GRAPHICS : ASCII_GRAPHICS);
  621. ! #ifdef REINCARNATION
  622. !         if (!initial && Is_rogue_level(&u.uz))
  623. !             assign_rogue_graphics(TRUE);
  624. ! #endif
  625. !         return;
  626. !     }
  627. ! #endif /* MAC_GRAPHICS_ENV */
  628. !     /* common boolean options */
  629. !     if (!strncmpi(opts, "fem", 3)) {
  630.           if(!initial && flags.female == negated)
  631.               pline("That is not anatomically possible.");
  632.           else
  633. --- 402,417 ----
  634.       op = eos(opts);
  635.       while (--op >= opts && isspace(*op)) *op = '\0';
  636.   
  637. !     if (!*opts) return;
  638.       negated = FALSE;
  639. !     while ((*opts == '!') || !strncmpi(opts, "no", 2)) {
  640. !         if (*opts == '!') opts++; else opts += 2;
  641.           negated = !negated;
  642.       }
  643.       
  644. !     /* special boolean options */
  645.   
  646. !     if (!strncmpi(opts, "female", 3)) {
  647.           if(!initial && flags.female == negated)
  648.               pline("That is not anatomically possible.");
  649.           else
  650. ***************
  651. *** 491,502 ****
  652.           return;
  653.       }
  654.   
  655. -     if (!strncmpi(opts, "fix", 3)) {
  656. -         flags.invlet_constant = !negated;
  657. -         if (!initial && flags.invlet_constant) reassign();
  658. -         return;
  659. -     }
  660.       if (!strncmpi(opts, "male", 4)) {
  661.           if(!initial && flags.female != negated)
  662.               pline("That is not anatomically possible.");
  663. --- 419,424 ----
  664. ***************
  665. *** 505,544 ****
  666.           return;
  667.       }
  668.   
  669. !     if (!strncmpi(opts, "num", 3)) {
  670. !         flags.num_pad = !negated;
  671. !         if (!initial) number_pad(flags.num_pad ? 1 : 0);
  672.           return;
  673.       }
  674. ! #ifdef EXP_ON_BOTL
  675. !     if (!strncmpi(opts, "showexp", 7)) {
  676. !         flags.showexp = !negated;
  677. !         flags.botl = 1;
  678. !         return;
  679. !     }
  680. ! #endif
  681. ! #ifdef SCORE_ON_BOTL
  682. !     if (!strncmpi(opts, "showscore", 9)) {
  683. !         flags.showscore = !negated;
  684. !         flags.botl = 1;
  685. !         return;
  686. !     }
  687. ! #endif
  688. !     if (!strncmpi(opts, "time", 4)) {
  689. !         flags.time = !negated;
  690. !         flags.botl = 1;
  691. !         return;
  692. !     }
  693.   
  694. -     if (!strncmpi(opts, "legacy", 6)) {
  695. -             if(!initial) rejectoption("legacy");
  696. -         else flags.legacy = !negated;
  697. -         return;
  698. -     }
  699.       /* compound options */
  700.   
  701. !     if (!strncmpi(opts, "pet", 3)) {
  702.           if ((op = string_for_env_opt("pettype", opts)) != 0)
  703.               switch (*op) {
  704.               case 'd':    /* dog */
  705. --- 427,443 ----
  706.           return;
  707.       }
  708.   
  709. ! #if defined(MICRO) && !defined(AMIGA)
  710. !     /* included for compatibility with old NetHack.cnf files */
  711. !     if (!strncmp(opts, "IBM_", 4)) {
  712. !         flags.BIOS = !negated;
  713.           return;
  714.       }
  715. ! #endif /* MICRO */
  716.   
  717.       /* compound options */
  718.   
  719. !     if (!strncmpi(opts, "pettype", 3)) {
  720.           if ((op = string_for_env_opt("pettype", opts)) != 0)
  721.               switch (*op) {
  722.               case 'd':    /* dog */
  723. ***************
  724. *** 552,576 ****
  725.                   preferred_pet = 'c';
  726.                   break;
  727.               default:
  728. !                 pline("Unrecognized pettype '%s'", op);
  729.                   break;
  730.               }
  731.           return;
  732.       }
  733.   
  734. !     if (!strncmpi(opts, "cat", 3)) {
  735.           if ((op = string_for_env_opt("catname", opts)) != 0)
  736.               nmcpy(catname, op, 62);
  737.           return;
  738.       }
  739.   
  740. !     if (!strncmpi(opts, "dog", 3)) {
  741.           if ((op = string_for_env_opt("dogname", opts)) != 0)
  742.               nmcpy(dogname, op, 62);
  743.           return;
  744.       }
  745.   
  746. !     if (!strncmpi(opts, "msg", 3)) {
  747.           if ((op = string_for_env_opt("msghistory", opts)) != 0) {
  748.               flags.msg_history = atoi(op);
  749.           }
  750. --- 451,475 ----
  751.                   preferred_pet = 'c';
  752.                   break;
  753.               default:
  754. !                 pline("Unrecognized pet type '%s'", op);
  755.                   break;
  756.               }
  757.           return;
  758.       }
  759.   
  760. !     if (!strncmpi(opts, "catname", 3)) {
  761.           if ((op = string_for_env_opt("catname", opts)) != 0)
  762.               nmcpy(catname, op, 62);
  763.           return;
  764.       }
  765.   
  766. !     if (!strncmpi(opts, "dogname", 3)) {
  767.           if ((op = string_for_env_opt("dogname", opts)) != 0)
  768.               nmcpy(dogname, op, 62);
  769.           return;
  770.       }
  771.   
  772. !     if (!strncmpi(opts, "msghistory", 3)) {
  773.           if ((op = string_for_env_opt("msghistory", opts)) != 0) {
  774.               flags.msg_history = atoi(op);
  775.           }
  776. ***************
  777. *** 577,598 ****
  778.           return;
  779.       }
  780.   #ifdef TUTTI_FRUTTI
  781. !     if (!strncmpi(opts, "fr", 2)) {
  782. !         op = index(opts, ':');
  783. !         if (!op) {
  784. !             badoption(opts);
  785. !             return;
  786. !         }
  787. !         op++;
  788.           if (!initial) {
  789.               struct fruit *f;
  790. -             int numfruits = 0;
  791.   
  792.               for(f=ffruit; f; f=f->nextf) {
  793.               if (!strcmp(op, f->fname)) goto goodfruit;
  794. !             numfruits++;
  795.               }
  796. !             if (numfruits >= 100) {
  797.               pline("Doing that so many times isn't very fruitful.");
  798.               return;
  799.               }
  800. --- 476,492 ----
  801.           return;
  802.       }
  803.   #ifdef TUTTI_FRUTTI
  804. !     if (!strncmpi(opts, "fruit", 2)) {
  805. !         if (!(op = string_for_opt(opts))) return;
  806.           if (!initial) {
  807.               struct fruit *f;
  808.   
  809. +             num = 0;
  810.               for(f=ffruit; f; f=f->nextf) {
  811.               if (!strcmp(op, f->fname)) goto goodfruit;
  812. !             num++;
  813.               }
  814. !             if (num >= 100) {
  815.               pline("Doing that so many times isn't very fruitful.");
  816.               return;
  817.               }
  818. ***************
  819. *** 612,637 ****
  820.       }
  821.   #endif
  822.       /* graphics:string */
  823. !     if (!strncmpi(opts, "gr", 2)) {
  824.           uchar translate[MAXPCHARS+1];
  825. !         int lth;
  826.   
  827.           if (!(opts = string_for_env_opt("graphics", opts)))
  828.               return;
  829.           escapes(opts, opts);
  830.   
  831. !         lth = strlen(opts);
  832. !         if (lth > MAXPCHARS) lth = MAXPCHARS;
  833.           /* match the form obtained from PC configuration files */
  834. !         for (i = 0; i < lth; i++)
  835.               translate[i] = (uchar) opts[i];
  836. !         assign_graphics(translate, lth);
  837.           return;
  838.       }
  839.   
  840.       /* objects:string */
  841.       if (!strncmpi(opts, "objects", 7)) {
  842. !         int k, length;
  843.   
  844.           if (!(opts = string_for_env_opt("objects", opts)))
  845.               return;
  846. --- 506,531 ----
  847.       }
  848.   #endif
  849.       /* graphics:string */
  850. !     if (!strncmpi(opts, "graphics", 2)) {
  851.           uchar translate[MAXPCHARS+1];
  852. !         int length;
  853.   
  854.           if (!(opts = string_for_env_opt("graphics", opts)))
  855.               return;
  856.           escapes(opts, opts);
  857.   
  858. !         length = strlen(opts);
  859. !         if (length > MAXPCHARS) length = MAXPCHARS;
  860.           /* match the form obtained from PC configuration files */
  861. !         for (i = 0; i < length; i++)
  862.               translate[i] = (uchar) opts[i];
  863. !         assign_graphics(translate, length);
  864.           return;
  865.       }
  866.   
  867.       /* objects:string */
  868.       if (!strncmpi(opts, "objects", 7)) {
  869. !         int length;
  870.   
  871.           if (!(opts = string_for_env_opt("objects", opts)))
  872.               return;
  873. ***************
  874. *** 650,663 ****
  875.           if (length >= MAXOCLASSES)
  876.               length = MAXOCLASSES-1;    /* don't count RANDOM_OBJECT */
  877.   
  878. !         for (k = 0; k < length; k++)
  879. !             oc_syms[k+1] = (uchar) opts[k];
  880.           return;
  881.       }
  882.   
  883.       /* monsters:string */
  884.       if (!strncmpi(opts, "monsters", 8)) {
  885. !         int k, length;
  886.   
  887.           if (!(opts = string_for_env_opt("monsters", opts)))
  888.               return;
  889. --- 544,557 ----
  890.           if (length >= MAXOCLASSES)
  891.               length = MAXOCLASSES-1;    /* don't count RANDOM_OBJECT */
  892.   
  893. !         for (i = 0; i < length; i++)
  894. !             oc_syms[i+1] = (uchar) opts[i];
  895.           return;
  896.       }
  897.   
  898.       /* monsters:string */
  899.       if (!strncmpi(opts, "monsters", 8)) {
  900. !         int length;
  901.   
  902.           if (!(opts = string_for_env_opt("monsters", opts)))
  903.               return;
  904. ***************
  905. *** 668,675 ****
  906.           if (length >= MAXMCLASSES)
  907.               length = MAXMCLASSES-1;    /* mon class 0 unused */
  908.   
  909. !         for (k = 0; k < length; k++)
  910. !             monsyms[k+1] = (uchar) opts[k];
  911.           return;
  912.       }
  913.   
  914. --- 562,569 ----
  915.           if (length >= MAXMCLASSES)
  916.               length = MAXMCLASSES-1;    /* mon class 0 unused */
  917.   
  918. !         for (i = 0; i < length; i++)
  919. !             monsyms[i+1] = (uchar) opts[i];
  920.           return;
  921.       }
  922.   
  923. ***************
  924. *** 681,697 ****
  925.       }
  926.   
  927.       /* the order to list the pack */
  928. !     if (!strncmpi(opts, "pack", 4)) {
  929. !         op = index(opts,':');
  930. !         if(!op) {
  931. !             badoption(opts);
  932. !             return;
  933. !         }
  934. !         op++;            /* skip : */
  935.   
  936. !         if (!change_inv_order(op, 1))
  937. !                 set_order = TRUE;
  938. !         else
  939.                   badoption(opts);
  940.           return;
  941.       }
  942. --- 575,584 ----
  943.       }
  944.   
  945.       /* the order to list the pack */
  946. !     if (!strncmpi(opts, "packorder", 4)) {
  947. !         if (!(op = string_for_opt(opts))) return;
  948.   
  949. !         if (!change_inv_order(op))
  950.                   badoption(opts);
  951.           return;
  952.       }
  953. ***************
  954. *** 698,710 ****
  955.   
  956.       /* scores:5t[op] 5a[round] o[wn] */
  957.       if (!strncmpi(opts, "scores", 6)) {
  958. !         op = index(opts,':');
  959. !         if(!op) {
  960. !             badoption(opts);
  961. !             return;
  962. !         }
  963. !         op++;
  964. !         while(*op) {
  965.               num = 1;
  966.               if(digit(*op)) {
  967.                   num = atoi(op);
  968. --- 585,593 ----
  969.   
  970.       /* scores:5t[op] 5a[round] o[wn] */
  971.       if (!strncmpi(opts, "scores", 6)) {
  972. !         if (!(op = string_for_opt(opts))) return;
  973. !         while (*op) {
  974.               num = 1;
  975.               if(digit(*op)) {
  976.                   num = atoi(op);
  977. ***************
  978. *** 737,743 ****
  979.           }
  980.           return;
  981.       }
  982. !     if (!strncmpi(opts, "win", 3)) {
  983.           if ((op = string_for_env_opt("windowtype", opts)) != 0) {
  984.           char buf[16];
  985.           nmcpy(buf, op, 15);
  986. --- 620,627 ----
  987.           }
  988.           return;
  989.       }
  990. !     if (!strncmpi(opts, "windowtype", 3)) {
  991.           if ((op = string_for_env_opt("windowtype", opts)) != 0) {
  992.           char buf[16];
  993.           nmcpy(buf, op, 15);
  994. ***************
  995. *** 750,765 ****
  996.        * options list
  997.        */
  998.       for (i = 0; boolopt[i].name; i++) {
  999. !         if (boolopt[i].addr && !strncmpi(boolopt[i].name, opts, 3)) {
  1000.               *(boolopt[i].addr) = !negated;
  1001. - #ifdef TEXTCOLOR
  1002. -             if((boolopt[i].addr) == &flags.use_color)
  1003. -                 need_redraw = TRUE;
  1004.   
  1005. !             if((boolopt[i].addr) == &flags.hilite_pet)
  1006.                   need_redraw = TRUE;
  1007.   #endif
  1008. !             if (!initial && boolopt[i].addr==&flags.lit_corridor) {
  1009.                   /*
  1010.                    * All corridor squares seen via night vision or
  1011.                    * candles & lamps change.  Update them by calling
  1012. --- 634,714 ----
  1013.        * options list
  1014.        */
  1015.       for (i = 0; boolopt[i].name; i++) {
  1016. !         if (boolopt[i].addr && strlen(opts) >= 3 &&
  1017. !             !strncmpi(boolopt[i].name, opts, strlen(opts))) {
  1018. !                 /* options that must come from config file */
  1019. !             if (!initial &&
  1020. !                 ((boolopt[i].addr) == &flags.legacy
  1021. ! #if defined(MICRO) && !defined(AMIGA)
  1022. !               || (boolopt[i].addr) == &flags.rawio
  1023. ! #endif
  1024. !                  )) {
  1025. !                 rejectoption(boolopt[i].name);
  1026. !                 return;
  1027. !             }
  1028.               *(boolopt[i].addr) = !negated;
  1029.   
  1030. ! #if defined(TERMLIB) || defined(ASCIIGRAPH) || defined(MAC_GRAPHICS_ENV)
  1031. !             if (FALSE
  1032. ! # ifdef TERMLIB
  1033. !                  || (boolopt[i].addr) == &flags.DECgraphics
  1034. ! # endif
  1035. ! # ifdef ASCIIGRAPH
  1036. !                  || (boolopt[i].addr) == &flags.IBMgraphics
  1037. ! # endif
  1038. ! # ifdef MAC_GRAPHICS_ENV
  1039. !                  || (boolopt[i].addr) == &flags.MACgraphics
  1040. ! # endif
  1041. !                 ) {
  1042. ! # ifdef REINCARNATION
  1043. !                 if (!initial && Is_rogue_level(&u.uz))
  1044. !                 assign_rogue_graphics(FALSE);
  1045. ! # endif
  1046.                   need_redraw = TRUE;
  1047. + # ifdef TERMLIB
  1048. +                 if ((boolopt[i].addr) == &flags.DECgraphics)
  1049. +                 switch_graphics(flags.DECgraphics ?
  1050. +                         DEC_GRAPHICS : ASCII_GRAPHICS);
  1051. + # endif
  1052. + # ifdef ASCIIGRAPH
  1053. +                 if ((boolopt[i].addr) == &flags.IBMgraphics)
  1054. +                 switch_graphics(flags.IBMgraphics ?
  1055. +                         IBM_GRAPHICS : ASCII_GRAPHICS);
  1056. + # endif
  1057. + # ifdef MAC_GRAPHICS_ENV
  1058. +                 if ((boolopt[i].addr) == &flags.MACgraphics)
  1059. +                 switch_graphics(flags.MACgraphics ?
  1060. +                         MAC_GRAPHICS : ASCII_GRAPHICS);
  1061. + # endif
  1062. + # ifdef REINCARNATION
  1063. +                 if (!initial && Is_rogue_level(&u.uz))
  1064. +                 assign_rogue_graphics(TRUE);
  1065. + # endif
  1066. +             }
  1067. + #endif /* TERMLIB || ASCIIGRAPH || MAC_GRAPHICS_ENV */
  1068. +             /* only do processing below if setting with doset() */
  1069. +             if (initial) return;
  1070. +             if ((boolopt[i].addr) == &flags.time
  1071. + #ifdef EXP_ON_BOTL
  1072. +              || (boolopt[i].addr) == &flags.showexp
  1073.   #endif
  1074. ! #ifdef SCORE_ON_BOTL
  1075. !              || (boolopt[i].addr) == &flags.showscore
  1076. ! #endif
  1077. !                 )
  1078. !                 flags.botl = TRUE;
  1079. !             else if ((boolopt[i].addr) == &flags.invlet_constant) {
  1080. !                 if (flags.invlet_constant) reassign();
  1081. !             }
  1082. !             else if ((boolopt[i].addr) == &flags.num_pad)
  1083. !                 number_pad(flags.num_pad ? 1 : 0);
  1084. !             else if ((boolopt[i].addr) == &flags.lit_corridor) {
  1085.                   /*
  1086.                    * All corridor squares seen via night vision or
  1087.                    * candles & lamps change.  Update them by calling
  1088. ***************
  1089. *** 770,775 ****
  1090. --- 719,741 ----
  1091.                   vision_recalc(2);        /* shut down vision */
  1092.                   vision_full_recalc = 1;    /* delayed recalc */
  1093.               }
  1094. + #ifdef TEXTCOLOR
  1095. +             else if ((boolopt[i].addr) == &flags.use_color
  1096. +                   || (boolopt[i].addr) == &flags.hilite_pet) {
  1097. +                 need_redraw = TRUE;
  1098. + # ifdef TOS
  1099. +                 if ((boolopt[i].addr) == &flags.use_color
  1100. +                 && flags.BIOS) {
  1101. +                 if (colors_changed)
  1102. +                     restore_colors();
  1103. +                 else
  1104. +                     set_colors();
  1105. +                 }
  1106. + # endif
  1107. +             }
  1108. + #endif
  1109.               return;
  1110.           }
  1111.       }
  1112. ***************
  1113. *** 869,875 ****
  1114.       case 's':
  1115.           clear_nhwindow(WIN_MESSAGE);
  1116.           getlin("What options do you want to set?", buf);
  1117. -         clear_nhwindow(WIN_MESSAGE);
  1118.           if(buf[0] == '\033') return 0;
  1119.           need_redraw = FALSE;
  1120.           parseoptions(buf, FALSE, FALSE);
  1121. --- 835,840 ----
  1122. *** /tmp/da08454    Thu Feb 25 10:24:34 1993
  1123. --- src/pager.c    Mon Feb  8 14:31:40 1993
  1124. ***************
  1125. *** 1,4 ****
  1126. ! /*    SCCS Id: @(#)pager.c    3.1    92/09/01          */
  1127.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1128.   /* NetHack may be freely redistributed.  See license for details. */
  1129.   
  1130. --- 1,4 ----
  1131. ! /*    SCCS Id: @(#)pager.c    3.1    93/02/04    */
  1132.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1133.   /* NetHack may be freely redistributed.  See license for details. */
  1134.   
  1135. ***************
  1136. *** 93,103 ****
  1137.               (hp ? "high priest" : l_monnam(mtmp)),
  1138.               u.ustuck == mtmp ?
  1139.   #ifdef POLYSELF
  1140. !             (u.mtimedone ? ", being held" :
  1141.   #endif
  1142. !             ", holding you"
  1143.   #ifdef POLYSELF
  1144. !             )
  1145.   #endif
  1146.               : "");
  1147.       }
  1148. --- 93,103 ----
  1149.               (hp ? "high priest" : l_monnam(mtmp)),
  1150.               u.ustuck == mtmp ?
  1151.   #ifdef POLYSELF
  1152. !             ((u.mtimedone && sticks(uasmon)) ? ", being held" :
  1153.   #endif
  1154. !              ", holding you"
  1155.   #ifdef POLYSELF
  1156. !              )
  1157.   #endif
  1158.               : "");
  1159.       }
  1160. ***************
  1161. *** 313,319 ****
  1162.       cc.y = u.uy;
  1163.       } else {
  1164.       getlin("Specify what? (type the word)", out_str);
  1165. !     if (out_str[0] == '\033')
  1166.           return 0;
  1167.   
  1168.       if (out_str[1]) {    /* user typed in a complete string */
  1169. --- 313,319 ----
  1170.       cc.y = u.uy;
  1171.       } else {
  1172.       getlin("Specify what? (type the word)", out_str);
  1173. !     if (out_str[0] == '\0' || out_str[0] == '\033')
  1174.           return 0;
  1175.   
  1176.       if (out_str[1]) {    /* user typed in a complete string */
  1177. *** /tmp/da08462    Thu Feb 25 10:24:36 1993
  1178. --- src/pickup.c    Wed Feb 17 09:51:58 1993
  1179. ***************
  1180. *** 1,4 ****
  1181. ! /*    SCCS Id: @(#)pickup.c    3.1    93/01/04    */
  1182.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1183.   /* NetHack may be freely redistributed.  See license for details. */
  1184.   
  1185. --- 1,4 ----
  1186. ! /*    SCCS Id: @(#)pickup.c    3.1    93/02/16    */
  1187.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1188.   /* NetHack may be freely redistributed.  See license for details. */
  1189.   
  1190. ***************
  1191. *** 138,147 ****
  1192.           Sprintf(qbuf,"What kinds of thing do you want to %s? [%s]",
  1193.               action, ilets);
  1194.           getlin(qbuf,inbuf);
  1195. !         if (*inbuf == '\033') {
  1196. !             clear_nhwindow(WIN_MESSAGE);
  1197. !             return FALSE;
  1198. !         }
  1199.           for (p = inbuf; (sym = *p++); ) {
  1200.               /* new A function (selective all) added by GAN 01/09/87 */
  1201.               if (sym == ' ') continue;
  1202. --- 138,145 ----
  1203.           Sprintf(qbuf,"What kinds of thing do you want to %s? [%s]",
  1204.               action, ilets);
  1205.           getlin(qbuf,inbuf);
  1206. !         if (*inbuf == '\033') return FALSE;
  1207.           for (p = inbuf; (sym = *p++); ) {
  1208.               /* new A function (selective all) added by GAN 01/09/87 */
  1209.               if (sym == ' ') continue;
  1210. ***************
  1211. *** 236,248 ****
  1212.           }
  1213.       }
  1214.   
  1215. - #ifdef POLYSELF
  1216. -     if (nolimbs(uasmon)) {
  1217. -         You("cannot pick things up without limbs.");
  1218. -         return;
  1219. -     }
  1220. - #endif
  1221.       /* added by GAN 10/24/86 to allow selective picking up */
  1222.       if (!all) {
  1223.           if (!query_classes(olets, &selective, &all_of_a_type,
  1224. --- 234,239 ----
  1225. ***************
  1226. *** 261,267 ****
  1227.   
  1228.               if (!all_of_a_type) {
  1229.               char qbuf[QBUFSZ];
  1230. !             Sprintf(qbuf,"Pick up %s?", doname(obj));
  1231.               switch ((obj->quan < 2L) ? ynaq(qbuf) : ynNaq(qbuf)) {
  1232.               case 'q': return;
  1233.               case 'n': continue;
  1234. --- 252,258 ----
  1235.   
  1236.               if (!all_of_a_type) {
  1237.               char qbuf[QBUFSZ];
  1238. !             Sprintf(qbuf, "Pick up %s?", doname(obj));
  1239.               switch ((obj->quan < 2L) ? ynaq(qbuf) : ynNaq(qbuf)) {
  1240.               case 'q': return;
  1241.               case 'n': continue;
  1242. ***************
  1243. *** 276,282 ****
  1244.               case '#':    /* count was entered */
  1245.                   if (!yn_number) continue; /* 0 count => No */
  1246.                   else count = yn_number;
  1247. !                 /* fall thru :-} */
  1248.               default:    /* 'y' */
  1249.                   break;
  1250.               }
  1251. --- 267,273 ----
  1252.               case '#':    /* count was entered */
  1253.                   if (!yn_number) continue; /* 0 count => No */
  1254.                   else count = yn_number;
  1255. !                 /* fall thru */
  1256.               default:    /* 'y' */
  1257.                   break;
  1258.               }
  1259. ***************
  1260. *** 384,390 ****
  1261.           exercise(A_WIS, FALSE);
  1262.           return FALSE;
  1263.           }
  1264.       } else  if (obj->otyp == SCR_SCARE_MONSTER) {
  1265.           if (obj->blessed) obj->blessed = 0;
  1266.           else if (!obj->spe && !obj->cursed) obj->spe = 1;
  1267. --- 375,380 ----
  1268. ***************
  1269. *** 454,464 ****
  1270.   lift_some:
  1271.       if (inv_cnt() >= 52) {
  1272.           if (objx) unsplitobj(obj, objx, 0L);
  1273. -         Your("knapsack cannot accommodate any more items.");
  1274.           if (obj->otyp == SCR_SCARE_MONSTER) obj->spe = 0;
  1275.           return TRUE;
  1276.       }
  1277.   
  1278.       pickquan = obj->quan;    /* save number picked up */
  1279.       obj = pick_obj(obj);
  1280.   
  1281. --- 444,472 ----
  1282.   lift_some:
  1283.       if (inv_cnt() >= 52) {
  1284.           if (objx) unsplitobj(obj, objx, 0L);
  1285.           if (obj->otyp == SCR_SCARE_MONSTER) obj->spe = 0;
  1286. +         Your("knapsack cannot accommodate any more items.");
  1287.           return TRUE;
  1288.       }
  1289.   
  1290. +     if (obj->otyp != LOADSTONE &&
  1291. +         (wt*2 / weight_cap()) + 1 > SLT_ENCUMBER) {
  1292. +         /* as in near_capacity() */
  1293. +         char qbuf[QBUFSZ];
  1294. +         char ch;
  1295. +         Sprintf(qbuf, "%s %s.  Continue?", nearloadmsg, doname(obj));
  1296. +         switch (ch = ynq(qbuf)) {
  1297. +             case 'n':
  1298. +             case 'q':
  1299. +                 if (objx) unsplitobj(obj, objx, 0L);
  1300. +                 if (obj->otyp == SCR_SCARE_MONSTER)
  1301. +                     obj->spe = 0;
  1302. +                 return (ch == 'q');
  1303. +             default:  break;    /* 'y' */
  1304. +         }
  1305. +     }
  1306.       pickquan = obj->quan;    /* save number picked up */
  1307.       obj = pick_obj(obj);
  1308.   
  1309. ***************
  1310. *** 465,473 ****
  1311.       if (!Blind) obj->dknown = 1;
  1312.       if (uwep && uwep == obj) mrg_to_wielded = TRUE;
  1313.       nearload = near_capacity();
  1314. !     prinv(nearload > SLT_ENCUMBER ? nearloadmsg :
  1315. !           nearload > UNENCUMBERED ? moderateloadmsg : NULL,
  1316. !           obj, pickquan);
  1317.       mrg_to_wielded = FALSE;
  1318.       return FALSE;
  1319.   }
  1320. --- 473,480 ----
  1321.       if (!Blind) obj->dknown = 1;
  1322.       if (uwep && uwep == obj) mrg_to_wielded = TRUE;
  1323.       nearload = near_capacity();
  1324. !     prinv(nearload > UNENCUMBERED && nearload < MOD_ENCUMBER ?
  1325. !           moderateloadmsg : NULL, obj, pickquan);
  1326.       mrg_to_wielded = FALSE;
  1327.       return FALSE;
  1328.   }
  1329. ***************
  1330. *** 612,618 ****
  1331.   
  1332.   /* A variable set in use_container(), to be used by the callback routines */
  1333.   /* chk_bg(), in_container(), and out_container() from askchain().      */
  1334. ! static struct obj NEARDATA *current_container;
  1335.   #define Icebox (current_container->otyp == ICE_BOX)
  1336.   
  1337.   STATIC_PTR int
  1338. --- 619,625 ----
  1339.   
  1340.   /* A variable set in use_container(), to be used by the callback routines */
  1341.   /* chk_bg(), in_container(), and out_container() from askchain().      */
  1342. ! static NEARDATA struct obj *current_container;
  1343.   #define Icebox (current_container->otyp == ICE_BOX)
  1344.   
  1345.   STATIC_PTR int
  1346. ***************
  1347. *** 806,811 ****
  1348. --- 813,820 ----
  1349.       if(!obj->unpaid && !carried(current_container) &&
  1350.            costly_spot(current_container->ox, current_container->oy)) {
  1351.   
  1352. +         obj->ox = current_container->ox;
  1353. +         obj->oy = current_container->oy;
  1354.           addtobill(obj, FALSE, FALSE, FALSE);
  1355.       }
  1356.   
  1357. ***************
  1358. *** 826,832 ****
  1359.   }
  1360.   
  1361.   /* for getobj: allow counts, allow all types, expect food */
  1362. ! static const char NEARDATA frozen_food[] =
  1363.       { ALLOW_COUNT, ALL_CLASSES, FOOD_CLASS, 0 };
  1364.   
  1365.   int
  1366. --- 835,841 ----
  1367.   }
  1368.   
  1369.   /* for getobj: allow counts, allow all types, expect food */
  1370. ! static NEARDATA const char frozen_food[] =
  1371.       { ALLOW_COUNT, ALL_CLASSES, FOOD_CLASS, 0 };
  1372.   
  1373.   int
  1374. *** /tmp/da08478    Thu Feb 25 10:24:41 1993
  1375. --- src/polyself.c    Tue Feb 23 20:56:32 1993
  1376. ***************
  1377. *** 244,250 ****
  1378.           if(flags.female) dochange = TRUE;
  1379.       } else if (is_female(&mons[mntmp])) {
  1380.           if(!flags.female) dochange = TRUE;
  1381. !     } else if (!is_neuter(&mons[mntmp])) {
  1382.           if(!rn2(10)) dochange = TRUE;
  1383.       }
  1384.       if (dochange) {
  1385. --- 244,250 ----
  1386.           if(flags.female) dochange = TRUE;
  1387.       } else if (is_female(&mons[mntmp])) {
  1388.           if(!flags.female) dochange = TRUE;
  1389. !     } else if (!is_neuter(&mons[mntmp]) && mntmp != u.ulycn) {
  1390.           if(!rn2(10)) dochange = TRUE;
  1391.       }
  1392.       if (dochange) {
  1393. ***************
  1394. *** 777,809 ****
  1395.        * plus the trailing null, after pluralizing (since sometimes a
  1396.        * buffer is made a fixed size and must be able to hold it)
  1397.        */
  1398. !     static const char NEARDATA *humanoid_parts[] = { "arm", "eye", "face", "finger",
  1399.           "fingertip", "foot", "hand", "handed", "head", "leg",
  1400.           "light headed", "neck", "spine", "toe" };
  1401.   #ifdef POLYSELF
  1402. !     static const char NEARDATA *jelly_parts[] = { "pseudopod", "dark spot", "front",
  1403.           "pseudopod extension", "pseudopod extremity",
  1404.           "pseudopod root", "grasp", "grasped", "cerebral area",
  1405.           "lower pseudopod", "viscous", "middle", "surface",
  1406.           "pseudopod extremity" },
  1407. !     NEARDATA *animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip",
  1408.           "rear claw", "foreclaw", "clawed", "head", "rear limb",
  1409.           "light headed", "neck", "spine", "rear claw tip" },
  1410. !     NEARDATA *horse_parts[] = { "forelimb", "eye", "face", "forehoof", "hoof tip",
  1411.           "rear hoof", "foreclaw", "hooved", "head", "rear limb",
  1412.           "light headed", "neck", "backbone", "rear hoof tip" },
  1413. !     NEARDATA *sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle",
  1414.           "tentacle tip", "lower appendage", "tentacle", "tentacled",
  1415.           "body", "lower tentacle", "rotational", "equator", "body",
  1416.           "lower tentacle tip" },
  1417. !     NEARDATA *fungus_parts[] = { "mycelium", "visual area", "front", "hypha",
  1418.           "hypha", "root", "strand", "stranded", "cap area",
  1419.           "rhizome", "sporulated", "stalk", "root", "rhizome tip" },
  1420. !     NEARDATA *vortex_parts[] = { "region", "eye", "front", "minor current",
  1421.           "minor current", "lower current", "swirl", "swirled",
  1422.           "central core", "lower current", "addled", "center",
  1423.           "currents", "edge" },
  1424. !     NEARDATA *snake_parts[] = { "vestigial limb", "eye", "face", "large scale",
  1425.           "large scale tip", "rear region", "scale gap", "scale gapped",
  1426.           "head", "rear region", "light headed", "neck", "length",
  1427.           "rear scale" };
  1428. --- 777,809 ----
  1429.        * plus the trailing null, after pluralizing (since sometimes a
  1430.        * buffer is made a fixed size and must be able to hold it)
  1431.        */
  1432. !     static NEARDATA const char *humanoid_parts[] = { "arm", "eye", "face", "finger",
  1433.           "fingertip", "foot", "hand", "handed", "head", "leg",
  1434.           "light headed", "neck", "spine", "toe" };
  1435.   #ifdef POLYSELF
  1436. !     static NEARDATA const char *jelly_parts[] = { "pseudopod", "dark spot", "front",
  1437.           "pseudopod extension", "pseudopod extremity",
  1438.           "pseudopod root", "grasp", "grasped", "cerebral area",
  1439.           "lower pseudopod", "viscous", "middle", "surface",
  1440.           "pseudopod extremity" },
  1441. !     *animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip",
  1442.           "rear claw", "foreclaw", "clawed", "head", "rear limb",
  1443.           "light headed", "neck", "spine", "rear claw tip" },
  1444. !     *horse_parts[] = { "forelimb", "eye", "face", "forehoof", "hoof tip",
  1445.           "rear hoof", "foreclaw", "hooved", "head", "rear limb",
  1446.           "light headed", "neck", "backbone", "rear hoof tip" },
  1447. !     *sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle",
  1448.           "tentacle tip", "lower appendage", "tentacle", "tentacled",
  1449.           "body", "lower tentacle", "rotational", "equator", "body",
  1450.           "lower tentacle tip" },
  1451. !     *fungus_parts[] = { "mycelium", "visual area", "front", "hypha",
  1452.           "hypha", "root", "strand", "stranded", "cap area",
  1453.           "rhizome", "sporulated", "stalk", "root", "rhizome tip" },
  1454. !     *vortex_parts[] = { "region", "eye", "front", "minor current",
  1455.           "minor current", "lower current", "swirl", "swirled",
  1456.           "central core", "lower current", "addled", "center",
  1457.           "currents", "edge" },
  1458. !     *snake_parts[] = { "vestigial limb", "eye", "face", "large scale",
  1459.           "large scale tip", "rear region", "scale gap", "scale gapped",
  1460.           "head", "rear region", "light headed", "neck", "length",
  1461.           "rear scale" };
  1462. *** /tmp/da08486    Thu Feb 25 10:24:43 1993
  1463. --- src/potion.c    Thu Feb 11 13:27:58 1993
  1464. ***************
  1465. *** 1,4 ****
  1466. ! /*    SCCS Id: @(#)potion.c    3.1    92/12/10          */
  1467.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1468.   /* NetHack may be freely redistributed.  See license for details. */
  1469.   
  1470. --- 1,4 ----
  1471. ! /*    SCCS Id: @(#)potion.c    3.1    93/02/06          */
  1472.   /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1473.   /* NetHack may be freely redistributed.  See license for details. */
  1474.   
  1475. ***************
  1476. *** 8,14 ****
  1477.   static void NDECL(ghost_from_bottle);
  1478.   static boolean FDECL(neutralizes, (struct obj *,struct obj *));
  1479.   
  1480. ! static int NEARDATA nothing, NEARDATA unkn;
  1481.   #endif /* OVLB */
  1482.   
  1483.   extern boolean notonhead;    /* for long worms */
  1484. --- 8,14 ----
  1485.   static void NDECL(ghost_from_bottle);
  1486.   static boolean FDECL(neutralizes, (struct obj *,struct obj *));
  1487.   
  1488. ! static NEARDATA int nothing, unkn;
  1489.   #endif /* OVLB */
  1490.   
  1491.   extern boolean notonhead;    /* for long worms */
  1492. ***************
  1493. *** 18,24 ****
  1494.   
  1495.   #ifdef OVLB
  1496.   
  1497. ! static const char NEARDATA beverages[] = { POTION_CLASS, 0 };
  1498.   
  1499.   void
  1500.   make_confused(xtime,talk)
  1501. --- 18,24 ----
  1502.   
  1503.   #ifdef OVLB
  1504.   
  1505. ! static NEARDATA const char beverages[] = { POTION_CLASS, 0 };
  1506.   
  1507.   void
  1508.   make_confused(xtime,talk)
  1509. ***************
  1510. *** 310,317 ****
  1511.       case POT_WATER:
  1512.           if(!otmp->blessed && !otmp->cursed) {
  1513.               pline("This tastes like %swater.",
  1514. !                   otmp->spe == -1 ? "impure " : "");
  1515. !             lesshungry(rnd(otmp->spe == -1 ? 3 : 10));
  1516.               break;
  1517.           }
  1518.           unkn++;
  1519. --- 310,317 ----
  1520.       case POT_WATER:
  1521.           if(!otmp->blessed && !otmp->cursed) {
  1522.               pline("This tastes like %swater.",
  1523. !                   otmp->odiluted ? "impure " : "");
  1524. !             lesshungry(rnd(otmp->odiluted ? 3 : 10));
  1525.               break;
  1526.           }
  1527.           unkn++;
  1528. ***************
  1529. *** 365,375 ****
  1530.           break;
  1531.       case POT_BOOZE:
  1532.           unkn++;
  1533. !         pline("Ooph!  This tastes like %s!",
  1534.                 Hallucination ? "furniture polish" : "liquid fire");
  1535.           if (!otmp->blessed) make_confused(HConfusion + d(3,8),FALSE);
  1536.           /* the whiskey makes us feel better */
  1537. !         if(u.uhp < u.uhpmax) losehp(-1, "", 0); /* can't kill you */
  1538.           lesshungry(10 * (2 + bcsign(otmp)));
  1539.           exercise(A_WIS, FALSE);
  1540.           if(otmp->cursed) {
  1541. --- 365,377 ----
  1542.           break;
  1543.       case POT_BOOZE:
  1544.           unkn++;
  1545. !         pline("Ooph!  This tastes like %s%s!",
  1546. !               otmp->odiluted ? "watered down " : "",
  1547.                 Hallucination ? "furniture polish" : "liquid fire");
  1548.           if (!otmp->blessed) make_confused(HConfusion + d(3,8),FALSE);
  1549.           /* the whiskey makes us feel better */
  1550. !         if (u.uhp < u.uhpmax && !otmp->odiluted)
  1551. !             losehp(-1, "", 0); /* can't kill you */
  1552.           lesshungry(10 * (2 + bcsign(otmp)));
  1553.           exercise(A_WIS, FALSE);
  1554.           if(otmp->cursed) {
  1555. ***************
  1556. *** 429,442 ****
  1557.           else pline (Hallucination ?
  1558.   #ifdef TUTTI_FRUTTI
  1559.              "This tastes like 10%% real %s juice all-natural beverage." :
  1560. !            "This tastes like %s juice.", pl_fruit
  1561.   #else
  1562.              "This tastes like 10%% real fruit juice all-natural beverage." :
  1563. !            "This tastes like fruit juice."
  1564.   #endif
  1565.                   );
  1566.           if (otmp->otyp == POT_FRUIT_JUICE) {
  1567. !             lesshungry(10 * (2 + bcsign(otmp)));
  1568.               break;
  1569.           }
  1570.           if (!otmp->cursed) {
  1571. --- 431,446 ----
  1572.           else pline (Hallucination ?
  1573.   #ifdef TUTTI_FRUTTI
  1574.              "This tastes like 10%% real %s juice all-natural beverage." :
  1575. !            "This tastes like %s%s juice.",
  1576. !            otmp->odiluted ? "reconstituted " : "", pl_fruit
  1577.   #else
  1578.              "This tastes like 10%% real fruit juice all-natural beverage." :
  1579. !            "This tastes like %sfruit juice.",
  1580. !            otmp->odiluted ? "reconstituted " : ""
  1581.   #endif
  1582.                   );
  1583.           if (otmp->otyp == POT_FRUIT_JUICE) {
  1584. !             lesshungry((otmp->odiluted ? 5 : 10) * (2 + bcsign(otmp)));
  1585.               break;
  1586.           }
  1587.           if (!otmp->cursed) {
  1588. ***************
  1589. *** 985,995 ****
  1590.           case POTION_CLASS:
  1591.           if (obj->otyp == POT_WATER) return FALSE;
  1592.           Your("%s.", aobjnam(obj,"dilute"));
  1593. !         if (obj->spe == -1) {
  1594. !             obj->spe = 0;
  1595.               obj->blessed = obj->cursed = FALSE;
  1596.               obj->otyp = POT_WATER;
  1597. !         } else obj->spe--;
  1598.           return TRUE;
  1599.           case SCROLL_CLASS:
  1600.           if (obj->otyp != SCR_BLANK_PAPER
  1601. --- 989,999 ----
  1602.           case POTION_CLASS:
  1603.           if (obj->otyp == POT_WATER) return FALSE;
  1604.           Your("%s.", aobjnam(obj,"dilute"));
  1605. !         if (obj->odiluted) {
  1606. !             obj->odiluted = 0;
  1607.               obj->blessed = obj->cursed = FALSE;
  1608.               obj->otyp = POT_WATER;
  1609. !         } else obj->odiluted++;
  1610.           return TRUE;
  1611.           case SCROLL_CLASS:
  1612.           if (obj->otyp != SCR_BLANK_PAPER
  1613. ***************
  1614. *** 1139,1145 ****
  1615.           if (Blind) obj->dknown = 0;
  1616.   
  1617.           switch (neutralizes(obj, potion) ||
  1618. !             obj->spe == -1 /* diluted */ ? 1 : rnd(8)) {
  1619.               case 1:
  1620.                   obj->otyp = POT_WATER;
  1621.                   obj->blessed = obj->cursed = 0;
  1622. --- 1143,1149 ----
  1623.           if (Blind) obj->dknown = 0;
  1624.   
  1625.           switch (neutralizes(obj, potion) ||
  1626. !             obj->odiluted ? 1 : rnd(8)) {
  1627.               case 1:
  1628.                   obj->otyp = POT_WATER;
  1629.                   obj->blessed = obj->cursed = 0;
  1630. ***************
  1631. *** 1165,1175 ****
  1632.           }
  1633.   
  1634.           if (obj->otyp == POT_WATER) {
  1635. !             obj->spe = 0; /* in case it was diluted before */
  1636.               pline("The mixture bubbles violently%s.",
  1637.                   Blind ? "" : ", then clears");
  1638.           } else {
  1639. !             obj->spe--; /* diluted */
  1640.               if (!Blind) {
  1641.                   pline("The mixture looks %s.",
  1642.                       OBJ_DESCR(objects[obj->otyp]));
  1643. --- 1169,1179 ----
  1644.           }
  1645.   
  1646.           if (obj->otyp == POT_WATER) {
  1647. !             obj->odiluted = 0; /* in case it was diluted before */
  1648.               pline("The mixture bubbles violently%s.",
  1649.                   Blind ? "" : ", then clears");
  1650.           } else {
  1651. !             obj->odiluted++;
  1652.               if (!Blind) {
  1653.                   pline("The mixture looks %s.",
  1654.                       OBJ_DESCR(objects[obj->otyp]));
  1655. ***************
  1656. *** 1208,1214 ****
  1657.           potion->otyp = POT_WATER;
  1658.           potion->blessed = 0;
  1659.           potion->cursed = 0;
  1660. !         potion->spe = 0;
  1661.           return(1);
  1662.       }
  1663.   
  1664. --- 1212,1218 ----
  1665.           potion->otyp = POT_WATER;
  1666.           potion->blessed = 0;
  1667.           potion->cursed = 0;
  1668. !         potion->odiluted = 0;
  1669.           return(1);
  1670.       }
  1671.   
  1672. *** /tmp/da08494    Thu Feb 25 10:24:46 1993
  1673. --- src/pray.c    Tue Feb 23 16:07:40 1993
  1674. ***************
  1675. *** 524,530 ****
  1676.       case 0:    break;
  1677.       case 1:
  1678.           if (uwep && (welded(uwep) || uwep->oclass == WEAPON_CLASS ||
  1679. !              uwep->otyp == PICK_AXE) && (!uwep->blessed)) {
  1680.           if (uwep->cursed) {
  1681.               uwep->cursed = FALSE;
  1682.               uwep->bknown = TRUE;
  1683. --- 524,531 ----
  1684.       case 0:    break;
  1685.       case 1:
  1686.           if (uwep && (welded(uwep) || uwep->oclass == WEAPON_CLASS ||
  1687. !              uwep->otyp == PICK_AXE || uwep->otyp == UNICORN_HORN)
  1688. !                 && (!uwep->blessed)) {
  1689.           if (uwep->cursed) {
  1690.               uwep->cursed = FALSE;
  1691.               uwep->bknown = TRUE;
  1692. ***************
  1693. *** 533,539 ****
  1694.                    Hallucination ? hcolor() : amber);
  1695.               else You("feel the power of %s over your %s.",
  1696.               u_gname(), xname(uwep));
  1697. !         } else if(uwep->otyp < BOW) {
  1698.               uwep->blessed = uwep->bknown = TRUE;
  1699.               if (!Blind)
  1700.               Your("%s with %s aura.",
  1701. --- 534,540 ----
  1702.                    Hallucination ? hcolor() : amber);
  1703.               else You("feel the power of %s over your %s.",
  1704.               u_gname(), xname(uwep));
  1705. !         } else if(uwep->otyp < BOW || uwep->otyp > CROSSBOW) {
  1706.               uwep->blessed = uwep->bknown = TRUE;
  1707.               if (!Blind)
  1708.               Your("%s with %s aura.",
  1709. ***************
  1710. *** 696,702 ****
  1711.               break;
  1712.           }
  1713.           /* enhance weapon regardless of alignment or artifact status */
  1714. !         if (obj && (obj->oclass == WEAPON_CLASS)) {
  1715.               bless(obj);
  1716.               obj->oeroded = 0;
  1717.               obj->oerodeproof = TRUE;
  1718. --- 697,703 ----
  1719.               break;
  1720.           }
  1721.           /* enhance weapon regardless of alignment or artifact status */
  1722. !         if (obj && obj->oclass == WEAPON_CLASS) {
  1723.               bless(obj);
  1724.               obj->oeroded = 0;
  1725.               obj->oerodeproof = TRUE;
  1726. ***************
  1727. *** 788,794 ****
  1728.       angrygods(g_align);
  1729.   }
  1730.   
  1731. ! static const char NEARDATA sacrifice_types[] = { FOOD_CLASS, AMULET_CLASS, 0 };
  1732.   
  1733.   static void
  1734.   consume_offering(otmp)
  1735. --- 789,795 ----
  1736.       angrygods(g_align);
  1737.   }
  1738.   
  1739. ! static NEARDATA const char sacrifice_types[] = { FOOD_CLASS, AMULET_CLASS, 0 };
  1740.   
  1741.   static void
  1742.   consume_offering(otmp)
  1743. ***************
  1744. *** 866,872 ****
  1745.               exercise(A_WIS, FALSE);
  1746.           }
  1747.   
  1748. !         if (altaralign != A_CHAOTIC) {
  1749.           /* curse the lawful/neutral altar */
  1750.           pline("The altar is stained with %sn blood.",
  1751.                 (pl_character[0]=='E') ? "elve" : "huma");
  1752. --- 867,873 ----
  1753.               exercise(A_WIS, FALSE);
  1754.           }
  1755.   
  1756. !         if (altaralign != A_CHAOTIC && altaralign != A_NONE) {
  1757.           /* curse the lawful/neutral altar */
  1758.           pline("The altar is stained with %sn blood.",
  1759.                 (pl_character[0]=='E') ? "elve" : "huma");
  1760. ***************
  1761. *** 874,881 ****
  1762.           angry_priest();
  1763.           } else {
  1764.           register struct monst *dmon;
  1765. !         /* Human sacrifice on a chaotic altar is equivalent */
  1766. !         /* to demon summoning */
  1767.           if(u.ualign.type != A_CHAOTIC) {
  1768.           pline("The blood floods the altar, which vanishes in %s cloud!",
  1769.                 an(Hallucination ? hcolor() : Black));
  1770. --- 875,882 ----
  1771.           angry_priest();
  1772.           } else {
  1773.           register struct monst *dmon;
  1774. !         /* Human sacrifice on a chaotic or unaligned altar */
  1775. !         /* is equivalent to demon summoning */
  1776.           if(u.ualign.type != A_CHAOTIC) {
  1777.           pline("The blood floods the altar, which vanishes in %s cloud!",
  1778.                 an(Hallucination ? hcolor() : Black));
  1779. ***************
  1780. *** 886,894 ****
  1781.               pline("The blood covers the altar!");
  1782.               change_luck(2);
  1783.           }
  1784. !         if ((dmon = makemon(&mons[dlord()], u.ux, u.uy)) != 0) {
  1785.               You("have summoned %s!", a_monnam(dmon));
  1786. !             if (u.ualign.type == A_CHAOTIC)
  1787.               dmon->mpeaceful = TRUE;
  1788.               You("are terrified, and unable to move.");
  1789.               nomul(-3);
  1790. --- 887,895 ----
  1791.               pline("The blood covers the altar!");
  1792.               change_luck(2);
  1793.           }
  1794. !         if ((dmon = makemon(&mons[dlord(altaralign)], u.ux, u.uy))) {
  1795.               You("have summoned %s!", a_monnam(dmon));
  1796. !             if (sgn(u.ualign.type) == sgn(dmon->data->maligntyp))
  1797.               dmon->mpeaceful = TRUE;
  1798.               You("are terrified, and unable to move.");
  1799.               nomul(-3);
  1800. ***************
  1801. *** 1279,1285 ****
  1802.   doturn()
  1803.   {    /* Knights & Priest(esse)s only please */
  1804.   
  1805. !     register struct monst *mtmp;
  1806.       register int    xlev = 6;
  1807.   
  1808.       if((pl_character[0] != 'P') &&
  1809. --- 1280,1286 ----
  1810.   doturn()
  1811.   {    /* Knights & Priest(esse)s only please */
  1812.   
  1813. !     register struct monst *mtmp, *mtmp2;
  1814.       register int    xlev = 6;
  1815.   
  1816.       if((pl_character[0] != 'P') &&
  1817. ***************
  1818. *** 1319,1325 ****
  1819.       }
  1820.       pline("Calling upon %s, you chant an arcane formula.", u_gname());
  1821.       exercise(A_WIS, TRUE);
  1822. !     for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
  1823.           if(cansee(mtmp->mx,mtmp->my)) {
  1824.           if(!mtmp->mpeaceful && (is_undead(mtmp->data) ||
  1825.              (is_demon(mtmp->data) && (u.ulevel > (MAXULEV/2))))) {
  1826. --- 1320,1327 ----
  1827.       }
  1828.       pline("Calling upon %s, you chant an arcane formula.", u_gname());
  1829.       exercise(A_WIS, TRUE);
  1830. !     for(mtmp = fmon; mtmp; mtmp = mtmp2) {
  1831. !         mtmp2 = mtmp->nmon;
  1832.           if(cansee(mtmp->mx,mtmp->my)) {
  1833.           if(!mtmp->mpeaceful && (is_undead(mtmp->data) ||
  1834.              (is_demon(mtmp->data) && (u.ulevel > (MAXULEV/2))))) {
  1835. ***************
  1836. *** 1328,1334 ****
  1837.               pline("Unfortunately, your voice falters.");
  1838.               mtmp->mflee = mtmp->mfrozen = mtmp->msleep = FALSE;
  1839.               mtmp->mcanmove = TRUE;
  1840. !             } else if (! resist(mtmp, '\0', 0, TELL))
  1841.               switch (mtmp->data->mlet) {
  1842.                   /* this is intentional, lichs are tougher
  1843.                      than zombies. */
  1844. --- 1330,1336 ----
  1845.               pline("Unfortunately, your voice falters.");
  1846.               mtmp->mflee = mtmp->mfrozen = mtmp->msleep = FALSE;
  1847.               mtmp->mcanmove = TRUE;
  1848. !             } else if (! resist(mtmp, '\0', 0, TELL)) {
  1849.               switch (mtmp->data->mlet) {
  1850.                   /* this is intentional, lichs are tougher
  1851.                      than zombies. */
  1852. ***************
  1853. *** 1352,1359 ****
  1854.               default:    mtmp->mflee = TRUE;
  1855.                   break;
  1856.               }
  1857. !            }
  1858.           }
  1859.       nomul(-5);
  1860.       return(1);
  1861.   }
  1862. --- 1354,1363 ----
  1863.               default:    mtmp->mflee = TRUE;
  1864.                   break;
  1865.               }
  1866. !             }
  1867. !         }
  1868.           }
  1869. +     }
  1870.       nomul(-5);
  1871.       return(1);
  1872.   }
  1873.  
  1874.