billr@saab.CNA.TEK.COM (Bill Randle) (02/09/91)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 12, Issue 29
Archive-name: NetHack3/Patch10e
Patch-To: NetHack3: Volume 7, Issue 56-93
Environment:
#! /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 8)."
# Contents: patch10.02
# Wrapped by billr@saab on Fri Feb 8 17:19:00 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch10.02' -a "${1}" != "-c" ; then
echo shar: Renaming existing file \"'patch10.02'\" to \"'patch10.02.orig'\"
mv -f 'patch10.02' 'patch10.02.orig'
fi
echo shar: Extracting \"'patch10.02'\" \(50088 characters\)
sed "s/^X//" >'patch10.02' <<'END_OF_FILE'
X*** src/Makefile.src Wed May 30 00:27:20 1990
X--- src/Makefile.src Sun Feb 3 17:16:02 1991
X***************
X*** 50,55 ****
X--- 50,62 ----
X # (as long as it claims to be __STDC__ but isn't)
X # CFLAGS = -DAPOLLO -O -I../include
X
X+ # flags for AIX 3.1 cc on IBM RS/6000 to define
X+ # a suitable subset of standard libraries
X+ # CFLAGS = -D_NO_PROTO -D_XOPEN_SOURCE -O -I../include
X+
X+ # flags for DECstations running 4.0 or greater using the native C compiler
X+ # CFLAGS = -O -Olimit 1000 -I../include
X+
X # flags for debugging:
X # CFLAGS = -g -I../include
X
X***************
X*** 61,66 ****
X--- 68,75 ----
X # on 386 Xenix, the -ltermlib tputs() seems not to work; use -lcurses instead
X # Sysatt uses shared library in lieu of this option
X # Systos needs -lcurses16 if you use -mshort
X+ # AIX 3.1 on RS/6000 likes -lcurses if TERMINFO defined in config.h
X+ # and -ltermcap otherwise
X #
X # TERMLIB = -ltermcap
X # TERMLIB = -lcurses
X*** src/alloc.c Thu Mar 29 09:13:26 1990
X--- src/alloc.c Sat Jan 5 15:06:40 1991
X***************
X*** 2,7 ****
X--- 2,9 ----
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X+ /* to get the malloc() prototype from system.h */
X+ #define ALLOC_C /* comment line for pre-compiled headers */
X /* since this file is also used in auxiliary programs, don't include all the
X * function declarations for all of nethack
X */
X*** src/apply.c Tue Jun 26 21:20:14 1990
X--- src/apply.c Sat Jan 5 15:08:29 1991
X***************
X*** 1269,1275 ****
X int did_stat = 0;
X int i = rn2(A_MAX);
X for(j=0; j<A_MAX; j++) {
X! if ((blessed || j==i) && ABASE(i) < AMAX(i)) {
X did_something++;
X /* They may have to use it several times... */
X if (!did_stat) {
X--- 1269,1279 ----
X int did_stat = 0;
X int i = rn2(A_MAX);
X for(j=0; j<A_MAX; j++) {
X! /* don't recover strength lost while hungry */
X! if ((blessed || j==i) &&
X! ((j != A_STR || u.uhs < WEAK)
X! ? (ABASE(i) < AMAX(i))
X! : (ABASE(A_STR) < (AMAX(A_STR) - 1)))) {
X did_something++;
X /* They may have to use it several times... */
X if (!did_stat) {
X*** src/artifact.c Sat May 26 23:17:50 1990
X--- src/artifact.c Sat Jan 5 14:59:08 1991
X***************
X*** 164,170 ****
X {
X register const struct artifact *artif;
X
X! if(otmp)
X if(strlen(ONAME(otmp)))
X for(artif = artilist; artif->otyp; artif++)
X if(artif->otyp == otmp->otyp &&
X--- 164,170 ----
X {
X register const struct artifact *artif;
X
X! if(otmp && otmp->onamelth)
X if(strlen(ONAME(otmp)))
X for(artif = artilist; artif->otyp; artif++)
X if(artif->otyp == otmp->otyp &&
X***************
X*** 309,315 ****
X struct permonst *ptr;
X {
X if(!(weap->spfx & (SPFX_DBONUS | SPFX_ATTK)))
X! return(0);
X
X if(weap->spfx & SPFX_DMONS)
X return((ptr == &mons[(int)weap->mtype]));
X--- 309,315 ----
X struct permonst *ptr;
X {
X if(!(weap->spfx & (SPFX_DBONUS | SPFX_ATTK)))
X! return(weap->attk.adtyp == AD_PHYS);
X
X if(weap->spfx & SPFX_DMONS)
X return((ptr == &mons[(int)weap->mtype]));
X*** src/bones.c Mon May 21 22:21:08 1990
X--- src/bones.c Sat Jan 5 15:06:57 1991
X***************
X*** 92,99 ****
X && (!is_artifact(otmp) ||
X (exist_artifact(otmp,ONAME(otmp)) && restore))
X #endif
X! )
X otmp->onamelth = 0;
X #ifdef NAMED_ITEMS
X else if (is_artifact(otmp) && restore)
X artifact_exists(otmp,ONAME(otmp),TRUE);
X--- 92,101 ----
X && (!is_artifact(otmp) ||
X (exist_artifact(otmp,ONAME(otmp)) && restore))
X #endif
X! ) {
X otmp->onamelth = 0;
X+ *ONAME(otmp) = '\0';
X+ }
X #ifdef NAMED_ITEMS
X else if (is_artifact(otmp) && restore)
X artifact_exists(otmp,ONAME(otmp),TRUE);
X***************
X*** 218,223 ****
X--- 220,226 ----
X atl(u.ux, u.uy, mtmp->data->mlet);
X Your("body rises from the dead as %s...",
X an(mons[u.ugrave_arise].mname));
X+ more();
X }
X mtmp->m_lev = (u.ulevel ? u.ulevel : 1);
X mtmp->mhp = mtmp->mhpmax = u.uhpmax;
X***************
X*** 307,312 ****
X--- 310,323 ----
X bflush(fd);
X #endif
X (void) close(fd);
X+ #if defined(VMS) && !defined(SECURE)
X+ /*
X+ Re-protect bones file with world:read+write+execute+delete access.
X+ umask() doesn't seem very reliable; also, vaxcrtl won't let us set
X+ delete access without write access, which is what's really wanted.
X+ */
X+ (void) chmod(bones, FCMASK | 007); /* allow other users full access */
X+ #endif
X #ifdef MACOS
X {
X FInfo fndrInfo;
X***************
X*** 326,332 ****
X SetFInfo(name, (short)0, &fndrInfo);
X SetVol(0L, oldVol);
X }
X! #endif
X #ifdef COMPRESS
X compress_bones();
X #endif
X--- 337,343 ----
X SetFInfo(name, (short)0, &fndrInfo);
X SetVol(0L, oldVol);
X }
X! #endif /* MACOS */
X #ifdef COMPRESS
X compress_bones();
X #endif
X*** src/dbridge.c Thu May 31 00:31:26 1990
X--- src/dbridge.c Sun Jan 27 13:36:18 1991
X***************
X*** 425,435 ****
X done(how);
X /* So, you didn't die */
X if (!e_survives_at(etmp, etmp->ex, etmp->ey)) {
X pline("A %s force teleports you away...",
X! Hallucination ? "normal" : "strange");
X! (void) enexto(&xy, etmp->ex, etmp->ey,
X! etmp->edata);
X teleds(xy.x, xy.y);
X }
X }
X } else {
X--- 425,439 ----
X done(how);
X /* So, you didn't die */
X if (!e_survives_at(etmp, etmp->ex, etmp->ey)) {
X+ if (enexto(&xy, etmp->ex, etmp->ey,
X+ etmp->edata)) {
X pline("A %s force teleports you away...",
X! Hallucination ? "normal" : "strange");
X teleds(xy.x, xy.y);
X+ }
X+ /* otherwise on top of the drawbridge is the
X+ * only viable spot in the dungeon, so stay there
X+ */
X }
X }
X } else {
X***************
X*** 787,798 ****
X--- 791,812 ----
X do_entity(&(occupants[0]));
X do_entity(&(occupants[1]));
X redosym(x, y);
X+ if(OBJ_AT(x,y) && flags.soundok)
X+ You("hear smashing and crushing.");
X for (otmp = level.objects[x][y]; otmp; otmp = otmp2) {
X otmp2 = otmp->nexthere;
X+ if (otmp == uball)
X+ unpunish();
X+ if (otmp == uchain)
X+ continue;
X delobj(otmp);
X }
X for (otmp = level.objects[x2][y2]; otmp; otmp = otmp2) {
X otmp2 = otmp->nexthere;
X+ if (otmp == uball)
X+ unpunish();
X+ if (otmp == uchain)
X+ continue;
X delobj(otmp);
X }
X redosym(x2, y2);
X*** src/do.c Thu May 31 00:31:28 1990
X--- src/do.c Fri Jan 18 09:32:11 1991
X***************
X*** 11,16 ****
X--- 11,26 ----
X * below
X */
X #include <errno.h>
X+
X+ # ifdef _MSC_VER /* MSC 6.0 defines errno quite differently */
X+ # if (_MSC_VER >= 600)
X+ # define SKIP_ERRNO
X+ # endif
X+ # endif
X+ #endif /* STUPID_CPP */
X+
X+ #ifndef SKIP_ERRNO
X+ extern int errno;
X #endif
X
X #if defined(DGK)
X***************
X*** 640,646 ****
X * up a set of stairs sometimes does some very strange things!
X */
X #ifdef HARD
X! if(Inhell && up && !at_ladder &&
X (dlevel < MAXLEVEL-3) && u.uhave_amulet) {
X int olev = newlevel;
X
X--- 650,659 ----
X * up a set of stairs sometimes does some very strange things!
X */
X #ifdef HARD
X! if(Inhell && up &&
X! # ifdef STRONGHOLD
X! !at_ladder &&
X! # endif
X (dlevel < MAXLEVEL-3) && u.uhave_amulet) {
X int olev = newlevel;
X
X***************
X*** 818,824 ****
X #else
X if((fd = open(lock,0)) < 0) {
X #endif
X- extern int errno;
X pline("Cannot open \"%s\" (errno %d).", lock, errno);
X pline("Probably someone removed it.");
X done(TRICKED);
X--- 831,836 ----
X*** src/do_name.c Thu May 31 00:31:28 1990
X--- src/do_name.c Sat Jan 5 14:59:15 1991
X***************
X*** 149,154 ****
X--- 149,158 ----
X register char *curr;
X boolean blank;
X
X+ if (Hallucination) {
X+ You("would never recognize it anyway.");
X+ return 0;
X+ }
X cc.x = u.ux;
X cc.y = u.uy;
X getpos(&cc, 0, "the monster you want to name");
X***************
X*** 428,434 ****
X * or 'Asidonhopo the blue dragon'.
X */
X Strcat(buf, " ");
X! } else if(mtmp->mnamelth && !vb) {
X if(isinvis) {
X Strcpy(buf, "the invisible ");
X Strcat(buf, NAME(mtmp));
X--- 432,438 ----
X * or 'Asidonhopo the blue dragon'.
X */
X Strcat(buf, " ");
X! } else if(mtmp->mnamelth && !vb && !Hallucination) {
X if(isinvis) {
X Strcpy(buf, "the invisible ");
X Strcat(buf, NAME(mtmp));
X***************
X*** 460,466 ****
X Strcat(buf, "the ");
X Strcat(buf, Hallucination ? rndmonnam() : mtmp->data->mname);
X }
X! if(vb && mtmp->mnamelth) {
X Strcat(buf, " called ");
X Strcat(buf, NAME(mtmp));
X }
X--- 464,470 ----
X Strcat(buf, "the ");
X Strcat(buf, Hallucination ? rndmonnam() : mtmp->data->mname);
X }
X! if(vb && mtmp->mnamelth && !Hallucination) {
X Strcat(buf, " called ");
X Strcat(buf, NAME(mtmp));
X }
X*** src/do_wear.c Sun May 27 00:50:58 1990
X--- src/do_wear.c Thu Jan 31 12:35:27 1991
X***************
X*** 103,110 ****
X STATIC_PTR
X int
X Boots_on() {
X! long oldprop =
X! u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~(WORN_BOOTS | TIMEOUT);
X
X switch(uarmf->otyp) {
X case LOW_BOOTS:
X--- 103,109 ----
X STATIC_PTR
X int
X Boots_on() {
X! long oldprop = u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~WORN_BOOTS;
X
X switch(uarmf->otyp) {
X case LOW_BOOTS:
X***************
X*** 114,122 ****
X case JUMPING_BOOTS:
X break;
X case SPEED_BOOTS:
X! if (!oldprop) {
X makeknown(uarmf->otyp);
X! You("feel yourself speed up.");
X }
X break;
X case ELVEN_BOOTS:
X--- 113,124 ----
X case JUMPING_BOOTS:
X break;
X case SPEED_BOOTS:
X! /* Speed boots are still better than intrinsic speed, */
X! /* though not better than potion speed */
X! if (!(oldprop & TIMEOUT)) {
X makeknown(uarmf->otyp);
X! You("feel yourself speed up%s.",
X! oldprop ? " a bit more" : "");
X }
X break;
X case ELVEN_BOOTS:
X***************
X*** 126,132 ****
X }
X break;
X case FUMBLE_BOOTS:
X! if (!oldprop)
X Fumbling += rnd(20);
X break;
X case LEVITATION_BOOTS:
X--- 128,134 ----
X }
X break;
X case FUMBLE_BOOTS:
X! if (!(oldprop & ~TIMEOUT))
X Fumbling += rnd(20);
X break;
X case LEVITATION_BOOTS:
X***************
X*** 146,160 ****
X /* For levitation, float_down() returns if Levitation, so we
X * must do a setworn() _before_ the levitation case.
X */
X! long oldprop =
X! u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~(WORN_BOOTS | TIMEOUT);
X
X setworn((struct obj *)0, W_ARMF);
X switch(obj->otyp) {
X case SPEED_BOOTS:
X! if (!oldprop) {
X makeknown(obj->otyp);
X! You("feel yourself slow down.");
X }
X break;
X case WATER_WALKING_BOOTS:
X--- 148,162 ----
X /* For levitation, float_down() returns if Levitation, so we
X * must do a setworn() _before_ the levitation case.
X */
X! long oldprop = u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~WORN_BOOTS;
X
X setworn((struct obj *)0, W_ARMF);
X switch(obj->otyp) {
X case SPEED_BOOTS:
X! if (!(oldprop & TIMEOUT)) {
X makeknown(obj->otyp);
X! You("feel yourself slow down%s.",
X! oldprop ? " a bit" : "");
X }
X break;
X case WATER_WALKING_BOOTS:
X***************
X*** 175,181 ****
X }
X break;
X case FUMBLE_BOOTS:
X! if (!oldprop)
X Fumbling = 0;
X break;
X case LEVITATION_BOOTS:
X--- 177,183 ----
X }
X break;
X case FUMBLE_BOOTS:
X! if (!(oldprop & ~TIMEOUT))
X Fumbling = 0;
X break;
X case LEVITATION_BOOTS:
X***************
X*** 501,508 ****
X--- 503,516 ----
X }
X (void)strcat(SAVEF, ".sav");
X # else
X+ # ifdef MACOS
X+ strncpy(SAVEF, plname, (FILENAME - 2)); /* .e */
X+ SAVEF[(FILENAME - 2)] = '\0';
X+ regularize(SAVEF);
X+ # else
X Sprintf(SAVEF, "save/%d%s", getuid(), plname);
X regularize(SAVEF+5); /* avoid . or / in name */
X+ # endif
X # endif
X #endif
X #ifdef WIZARD
X*** src/dogmove.c Sat May 26 23:17:41 1990
X--- src/dogmove.c Mon Feb 4 16:32:11 1991
X***************
X*** 29,46 ****
X
X if(edog->hungrytime < moves)
X edog->hungrytime = moves;
X! /* Note: to get the correct percentage-eaten in case oeaten is set,
X! * use "obj->owt / obj->quan / base-weight". It so happens that here
X! * we want to multiply by obj->quan, which thus cancels out.
X * It is arbitrary that the pet takes the same length of time to eat
X! * as a human, but gets 5X as much nutrition.
X */
X if(obj->otyp == CORPSE) {
X mtmp->meating = 3 + (mons[obj->corpsenm].cwt >> 2);
X! nutrit = 5 * mons[obj->corpsenm].cnutrit;
X } else {
X mtmp->meating = objects[obj->otyp].oc_delay;
X! nutrit = 5 * objects[obj->otyp].nutrition;
X }
X if(obj->oeaten) {
X mtmp->meating = eaten_stat(mtmp->meating, obj);
X--- 29,44 ----
X
X if(edog->hungrytime < moves)
X edog->hungrytime = moves;
X! /*
X * It is arbitrary that the pet takes the same length of time to eat
X! * as a human, but gets 4X as much nutrition.
X */
X if(obj->otyp == CORPSE) {
X mtmp->meating = 3 + (mons[obj->corpsenm].cwt >> 2);
X! nutrit = 4 * mons[obj->corpsenm].cnutrit;
X } else {
X mtmp->meating = objects[obj->otyp].oc_delay;
X! nutrit = 4 * objects[obj->otyp].nutrition;
X }
X if(obj->oeaten) {
X mtmp->meating = eaten_stat(mtmp->meating, obj);
X***************
X*** 50,56 ****
X mtmp->mconf = 0;
X if (mtmp->mtame < 20) mtmp->mtame++;
X if(cansee(x,y))
X! pline("%s eats %s.", Monnam(mtmp), doname(obj));
X /* perhaps this was a reward */
X if(otyp != CADAVER)
X #ifdef LINT
X--- 48,54 ----
X mtmp->mconf = 0;
X if (mtmp->mtame < 20) mtmp->mtame++;
X if(cansee(x,y))
X! pline("%s eats %s.", Monnam(mtmp), singular(obj, doname));
X /* perhaps this was a reward */
X if(otyp != CADAVER)
X #ifdef LINT
X***************
X*** 59,65 ****
X edog->apport += (unsigned)(200L/
X ((long)edog->dropdist+moves-edog->droptime));
X #endif
X! delobj(obj);
X }
X
X #endif /* OVLB */
X--- 57,66 ----
X edog->apport += (unsigned)(200L/
X ((long)edog->dropdist+moves-edog->droptime));
X #endif
X! if (obj->quan > 1)
X! obj->quan--;
X! else
X! delobj(obj);
X }
X
X #endif /* OVLB */
X*** src/eat.c Thu May 31 00:31:30 1990
X--- src/eat.c Sun Feb 3 12:34:00 1991
X***************
X*** 1309,1315 ****
X--- 1309,1318 ----
X pline("Stop eating? ");
X if(yn() == 'y')
X #endif
X+ {
X reset_eat();
X+ nomovemsg = NULL;
X+ }
X }
X }
X }
X***************
X*** 1522,1534 ****
X register int base;
X register struct obj *obj;
X {
X! base *= obj->oeaten;
X
X if (obj->otyp == CORPSE)
X base = mons[obj->corpsenm].cnutrit ?
X! base / mons[obj->corpsenm].cnutrit : 0;
X else base = objects[obj->otyp].nutrition ?
X! base / objects[obj->otyp].nutrition : 0;
X return (base < 1) ? 1 : base;
X }
X
X--- 1525,1540 ----
X register int base;
X register struct obj *obj;
X {
X! long long_base;
X
X+ long_base = (long )base;
X+ long_base *= (long )obj->oeaten;
X+
X if (obj->otyp == CORPSE)
X base = mons[obj->corpsenm].cnutrit ?
X! (int)(long_base / (long )mons[obj->corpsenm].cnutrit) : 0;
X else base = objects[obj->otyp].nutrition ?
X! (int)(long_base / (long )objects[obj->otyp].nutrition) : 0;
X return (base < 1) ? 1 : base;
X }
X
X*** src/end.c Tue Jun 26 21:20:16 1990
X--- src/end.c Fri Feb 1 10:48:14 1991
X***************
X*** 348,354 ****
X #endif
X if(Lifesaved && how <= GENOCIDED) {
X u.uswldtim = 0;
X! if(u.uhpmax < 0) u.uhpmax = 10; /* arbitrary */
X u.uhp = u.uhpmax;
X adjattrib(A_CON, -1, TRUE);
X pline("But wait...");
X--- 348,354 ----
X #endif
X if(Lifesaved && how <= GENOCIDED) {
X u.uswldtim = 0;
X! if(u.uhpmax <= 0) u.uhpmax = 10; /* arbitrary */
X u.uhp = u.uhpmax;
X adjattrib(A_CON, -1, TRUE);
X pline("But wait...");
X***************
X*** 355,360 ****
X--- 355,364 ----
X makeknown(AMULET_OF_LIFE_SAVING);
X Your("medallion %s!",
X !Blind ? "begins to glow" : "feels warm");
X+ if (how == CHOKING) {
X+ init_uhunger();
X+ You("vomit ...");
X+ }
X You("feel much better!");
X pline("The medallion crumbles to dust!");
X useup(uamul);
X***************
X*** 377,386 ****
X pline("Die? ");
X if(yn() == 'y') goto die;
X u.uswldtim = 0;
X! if(u.uhpmax < 0) u.uhpmax = 100; /* arbitrary */
X u.uhp = u.uhpmax;
X if (u.uhunger < 500) u.uhunger = 500;
X! pline("Ok, so you don't die.");
X nomovemsg = "You survived that attempt on your life.";
X curs_on_u();
X flags.move = 0;
X--- 381,392 ----
X pline("Die? ");
X if(yn() == 'y') goto die;
X u.uswldtim = 0;
X! if(u.uhpmax <= 0) u.uhpmax = 100; /* arbitrary */
X u.uhp = u.uhpmax;
X if (u.uhunger < 500) u.uhunger = 500;
X! if (how == CHOKING) init_uhunger();
X! pline("Ok, so you don't %s.",
X! (how == CHOKING) ? "choke" : "die");
X nomovemsg = "You survived that attempt on your life.";
X curs_on_u();
X flags.move = 0;
X*** src/getline.c Wed Apr 11 22:17:42 1990
X--- src/getline.c Tue Jan 29 16:32:34 1991
X***************
X*** 9,15 ****
X * Some systems may have getchar() return EOF for various reasons, and
X * we should not quit before seeing at least NR_OF_EOFS consecutive EOFs.
X */
X! #if defined(SYSV) || defined(DGUX)
X #define NR_OF_EOFS 20
X #endif
X #ifdef MACOS
X--- 9,15 ----
X * Some systems may have getchar() return EOF for various reasons, and
X * we should not quit before seeing at least NR_OF_EOFS consecutive EOFs.
X */
X! #if defined(SYSV) || defined(DGUX) || defined(HPUX)
X #define NR_OF_EOFS 20
X #endif
X #ifdef MACOS
X***************
X*** 257,266 ****
X char
X readchar() {
X register int sym;
X
X (void) fflush(stdout);
X #ifdef UNIX
X! if((sym = Getchar()) == EOF)
X # ifdef NR_OF_EOFS
X { /*
X * Some SYSV systems seem to return EOFs for various reasons
X--- 257,276 ----
X char
X readchar() {
X register int sym;
X+ #ifdef UNIX
X+ /* kludge alert: Some Unix variants return funny values if readchar
X+ * is called, interrupted, and then called again from done2(). There
X+ * is non-reentrant code in the internal _filbuf() routine, called by
X+ * getc().
X+ */
X+ static int nesting = 0;
X+ char nestbuf;
X+ #endif
X
X (void) fflush(stdout);
X #ifdef UNIX
X! if((sym = ((++nesting == 1) ? Getchar() :
X! (read(fileno(stdin),&nestbuf,1) == 1 ? (int)nestbuf : EOF))) == EOF)
X # ifdef NR_OF_EOFS
X { /*
X * Some SYSV systems seem to return EOFs for various reasons
X***************
X*** 281,286 ****
X--- 291,299 ----
X #else
X sym = Getchar();
X #endif /* UNIX */
X+ #ifdef UNIX
X+ nesting--;
X+ #endif
X if(flags.toplin == 1)
X flags.toplin = 2;
X return((char) sym);
X*** src/hack.c Tue Jun 26 21:20:18 1990
X--- src/hack.c Sat Jan 5 14:59:26 1991
X***************
X*** 788,793 ****
X--- 788,801 ----
X /* suppress "used before set" message */
X x0 = y0 = m0 = 0;
X #endif
X+ #ifdef POLYSELF
X+ /* Grid bugs stop if trying to move diagonal, even if blind. Maybe */
X+ /* they polymorphed while in the middle of a long move. */
X+ if (u.umonnum == PM_GRID_BUG && u.dx && u.dy) {
X+ nomul(0);
X+ return;
X+ }
X+ #endif
X if(Blind || flags.run == 0) return;
X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) {
X if(!isok(x,y)) continue;
X*** src/invent.c Thu May 31 00:31:49 1990
X--- src/invent.c Thu Jan 10 09:52:44 1991
X***************
X*** 14,19 ****
X--- 14,29 ----
X #ifdef OVL1
X static boolean FDECL(mergable,(struct obj *,struct obj *));
X static int FDECL(merged,(struct obj *,struct obj *,int));
X+ # ifdef WIZARD
X+ /* wizards can wish for venom, which will become an invisible inventory
X+ * item without this. putting it in inv_order would mean venom would
X+ * suddenly become a choice for all the inventory-class commands, which
X+ * would probably cause mass confusion. the test for inventory venom
X+ * is only WIZARD and not wizard because the wizard can leave venom lying
X+ * around on a bones level for normal players to find.
X+ */
X+ char venom_inv[] = { VENOM_SYM, 0 };
X+ # endif
X #endif /* OVL1 */
X STATIC_DCL void FDECL(assigninvlet,(struct obj *));
X STATIC_DCL struct obj *FDECL(mkgoldobj,(long));
X***************
X*** 167,173 ****
X obj->quan--;
X obj->owt = weight(obj);
X } else {
X! if(obj->otyp == CORPSE) food_disappears(obj);
X setnotworn(obj);
X freeinv(obj);
X delete_contents(obj);
X--- 177,183 ----
X obj->quan--;
X obj->owt = weight(obj);
X } else {
X! if(obj->olet == FOOD_SYM) food_disappears(obj);
X setnotworn(obj);
X freeinv(obj);
X delete_contents(obj);
X***************
X*** 216,222 ****
X #ifdef WALKIES
X if(obj->otyp == LEASH && obj->leashmon != 0) o_unleash(obj);
X #endif
X! if(obj->otyp == CORPSE) food_disappears(obj);
X
X freeobj(obj);
X unpobj(obj);
X--- 226,232 ----
X #ifdef WALKIES
X if(obj->otyp == LEASH && obj->leashmon != 0) o_unleash(obj);
X #endif
X! if(obj->olet == FOOD_SYM) food_disappears(obj);
X
X freeobj(obj);
X unpobj(obj);
X***************
X*** 961,967 ****
X }
X if(!flags.invlet_constant) if(++ilet > 'z') ilet = 'A';
X }
X! if (flags.sortpack && *++invlet) goto nextclass;
X any[ct] = 0;
X cornline(2, any);
X }
X--- 971,985 ----
X }
X if(!flags.invlet_constant) if(++ilet > 'z') ilet = 'A';
X }
X! if (flags.sortpack) {
X! if (*++invlet) goto nextclass;
X! #ifdef WIZARD
X! if (--invlet != venom_inv) {
X! invlet = venom_inv;
X! goto nextclass;
X! }
X! #endif
X! }
X any[ct] = 0;
X cornline(2, any);
X }
X***************
X*** 1028,1036 ****
X return(0);
X }
X
X! if((c == 'u' || c == 'U') && !unpd) {
X You("are not carrying any unpaid objects.");
X return(0);
X }
X
X stct = 0;
X--- 1046,1057 ----
X return(0);
X }
X
X! if (c == 'u' || c == 'U') {
X! if (!unpd) {
X You("are not carrying any unpaid objects.");
X return(0);
X+ } else
X+ c = 'u';
X }
X
X stct = 0;
X***************
X*** 1385,1394 ****
X--- 1406,1420 ----
X #endif
X "Rings", "Gems"};
X
X+ #ifdef WIZARD
X+ static const char NEARDATA *venom_name = "Venoms";
X+ #endif
X+
X char *
X let_to_name(let)
X char let;
X {
X+ const char *class_name;
X const char *pos = index(obj_symbols, let);
X /* arbitrary buffer size by Tom May (tom@uw-warp) */
X static char NEARDATA *buf = NULL;
X***************
X*** 1401,1411 ****
X Boulders/Statues + '\0'
X 1234567890123456 = 16 + 1 = 17
X */
X! if (pos == NULL) pos = obj_symbols;
X if (HI && HE)
X! Sprintf(buf, "%s%s%s", HI, names[pos - obj_symbols], HE);
X else
X! Sprintf(buf, "%s", names[pos - obj_symbols]);
X return (buf);
X }
X
X--- 1427,1446 ----
X Boulders/Statues + '\0'
X 1234567890123456 = 16 + 1 = 17
X */
X! #ifdef WIZARD
X! if (pos == NULL && let == VENOM_SYM)
X! class_name = venom_name;
X! else {
X! #endif
X! if (pos == NULL) pos = obj_symbols;
X! class_name = names[pos - obj_symbols];
X! #ifdef WIZARD
X! }
X! #endif
X if (HI && HE)
X! Sprintf(buf, "%s%s%s", HI, class_name, HE);
X else
X! Sprintf(buf, "%s", class_name);
X return (buf);
X }
X
X*** src/ioctl.c Tue May 8 08:52:03 1990
X--- src/ioctl.c Wed Jan 16 16:42:27 1991
X***************
X*** 12,21 ****
X #define MONFLAG_H
X #include "hack.h"
X
X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX)
X # ifdef HPUX
X #include <bsdtty.h>
X # else
X #include <sgtty.h>
X # endif
X struct ltchars ltchars;
X--- 12,24 ----
X #define MONFLAG_H
X #include "hack.h"
X
X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX) || defined(AIX_31)
X # ifdef HPUX
X #include <bsdtty.h>
X # else
X+ # if defined(AIX_31) && !defined(_ALL_SOURCE)
X+ # define _ALL_SOURCE /* causes struct winsize to be present */
X+ # endif
X #include <sgtty.h>
X # endif
X struct ltchars ltchars;
X***************
X*** 30,42 ****
X
X void
X getioctls() {
X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX)
X (void) ioctl(fileno(stdin), (int) TIOCGLTC, (char *) <chars);
X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars0);
X #else
X (void) ioctl(fileno(stdin), (int) TCGETA, &termio);
X #endif
X! #if defined(TIOCGWINSZ) && (defined(BSD) || defined(ULTRIX))
X {
X /*
X * ttysize is found on Suns and BSD
X--- 33,45 ----
X
X void
X getioctls() {
X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX) || defined(AIX_31)
X (void) ioctl(fileno(stdin), (int) TIOCGLTC, (char *) <chars);
X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars0);
X #else
X (void) ioctl(fileno(stdin), (int) TCGETA, &termio);
X #endif
X! #if defined(TIOCGWINSZ) && (defined(BSD) || defined(ULTRIX) || defined(AIX_31))
X {
X /*
X * ttysize is found on Suns and BSD
X***************
X*** 61,67 ****
X
X void
X setioctls() {
X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX)
X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars);
X #else
X /* Now modified to run under Sys V R3. - may have to be #ifdef'ed */
X--- 64,70 ----
X
X void
X setioctls() {
X! #if defined(BSD) || defined(ULTRIX) || defined(HPUX) || defined(AIX_31)
X (void) ioctl(fileno(stdin), (int) TIOCSLTC, (char *) <chars);
X #else
X /* Now modified to run under Sys V R3. - may have to be #ifdef'ed */
X*** src/lev_comp.l Mon Apr 23 21:56:28 1990
X--- src/lev_comp.l Mon Feb 4 16:19:20 1991
X***************
X*** 22,31 ****
X--- 22,39 ----
X int NDECL (yyinput);
X int NDECL (yywrap);
X int NDECL (yylex);
X+ # ifdef NeXT
X+ void FDECL (yyunput, (int));
X+ void FDECL (yyoutput, (int));
X+ # else
X int FDECL (yyunput, (int));
X int FDECL (yyoutput, (int));
X+ # endif
X #endif
X
X+ void FDECL (init_yyin, (FILE *));
X+ void FDECL (init_yyout, (FILE *));
X+
X #ifdef MSDOS
X #undef exit
X extern void FDECL(exit, (int));
X***************
X*** 61,67 ****
X %s MAPC
X %%
X <MAPC>[-|}{+SK\\#. ]*\n { line_number++; yymore(); }
X! <MAPC>ENDMAP\n { BEGIN 0;
X line_number++;
X yytext[yyleng-7] = 0; /* Discard \nENDMAP */
X yylval.map = (char *) alloc(strlen(yytext)+1);
X--- 69,88 ----
X %s MAPC
X %%
X <MAPC>[-|}{+SK\\#. ]*\n { line_number++; yymore(); }
X! <MAPC>ENDMAP\n {
X! #ifdef FLEX_SCANNER
X! /*
X! * There is a bug in Flex 2.3 patch level < 6
X! * (absent in previous versions)
X! * that results in the following behaviour :
X! * Once you enter an yymore(), you never exit from it.
X! * This should do the trick!
X! */
X! extern int yy_more_len;
X!
X! yy_more_len = 0;
X! #endif
X! BEGIN 0;
X line_number++;
X yytext[yyleng-7] = 0; /* Discard \nENDMAP */
X yylval.map = (char *) alloc(strlen(yytext)+1);
X***************
X*** 132,134 ****
X--- 153,174 ----
X return ((long *)malloc (n));
X }
X #endif
X+
X+ /* routine to switch to another input file; needed for flex */
X+ void init_yyin( input_f )
X+ FILE *input_f;
X+ {
X+ #ifdef FLEX_SCANNER
X+ if (yyin != NULL)
X+ yyrestart(input_f);
X+ else
X+ #endif
X+ yyin = input_f;
X+ }
X+ /* analogous routine (for completeness) */
X+ void init_yyout( output_f )
X+ FILE *output_f;
X+ {
X+ yyout = output_f;
X+ }
X+
X*** src/lev_lex.c Mon May 28 16:18:56 1990
X--- src/lev_lex.c Mon Feb 4 16:46:34 1991
X***************
X*** 48,57 ****
X--- 48,65 ----
X int NDECL (yyinput);
X int NDECL (yywrap);
X int NDECL (yylex);
X+ # ifdef NeXT
X+ void FDECL (yyunput, (int));
X+ void FDECL (yyoutput, (int));
X+ # else
X int FDECL (yyunput, (int));
X int FDECL (yyoutput, (int));
X+ # endif
X #endif
X
X+ void FDECL (init_yyin, (FILE *));
X+ void FDECL (init_yyout, (FILE *));
X+
X #ifdef MSDOS
X #undef exit
X extern void FDECL(exit, (int));
X***************
X*** 95,101 ****
X { line_number++; yymore(); }
X break;
X case 2:
X! { BEGIN 0;
X line_number++;
X yytext[yyleng-7] = 0; /* Discard \nENDMAP */
X yylval.map = (char *) alloc(strlen(yytext)+1);
X--- 103,122 ----
X { line_number++; yymore(); }
X break;
X case 2:
X! {
X! #ifdef FLEX_SCANNER
X! /*
X! * There is a bug in Flex 2.3 patch level < 6
X! * (absent in previous versions)
X! * that results in the following behaviour :
X! * Once you enter an yymore(), you never exit from it.
X! * This should do the trick!
X! */
X! extern int yy_more_len;
X!
X! yy_more_len = 0;
X! #endif
X! BEGIN 0;
X line_number++;
X yytext[yyleng-7] = 0; /* Discard \nENDMAP */
X yylval.map = (char *) alloc(strlen(yytext)+1);
X***************
X*** 278,283 ****
X--- 299,323 ----
X return ((long *)malloc (n));
X }
X #endif
X+
X+ /* routine to switch to another input file; needed for flex */
X+ void init_yyin( input_f )
X+ FILE *input_f;
X+ {
X+ #ifdef FLEX_SCANNER
X+ if (yyin != NULL)
X+ yyrestart(input_f);
X+ else
X+ #endif
X+ yyin = input_f;
X+ }
X+ /* analogous routine (for completeness) */
X+ void init_yyout( output_f )
X+ FILE *output_f;
X+ {
X+ yyout = output_f;
X+ }
X+
X int yyvstop[] ={
X 0,
X
X*** src/makedefs.c Sun May 27 20:44:51 1990
X--- src/makedefs.c Thu Jan 31 13:45:44 1991
X***************
X*** 103,110 ****
X
X char * FDECL(tmpdup, (const char *));
X
X! #if defined(SYSV) || defined(GENIX) || defined(UNIXDEBUG)
X! void FDECL(rename, (char *, char *));
X #endif
X
X #ifdef SMALLDATA
X--- 103,110 ----
X
X char * FDECL(tmpdup, (const char *));
X
X! #if defined(SYSV) || defined(GENIX)
X! int FDECL(rename, (const char *, const char *));
X #endif
X
X #ifdef SMALLDATA
X***************
X*** 286,292 ****
X #if defined(MSDOS) || defined(MACOS)
X remove(TRAP_FILE);
X #endif
X! rename(tempfile, TRAP_FILE);
X return;
X }
X
X--- 286,292 ----
X #if defined(MSDOS) || defined(MACOS)
X remove(TRAP_FILE);
X #endif
X! (void) rename(tempfile, TRAP_FILE);
X return;
X }
X
X***************
X*** 308,315 ****
X--- 308,323 ----
X }
X
X /* get size of true rumors file */
X+ #ifndef VMS
X (void) fseek(stdin, 0L, 2);
X true_rumor_size = ftell(stdin);
X+ #else
X+ /* seek+tell is only valid for stream format files; since rumors.%%%
X+ might be in record format, count the acutal data bytes instead.
X+ */
X+ true_rumor_size = 0;
X+ while (gets(in_line) != NULL) true_rumor_size += strlen(in_line) + 1;
X+ #endif /* VMS */
X (void) fwrite((genericptr_t)&true_rumor_size,sizeof(long),1,stdout);
X (void) fseek(stdin, 0L, 0);
X
X***************
X*** 600,609 ****
X return buf;
X }
X
X! #if defined(SYSV) || defined(GENIX) || defined(UNIXDEBUG)
X! void
X rename(oldname, newname)
X! char *oldname, *newname;
X {
X if (strcmp(oldname, newname)) {
X (void) unlink(newname);
X--- 608,621 ----
X return buf;
X }
X
X! #if defined(SYSV) || defined(GENIX)
X! /* later SYSV (SVR3+?) systems have rename() a la POSIX and BSD.
X! * redefining it (with the same functionality) should be ok as long
X! * as it's the same type.
X! */
X! int
X rename(oldname, newname)
X! const char *oldname, *newname;
X {
X if (strcmp(oldname, newname)) {
X (void) unlink(newname);
X***************
X*** 610,616 ****
X (void) link(oldname, newname);
X (void) unlink(oldname);
X }
X! return;
X }
X #endif
X
X--- 622,628 ----
X (void) link(oldname, newname);
X (void) unlink(oldname);
X }
X! return 0;
X }
X #endif
X
X*** src/makemon.c Tue Jun 26 21:20:21 1990
X--- src/makemon.c Sun Jan 6 15:55:52 1991
X***************
X*** 119,125 ****
X BOULDER : CLUB);
X break;
X case S_HUMAN:
X! if(is_mercenary(ptr))
X switch (mm) {
X
X #ifdef ARMY
X--- 119,125 ----
X BOULDER : CLUB);
X break;
X case S_HUMAN:
X! if(is_mercenary(ptr)) {
X switch (mm) {
X
X #ifdef ARMY
X***************
X*** 140,146 ****
X if (!rn2(7)) (void) mongets(mtmp, SPEAR);
X break;
X }
X! break;
X
X case S_HUMANOID:
X #ifdef TOLKIEN
X--- 140,190 ----
X if (!rn2(7)) (void) mongets(mtmp, SPEAR);
X break;
X }
X! #ifdef TOLKIEN
X! } else if (is_elf(ptr)) {
X! (void)mongets(mtmp,
X! rn2(2) ? ELVEN_MITHRIL_COAT : ELVEN_CLOAK);
X! if (rn2(2)) (void)mongets(mtmp, ELVEN_LEATHER_HELM);
X! if (rn2(3)) (void)mongets(mtmp, ELVEN_DAGGER);
X! switch (rn2(3)) {
X! case 0:
X! if (!rn2(4)) (void)mongets(mtmp, ELVEN_SHIELD);
X! (void)mongets(mtmp, ELVEN_SHORT_SWORD);
X! (void)mongets(mtmp, ELVEN_BOW);
X! m_initthrow(mtmp, ELVEN_ARROW, 12);
X! break;
X! case 1:
X! (void)mongets(mtmp, ELVEN_BROADSWORD);
X! if (rn2(2)) (void)mongets(mtmp, ELVEN_SHIELD);
X! break;
X! case 2:
X! (void)mongets(mtmp, ELVEN_SPEAR);
X! (void)mongets(mtmp, ELVEN_SHIELD);
X! break;
X! }
X! #else /* TOLKIEN */
X! } else if (is_elf(ptr)) {
X! (void)mongets(mtmp, ELVEN_CLOAK);
X! if (rn2(3)) (void)mongets(mtmp, DAGGER);
X! switch (rn2(3)) {
X! case 0:
X! if (!rn2(4)) (void)mongets(mtmp, SMALL_SHIELD);
X! (void)mongets(mtmp, SHORT_SWORD);
X! (void)mongets(mtmp, BOW);
X! m_initthrow(mtmp, ARROW, 12);
X! break;
X! case 1:
X! (void)mongets(mtmp, BROADSWORD);
X! if (rn2(2)) (void)mongets(mtmp, SMALL_SHIELD);
X! break;
X! case 2:
X! (void)mongets(mtmp, SPEAR);
X! (void)mongets(mtmp, SMALL_SHIELD);
X! break;
X! }
X! #endif
X! }
X! break;
X
X case S_HUMANOID:
X #ifdef TOLKIEN
X***************
X*** 174,200 ****
X } else {
X (void)mongets(mtmp, PICK_AXE);
X }
X- } else if (is_elf(ptr)) {
X- (void)mongets(mtmp,
X- rn2(2) ? ELVEN_MITHRIL_COAT : ELVEN_CLOAK);
X- if (rn2(2)) (void)mongets(mtmp, ELVEN_LEATHER_HELM);
X- if (rn2(3)) (void)mongets(mtmp, ELVEN_DAGGER);
X- switch (rn2(3)) {
X- case 0:
X- if (!rn2(4)) (void)mongets(mtmp, ELVEN_SHIELD);
X- (void)mongets(mtmp, ELVEN_SHORT_SWORD);
X- (void)mongets(mtmp, ELVEN_BOW);
X- m_initthrow(mtmp, ELVEN_ARROW, 12);
X- break;
X- case 1:
X- (void)mongets(mtmp, ELVEN_BROADSWORD);
X- if (rn2(2)) (void)mongets(mtmp, ELVEN_SHIELD);
X- break;
X- case 2:
X- (void)mongets(mtmp, ELVEN_SPEAR);
X- (void)mongets(mtmp, ELVEN_SHIELD);
X- break;
X- }
X }
X #else /* TOLKIEN */
X if (is_dwarf(ptr)) {
X--- 218,223 ----
X***************
X*** 210,234 ****
X (void)mongets(mtmp, DWARVISH_MITHRIL_COAT);
X } else {
X (void)mongets(mtmp, PICK_AXE);
X- }
X- } else if (is_elf(ptr)) {
X- (void)mongets(mtmp, ELVEN_CLOAK);
X- if (rn2(3)) (void)mongets(mtmp, DAGGER);
X- switch (rn2(3)) {
X- case 0:
X- if (!rn2(4)) (void)mongets(mtmp, SMALL_SHIELD);
X- (void)mongets(mtmp, SHORT_SWORD);
X- (void)mongets(mtmp, BOW);
X- m_initthrow(mtmp, ARROW, 12);
X- break;
X- case 1:
X- (void)mongets(mtmp, BROADSWORD);
X- if (rn2(2)) (void)mongets(mtmp, SMALL_SHIELD);
X- break;
X- case 2:
X- (void)mongets(mtmp, SPEAR);
X- (void)mongets(mtmp, SMALL_SHIELD);
X- break;
X }
X }
X #endif /* TOLKIEN */
X--- 233,238 ----
X*** src/mhitm.c Thu May 31 00:31:36 1990
X--- src/mhitm.c Sun Jan 6 15:56:11 1991
X***************
X*** 274,304 ****
X
X mx = magr->mx;
X my = magr->my;
X! /* move over top of the defender */
X if(cansee(mdef->mx, mdef->my)) unpmon(mdef);
X if(cansee(magr->mx, magr->my)) unpmon(magr);
X! magr->mx = mdef->mx;
X! magr->my = mdef->my;
X if(cansee(magr->mx, magr->my)) pmon(magr);
X! if((tmp = mdamagem(magr, mdef, mattk)) == 2) {
X! remove_monster(mx, my);
X! place_monster(magr, magr->mx, magr->my);
X /* if mdamagem left a corpse it erased magr's symbol */
X unpmon(magr);
X pmon(magr);
X! return(2); /* defender died */
X } else { /* defender survived */
X if(cansee(mdef->mx, mdef->my))
X pline("%s is regurgitated!", Monnam(mdef));
X if(cansee(magr->mx, magr->my)) unpmon(magr);
X! magr->mx = mx;
X! magr->my = my;
X /* move off of defender */
X if(cansee(magr->mx, magr->my)) pmon(magr);
X if(cansee(mdef->mx, mdef->my)) pmon(mdef);
X- nscr();
X- return(tmp);
X }
X }
X
X static int
X--- 274,305 ----
X
X mx = magr->mx;
X my = magr->my;
X! /* move over top of the defender */
X if(cansee(mdef->mx, mdef->my)) unpmon(mdef);
X if(cansee(magr->mx, magr->my)) unpmon(magr);
X! remove_monster(mx, my);
X! place_monster(magr, mdef->mx, mdef->my);
X if(cansee(magr->mx, magr->my)) pmon(magr);
X!
X! if((tmp = mdamagem(magr, mdef, mattk)) == 2) { /* defender died */
X /* if mdamagem left a corpse it erased magr's symbol */
X unpmon(magr);
X pmon(magr);
X! } else if (tmp == -1) { /* agressor died, put defender back */
X! place_monster(mdef, mdef->mx, mdef->my);
X! if(cansee(mdef->mx, mdef->my)) pmon(mdef);
X } else { /* defender survived */
X if(cansee(mdef->mx, mdef->my))
X pline("%s is regurgitated!", Monnam(mdef));
X if(cansee(magr->mx, magr->my)) unpmon(magr);
X! place_monster(magr, mx, my);
X! place_monster(mdef, mdef->mx, mdef->my);
X /* move off of defender */
X if(cansee(magr->mx, magr->my)) pmon(magr);
X if(cansee(mdef->mx, mdef->my)) pmon(mdef);
X }
X+ nscr();
X+ return(tmp);
X }
X
X static int
X***************
X*** 393,399 ****
X tmp += destroy_mitem(mdef, SPBOOK_SYM, AD_FIRE);
X #endif
X if(resists_fire(pd)) {
X! pline("The fire doesn't seem to burn %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X #ifdef GOLEMS
X golemeffects(mdef, AD_FIRE, tmp);
X--- 394,402 ----
X tmp += destroy_mitem(mdef, SPBOOK_SYM, AD_FIRE);
X #endif
X if(resists_fire(pd)) {
X! if (vis)
X! pline("The fire doesn't seem to burn %s!",
X! mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X #ifdef GOLEMS
X golemeffects(mdef, AD_FIRE, tmp);
X***************
X*** 410,417 ****
X }
X if(vis) pline("%s is covered in frost!", Monnam(mdef));
X if(resists_cold(pd)) {
X! pline("The frost doesn't seem to chill %s!",
X! mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X #ifdef GOLEMS
X golemeffects(mdef, AD_COLD, tmp);
X--- 413,421 ----
X }
X if(vis) pline("%s is covered in frost!", Monnam(mdef));
X if(resists_cold(pd)) {
X! if (vis)
X! pline("The frost doesn't seem to chill %s!",
X! mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X #ifdef GOLEMS
X golemeffects(mdef, AD_COLD, tmp);
X***************
X*** 428,434 ****
X if(vis) pline("%s gets zapped!", Monnam(mdef));
X tmp += destroy_mitem(mdef, WAND_SYM, AD_ELEC);
X if(resists_elec(pd)) {
X! pline("The zap doesn't shock %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X #ifdef GOLEMS
X golemeffects(mdef, AD_ELEC, tmp);
X--- 432,438 ----
X if(vis) pline("%s gets zapped!", Monnam(mdef));
X tmp += destroy_mitem(mdef, WAND_SYM, AD_ELEC);
X if(resists_elec(pd)) {
X! if (vis) pline("The zap doesn't shock %s!", mon_nam(mdef));
X shieldeff(mdef->mx, mdef->my);
X #ifdef GOLEMS
X golemeffects(mdef, AD_ELEC, tmp);
X***************
X*** 444,453 ****
X break;
X }
X if(resists_acid(pd)) {
X! pline("%s is covered in acid, but it seems harmless.",
X! Monnam(mdef));
X tmp = 0;
X! } else {
X pline("%s is covered in acid!", Monnam(mdef));
X pline("It burns %s!", mon_nam(mdef));
X }
X--- 448,458 ----
X break;
X }
X if(resists_acid(pd)) {
X! if (vis)
X! pline("%s is covered in acid, but it seems harmless.",
X! Monnam(mdef));
X tmp = 0;
X! } else if (vis) {
X pline("%s is covered in acid!", Monnam(mdef));
X pline("It burns %s!", mon_nam(mdef));
X }
X*** src/mhitu.c Tue Jun 26 21:20:24 1990
X--- src/mhitu.c Sat Jan 5 14:59:32 1991
X***************
X*** 665,670 ****
X--- 665,671 ----
X # ifdef POLYSELF
X && !resists_drli(uasmon)
X # endif
X+ && !defends(AD_DRLI, uwep)
X ) {
X if (Blind)
X You("feel an unholy blade drain your life!");
X*** src/mkmaze.c Tue May 15 14:50:37 1990
X--- src/mkmaze.c Wed Jan 30 12:05:06 1991
X***************
X*** 413,447 ****
X bound_digging()
X /* put a non-diggable boundary around the initial portion of a level map.
X * assumes that no level will initially put things beyond the isok() range.
X */
X {
X register int x,y;
X! register boolean found;
X int xmin,xmax,ymin,ymax;
X
X! found = FALSE;
X! for(xmin=1; !found; xmin++)
X! for(y=0; y<=ROWNO-1; y++)
X! if(levl[xmin][y].typ != STONE) found = TRUE;
X! xmin -= 2;
X
X! found = FALSE;
X! for(xmax=COLNO-2; !found; xmax--)
X! for(y=0; y<=ROWNO-1; y++)
X! if(levl[xmax][y].typ != STONE) found = TRUE;
X! xmax += 2;
X
X! found = FALSE;
X! for(ymin=1; !found; ymin++)
X! for(x=xmin; x<=xmax; x++)
X! if(levl[x][ymin].typ != STONE) found = TRUE;
X! ymin -= 2;
X
X! found = FALSE;
X! for(ymax=ROWNO-2; !found; ymax--)
X! for(x=xmin; x<=xmax; x++)
X! if(levl[x][ymax].typ != STONE) found = TRUE;
X! ymax += 2;
X
X for(x=xmin; x<=xmax; x++) {
X levl[x][ymin].diggable = W_NONDIGGABLE;
X--- 413,479 ----
X bound_digging()
X /* put a non-diggable boundary around the initial portion of a level map.
X * assumes that no level will initially put things beyond the isok() range.
X+ *
X+ * we can't bound unconditionally on the last line with something in it,
X+ * because that something might be a niche which was already reachable,
X+ * so the boundary would be breached
X+ *
X+ * we can't bound unconditionally on one beyond the last line, because
X+ * that provides a window of abuse for WALLIFIED_MAZE special levels
X */
X {
X register int x,y;
X! register unsigned typ;
X! boolean found, nonwall;
X int xmin,xmax,ymin,ymax;
X
X! found = nonwall = FALSE;
X! for(xmin=0; !found; xmin++)
X! for(y=0; y<=ROWNO-1; y++) {
X! typ = levl[xmin][y].typ;
X! if(typ != STONE) {
X! found = TRUE;
X! if(!IS_WALL(typ)) nonwall = TRUE;
X! }
X! }
X! xmin -= (nonwall ? 2 : 1);
X! if (xmin < 0) xmin = 0;
X
X! found = nonwall = FALSE;
X! for(xmax=COLNO-1; !found; xmax--)
X! for(y=0; y<=ROWNO-1; y++) {
X! typ = levl[xmax][y].typ;
X! if(typ != STONE) {
X! found = TRUE;
X! if(!IS_WALL(typ)) nonwall = TRUE;
X! }
X! }
X! xmax += (nonwall ? 2 : 1);
X! if (xmax >= COLNO) xmax = COLNO-1;
X
X! found = nonwall = FALSE;
X! for(ymin=0; !found; ymin++)
X! for(x=xmin; x<=xmax; x++) {
X! typ = levl[x][ymin].typ;
X! if(typ != STONE) {
X! found = TRUE;
X! if(!IS_WALL(typ)) nonwall = TRUE;
X! }
X! }
X! ymin -= (nonwall ? 2 : 1);
X! if (ymin < 0) ymin = 0;
X
X! found = nonwall = FALSE;
X! for(ymax=ROWNO-1; !found; ymax--)
X! for(x=xmin; x<=xmax; x++) {
X! typ = levl[x][ymax].typ;
X! if(typ != STONE) {
X! found = TRUE;
X! if(!IS_WALL(typ)) nonwall = TRUE;
X! }
X! }
X! ymax += (nonwall ? 2 : 1);
X! if (ymax >= ROWNO) ymax = ROWNO-1;
X
X for(x=xmin; x<=xmax; x++) {
X levl[x][ymin].diggable = W_NONDIGGABLE;
X*** src/mon.c Tue Jun 26 21:20:25 1990
X--- src/mon.c Tue Feb 5 15:37:59 1991
X***************
X*** 3,17 ****
X /* NetHack may be freely redistributed. See license for details. */
X
X /* Aztec C on amiga doesn't recognize defined() at this point!
X! Neither does the Mac Lightspeed C v.3 compiler. If you're using
X! precompiled headers, you don't want this either */
X! #ifndef AZTEC_C
X! #ifndef THINK_C
X! #if defined(MICROPORT_BUG) || (!defined(LINT) && !defined(__STDC__))
X! #define MKROOM_H
X! #endif /* Avoid the microport bug */
X! #endif
X! #endif
X
X #include "hack.h"
X #include "mfndpos.h"
X--- 3,18 ----
X /* NetHack may be freely redistributed. See license for details. */
X
X /* Aztec C on amiga doesn't recognize defined() at this point!
X! Neither does the Mac Lightspeed C v.3 compiler. */
X! #ifdef MICROPORT_BUG /* comment line for pre-compiled headers */
X! # define MKROOM_H /* comment line for pre-compiled headers */
X! #else /* comment line for pre-compiled headers */
X! # ifndef LINT /* comment line for pre-compiled headers */
X! # ifndef __STDC__ /* comment line for pre-compiled headers */
X! # define MKROOM_H /* comment line for pre-compiled headers */
X! # endif /* comment line for pre-compiled headers */
X! # endif /* comment line for pre-compiled headers */
X! #endif /* comment line for pre-compiled headers */
X
X #include "hack.h"
X #include "mfndpos.h"
X***************
X*** 30,35 ****
X--- 31,37 ----
X STATIC_DCL void NDECL(dmonsfree);
X
X #ifdef OVL1
X+ #define warnDelay 10
X long lastwarntime;
X int lastwarnlev;
X const char *warnings[] = {
X***************
X*** 125,135 ****
X--- 127,139 ----
X pieces = d(2,6);
X while (pieces--)
X obj = mksobj_at(IRON_CHAIN, x, y);
X+ mtmp->mnamelth = 0;
X break;
X case PM_CLAY_GOLEM:
X obj = mksobj_at(ROCK, x, y);
X obj->quan = rn2(20) + 100;
X obj->owt = weight(obj);
X+ mtmp->mnamelth = 0;
X break;
X case PM_STONE_GOLEM:
X obj = mkcorpstat(STATUE, mdat, x, y);
X***************
X*** 138,148 ****
X--- 142,154 ----
X pieces = d(2,4);
X while(pieces--)
X obj = mksobj_at(QUARTERSTAFF, x, y);
X+ mtmp->mnamelth = 0;
X break;
X case PM_LEATHER_GOLEM:
X pieces = d(2,4);
X while(pieces--)
X obj = mksobj_at(LEATHER_ARMOR, x, y);
X+ mtmp->mnamelth = 0;
X break;
X #endif
X default_1:
X***************
X*** 187,192 ****
X--- 193,199 ----
X movemon()
X {
X register struct monst *mtmp;
X+ boolean check_tame = TRUE;
X
X warnlevel = 0;
X
X***************
X*** 201,208 ****
X * attack the tame monster back (which it's permitted to do
X * only if it hasn't made its move yet).
X */
X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(mtmp->mlstmv < moves && mtmp->mtame) goto next_mon;
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(mtmp->mlstmv < moves && !mtmp->mtame) goto next_mon;
X /* treated all monsters */
X--- 208,218 ----
X * attack the tame monster back (which it's permitted to do
X * only if it hasn't made its move yet).
X */
X! if (check_tame) {
X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(mtmp->mlstmv < moves && mtmp->mtame) goto next_mon;
X+ check_tame = FALSE; /* tame monsters all done */
X+ }
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(mtmp->mlstmv < moves && !mtmp->mtame) goto next_mon;
X /* treated all monsters */
X***************
X*** 307,315 ****
X }
X #ifdef NAMED_ITEMS
X if (warnlevel == 100) {
X Your("%s %s!", aobjnam(uwep, "glow"),
X! Hallucination ? hcolor() : light_blue);
X! warnlevel = 0;
X }
X #endif
X warnlevel -= u.ulevel;
X--- 317,331 ----
X }
X #ifdef NAMED_ITEMS
X if (warnlevel == 100) {
X+ if(!Blind && (warnlevel > lastwarnlev
X+ || moves > lastwarntime + warnDelay)) {
X Your("%s %s!", aobjnam(uwep, "glow"),
X! Hallucination ? hcolor() : light_blue);
X! lastwarnlev = warnlevel;
X! lastwarntime = moves;
X! }
X! warnlevel = 0;
X! return;
X }
X #endif
X warnlevel -= u.ulevel;
X***************
X*** 316,322 ****
X if(warnlevel >= SIZE(warnings))
X warnlevel = SIZE(warnings)-1;
X if(!Blind && warnlevel >= 0)
X! if(warnlevel > lastwarnlev || moves > lastwarntime + 5){
X register const char *rr;
X
X switch((int) (Warning & (LEFT_RING | RIGHT_RING))){
X--- 332,338 ----
X if(warnlevel >= SIZE(warnings))
X warnlevel = SIZE(warnings)-1;
X if(!Blind && warnlevel >= 0)
X! if(warnlevel > lastwarnlev || moves > lastwarntime + warnDelay) {
X register const char *rr;
X
X switch((int) (Warning & (LEFT_RING | RIGHT_RING))){
X***************
X*** 405,410 ****
X--- 421,429 ----
X for (otmp = level.objects[mtmp->mx][mtmp->my]; otmp; otmp = otmp2) {
X otmp2 = otmp->nexthere;
X if(objects[otmp->otyp].oc_material <= WOOD) {
X+ if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE
X+ && !resists_ston(mtmp->data))
X+ continue;
X if (cansee(mtmp->mx,mtmp->my) && flags.verbose)
X pline("%s eats %s!", Monnam(mtmp),
X distant_name(otmp, doname));
X***************
X*** 676,692 ****
X { register struct trap *ttmp = t_at(nx, ny);
X register long tt;
X if(ttmp) {
X! /* tt = 1L << ttmp->ttyp;*/
X! /* why don't we just have code look like what it's supposed to do? then it
X! /* might start working for every case. try this instead: -sac */
X! tt = (ttmp->ttyp < TRAPNUM && ttmp->ttyp);
X! /* below if added by GAN 02/06/87 to avoid
X! * traps out of range
X! */
X! if(!(tt & ALLOW_TRAPS)) {
X impossible("A monster looked at a very strange trap of type %d.", ttmp->ttyp);
X continue;
X }
X if(mon->mtrapseen & tt) {
X
X if(!(flag & tt)) continue;
X--- 695,705 ----
X { register struct trap *ttmp = t_at(nx, ny);
X register long tt;
X if(ttmp) {
X! if(ttmp->ttyp >= TRAPNUM || ttmp->ttyp == 0) {
X impossible("A monster looked at a very strange trap of type %d.", ttmp->ttyp);
X continue;
X }
X+ tt = 1L << ttmp->ttyp;
X if(mon->mtrapseen & tt) {
X
X if(!(flag & tt)) continue;
X***************
X*** 1303,1311 ****
X return(TRUE);
X } else
X if(levl[mtmp->mx][mtmp->my].typ == ROOM) {
X! (void) maketrap(mtmp->mx, mtmp->my, MONST_TRAP);
X /* override type selection */
X- ftrap->pm = monsndx(mtmp->data);
X mondead(mtmp);
X return(TRUE);
X }
X--- 1316,1324 ----
X return(TRUE);
X } else
X if(levl[mtmp->mx][mtmp->my].typ == ROOM) {
X! maketrap(mtmp->mx, mtmp->my, MONST_TRAP)->pm =
X! monsndx(mtmp->data);
X /* override type selection */
X mondead(mtmp);
X return(TRUE);
X }
X*** src/monmove.c Thu May 31 00:31:43 1990
X--- src/monmove.c Sat Jan 5 15:07:17 1991
X***************
X*** 379,385 ****
X register struct monst *mtmp2;
X register int nx,ny,omx,omy,appr,nearer,cnt,i,j;
X xchar gx,gy,nix,niy,chcnt;
X! schar chi;
X boolean likegold=0, likegems=0, likeobjs=0, likemagic=0, conceals=0;
X boolean likerock=0, can_tunnel=0;
X boolean can_open=0, can_unlock=0, doorbuster=0;
X--- 379,385 ----
X register struct monst *mtmp2;
X register int nx,ny,omx,omy,appr,nearer,cnt,i,j;
X xchar gx,gy,nix,niy,chcnt;
X! int chi; /* could be schar except for stupid Sun-2 compiler */
X boolean likegold=0, likegems=0, likeobjs=0, likemagic=0, conceals=0;
X boolean likerock=0, can_tunnel=0;
X boolean can_open=0, can_unlock=0, doorbuster=0;
X***************
X*** 560,566 ****
X otmp->otyp < LAST_GEM + 6) ||
X (conceals && !cansee(otmp->ox,otmp->oy)) ||
X (ptr == &mons[PM_GELATINOUS_CUBE] &&
X! !index(indigestion, otmp->olet))
X ) {
X if(can_carry(mtmp,otmp))
X if(ptr->mlet != S_UNICORN ||
X--- 560,568 ----
X otmp->otyp < LAST_GEM + 6) ||
X (conceals && !cansee(otmp->ox,otmp->oy)) ||
X (ptr == &mons[PM_GELATINOUS_CUBE] &&
X! !index(indigestion, otmp->olet) &&
X! !(otmp->otyp == CORPSE &&
X! otmp->corpsenm == PM_COCKATRICE))
X ) {
X if(can_carry(mtmp,otmp))
X if(ptr->mlet != S_UNICORN ||
X
END_OF_FILE
if test 50088 -ne `wc -c <'patch10.02'`; then
echo shar: \"'patch10.02'\" unpacked with wrong size!
fi
# end of 'patch10.02'
echo shar: End of archive 5 \(of 8\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 8 archives.
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