billr@saab.CNA.TEK.COM (Bill Randle) (08/03/89)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 7, Issue 98
Archive-name: NetHack3/Patch1e
Patch-To: NetHack3: Volume 7, Issue 56-93
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 5 (of 6)."
# Contents: src3.diff
# Wrapped by billr@saab on Thu Aug 3 09:57:35 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'src3.diff' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'src3.diff'\"
else
echo shar: Extracting \"'src3.diff'\" \(55712 characters\)
sed "s/^X//" >'src3.diff' <<'END_OF_FILE'
XSource patches, part 3
X
X-----------------------------------Cut---------------------------------
X*** src/Old/objnam.c Mon Jul 31 14:24:55 1989
X--- src/objnam.c Sun Jul 30 11:30:32 1989
X***************
X*** 3,8 ****
X--- 3,9 ----
X /* NetHack may be freely redistributed. See license for details. */
X
X #include "hack.h"
X+ #include <ctype.h> /* for isalpha() */
X
X #define PREFIX 30
X
X***************
X*** 157,163 ****
X
X long save_Blinded = Blinded;
X Blinded = 1;
X! str = func(obj);
X Blinded = save_Blinded;
X return str;
X }
X--- 158,164 ----
X
X long save_Blinded = Blinded;
X Blinded = 1;
X! str = (*func)(obj);
X Blinded = save_Blinded;
X return str;
X }
X***************
X*** 237,242 ****
X--- 238,244 ----
X } else Strcat(buf, dn);
X break;
X case FOOD_SYM:
X+ #ifdef TUTTI_FRUTTI
X if (obj->otyp == SLIME_MOLD) {
X register struct fruit *f;
X
X***************
X*** 249,254 ****
X--- 251,257 ----
X if (!f) impossible("Bad fruit #%d?", obj->spe);
X break;
X }
X+ #endif
X Strcpy(buf, an);
X if(obj->otyp == TIN && obj->known) {
X if(obj->spe > 0)
X***************
X*** 519,525 ****
X break;
X }
X
X! if(obj->owornmask & W_WEP) {
X Strcat(bp, " (weapon in ");
X Strcat(bp, body_part(HAND));
X Strcat(bp, ")");
X--- 522,528 ----
X break;
X }
X
X! if((obj->owornmask & W_WEP) && !mrg_to_wielded) {
X Strcat(bp, " (weapon in ");
X Strcat(bp, body_part(HAND));
X Strcat(bp, ")");
X***************
X*** 631,649 ****
X
X /* Search for common compounds, i.e. lump of royal jelly */
X for(excess=0, spot=str; *spot; spot++) {
X! if (!strncmp(spot, " of ", 4) || !strncmp(spot, " with ", 6)
X! || !strncmp(spot, " a la ", 6)
X! || !strncmp(spot, " from ", 6)
X! || !strncmp(spot, " in ", 4)
X || !strncmp(spot, " labeled ", 9)
X || !strncmp(spot, " called ", 8)
X || !strncmp(spot, " named ", 7)
X- || !strncmp(spot, " on ", 4)
X || !strcmp(spot, " above") /* lurkers above */
X || !strncmp(spot, " versus ", 8)
X || !strncmp(spot, " de ", 4)
X || !strncmp(spot, " d'", 3)
X! || !strncmp(spot, " du ", 4)) {
X excess = oldstr + (spot - str);
X *spot = 0;
X break;
X--- 634,656 ----
X
X /* Search for common compounds, i.e. lump of royal jelly */
X for(excess=0, spot=str; *spot; spot++) {
X! if (!strncmp(spot, " of ", 4)
X || !strncmp(spot, " labeled ", 9)
X || !strncmp(spot, " called ", 8)
X || !strncmp(spot, " named ", 7)
X || !strcmp(spot, " above") /* lurkers above */
X || !strncmp(spot, " versus ", 8)
X+ #ifdef TUTTI_FRUTTI
X+ || !strncmp(spot, " from ", 6)
X+ || !strncmp(spot, " in ", 4)
X+ || !strncmp(spot, " on ", 4)
X+ || !strncmp(spot, " a la ", 6)
X+ || !strncmp(spot, " with", 5)
X || !strncmp(spot, " de ", 4)
X || !strncmp(spot, " d'", 3)
X! || !strncmp(spot, " du ", 4)
X! #endif
X! ) {
X excess = oldstr + (spot - str);
X *spot = 0;
X break;
X***************
X*** 654,665 ****
X *(spot+1) = 0;
X /* Now spot is the last character of the string */
X
X- /* Single letters */
X len = strlen(str);
X! if (len==1) {
X Strcpy(spot+1, "'s");
X goto bottom;
X }
X
X /* man/men ("Wiped out all cavemen.") */
X if (len >= 3 && !strcmp(spot-2, "man") &&
X--- 661,674 ----
X *(spot+1) = 0;
X /* Now spot is the last character of the string */
X
X len = strlen(str);
X! #ifdef TUTTI_FRUTTI
X! /* Single letters */
X! if (len==1 || !isalpha(*spot)) {
X Strcpy(spot+1, "'s");
X goto bottom;
X }
X+ #endif
X
X /* man/men ("Wiped out all cavemen.") */
X if (len >= 3 && !strcmp(spot-2, "man") &&
X***************
X*** 669,692 ****
X goto bottom;
X }
X
X- /* mouse/mice,louse/lice (not a monster, but possible in a food name) */
X- if (len >= 5 && !strcmp(spot-3, "ouse") && index("MmLl", *(spot-4))) {
X- Strcpy(spot-3, "ice");
X- goto bottom;
X- }
X-
X- /* matzoh/matzot, possible food name */
X- if (len >= 6 && !strcmp(spot-5, "matzoh")) {
X- *(spot) = 't';
X- goto bottom;
X- }
X-
X- /* child/children (for the wise guys who give their food funny names) */
X- if (len >= 5 && !strcmp(spot-4, "child")) {
X- Strcpy(spot, "dren");
X- goto bottom;
X- }
X-
X /* tooth/teeth */
X if (len >= 5 && !strcmp(spot-4, "tooth")) {
X Strcpy(spot-3, "eeth");
X--- 678,683 ----
X***************
X*** 716,724 ****
X--- 707,719 ----
X }
X
X /* algae, larvae, hyphae (another fungus part) */
X+ #ifdef TUTTI_FRUTTI
X if ((len >= 4 && !strcmp(spot-3, "alga")) ||
X (len >= 5 &&
X (!strcmp(spot-4, "hypha") || !strcmp(spot-4, "larva")))) {
X+ #else
X+ if (len >= 5 && (!strcmp(spot-4, "hypha"))) {
X+ #endif
X Strcpy(spot, "ae");
X goto bottom;
X }
X***************
X*** 746,761 ****
X /* note: also swine, trout, grouse */
X if ((len >= 7 && !strcmp(spot-6, "samurai")) ||
X (len >= 5 &&
X (!strcmp(spot-4, "manes") || !strcmp(spot-4, "sheep"))) ||
X (len >= 4 &&
X (!strcmp(spot-3, "fish") || !strcmp(spot-3, "tuna") ||
X !strcmp(spot-3, "deer"))))
X goto bottom;
X
X! /* Aren't the following two going a bit far? --KAA */
X! /* eau/eaux (gateau) */
X! if (len >= 3 && !strcmp(spot-2, "eau")) {
X! Strcpy(spot, "ux");
X goto bottom;
X }
X
X--- 741,772 ----
X /* note: also swine, trout, grouse */
X if ((len >= 7 && !strcmp(spot-6, "samurai")) ||
X (len >= 5 &&
X+ #ifdef TUTTI_FRUTTI
X (!strcmp(spot-4, "manes") || !strcmp(spot-4, "sheep"))) ||
X (len >= 4 &&
X (!strcmp(spot-3, "fish") || !strcmp(spot-3, "tuna") ||
X !strcmp(spot-3, "deer"))))
X+ #else
X+ !strcmp(spot-4, "manes")))
X+ #endif
X+ goto bottom;
X+
X+ #ifdef TUTTI_FRUTTI
X+ /* mouse/mice,louse/lice (not a monster, but possible in a food name) */
X+ if (len >= 5 && !strcmp(spot-3, "ouse") && index("MmLl", *(spot-4))) {
X+ Strcpy(spot-3, "ice");
X+ goto bottom;
X+ }
X+
X+ /* matzoh/matzot, possible food name */
X+ if (len >= 6 && !strcmp(spot-5, "matzoh")) {
X+ *(spot) = 't';
X goto bottom;
X+ }
X
X! /* child/children (for the wise guys who give their food funny names) */
X! if (len >= 5 && !strcmp(spot-4, "child")) {
X! Strcpy(spot, "dren");
X goto bottom;
X }
X
X***************
X*** 765,783 ****
X goto bottom;
X }
X
X /* note: ox/oxen, VAX/VAXen, goose/geese */
X
X /* Ends in z, x, s, ch, sh; add an "es" */
X! if (index("zxsv", *spot) || (*spot=='h' && index("cs", *(spot-1))) ||
X /* Kludge to get "tomatoes" and "potatoes" right */
X! (len >= 4 && !strcmp(spot-2, "ato"))) {
X Strcpy(spot+1, "es");
X goto bottom;
X }
X
X! /* Ends in y preceded by consonant or "qu"; change to "ies" */
X if (*spot == 'y' &&
X! (!index(vowels, *(spot-1)) || !strncmp("qu", spot-2, 2))) {
X Strcpy(spot, "ies");
X goto bottom;
X }
X--- 776,799 ----
X goto bottom;
X }
X
X+ /* note: -eau/-eaux (gateau, bordeau...) */
X /* note: ox/oxen, VAX/VAXen, goose/geese */
X+ #endif
X
X /* Ends in z, x, s, ch, sh; add an "es" */
X! if (index("zxsv", *spot) || (*spot=='h' && index("cs", *(spot-1)))
X! #ifdef TUTTI_FRUTTI
X /* Kludge to get "tomatoes" and "potatoes" right */
X! || (len >= 4 && !strcmp(spot-2, "ato"))
X! #endif
X! ) {
X Strcpy(spot+1, "es");
X goto bottom;
X }
X
X! /* Ends in y preceded by consonant (note: also "qu"); change to "ies" */
X if (*spot == 'y' &&
X! (!index(vowels, *(spot-1)))) {
X Strcpy(spot, "ies");
X goto bottom;
X }
X***************
X*** 808,817 ****
X register char *p;
X register int i;
X register struct obj *otmp;
X- struct fruit *f;
X int cnt, spe, spesgn, typ, heavy, blessed, uncursed;
X int iscursed, ispoisoned, mntmp, contents, iskey=0;
X! int isnamedbox=0, ftype = current_fruit;
X char let;
X char *un, *dn, *an;
X char *name=0;
X--- 824,836 ----
X register char *p;
X register int i;
X register struct obj *otmp;
X int cnt, spe, spesgn, typ, heavy, blessed, uncursed;
X int iscursed, ispoisoned, mntmp, contents, iskey=0;
X! int isnamedbox=0;
X! #ifdef TUTTI_FRUTTI
X! struct fruit *f;
X! int ftype = current_fruit;
X! #endif
X char let;
X char *un, *dn, *an;
X char *name=0;
X***************
X*** 946,951 ****
X--- 965,971 ----
X if(cnt == 1 && !strncmp(bp, "pair of ",8)) {
X bp += 8;
X cnt = 2;
X+ goto sing;
X /* cnt is ignored for armor and other non-stackable objects;
X DTRT for stackable objects */
X } else if(cnt > 1 && !strncmp(bp, "pairs of ",9)) {
X***************
X*** 996,1001 ****
X--- 1016,1026 ----
X goto sing;
X }
X
X+ if(!strcmp(p-6, "staves")) {
X+ Strcpy(p-3, "ff");
X+ goto sing;
X+ }
X+
X /* note: nurses, axes but boxes */
X if(!strcmp(p-5, "boxes")) {
X p[-2] = 0;
X***************
X*** 1194,1199 ****
X--- 1219,1225 ----
X }
X i++;
X }
X+ #ifdef TUTTI_FRUTTI
X for(f=ffruit; f; f = f->nextf) {
X char *f1 = f->fname, *f2 = makeplural(f->fname);
X
X***************
X*** 1204,1209 ****
X--- 1230,1236 ----
X goto typfnd;
X }
X }
X+ #endif
X if(!let) return((struct obj *)0);
X any:
X if(!let) let = wrpsym[rn2(sizeof(wrpsym))];
X***************
X*** 1273,1280 ****
X--- 1300,1309 ----
X otmp->spe = 1;
X }
X break;
X+ #ifdef TUTTI_FRUTTI
X case SLIME_MOLD: otmp->spe = ftype;
X /* Fall through */
X+ #endif
X case SKELETON_KEY: case KEY: case CHEST: case LARGE_BOX:
X case HEAVY_IRON_BALL: case IRON_CHAIN: case STATUE:
X /* otmp->spe already done in mksobj() */
X*** src/Old/options.c Mon Jul 31 14:26:18 1989
X--- src/options.c Fri Jul 28 17:53:32 1989
X***************
X*** 24,30 ****
X--- 24,32 ----
X flags.confirm = TRUE;
X flags.safe_dog = TRUE;
X flags.silent = flags.pickup = TRUE;
X+ #ifdef TUTTI_FRUTTI
X nmcpy(pl_fruit, objects[SLIME_MOLD].oc_name, PL_FSIZ);
X+ #endif
X flags.num_pad = FALSE;
X #ifdef MSDOS
X #ifdef DECRAINBOW
X***************
X*** 32,37 ****
X--- 34,42 ----
X #endif
X #ifdef DGK
X flags.IBMBIOS =
X+ #ifdef TOS
X+ TRUE; /* BIOS might as well always be on for TOS */
X+ #endif
X flags.rawio = FALSE;
X #endif
X read_config_file();
X***************
X*** 38,47 ****
X--- 43,54 ----
X #endif /* MSDOS */
X if(opts = getenv("NETHACKOPTIONS"))
X parseoptions(opts,TRUE);
X+ #ifdef TUTTI_FRUTTI
X (void)fruitadd(pl_fruit);
X objects[SLIME_MOLD].oc_name = "\033";
X /* Put something untypable in there */
X /* We cannot just use NULL because that marks the end of objects */
X+ #endif
X }
X
X static void
X***************
X*** 154,160 ****
X }
X
X #ifndef MSDOS
X! if (!strncmp(opts, "standout", 4)) {
X flags.standout = !negated;
X return;
X }
X--- 161,167 ----
X }
X
X #ifndef MSDOS
X! if (!strncmp(opts, "stan", 4)) {
X flags.standout = !negated;
X return;
X }
X***************
X*** 165,176 ****
X }
X #endif
X
X! if (!strncmp(opts, "ignintr", 3)) {
X flags.ignintr = !negated;
X return;
X }
X
X! if (!strncmp(opts, "tombstone", 4)) {
X flags.notombstone = negated;
X return;
X }
X--- 172,183 ----
X }
X #endif
X
X! if (!strncmp(opts, "ign", 3)) {
X flags.ignintr = !negated;
X return;
X }
X
X! if (!strncmp(opts, "tomb", 4)) {
X flags.notombstone = negated;
X return;
X }
X***************
X*** 182,188 ****
X }
X #endif
X
X! if (!strncmp(opts, "confirm", 4)) {
X flags.confirm = !negated;
X return;
X }
X--- 189,195 ----
X }
X #endif
X
X! if (!strncmp(opts, "conf", 4)) {
X flags.confirm = !negated;
X return;
X }
X***************
X*** 191,212 ****
X return;
X }
X
X! if (!strncmp(opts, "silent", 4)) {
X flags.silent = !negated;
X return;
X }
X
X! if (!strncmp(opts, "verbose", 4)) {
X flags.verbose = !negated;
X return;
X }
X
X! if (!strncmp(opts, "pickup", 4)) {
X flags.pickup = !negated;
X return;
X }
X
X! if (!strncmp(opts, "number_pad", 4)) {
X flags.num_pad = !negated;
X return;
X }
X--- 198,219 ----
X return;
X }
X
X! if (!strncmp(opts, "sil", 3)) {
X flags.silent = !negated;
X return;
X }
X
X! if (!strncmp(opts, "verb", 4)) {
X flags.verbose = !negated;
X return;
X }
X
X! if (!strncmp(opts, "pick", 4)) {
X flags.pickup = !negated;
X return;
X }
X
X! if (!strncmp(opts, "numb", 4)) {
X flags.num_pad = !negated;
X return;
X }
X***************
X*** 217,223 ****
X return;
X }
X
X! if (!strncmp(opts, "rawio", 4)) {
X if (from_env)
X flags.rawio = !negated;
X else
X--- 224,230 ----
X return;
X }
X
X! if (!strncmp(opts, "raw", 3)) {
X if (from_env)
X flags.rawio = !negated;
X else
X***************
X*** 241,247 ****
X /*
X * the order to list the pack
X */
X! if (!strncmp(opts, "packorder", 4)) {
X register char *sp, *tmp;
X int tmpend;
X
X--- 248,254 ----
X /*
X * the order to list the pack
X */
X! if (!strncmp(opts, "pack", 4)) {
X register char *sp, *tmp;
X int tmpend;
X
X***************
X*** 276,287 ****
X return;
X }
X
X! if (!strncmp(opts, "rest_on_space", 4)) {
X flags.no_rest_on_space = negated;
X return;
X }
X
X! if (!strncmp(opts, "fixinv", 3)) {
X flags.invlet_constant = !negated;
X if(!from_env && flags.invlet_constant) reassign ();
X return;
X--- 283,294 ----
X return;
X }
X
X! if (!strncmp(opts, "rest", 4)) {
X flags.no_rest_on_space = negated;
X return;
X }
X
X! if (!strncmp(opts, "fix", 3)) {
X flags.invlet_constant = !negated;
X if(!from_env && flags.invlet_constant) reassign ();
X return;
X***************
X*** 294,300 ****
X flags.female = negated;
X return;
X }
X! if (!strncmp(opts, "female", 3)) {
X if(!from_env && flags.female == negated)
X pline("That is not anatomically possible.");
X else
X--- 301,307 ----
X flags.female = negated;
X return;
X }
X! if (!strncmp(opts, "fem", 3)) {
X if(!from_env && flags.female == negated)
X pline("That is not anatomically possible.");
X else
X***************
X*** 319,325 ****
X }
X
X /* graphics:string */
X! if (!strncmp(opts, "graphics", 4)) {
X if(!from_env) {
X #ifdef MSDOS
X pline("\"graphics\" settable only from %s.", configfile);
X--- 326,332 ----
X }
X
X /* graphics:string */
X! if (!strncmp(opts, "gr", 2)) {
X if(!from_env) {
X #ifdef MSDOS
X pline("\"graphics\" settable only from %s.", configfile);
X***************
X*** 382,388 ****
X }
X
X /* endgame:5t[op] 5a[round] o[wn] */
X! if (!strncmp(opts, "endgame", 3)) {
X op = index(opts,':');
X if(!op) goto bad;
X op++;
X--- 389,395 ----
X }
X
X /* endgame:5t[op] 5a[round] o[wn] */
X! if (!strncmp(opts, "end", 3)) {
X op = index(opts,':');
X if(!op) goto bad;
X op++;
X***************
X*** 414,420 ****
X }
X return;
X }
X! if (!strncmp(opts, "dogname", 3)) {
X if(!from_env) {
X #ifdef MSDOS
X pline("\"dogname\" settable only from %s.", configfile);
X--- 421,427 ----
X }
X return;
X }
X! if (!strncmp(opts, "dog", 3)) {
X if(!from_env) {
X #ifdef MSDOS
X pline("\"dogname\" settable only from %s.", configfile);
X***************
X*** 428,434 ****
X nmcpy(dogname, ++op, 62);
X return;
X }
X! if (!strncmp(opts, "catname", 3)) {
X if(!from_env) {
X #ifdef MSDOS
X pline("\"catname\" settable only from %s.", configfile);
X--- 435,441 ----
X nmcpy(dogname, ++op, 62);
X return;
X }
X! if (!strncmp(opts, "cat", 3)) {
X if(!from_env) {
X #ifdef MSDOS
X pline("\"catname\" settable only from %s.", configfile);
X***************
X*** 442,448 ****
X nmcpy(catname, ++op, 62);
X return;
X }
X! if (!strncmp(opts, "fruit", 2)) {
X op = index(opts, ':');
X if (!op++) goto bad;
X if (!from_env) {
X--- 449,456 ----
X nmcpy(catname, ++op, 62);
X return;
X }
X! #ifdef TUTTI_FRUTTI
X! if (!strncmp(opts, "fr", 2)) {
X op = index(opts, ':');
X if (!op++) goto bad;
X if (!from_env) {
X***************
X*** 469,474 ****
X--- 477,483 ----
X */
X return;
X }
X+ #endif
X bad:
X if(!from_env) {
X if(!strncmp(opts, "h", 1) ||
X***************
X*** 534,540 ****
X--- 543,551 ----
X if (flags.silent) Strcat(buf,"silent,");
X if (flags.time) Strcat(buf,"time,");
X if (flags.verbose) Strcat(buf,"verbose,");
X+ #ifdef TUTTI_FRUTTI
X Sprintf(eos(buf), "fruit:%s,", pl_fruit);
X+ #endif
X if(flags.end_top != 5 || flags.end_around != 4 || flags.end_own){
X Sprintf(eos(buf), "endgame: %u top scores/%u around me",
X flags.end_top, flags.end_around);
X***************
X*** 559,570 ****
X return 0;
X }
X
X- char packorder[] = {
X- AMULET_SYM, WEAPON_SYM, ARMOR_SYM, FOOD_SYM, SCROLL_SYM,
X- # ifdef SPELLS
X- SPBOOK_SYM,
X- # endif
X- WAND_SYM, RING_SYM, POTION_SYM, TOOL_SYM, GEM_SYM, BALL_SYM, ROCK_SYM };
X #define Page_line(x) if(page_line(x)) goto quit
X
X void
X--- 570,575 ----
X***************
X*** 611,619 ****
X Page_line("`dogname' - the name of your (first) dog (e.g., dogname:Fang),");
X
X Page_line("`packorder' - the inventory order of the items in your pack");
X! Sprintf(buf, " (currently, packorder:%s ),", packorder);
X Page_line(buf);
X Page_line("`fruit' - the name of a fruit you enjoy eating,");
X
X Page_line("`endgame' - the parts of the score list you wish to see,");
X
X--- 616,626 ----
X Page_line("`dogname' - the name of your (first) dog (e.g., dogname:Fang),");
X
X Page_line("`packorder' - the inventory order of the items in your pack");
X! Sprintf(buf, " (currently, packorder:%s ),", inv_order);
X Page_line(buf);
X+ #ifdef TUTTI_FRUTTI
X Page_line("`fruit' - the name of a fruit you enjoy eating,");
X+ #endif
X
X Page_line("`endgame' - the parts of the score list you wish to see,");
X
X***************
X*** 628,633 ****
X--- 635,641 ----
X return;
X }
X
X+ #ifdef TUTTI_FRUTTI
X /* Returns the fid of the fruit type; if that type already exists, it
X * returns the fid of that one; if it does not exist, it adds a new fruit
X * type to the chain and returns the new one.
X***************
X*** 666,672 ****
X (!strncmp(buf, "tin of ", 7) && name_to_mon(buf+7) > -1) ||
X !strcmp(buf, "empty tin") ||
X !strcmp(buf, "tin of spinach") ||
X! (!strncmp(eos(buf)-6," corpse",6) && name_to_mon(buf) > -1))
X {
X Strcpy(buf, pl_fruit);
X Strcpy(pl_fruit, "candied ");
X--- 674,682 ----
X (!strncmp(buf, "tin of ", 7) && name_to_mon(buf+7) > -1) ||
X !strcmp(buf, "empty tin") ||
X !strcmp(buf, "tin of spinach") ||
X! ((!strncmp(eos(buf)-6," corpse",6) ||
X! !strncmp(eos(buf)-3, " egg",3))
X! && name_to_mon(buf) > -1))
X {
X Strcpy(buf, pl_fruit);
X Strcpy(pl_fruit, "candied ");
X***************
X*** 693,695 ****
X--- 703,706 ----
X if (user_specified) current_fruit = highest_fruit_id;
X return f->fid;
X }
X+ #endif
X*** src/Old/pager.c Mon Jul 31 14:27:19 1989
X--- src/pager.c Fri Jul 28 17:53:34 1989
X***************
X*** 10,16 ****
X #define MONATTK_H
X #include "hack.h"
X
X! #ifndef TOS
X #include <signal.h>
X #endif
X #if defined(BSD) || defined(ULTRIX)
X--- 10,16 ----
X #define MONATTK_H
X #include "hack.h"
X
X! #ifndef NO_SIGNAL
X #include <signal.h>
X #endif
X #if defined(BSD) || defined(ULTRIX)
X*** src/Old/pickup.c Mon Jul 31 14:28:29 1989
X--- src/pickup.c Sun Jul 30 11:30:32 1989
X***************
X*** 241,260 ****
X obj->quan = savequan;
X qq--;
X /* we can carry qq of them */
X! if(!qq) goto too_heavy;
X! You("can only carry %s of the %s lying here.",
X! (qq == 1) ? "one" : "some",
X! doname(obj));
X! {
X! register struct obj *obj3;
X
X! obj3 = splitobj(obj, qq);
X! if(obj3->otyp == SCR_SCARE_MONSTER)
X! if(obj3->spe) obj->spe = 0;
X }
X- goto lift_some;
X }
X- too_heavy:
X pline("There %s %s here, but %s.",
X (obj->quan == 1) ? "is" : "are",
X doname(obj),
X--- 241,258 ----
X obj->quan = savequan;
X qq--;
X /* we can carry qq of them */
X! if(qq) {
X! register struct obj *obj3;
X
X! You("can only carry %s of the %s lying here.",
X! (qq == 1) ? "one" : "some",
X! doname(obj));
X! obj3 = splitobj(obj, qq);
X! if(obj3->otyp == SCR_SCARE_MONSTER)
X! if(obj3->spe) obj->spe = 0;
X! goto lift_some;
X }
X }
X pline("There %s %s here, but %s.",
X (obj->quan == 1) ? "is" : "are",
X doname(obj),
X***************
X*** 267,274 ****
X lift_some:
X if(inv_cnt() >= 52) {
X Your("knapsack cannot accommodate any more items.");
X! if(obj->otyp == SCR_SCARE_MONSTER)
X! if(obj->spe) obj->spe = 0;
X break;
X }
X freeobj(obj);
X--- 265,272 ----
X lift_some:
X if(inv_cnt() >= 52) {
X Your("knapsack cannot accommodate any more items.");
X! if(obj->otyp == SCR_SCARE_MONSTER)
X! if(obj->spe) obj->spe = 0;
X break;
X }
X freeobj(obj);
X***************
X*** 277,287 ****
X if(wt > -5) You("have a little trouble lifting");
X { int pickquan = obj->quan;
X int mergquan;
X! if(!Blind) obj->dknown = 1;
X! obj = addinv(obj); /* might merge it with other objects */
X mergquan = obj->quan;
X obj->quan = pickquan; /* to fool prinv() */
X! prinv(obj);
X obj->quan = mergquan;
X }
X }
X--- 275,287 ----
X if(wt > -5) You("have a little trouble lifting");
X { int pickquan = obj->quan;
X int mergquan;
X! if(!Blind) obj->dknown = 1;
X! obj = addinv(obj); /* might merge it with other objects */
X mergquan = obj->quan;
X obj->quan = pickquan; /* to fool prinv() */
X! if(uwep && uwep == obj) mrg_to_wielded = TRUE;
X! prinv(obj);
X! if(mrg_to_wielded) mrg_to_wielded = FALSE;
X obj->quan = mergquan;
X }
X }
X*** src/Old/potion.c Mon Jul 31 14:30:21 1989
X--- src/potion.c Thu Jul 27 15:51:29 1989
X***************
X*** 349,356 ****
X--- 349,361 ----
X Hallucination ? "overripe" : "rotten"
X );
X else pline (Hallucination ?
X+ #ifdef TUTTI_FRUTTI
X "This tastes like 10%% real %s juice all-natural beverage." :
X "This tastes like %s juice.", pl_fruit);
X+ #else
X+ "This tastes like 10%% real fruit juice all-natural beverage." :
X+ "This tastes like fruit juice.");
X+ #endif
X if (otmp->otyp == POT_FRUIT_JUICE) {
X lesshungry(10 * (2 + bcsign(otmp)));
X break;
X***************
X*** 391,403 ****
X case POT_SICKNESS:
X pline("Yecch! This stuff tastes like poison.");
X if (otmp->blessed) {
X! pline("(But in fact it was mildly stale %s juice.)",
X! pl_fruit);
X if (pl_character[0] != 'H')
X losehp(1, "mildly contaminated potion");
X } else {
X if(Poison_resistance)
X pline("(But in fact it was biologically contaminated %s juice.)",pl_fruit);
X if (pl_character[0] == 'H')
X pline("Fortunately, you have been immunized.");
X else {
X--- 396,415 ----
X case POT_SICKNESS:
X pline("Yecch! This stuff tastes like poison.");
X if (otmp->blessed) {
X! #ifdef TUTTI_FRUTTI
X! pline("(But in fact it was mildly stale %s juice.)", pl_fruit);
X! #else
X! pline("(But in fact it was mildly stale orange juice.)");
X! #endif
X if (pl_character[0] != 'H')
X losehp(1, "mildly contaminated potion");
X } else {
X if(Poison_resistance)
X+ #ifdef TUTTI_FRUTTI
X pline("(But in fact it was biologically contaminated %s juice.)",pl_fruit);
X+ #else
X+ pline("(But in fact it was biologically contaminated orange juice.)");
X+ #endif
X if (pl_character[0] == 'H')
X pline("Fortunately, you have been immunized.");
X else {
X***************
X*** 1077,1081 ****
X--- 1089,1164 ----
X more();
X docrt();
X }
X+ return(0);
X+ }
X+
X+ /* the detections are pulled out so they can */
X+ /* also be used in the crystal ball routine */
X+ /* returns 1 if nothing was detected */
X+ /* returns 0 if something was detected */
X+ int
X+ trap_detect(sobj)
X+ register struct obj *sobj;
X+ /* sobj is null if crystal ball, *scroll if gold detection scroll */
X+ {
X+ register struct trap *ttmp;
X+ register struct obj *obj;
X+ register int door;
X+ boolean found = FALSE;
X+ coord cc;
X+
X+ for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) {
X+ if(ttmp->tx != u.ux || ttmp->ty != u.uy)
X+ goto outtrapmap;
X+ else found = TRUE;
X+ }
X+ for(obj = fobj; obj; obj = obj->nobj) {
X+ if ((obj->otyp==LARGE_BOX || obj->otyp==CHEST) && obj->otrapped)
X+ if (obj->ox != u.ux || obj->oy != u.uy)
X+ goto outtrapmap;
X+ else found = TRUE;
X+ }
X+ for(door=0; door<=doorindex; door++) {
X+ cc = doors[door];
X+ if (levl[cc.x][cc.y].doormask & D_TRAPPED)
X+ if (cc.x != u.ux || cc.x != u.uy)
X+ goto outtrapmap;
X+ else found = TRUE;
X+ }
X+ if(!found) {
X+ char buf[42];
X+ Sprintf(buf, "Your %s stop itching.",
X+ makeplural(body_part(TOE)));
X+ strange_feeling(sobj,buf);
X+ return(1);
X+ }
X+ /* traps exist, but only under me - no separate display required */
X+ Your("%s itch.", makeplural(body_part(TOE)));
X+ return(0);
X+ outtrapmap:
X+ cls();
X+ #define SYMBOL (uchar)(Hallucination ? rndobjsym() : \
X+ (sobj && sobj->cursed) ? GOLD_SYM : TRAP_SYM)
X+ #define AT Hallucination || (sobj && sobj->cursed) ? AT_OBJ : AT_MAP
X+ for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
X+ at(ttmp->tx, ttmp->ty, SYMBOL, AT);
X+ for(obj = fobj; obj; obj = obj->nobj) {
X+ if ((obj->otyp==LARGE_BOX || obj->otyp==CHEST) && obj->otrapped)
X+ at(obj->ox, obj->oy, SYMBOL, AT);
X+ }
X+ for(door=0; door<=doorindex; door++) {
X+ cc = doors[door];
X+ if (levl[cc.x][cc.y].doormask & D_TRAPPED)
X+ at(cc.x, cc.y, SYMBOL, AT);
X+ }
X+ #undef SYMBOL
X+ #undef AT
X+ prme();
X+ if (sobj && sobj->cursed)
X+ You("feel very greedy.");
X+ else
X+ You("feel entrapped.");
X+ more();
X+ docrt();
X return(0);
X }
X*** src/Old/pray.c Mon Jul 31 14:31:50 1989
X--- src/pray.c Mon Jul 31 09:21:03 1989
X***************
X*** 43,48 ****
X--- 43,50 ----
X #define TROUBLE_STARVING 4
X #define TROUBLE_HIT 5
X #define TROUBLE_STUCK_IN_WALL 6
X+ #define TROUBLE_LEVITATED_FOREVER 7
X+ #define TROUBLE_BLINDED_FOREVER 8
X
X #define TROUBLE_PUNISHED (-1)
X #define TROUBLE_LYCANTHROPE (-2)
X***************
X*** 104,109 ****
X--- 106,117 ----
X && !passes_walls(uasmon)
X #endif
X ) return(TROUBLE_STUCK_IN_WALL);
X+ if((uarmf && uarmf->otyp==LEVITATION_BOOTS && uarmf->cursed) ||
X+ (uleft && uleft->otyp==RIN_LEVITATION && uleft->cursed) ||
X+ (uright && uright->otyp==RIN_LEVITATION && uleft->cursed))
X+ return(TROUBLE_LEVITATED_FOREVER);
X+ if(ublindf && ublindf->cursed) return(TROUBLE_BLINDED_FOREVER);
X+
X if(Punished) return(TROUBLE_PUNISHED);
X #ifdef POLYSELF
X if(u.ulycn >= 0) return(TROUBLE_LYCANTHROPE);
X***************
X*** 117,133 ****
X (uarmg && uarmg->cursed) || /* gloves */
X (uarm && uarm->cursed) || /* armor */
X (uarmc && uarmc->cursed) || /* cloak */
X! (uarmf && uarmf->cursed) || /* boots */
X #ifdef SHIRT
X (uarmu && uarmu->cursed) || /* shirt */
X #endif
X! (uwep && (uwep->olet == WEAPON_SYM || uwep->otyp==PICK_AXE
X! || uwep->otyp==TIN_OPENER || uwep->otyp==HEAVY_IRON_BALL) &&
X! (uwep->cursed)) ||
X! (uleft && uleft->cursed) ||
X! (uright && uright->cursed) ||
X! (uamul && uamul->cursed) ||
X! (ublindf && ublindf->cursed))
X
X return(TROUBLE_CURSED_ITEMS);
X
X--- 125,139 ----
X (uarmg && uarmg->cursed) || /* gloves */
X (uarm && uarm->cursed) || /* armor */
X (uarmc && uarmc->cursed) || /* cloak */
X! (uarmf && uarmf->cursed && uarmf->otyp != LEVITATION_BOOTS) ||
X! /* boots */
X #ifdef SHIRT
X (uarmu && uarmu->cursed) || /* shirt */
X #endif
X! (uwep && welded(uwep)) ||
X! (uleft && uleft->cursed && uleft->otyp != RIN_LEVITATION) ||
X! (uright && uright->cursed && uright->otyp != RIN_LEVITATION) ||
X! (uamul && uamul->cursed))
X
X return(TROUBLE_CURSED_ITEMS);
X
X***************
X*** 143,153 ****
X--- 149,165 ----
X return(0);
X }
X
X+ const char leftglow[] = "left ring softly glows";
X+ const char rightglow[] = "right ring softly glows";
X+
X static void
X fix_worst_trouble(trouble)
X register int trouble;
X {
X int i;
X+ struct obj *otmp = (struct obj *)0;
X+ char *what = NULL;
X+
X u.ublesscnt += rnz(100);
X switch (trouble) {
X case TROUBLE_STONED:
X***************
X*** 182,187 ****
X--- 194,217 ----
X Your("surroundings change.");
X tele();
X break;
X+ case TROUBLE_LEVITATED_FOREVER:
X+ if (uarmf && uarmf->otyp==LEVITATION_BOOTS
X+ && uarmf->cursed)
X+ otmp = uarmf;
X+ else if (uleft && uleft->otyp==RIN_LEVITATION
X+ && uleft->cursed) {
X+ otmp = uleft;
X+ what = leftglow;
X+ } else {
X+ otmp = uright;
X+ what = rightglow;
X+ }
X+ goto decurse;
X+ break;
X+ case TROUBLE_BLINDED_FOREVER:
X+ otmp = ublindf;
X+ goto decurse;
X+ break;
X case TROUBLE_PUNISHED:
X Your("chain disappears.");
X unpunish();
X***************
X*** 195,246 ****
X break;
X #endif
X case TROUBLE_CURSED_ITEMS:
X! { struct obj *otmp;
X! char * what;
X! otmp = (struct obj *)0;
X! what = NULL;
X! if (uarmh && uarmh->cursed) /* helmet */
X otmp = uarmh;
X! else if (uarms && uarms->cursed) /* shield */
X otmp = uarms;
X! else if (uarmg && uarmg->cursed) /* gloves */
X otmp = uarmg;
X! else if (uarm && uarm->cursed) /* armor */
X otmp = uarm;
X! else if (uarmc && uarmc->cursed) /* cloak */
X otmp = uarmc;
X! else if (uarmf && uarmf->cursed) /* boots */
X otmp = uarmf;
X #ifdef SHIRT
X! else if (uarmu && uarmu->cursed) /* shirt */
X otmp = uarmu;
X #endif
X! else if (uleft && uleft->cursed) {
X otmp = uleft;
X! what = "left ring softly glows";
X! } else if (uright && uright->cursed) {
X otmp = uright;
X! what = "right ring softly glows";
X! } else if (uamul && uamul->cursed) /* amulet */
X otmp = uamul;
X! else if (ublindf && ublindf->cursed) /* blindfold */
X otmp = ublindf;
X! else if (welded(uwep)) otmp = uwep;
X! else {
X for(otmp=invent; otmp; otmp=otmp->nobj)
X if ((otmp->otyp==LOADSTONE ||
X otmp->otyp==LUCKSTONE) && otmp->cursed)
X break;
X! }
X!
X! otmp->cursed = 0;
X! otmp->bknown = 1;
X! if (!Blind)
X Your("%s %s.",
X what ? what : aobjnam (otmp, "softly glow"),
X Hallucination ? hcolor() : amber);
X! break;
X! }
X case TROUBLE_HALLUCINATION:
X pline ("Looks like you are back in Kansas.");
X make_hallucinated(0L,FALSE);
X--- 225,271 ----
X break;
X #endif
X case TROUBLE_CURSED_ITEMS:
X! if (uarmh && uarmh->cursed) /* helmet */
X otmp = uarmh;
X! else if (uarms && uarms->cursed) /* shield */
X otmp = uarms;
X! else if (uarmg && uarmg->cursed) /* gloves */
X otmp = uarmg;
X! else if (uarm && uarm->cursed) /* armor */
X otmp = uarm;
X! else if (uarmc && uarmc->cursed) /* cloak */
X otmp = uarmc;
X! else if (uarmf && uarmf->cursed) /* boots */
X otmp = uarmf;
X #ifdef SHIRT
X! else if (uarmu && uarmu->cursed) /* shirt */
X otmp = uarmu;
X #endif
X! else if (uleft && uleft->cursed) {
X otmp = uleft;
X! what = leftglow;
X! } else if (uright && uright->cursed) {
X otmp = uright;
X! what = rightglow;
X! } else if (uamul && uamul->cursed) /* amulet */
X otmp = uamul;
X! else if (ublindf && ublindf->cursed) /* blindfold */
X otmp = ublindf;
X! else if (welded(uwep)) otmp = uwep;
X! else {
X for(otmp=invent; otmp; otmp=otmp->nobj)
X if ((otmp->otyp==LOADSTONE ||
X otmp->otyp==LUCKSTONE) && otmp->cursed)
X break;
X! }
X! decurse:
X! otmp->cursed = 0;
X! otmp->bknown = 1;
X! if (!Blind)
X Your("%s %s.",
X what ? what : aobjnam (otmp, "softly glow"),
X Hallucination ? hcolor() : amber);
X! break;
X case TROUBLE_HALLUCINATION:
X pline ("Looks like you are back in Kansas.");
X make_hallucinated(0L,FALSE);
X***************
X*** 713,721 ****
X register struct monst *dmon;
X const char *color = Hallucination ? hcolor() : black;
X /* Human sacrifice on a chaotic altar is equivalent to demon summoning */
X pline("The blood floods over the altar, which vanishes in a%s %s cloud!",
X! index(vowels, *color) ? "n" : "", color);
X! levl[u.ux][u.uy].typ = ROOM;
X if(Invisible) newsym(u.ux, u.uy);
X if(dmon = makemon(&mons[dlord()], u.ux, u.uy)) {
X You("have summoned a demon lord!");
X--- 738,755 ----
X register struct monst *dmon;
X const char *color = Hallucination ? hcolor() : black;
X /* Human sacrifice on a chaotic altar is equivalent to demon summoning */
X+ #ifdef THEOLOGY
X+ if (levl[u.ux][u.uy].altarmask & A_SHRINE)
X+ pline("The blood covers the altar!");
X+ else {
X+ #endif
X pline("The blood floods over the altar, which vanishes in a%s %s cloud!",
X! index(vowels, *color) ? "n" : "", color);
X! levl[u.ux][u.uy].typ = ROOM;
X! #ifdef THEOLOGY
X! }
X! #endif
X! change_luck(2);
X if(Invisible) newsym(u.ux, u.uy);
X if(dmon = makemon(&mons[dlord()], u.ux, u.uy)) {
X You("have summoned a demon lord!");
X*** src/Old/pri.c Mon Jul 31 14:33:30 1989
X--- src/pri.c Mon Jul 31 09:37:35 1989
X***************
X*** 6,11 ****
X--- 6,14 ----
X #define MONATTK_H
X #include "hack.h"
X #include <ctype.h> /* for isalpha() */
X+ #if defined(ALTARS) && defined(THEOLOGY)
X+ #include "epri.h"
X+ #endif
X
X static void hilite P((uchar, uchar));
X static void cornbot P((int));
X***************
X*** 147,153 ****
X #ifdef POLYSELF
X && !u.uundetected
X #endif
X! ) at(u.ux,u.uy,u.usym,AT_U);
X }
X
X void
X--- 150,156 ----
X #ifdef POLYSELF
X && !u.uundetected
X #endif
X! ) atl(u.ux,u.uy,(char)u.usym);
X }
X
X void
X***************
X*** 213,219 ****
X /* Some ridiculous code to get display of @ and monsters (almost) right */
X if(!Invisible
X #ifdef POLYSELF
X! || u.uundetected
X #endif
X ) {
X levl[(u.udisx = u.ux)][(u.udisy = u.uy)].scrsym = u.usym;
X--- 216,222 ----
X /* Some ridiculous code to get display of @ and monsters (almost) right */
X if(!Invisible
X #ifdef POLYSELF
X! && !u.uundetected
X #endif
X ) {
X levl[(u.udisx = u.ux)][(u.udisy = u.uy)].scrsym = u.usym;
X***************
X*** 233,243 ****
X for(y = 0; y < ROWNO; y++) {
X char buf[COLNO+1];
X int start, end;
X! #ifdef TOS
X setmem(buf, COLNO, ' ');
X #else
X memset(buf, ' ', COLNO);
X! #endif /* TOS */
X for(x = 0, start = -1, end = -1; x < COLNO; x++)
X if((room = &levl[x][y])->new) {
X room->new = 0;
X--- 236,246 ----
X for(y = 0; y < ROWNO; y++) {
X char buf[COLNO+1];
X int start, end;
X! #ifdef OLD_TOS
X setmem(buf, COLNO, ' ');
X #else
X memset(buf, ' ', COLNO);
X! #endif /* OLD_TOS */
X for(x = 0, start = -1, end = -1; x < COLNO; x++)
X if((room = &levl[x][y])->new) {
X room->new = 0;
X***************
X*** 971,979 ****
X mstatusline(mtmp)
X register struct monst *mtmp;
X {
X pline("Status of %s (%s): ", mon_nam(mtmp),
X! (mtmp->data->maligntyp <= -1) ? "chaotic" :
X! mtmp->data->maligntyp ? "lawful" : "neutral");
X pline("Level %d Gold %lu HP %d(%d)",
X mtmp->m_lev, mtmp->mgold, mtmp->mhp, mtmp->mhpmax);
X pline("AC %d%s%s", mtmp->data->ac,
X--- 974,989 ----
X mstatusline(mtmp)
X register struct monst *mtmp;
X {
X+ #if defined(ALTARS) && defined(THEOLOGY)
X+ int align = mtmp->ispriest
X+ ? ((EPRI(mtmp)->shralign & ~A_SHRINE)-1) :
X+ mtmp->data->maligntyp;
X+ #else
X+ int align = mtmp->data->maligntyp;
X+ #endif
X pline("Status of %s (%s): ", mon_nam(mtmp),
X! (align <= -1) ? "chaotic" :
X! align ? "lawful" : "neutral");
X pline("Level %d Gold %lu HP %d(%d)",
X mtmp->m_lev, mtmp->mgold, mtmp->mhp, mtmp->mhpmax);
X pline("AC %d%s%s", mtmp->data->ac,
X*** src/Old/read.c Mon Jul 31 14:35:59 1989
X--- src/read.c Mon Jul 31 09:13:43 1989
X***************
X*** 339,345 ****
X }
X /* break; /*NOTREACHED*/
X case SCR_ENCHANT_WEAPON:
X! if(uwep && (uwep->olet == WEAPON_SYM || uwep->olet == PICK_AXE)
X && confused) {
X /* olet check added 10/25/86 GAN */
X if(Blind)
X--- 339,345 ----
X }
X /* break; /*NOTREACHED*/
X case SCR_ENCHANT_WEAPON:
X! if(uwep && (uwep->olet == WEAPON_SYM || uwep->otyp == PICK_AXE)
X && confused) {
X /* olet check added 10/25/86 GAN */
X if(Blind)
X***************
X*** 476,492 ****
X case MAGIC_LAMP:
X if (sobj->cursed) stripspe(obj);
X else if (sobj->blessed) {
X! if (obj->spe == 1) pline(nothing_happens);
X else {
X obj->spe = 1;
X p_glow1(obj);
X }
X } else {
X! if (obj->spe == 1) pline(nothing_happens);
X else {
X n = rn2(2);
X if (!n) {
X obj->spe = 1;
X p_glow1(obj);
X } else pline(nothing_happens);
X }
X--- 476,496 ----
X case MAGIC_LAMP:
X if (sobj->cursed) stripspe(obj);
X else if (sobj->blessed) {
X! if (obj->spe == 1 || obj->recharged)
X! pline(nothing_happens);
X else {
X obj->spe = 1;
X+ obj->recharged = 1;
X p_glow1(obj);
X }
X } else {
X! if (obj->spe == 1 || obj->recharged)
X! pline(nothing_happens);
X else {
X n = rn2(2);
X if (!n) {
X obj->spe = 1;
X+ obj->recharged = 1;
X p_glow1(obj);
X } else pline(nothing_happens);
X }
X***************
X*** 1020,1096 ****
X } else return(0); /* could not destroy anything */
X
X return(1);
X- }
X-
X- /* the detections are pulled out so they can */
X- /* also be used in the crystal ball routine */
X- /* returns 1 if nothing was detected */
X- /* returns 0 if something was detected */
X- int
X- trap_detect(sobj)
X- register struct obj *sobj;
X- /* sobj is null if crystal ball, *scroll if gold detection scroll */
X- {
X- register struct trap *ttmp;
X- register struct obj *obj;
X- register int door;
X- boolean found = FALSE;
X- coord cc;
X-
X- for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) {
X- if(ttmp->tx != u.ux || ttmp->ty != u.uy)
X- goto outtrapmap;
X- else found = TRUE;
X- }
X- for(obj = fobj; obj; obj = obj->nobj) {
X- if ((obj->otyp==LARGE_BOX || obj->otyp==CHEST) && obj->otrapped)
X- if (obj->ox != u.ux || obj->oy != u.uy)
X- goto outtrapmap;
X- else found = TRUE;
X- }
X- for(door=0; door<=doorindex; door++) {
X- cc = doors[door];
X- if (levl[cc.x][cc.y].doormask & D_TRAPPED)
X- if (cc.x != u.ux || cc.x != u.uy)
X- goto outtrapmap;
X- else found = TRUE;
X- }
X- if(!found) {
X- char buf[42];
X- Sprintf(buf, "Your %s stop itching.",
X- makeplural(body_part(TOE)));
X- strange_feeling(sobj,buf);
X- return(1);
X- }
X- /* traps exist, but only under me - no separate display required */
X- Your("%s itch.", makeplural(body_part(TOE)));
X- return(0);
X- outtrapmap:
X- cls();
X- #define SYMBOL (uchar)(Hallucination ? rndobjsym() : \
X- (sobj && sobj->cursed) ? GOLD_SYM : TRAP_SYM)
X- #define AT Hallucination || (sobj && sobj->cursed) ? AT_OBJ : AT_MAP
X- for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
X- at(ttmp->tx, ttmp->ty, SYMBOL, AT);
X- for(obj = fobj; obj; obj = obj->nobj) {
X- if ((obj->otyp==LARGE_BOX || obj->otyp==CHEST) && obj->otrapped)
X- at(obj->ox, obj->oy, SYMBOL, AT);
X- }
X- for(door=0; door<=doorindex; door++) {
X- cc = doors[door];
X- if (levl[cc.x][cc.y].doormask & D_TRAPPED)
X- at(cc.x, cc.y, SYMBOL, AT);
X- }
X- #undef SYMBOL
X- #undef AT
X- prme();
X- if (sobj && sobj->cursed)
X- You("feel very greedy.");
X- else
X- You("feel entrapped.");
X- more();
X- docrt();
X- return(0);
X }
X
X int
X--- 1024,1029 ----
X*** src/Old/restore.c Mon Jul 31 14:37:16 1989
X--- src/restore.c Fri Jul 28 17:54:07 1989
X***************
X*** 10,16 ****
X--- 10,18 ----
X #endif
X
X boolean restoring = FALSE;
X+ #ifdef TUTTI_FRUTTI
X static struct fruit *oldfruit;
X+ #endif
X static long omoves;
X
X /*
X***************
X*** 44,50 ****
X--- 46,54 ----
X {
X register struct obj *otmp, *otmp2;
X register struct obj *first = 0;
X+ #ifdef TUTTI_FRUTTI
X register struct fruit *oldf;
X+ #endif
X int xl;
X #ifdef LINT
X /* suppress "used before set" warning from lint */
X***************
X*** 58,63 ****
X--- 62,68 ----
X else otmp2->nobj = otmp;
X mread(fd, (genericptr_t) otmp, (unsigned) xl + sizeof(struct obj));
X if(!otmp->o_id) otmp->o_id = flags.ident++;
X+ #ifdef TUTTI_FRUTTI
X if(ghostly && otmp->otyp == SLIME_MOLD) {
X for(oldf=oldfruit; oldf; oldf=oldf->nextf)
X if (oldf->fid == otmp->spe) break;
X***************
X*** 64,69 ****
X--- 69,75 ----
X if(!oldf) impossible("no old fruit?");
X else otmp->spe = fruitadd(oldf->fname);
X }
X+ #endif
X /* Ghost levels get object age shifted from old player's clock to
X * new player's clock. Assumption: new player arrived immediately
X * after old player died.
X***************
X*** 158,164 ****
X--- 164,172 ----
X xchar ltmp;
X unsigned int mid; /* idem */
X struct obj *otmp;
X+ #ifdef TUTTI_FRUTTI
X struct fruit *fruit;
X+ #endif
X #ifdef MSDOS
X struct flag oldflags;
X
X***************
X*** 227,232 ****
X--- 235,241 ----
X if(u.ustuck)
X mread(fd, (genericptr_t) &mid, sizeof mid);
X mread(fd, (genericptr_t) pl_character, sizeof pl_character);
X+ #ifdef TUTTI_FRUTTI
X mread(fd, (genericptr_t) pl_fruit, sizeof pl_fruit);
X mread(fd, (genericptr_t) ¤t_fruit, sizeof current_fruit);
X ffruit = 0;
X***************
X*** 237,242 ****
X--- 246,252 ----
X ffruit = fruit;
X }
X free((genericptr_t) fruit);
X+ #endif
X
X restnames(fd);
X #ifdef DGK
X***************
X*** 266,272 ****
X nfd = creat(lock, FCMASK);
X #endif
X if (nfd < 0) panic("Cannot open temp file %s!\n", lock);
X! #if defined(DGK) && !defined(TOS)
X if (!savelev(nfd, ltmp, COUNT | WRITE)) {
X
X /* The savelev can't proceed because the size required
X--- 276,282 ----
X nfd = creat(lock, FCMASK);
X #endif
X if (nfd < 0) panic("Cannot open temp file %s!\n", lock);
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!savelev(nfd, ltmp, COUNT | WRITE)) {
X
X /* The savelev can't proceed because the size required
X***************
X*** 373,381 ****
X short tlev;
X #endif
X
X! #ifdef MSDOS
X! setmode(fd, O_BINARY); /* is this required for TOS??? */
X #endif
X /* Load the old fruit info. We have to do it first, so the infor-
X * mation is available when restoring the objects.
X */
X--- 383,392 ----
X short tlev;
X #endif
X
X! #if defined(MSDOS) && !defined(TOS)
X! setmode(fd, O_BINARY); /* is this required for TOS??? NO --ERS */
X #endif
X+ #ifdef TUTTI_FRUTTI
X /* Load the old fruit info. We have to do it first, so the infor-
X * mation is available when restoring the objects.
X */
X***************
X*** 391,406 ****
X }
X free((genericptr_t) fruit);
X }
X
X /* First some sanity checks */
X mread(fd, (genericptr_t) &hpid, sizeof(hpid));
X #ifdef TOS
X mread(fd, (genericptr_t) &tlev, sizeof(tlev));
X! dlvl=tlev&0xff;
X #else
X mread(fd, (genericptr_t) &dlvl, sizeof(dlvl));
X #endif
X if((pid && pid != hpid) || (lev && dlvl != lev)) {
X pline("Strange, this map is not as I remember it.");
X pline("Somebody is trying some trickery here...");
X pline("This game is void.");
X--- 402,426 ----
X }
X free((genericptr_t) fruit);
X }
X+ #endif
X
X /* First some sanity checks */
X mread(fd, (genericptr_t) &hpid, sizeof(hpid));
X #ifdef TOS
X mread(fd, (genericptr_t) &tlev, sizeof(tlev));
X! dlvl=tlev&0x00ff;
X #else
X mread(fd, (genericptr_t) &dlvl, sizeof(dlvl));
X #endif
X if((pid && pid != hpid) || (lev && dlvl != lev)) {
X+ #ifdef WIZARD
X+ if (wizard) {
X+ if (pid && pid != hpid)
X+ pline("PID (%d) doesn't match saved PID (%d)!", hpid, pid);
X+ else if (lev && dlvl != lev)
X+ pline("This is level %d, not %d!", dlvl, lev);
X+ }
X+ #endif
X pline("Strange, this map is not as I remember it.");
X pline("Somebody is trying some trickery here...");
X pline("This game is void.");
X***************
X*** 654,659 ****
X--- 674,680 ----
X }
X mread(fd, (genericptr_t)wgrowtime, sizeof(wgrowtime));
X #endif
X+ #ifdef TUTTI_FRUTTI
X /* Now get rid of all the temp fruits... */
X if (ghostly) {
X struct fruit *fruit;
X***************
X*** 664,669 ****
X--- 685,691 ----
X oldfruit = fruit;
X }
X }
X+ #endif
X }
X
X #ifdef ZEROCOMP
X*** src/Old/save.c Mon Jul 31 14:39:09 1989
X--- src/save.c Fri Jul 28 17:54:12 1989
X***************
X*** 11,19 ****
X #include "wseg.h"
X #endif
X
X! #ifndef TOS
X #include <signal.h>
X! #endif /* !TOS */
X #ifdef EXPLORE_MODE
X #include <fcntl.h>
X #endif /* EXPLORE_MODE */
X--- 11,19 ----
X #include "wseg.h"
X #endif
X
X! #ifndef NO_SIGNAL
X #include <signal.h>
X! #endif /* !NO_SIGNAL */
X #ifdef EXPLORE_MODE
X #include <fcntl.h>
X #endif /* EXPLORE_MODE */
X***************
X*** 20,26 ****
X
X boolean hu; /* set during hang-up */
X
X! #if defined(DGK) && !defined(TOS)
X struct finfo fileinfo[MAXLEVEL+1];
X long bytes_counted;
X int count_only;
X--- 20,26 ----
X
X boolean hu; /* set during hang-up */
X
X! #if defined(DGK) && !defined(OLD_TOS)
X struct finfo fileinfo[MAXLEVEL+1];
X long bytes_counted;
X int count_only;
X***************
X*** 28,49 ****
X boolean level_exists[MAXLEVEL+1];
X #endif
X
X! #if defined(DGK) && !defined(TOS)
X static void savelev0();
X! #endif /* DGK && !TOS */
X static void saveobjchn();
X static void savemonchn();
X static void savegoldchn();
X static void savetrapchn();
X static void savegenoinfo();
X! #if defined(DGK) && !defined(TOS)
X static boolean swapout_oldest();
X static void copyfile();
X! #endif /* defined(DGK) && !defined(TOS) */
X static void spill_objs();
X
X int
X dosave(){
X pline("Really save? "); /* especially useful if COMPRESS defined */
X if(yn() == 'n') {
X clrlin();
X--- 28,50 ----
X boolean level_exists[MAXLEVEL+1];
X #endif
X
X! #if defined(DGK) && !defined(OLD_TOS)
X static void savelev0();
X! #endif /* DGK && !OLD_TOS */
X static void saveobjchn();
X static void savemonchn();
X static void savegoldchn();
X static void savetrapchn();
X static void savegenoinfo();
X! #if defined(DGK) && !defined(OLD_TOS)
X static boolean swapout_oldest();
X static void copyfile();
X! #endif /* defined(DGK) && !defined(OLD_TOS) */
X static void spill_objs();
X
X int
X dosave(){
X+ clrlin();
X pline("Really save? "); /* especially useful if COMPRESS defined */
X if(yn() == 'n') {
X clrlin();
X***************
X*** 83,89 ****
X register int fd, ofd;
X int tmp; /* not register ! */
X xchar ltmp;
X! #if defined(DGK) && !defined(TOS)
X long fds, needed;
X int mode;
X #endif
X--- 84,90 ----
X register int fd, ofd;
X int tmp; /* not register ! */
X xchar ltmp;
X! #if defined(DGK) && !defined(OLD_TOS)
X long fds, needed;
X int mode;
X #endif
X***************
X*** 93,99 ****
X #ifdef UNIX
X (void) signal(SIGHUP, SIG_IGN);
X #endif
X! #if !defined(__TURBOC__) && !defined(TOS)
X (void) signal(SIGINT, SIG_IGN);
X #endif
X
X--- 94,100 ----
X #ifdef UNIX
X (void) signal(SIGHUP, SIG_IGN);
X #endif
X! #if !defined(__TURBOC__) && !defined(OLD_TOS)
X (void) signal(SIGINT, SIG_IGN);
X #endif
X
X***************
X*** 141,147 ****
X change_luck(-1); /* and unido!ab */
X home();
X cl_end();
X! #if defined(DGK) && !defined(TOS)
X if(!hu) msmsg("Saving: ");
X mode = COUNT;
X again:
X--- 142,148 ----
X change_luck(-1); /* and unido!ab */
X home();
X cl_end();
X! #if defined(DGK) && !defined(OLD_TOS)
X if(!hu) msmsg("Saving: ");
X mode = COUNT;
X again:
X***************
X*** 183,193 ****
X if(u.ustuck)
X bwrite(fd, (genericptr_t) &(u.ustuck->m_id), sizeof u.ustuck->m_id);
X bwrite(fd, (genericptr_t) pl_character, sizeof pl_character);
X bwrite(fd, (genericptr_t) pl_fruit, sizeof pl_fruit);
X bwrite(fd, (genericptr_t) ¤t_fruit, sizeof current_fruit);
X savefruitchn(fd);
X savenames(fd);
X! #if defined(DGK) && !defined(TOS)
X if (mode == COUNT) {
X # ifdef ZEROCOMP
X bflush(fd);
X--- 184,196 ----
X if(u.ustuck)
X bwrite(fd, (genericptr_t) &(u.ustuck->m_id), sizeof u.ustuck->m_id);
X bwrite(fd, (genericptr_t) pl_character, sizeof pl_character);
X+ #ifdef TUTTI_FRUTTI
X bwrite(fd, (genericptr_t) pl_fruit, sizeof pl_fruit);
X bwrite(fd, (genericptr_t) ¤t_fruit, sizeof current_fruit);
X savefruitchn(fd);
X+ #endif
X savenames(fd);
X! #if defined(DGK) && !defined(OLD_TOS)
X if (mode == COUNT) {
X # ifdef ZEROCOMP
X bflush(fd);
X***************
X*** 214,220 ****
X }
X #endif
X for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
X! #if defined(DGK) && !defined(TOS)
X if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
X if (fileinfo[ltmp].where != ACTIVE)
X swapin_file(ltmp);
X--- 217,223 ----
X }
X #endif
X for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
X! #if defined(DGK) && !defined(OLD_TOS)
X if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
X if (fileinfo[ltmp].where != ACTIVE)
X swapin_file(ltmp);
X***************
X*** 238,244 ****
X getlev(ofd, hackpid, ltmp, FALSE);
X (void) close(ofd);
X bwrite(fd, (genericptr_t) <mp, sizeof ltmp); /* level number */
X! #if defined(DGK) && !defined(TOS)
X savelev(fd, ltmp, WRITE); /* actual level */
X #else
X savelev(fd, ltmp); /* actual level */
X--- 241,247 ----
X getlev(ofd, hackpid, ltmp, FALSE);
X (void) close(ofd);
X bwrite(fd, (genericptr_t) <mp, sizeof ltmp); /* level number */
X! #if defined(DGK) && !defined(OLD_TOS)
X savelev(fd, ltmp, WRITE); /* actual level */
X #else
X savelev(fd, ltmp); /* actual level */
X***************
X*** 266,272 ****
X return(1);
X }
X
X! #if defined(DGK) && !defined(TOS)
X boolean
X savelev(fd, lev, mode)
X int fd;
X--- 269,275 ----
X return(1);
X }
X
X! #if defined(DGK) && !defined(OLD_TOS)
X boolean
X savelev(fd, lev, mode)
X int fd;
X***************
X*** 320,332 ****
X #endif
X
X if(fd < 0) panic("Save on bad file!"); /* impossible */
X! #if !defined(DGK) || defined(TOS)
X if(lev >= 0 && lev <= MAXLEVEL)
X level_exists[lev] = TRUE;
X #endif
X bwrite(fd,(genericptr_t) &hackpid,sizeof(hackpid));
X #ifdef TOS
X! tlev=lev;
X bwrite(fd,(genericptr_t) &tlev,sizeof(tlev));
X #else
X bwrite(fd,(genericptr_t) &lev,sizeof(lev));
X--- 323,335 ----
X #endif
X
X if(fd < 0) panic("Save on bad file!"); /* impossible */
X! #if !defined(DGK) || defined(OLD_TOS)
X if(lev >= 0 && lev <= MAXLEVEL)
X level_exists[lev] = TRUE;
X #endif
X bwrite(fd,(genericptr_t) &hackpid,sizeof(hackpid));
X #ifdef TOS
X! tlev=lev; tlev &= 0x00ff;
X bwrite(fd,(genericptr_t) &tlev,sizeof(tlev));
X #else
X bwrite(fd,(genericptr_t) &lev,sizeof(lev));
X***************
X*** 376,382 ****
X for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp->nseg){
X bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
X }
X! #if defined(DGK) && !defined(TOS)
X if (!count_only)
X #endif
X wsegs[tmp] = 0;
X--- 379,385 ----
X for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp->nseg){
X bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
X }
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!count_only)
X #endif
X wsegs[tmp] = 0;
X***************
X*** 383,389 ****
X }
X bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
X #endif /* WORM /**/
X! #if defined(DGK) && !defined(TOS)
X if (count_only) return;
X #endif
X billobjs = 0;
X--- 386,392 ----
X }
X bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
X #endif /* WORM /**/
X! #if defined(DGK) && !defined(OLD_TOS)
X if (count_only) return;
X #endif
X billobjs = 0;
X***************
X*** 432,438 ****
X flushoutrun(outrunlength);
X }
X if (outbufp) {
X! #ifdef DGK
X if (!count_only) /* flush buffer */
X #endif
X (void) write(fd, outbuf, outbufp);
X--- 435,441 ----
X flushoutrun(outrunlength);
X }
X if (outbufp) {
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!count_only) /* flush buffer */
X #endif
X (void) write(fd, outbuf, outbufp);
X***************
X*** 470,476 ****
X register genericptr_t loc;
X register unsigned num;
X {
X! #if defined(DGK) && !defined(TOS)
X bytes_counted += num;
X if (!count_only)
X #endif
X--- 473,479 ----
X register genericptr_t loc;
X register unsigned num;
X {
X! #if defined(DGK) && !defined(OLD_TOS)
X bytes_counted += num;
X if (!count_only)
X #endif
X***************
X*** 503,509 ****
X xl = otmp->onamelth;
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) otmp, xl + sizeof(struct obj));
X! #if defined(DGK) && !defined(TOS)
X if (!count_only)
X #endif
X free((genericptr_t) otmp);
X--- 506,512 ----
X xl = otmp->onamelth;
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) otmp, xl + sizeof(struct obj));
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!count_only)
X #endif
X free((genericptr_t) otmp);
X***************
X*** 530,536 ****
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst));
X if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
X! #if defined(DGK) && !defined(TOS)
X if (!count_only)
X #endif
X free((genericptr_t) mtmp);
X--- 533,539 ----
X bwrite(fd, (genericptr_t) &xl, sizeof(int));
X bwrite(fd, (genericptr_t) mtmp, xl + sizeof(struct monst));
X if(mtmp->minvent) saveobjchn(fd,mtmp->minvent);
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!count_only)
X #endif
X free((genericptr_t) mtmp);
X***************
X*** 548,554 ****
X while(gold) {
X gold2 = gold->ngold;
X bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
X! #if defined(DGK) && !defined(TOS)
X if (!count_only)
X #endif
X free((genericptr_t) gold);
X--- 551,557 ----
X while(gold) {
X gold2 = gold->ngold;
X bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!count_only)
X #endif
X free((genericptr_t) gold);
X***************
X*** 566,572 ****
X while(trap) {
X trap2 = trap->ntrap;
X bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
X! #if defined(DGK) && !defined(TOS)
X if (!count_only)
X #endif
X free((genericptr_t) trap);
X--- 569,575 ----
X while(trap) {
X trap2 = trap->ntrap;
X bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
X! #if defined(DGK) && !defined(OLD_TOS)
X if (!count_only)
X #endif
X free((genericptr_t) trap);
X***************
X*** 575,580 ****
X--- 578,584 ----
X bwrite(fd, (genericptr_t)nul, sizeof(struct trap));
X }
X
X+ #ifdef TUTTI_FRUTTI
X /* save all the fruit names and ID's; this is used only in saving whole games
X * (not levels) and in saving bones levels. When saving a bones level,
X * we only want to save the fruits which exist on the bones level; the bones
X***************
X*** 584,599 ****
X savefruitchn(fd)
X register int fd;
X {
X! register struct fruit *f2;
X! while(ffruit) {
X! f2 = ffruit->nextf;
X! if (ffruit->fid >= 0)
X! bwrite(fd, (genericptr_t) ffruit, sizeof(struct fruit));
X! free((genericptr_t) ffruit);
X! ffruit = f2;
X }
X bwrite(fd, (genericptr_t)nul, sizeof(struct fruit));
X }
X
X static void
X savegenoinfo(fd)
X--- 588,610 ----
X savefruitchn(fd)
X register int fd;
X {
X! register struct fruit *f2, *f1;
X!
X! f1 = ffruit;
X! while(f1) {
X! f2 = f1->nextf;
X! if (f1->fid >= 0) {
X! bwrite(fd, (genericptr_t) f1, sizeof(struct fruit));
X! }
X! #if defined(DGK) && !defined(OLD_TOS)
X! if (!count_only)
X! #endif
X! free((genericptr_t) f1);
X! f1 = f2;
X }
X bwrite(fd, (genericptr_t)nul, sizeof(struct fruit));
X }
X+ #endif
X
X static void
X savegenoinfo(fd)
X***************
X*** 605,611 ****
X bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
X }
X
X! #if defined(DGK) && !defined(TOS)
X boolean
X swapin_file(lev)
X int lev;
X--- 616,622 ----
X bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
X }
X
X! #if defined(DGK) && !defined(OLD_TOS)
X boolean
X swapin_file(lev)
X int lev;
X***************
X*** 668,673 ****
X--- 679,690 ----
X copyfile(from, to)
X char *from, *to;
X {
X+ #ifdef TOS
X+ extern int _copyfile();
X+
X+ if (_copyfile(from, to))
X+ panic("Can't copy %s to %s\n", from, to);
X+ #else
X char buf[BUFSIZ];
X int nfrom, nto, fdfrom, fdto;
X
X***************
X*** 683,688 ****
X--- 700,706 ----
X } while (nfrom == BUFSIZ);
X (void) close(fdfrom);
X (void) close(fdto);
X+ #endif /* TOS */
X }
X #endif
X
END_OF_FILE
if test 55712 -ne `wc -c <'src3.diff'`; then
echo shar: \"'src3.diff'\" unpacked with wrong size!
fi
# end of 'src3.diff'
fi
echo shar: End of archive 5 \(of 6\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 6 archives.
echo "now type ./do_patch.sh"
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0