billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 9, Issue 17
Archive-name: NetHack3/Patch7q
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 17 (of 30)."
# Contents: patch7.07
# Wrapped by billr@saab on Wed Feb 21 10:04:38 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch7.07' -a "${1}" != "-c" ; then
echo shar: Renaming existing file \"'patch7.07'\" to \"'patch7.07.orig'\"
mv -f 'patch7.07' 'patch7.07.orig'
fi
echo shar: Extracting \"'patch7.07'\" \(53513 characters\)
sed "s/^X//" >'patch7.07' <<'END_OF_FILE'
X*** src/Old/priest.c Mon Feb 19 18:54:33 1990
X--- src/priest.c Wed Feb 7 19:57:01 1990
X***************
X*** 3,15 ****
X /* Copyright (c) Izchak Miller, Steve Linhart, 1989. */
X /* NetHack may be freely redistributed. See license for details. */
X
X /* block some unused #defines to avoid overloading some cpp's */
X- #define MONATTK_H
X #include "hack.h"
X #include "mfndpos.h"
X #include "eshk.h"
X #include "epri.h"
X
X /* used for the insides of shk_move and pri_move */
X int
X move_special(mtmp,monroom,appr,uondoor,avoid,omx,omy,gx,gy)
X--- 3,24 ----
X /* Copyright (c) Izchak Miller, Steve Linhart, 1989. */
X /* NetHack may be freely redistributed. See license for details. */
X
X+ #define MONATTK_H /* comment line for pre-compiled headers */
X /* block some unused #defines to avoid overloading some cpp's */
X #include "hack.h"
X #include "mfndpos.h"
X #include "eshk.h"
X #include "epri.h"
X
X+ static boolean FDECL(histemple_at,(struct monst *,int,int));
X+ static int FDECL(t_alignment,(struct mkroom *));
X+ static boolean FDECL(is_shrined,(struct mkroom *));
X+ static boolean FDECL(t_coaligned,(struct mkroom *));
X+ struct monst *FDECL(findpriest,(struct mkroom *));
X+ static boolean FDECL(p_inhistemple,(struct mkroom *));
X+
X+ #ifdef OVLB
X+
X /* used for the insides of shk_move and pri_move */
X int
X move_special(mtmp,monroom,appr,uondoor,avoid,omx,omy,gx,gy)
X***************
X*** 42,47 ****
X--- 51,61 ----
X if (tunnels(mtmp->data) &&
X (!needspick(mtmp->data) || m_carrying(mtmp, PICK_AXE)))
X allowflags |= ALLOW_DIG;
X+ if (!nohands(mtmp->data) && !verysmall(mtmp->data)) {
X+ allowflags |= OPENDOOR;
X+ if (m_carrying(mtmp, SKELETON_KEY)) allowflags |= BUSTDOOR;
X+ }
X+ if (is_giant(mtmp->data)) allowflags |= BUSTDOOR;
X cnt = mfndpos(mtmp, poss, info, allowflags);
X if (allowflags & ALLOW_DIG) if(!mdig_tunnel(mtmp)) return(-2);
X
X***************
X*** 100,107 ****
X--- 114,125 ----
X return(0);
X }
X
X+ #endif /* OVLB */
X+
X #if defined(ALTARS) && defined(THEOLOGY)
X
X+ #ifdef OVL0
X+
X struct mkroom *
X in_temple(x, y)
X register int x, y;
X***************
X*** 113,118 ****
X--- 131,139 ----
X return(&rooms[roomno]);
X }
X
X+ #endif /* OVL0 */
X+ #ifdef OVLB
X+
X static boolean
X histemple_at(priest, x, y)
X register struct monst *priest;
X***************
X*** 308,318 ****
X--- 329,344 ----
X struct mkroom *troom;
X {
X register struct monst *mtmp;
X+ extern struct monst *fdmon; /* from mon.c */
X
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(mtmp->ispriest && histemple_at(mtmp,mtmp->mx,mtmp->my)
X && &rooms[EPRI(mtmp)->shroom] == troom)
X return(mtmp);
X+ for(mtmp = fdmon; mtmp; mtmp = mtmp->nmon)
X+ if(mtmp->ispriest && histemple_at(mtmp,mtmp->mx,mtmp->my)
X+ && &rooms[EPRI(mtmp)->shroom] == troom)
X+ return(mtmp);
X return (struct monst *)0;
X }
X
X***************
X*** 383,392 ****
X
X /* priests don't chat unless peaceful and in their own temple */
X if(!histemple_at(priest,priest->mx,priest->my) || priest->mtame ||
X! !priest->mpeaceful || priest->mfroz || priest->msleep) {
X! if(priest->mfroz || priest->msleep) {
X kludge("%s breaks out of his reverie!", Monnam(priest));
X! priest->mfroz = priest->msleep = 0;
X }
X /* The following is now impossible according to monst.c, */
X /* but it should stay just in case we change the latter. */
X--- 409,419 ----
X
X /* priests don't chat unless peaceful and in their own temple */
X if(!histemple_at(priest,priest->mx,priest->my) || priest->mtame ||
X! !priest->mpeaceful || !priest->mcanmove || priest->msleep) {
X! if(!priest->mcanmove || priest->msleep) {
X kludge("%s breaks out of his reverie!", Monnam(priest));
X! priest->mfrozen = priest->msleep = 0;
X! priest->mcanmove = 1;
X }
X /* The following is now impossible according to monst.c, */
X /* but it should stay just in case we change the latter. */
X***************
X*** 547,550 ****
X--- 574,580 ----
X if(!(priest = findpriest(in_temple(u.ux, u.uy)))) return;
X wakeup(priest);
X }
X+
X+ #endif /* OVLB */
X #endif /* ALTARS && THEOLOGY */
X+
X*** src/Old/prisym.c Mon Feb 19 18:54:59 1990
X--- src/prisym.c Mon Feb 5 18:09:58 1990
X***************
X*** 8,16 ****
X #include "wseg.h"
X #include "lev.h"
X
X! static void FDECL(pwseg, (struct wseg *));
X #endif
X
X void
X atl(x,y,ch)
X register int x, y;
X--- 8,18 ----
X #include "wseg.h"
X #include "lev.h"
X
X! OSTATIC void FDECL(pwseg, (struct wseg *));
X #endif
X
X+ #ifdef OVL0
X+
X void
X atl(x,y,ch)
X register int x, y;
X***************
X*** 44,49 ****
X--- 46,54 ----
X if(y > scrhy) scrhy = y;
X }
X
X+ #endif /* OVL0 */
X+ #ifdef OVL2
X+
X /* call: (x,y) - display
X (-1,0) - close (leave last symbol)
X (-1,-1)- close (undo last symbol)
X***************
X*** 161,166 ****
X--- 166,174 ----
X }
X }
X
X+ #endif /* OVL2 */
X+ #ifdef OVL1
X+
X void
X curs_on_u()
X {
X***************
X*** 196,201 ****
X--- 204,212 ----
X levl[u.ux][u.uy].seen = 1;
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVL0
X+
X /* print a position that is visible for @ */
X void
X prl(x,y)
X***************
X*** 423,428 ****
X--- 434,442 ----
X atl(x,y,(char)news0(x,y));
X }
X
X+ #endif /* OVL0 */
X+ #ifdef OVLB
X+
X /* used with wand of digging (or pick-axe): fill scrsym and force display */
X /* also when a POOL evaporates */
X void
X***************
X*** 442,447 ****
X--- 456,464 ----
X }
X }
X
X+ #endif /* OVLB */
X+ #ifdef OVL1
X+
X void
X nosee(x,y)
X register int x, y;
X***************
X*** 450,456 ****
X
X if(!isok(x,y)) return;
X room = &levl[x][y];
X! if(IS_FLOOR(levl[x][y].typ)
X && !room->lit && !Blind) {
X room->scrsym = STONE_SYM; /* was ' ' -- OIS */
X room->new = 1;
X--- 467,473 ----
X
X if(!isok(x,y)) return;
X room = &levl[x][y];
X! if(levl[x][y].scrsym == ROOM_SYM
X && !room->lit && !Blind) {
X room->scrsym = STONE_SYM; /* was ' ' -- OIS */
X room->new = 1;
X***************
X*** 515,520 ****
X--- 532,540 ----
X return(0);
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+
X #ifdef NEWSCR
X void
X pobj(obj)
X***************
X*** 553,559 ****
X }
X
X #ifdef WORM
X! static void
X pwseg(wtmp)
X register struct wseg *wtmp;
X {
X--- 573,579 ----
X }
X
X #ifdef WORM
X! XSTATIC void
X pwseg(wtmp)
X register struct wseg *wtmp;
X {
X***************
X*** 590,601 ****
X return(typ == DOOR);
X }
X
X- boolean IS_FLOOR(typ)
X- unsigned typ;
X- {
X- return(typ == ROOM);
X- }
X-
X boolean ACCESSIBLE(typ)
X unsigned typ;
X {
X--- 610,615 ----
X***************
X*** 662,664 ****
X--- 676,680 ----
X return(typ >= STAIRS && typ <= ALTAR);
X }
X #endif /* STUPID_CPP */
X+
X+ #endif /* OVLB */
X*** src/Old/read.c Mon Feb 19 18:55:26 1990
X--- src/read.c Mon Feb 5 18:10:02 1990
X***************
X*** 4,9 ****
X--- 4,11 ----
X
X #include "hack.h"
X
X+ #ifdef OVLB
X+
X boolean known;
X
X static const char readable[] = { '#', SCROLL_SYM,
X***************
X*** 12,19 ****
X #endif
X 0 };
X
X static void FDECL(explode, (struct obj *));
X! static void do_class_genocide();
X
X int
X doread() {
X--- 14,31 ----
X #endif
X 0 };
X
X+ #endif /* OVLB */
X+
X static void FDECL(explode, (struct obj *));
X! static void NDECL(do_class_genocide);
X! static void FDECL(stripspe,(struct obj *));
X! static void FDECL(p_glow1,(struct obj *));
X! static void FDECL(p_glow2,(struct obj *,const char *));
X! static void FDECL(recharge,(struct obj *,int));
X! static void FDECL(forget,(BOOLEAN_P));
X! OSTATIC void FDECL(show_map_spot,(int,int));
X!
X! #ifdef OVLB
X
X int
X doread() {
X***************
X*** 118,129 ****
X static void
X p_glow2(otmp,color)
X register struct obj *otmp;
X! register char *color;
X {
X Your("%s %s%s for a moment.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X! Blind ? "" : Hallucination ? hcolor() : color);
X }
X
X /*
X--- 130,141 ----
X static void
X p_glow2(otmp,color)
X register struct obj *otmp;
X! register const char *color;
X {
X Your("%s %s%s for a moment.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X! Blind ? (const char *)"" : Hallucination ? hcolor() : color);
X }
X
X /*
X***************
X*** 137,166 ****
X int curse_bless;
X {
X register int n;
X! boolean cursed, blessed;
X
X! cursed = curse_bless < 0;
X! blessed = curse_bless > 0;
X
X if (obj->olet != WAND_SYM) {
X switch(obj->otyp) {
X case MAGIC_MARKER:
X! if (cursed) stripspe(obj);
X! else if (blessed) {
X n = obj->spe;
X if (n < 50) obj->spe = 50;
X if (n >= 50 && n < 75) obj->spe = 75;
X if (n >= 75) obj->spe += 10;
X p_glow2(obj,blue);
X } else {
X if (obj->spe < 50) obj->spe = 50;
X else obj->spe++;
X p_glow2(obj,white);
X }
X break;
X case LAMP:
X! if (cursed) stripspe(obj);
X! else if (blessed) {
X n = rn2(11);
X if (obj->spe < n) obj->spe = n;
X else obj->spe += rnd(3);
X--- 149,186 ----
X int curse_bless;
X {
X register int n;
X! boolean is_cursed, is_blessed;
X
X! is_cursed = curse_bless < 0;
X! is_blessed = curse_bless > 0;
X
X if (obj->olet != WAND_SYM) {
X switch(obj->otyp) {
X case MAGIC_MARKER:
X! if (is_cursed) stripspe(obj);
X! else if (obj->recharged) {
X! if (obj->spe < 3)
X! Your("marker seems permanently dried out.");
X! else
X! pline(nothing_happens);
X! }
X! else if (is_blessed) {
X n = obj->spe;
X if (n < 50) obj->spe = 50;
X if (n >= 50 && n < 75) obj->spe = 75;
X if (n >= 75) obj->spe += 10;
X p_glow2(obj,blue);
X+ obj->recharged = 1;
X } else {
X if (obj->spe < 50) obj->spe = 50;
X else obj->spe++;
X p_glow2(obj,white);
X+ obj->recharged = 1;
X }
X break;
X case LAMP:
X! if (is_cursed) stripspe(obj);
X! else if (is_blessed) {
X n = rn2(11);
X if (obj->spe < n) obj->spe = n;
X else obj->spe += rnd(3);
X***************
X*** 171,178 ****
X }
X break;
X case MAGIC_LAMP:
X! if (cursed) stripspe(obj);
X! else if (blessed > 0) {
X if (obj->spe == 1 || obj->recharged)
X pline(nothing_happens);
X else {
X--- 191,198 ----
X }
X break;
X case MAGIC_LAMP:
X! if (is_cursed) stripspe(obj);
X! else if (is_blessed > 0) {
X if (obj->spe == 1 || obj->recharged)
X pline(nothing_happens);
X else {
X***************
X*** 194,201 ****
X }
X break;
X case CRYSTAL_BALL:
X! if (cursed) stripspe(obj);
X! else if (blessed) {
X obj->spe = 6;
X p_glow2(obj,blue);
X } else {
X--- 214,221 ----
X }
X break;
X case CRYSTAL_BALL:
X! if (is_cursed) stripspe(obj);
X! else if (is_blessed) {
X obj->spe = 6;
X p_glow2(obj,blue);
X } else {
X***************
X*** 206,213 ****
X }
X break;
X case BAG_OF_TRICKS:
X! if (cursed) stripspe(obj);
X! else if (blessed) {
X if (obj->spe <= 10)
X obj->spe += (5 + rnd(10));
X else obj->spe += (5 + rnd(5));
X--- 226,233 ----
X }
X break;
X case BAG_OF_TRICKS:
X! if (is_cursed) stripspe(obj);
X! else if (is_blessed) {
X if (obj->spe <= 10)
X obj->spe += (5 + rnd(10));
X else obj->spe += (5 + rnd(5));
X***************
X*** 228,235 ****
X explode(obj);
X return;
X }
X! if (cursed) stripspe(obj);
X! else if (blessed) {
X if (obj->spe != 3) {
X obj->spe = 3;
X p_glow2(obj,blue);
X--- 248,255 ----
X explode(obj);
X return;
X }
X! if (is_cursed) stripspe(obj);
X! else if (is_blessed) {
X if (obj->spe != 3) {
X obj->spe = 3;
X p_glow2(obj,blue);
X***************
X*** 246,253 ****
X obj->recharged = 1; /* another recharging disallowed */
X }
X else {
X! if (cursed) stripspe(obj);
X! else if (blessed) {
X if (objects[obj->otyp].bits & NODIR) {
X n = rn1(5,11);
X if (obj->spe < n) obj->spe = n;
X--- 266,273 ----
X obj->recharged = 1; /* another recharging disallowed */
X }
X else {
X! if (is_cursed) stripspe(obj);
X! else if (is_blessed) {
X if (objects[obj->otyp].bits & NODIR) {
X n = rn1(5,11);
X if (obj->spe < n) obj->spe = n;
X***************
X*** 331,337 ****
X xname(otmp),
X sobj->cursed ? "mottled" : "shimmering",
X Hallucination ? hcolor() :
X! sobj->cursed ? black : "gold",
X sobj->cursed ? "glow" :
X (is_shield(otmp) ? "layer" : "shield"));
X if(!(sobj->cursed))
X--- 351,357 ----
X xname(otmp),
X sobj->cursed ? "mottled" : "shimmering",
X Hallucination ? hcolor() :
X! sobj->cursed ? black : (const char *)"gold",
X sobj->cursed ? "glow" :
X (is_shield(otmp) ? "layer" : "shield"));
X if(!(sobj->cursed))
X***************
X*** 347,353 ****
X Your("%s violently %s%s for a while, then evaporates.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X! Blind ? "" : Hallucination ? hcolor() : silver);
X if(is_cloak(otmp)) (void) Cloak_off();
X if(is_boots(otmp)) (void) Boots_off();
X if(is_helmet(otmp)) (void) Helmet_off();
X--- 367,373 ----
X Your("%s violently %s%s for a while, then evaporates.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X! Blind ? nul : Hallucination ? hcolor() : silver);
X if(is_cloak(otmp)) (void) Cloak_off();
X if(is_boots(otmp)) (void) Boots_off();
X if(is_helmet(otmp)) (void) Helmet_off();
X***************
X*** 361,367 ****
X Your("%s %s%s for a %s.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X! Blind ? "" : Hallucination ? hcolor() :
X sobj->cursed ? black : silver,
X (s*s>1) ? "while" : "moment");
X otmp->cursed = sobj->cursed;
X--- 381,387 ----
X Your("%s %s%s for a %s.",
X xname(otmp),
X Blind ? "vibrates" : "glows ",
X! Blind ? nul : Hallucination ? hcolor() :
X sobj->cursed ? black : silver,
X (s*s>1) ? "while" : "moment");
X otmp->cursed = sobj->cursed;
X***************
X*** 407,427 ****
X Your("%s begin to %s%s.",
X makeplural(body_part(HAND)),
X Blind ? "tingle" : "glow ",
X! Blind ? "" : Hallucination ? hcolor() : purple);
X make_confused(HConfusion + rnd(100),FALSE);
X } else {
X pline("A %s%s surrounds your %s.",
X! Blind ? "" : Hallucination ? hcolor() : red,
X Blind ? "faint buzz" : " glow",
X body_part(HEAD));
X make_confused(0L,TRUE);
X }
X } else {
X! Your("%s%s %s.",
X makeplural(body_part(HAND)),
X Blind ? "" : " begin to glow",
X! Blind ? "tingle" : Hallucination ? hcolor() : red);
X! u.umconf = 1;
X }
X break;
X case SCR_SCARE_MONSTER:
X--- 427,461 ----
X Your("%s begin to %s%s.",
X makeplural(body_part(HAND)),
X Blind ? "tingle" : "glow ",
X! Blind ? nul : Hallucination ? hcolor() : purple);
X make_confused(HConfusion + rnd(100),FALSE);
X } else {
X pline("A %s%s surrounds your %s.",
X! Blind ? nul : Hallucination ? hcolor() : red,
X Blind ? "faint buzz" : " glow",
X body_part(HEAD));
X make_confused(0L,TRUE);
X }
X } else {
X! if (!sobj->blessed) {
X! Your("%s%s %s%s.",
X makeplural(body_part(HAND)),
X Blind ? "" : " begin to glow",
X! Blind ? (const char *)"tingle" : Hallucination ? hcolor() : red,
X! u.umconf ? " even more" : "");
X! u.umconf++;
X! } else {
X! if (Blind)
X! Your("%s tingle %s sharply.",
X! makeplural(body_part(HAND)),
X! u.umconf ? "even more" : "very");
X! else
X! Your("%s glow a%s brilliant %s.",
X! makeplural(body_part(HAND)),
X! u.umconf ? "n even more" : "",
X! Hallucination ? hcolor() : red);
X! u.umconf += (1 + rnd(8));
X! }
X }
X break;
X case SCR_SCARE_MONSTER:
X***************
X*** 433,441 ****
X
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(cansee(mtmp->mx,mtmp->my)) {
X! if(confused || sobj->cursed)
X! mtmp->mflee = mtmp->mfroz = mtmp->msleep = 0;
X! else
X if (! resist(mtmp, sobj->olet, 0, NOTELL))
X mtmp->mflee = 1;
X if(!mtmp->mtame) ct++; /* pets don't laugh at you */
X--- 467,476 ----
X
X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
X if(cansee(mtmp->mx,mtmp->my)) {
X! if(confused || sobj->cursed) {
X! mtmp->mflee = mtmp->mfrozen = mtmp->msleep = 0;
X! mtmp->mcanmove = 1;
X! } else
X if (! resist(mtmp, sobj->olet, 0, NOTELL))
X mtmp->mflee = 1;
X if(!mtmp->mtame) ct++; /* pets don't laugh at you */
X***************
X*** 512,519 ****
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 uwep->rustfree = !(sobj->cursed);
X if(Blind)
X--- 547,554 ----
X }
X /* break; /*NOTREACHED*/
X case SCR_ENCHANT_WEAPON:
X! if(uwep && (uwep->olet == WEAPON_SYM || uwep->otyp == PICK_AXE
X! || uwep->otyp == UNICORN_HORN) && confused) {
X /* olet check added 10/25/86 GAN */
X uwep->rustfree = !(sobj->cursed);
X if(Blind)
X***************
X*** 523,529 ****
X aobjnam(uwep, "are"),
X sobj->cursed ? "mottled" : "shimmering",
X Hallucination ? hcolor() :
X! sobj->cursed ? purple : "gold",
X sobj->cursed ? "glow" : "shield");
X } else return !chwepon(sobj, bcsign(sobj)*2+1);
X break;
X--- 558,564 ----
X aobjnam(uwep, "are"),
X sobj->cursed ? "mottled" : "shimmering",
X Hallucination ? hcolor() :
X! sobj->cursed ? purple : (const char *)"gold",
X sobj->cursed ? "glow" : "shield");
X } else return !chwepon(sobj, bcsign(sobj)*2+1);
X break;
X***************
X*** 571,578 ****
X--- 606,619 ----
X
X if (sobj->blessed && !Teleport_control) {
X known = TRUE;
X+ #ifndef MACOS
X pline("Do you wish to teleport? ");
X if (yn()=='n') break;
X+ #else
X+ if(!flags.silent) SysBeep(1);
X+ if(UseMacAlertText(128, "Do you wish to teleport ?") == 2)
X+ break;
X+ #endif
X }
X tele();
X if(uroom != inroom(u.ux, u.uy)) known = TRUE;
X***************
X*** 589,594 ****
X--- 630,640 ----
X if (food_detect(sobj))
X return(1); /* nothing detected */
X break;
X+ #ifdef SPELLS
X+ case SPE_IDENTIFY:
X+ cval = rn2(5);
X+ goto id;
X+ #endif
X case SCR_IDENTIFY:
X /* known = TRUE; */
X if(confused)
X***************
X*** 602,608 ****
X useup(sobj);
X makeknown(SCR_IDENTIFY);
X #ifdef SPELLS
X! case SPE_IDENTIFY:
X #endif
X if(!confused)
X while(invent && !ggetobj("identify", identify, cval));
X--- 648,654 ----
X useup(sobj);
X makeknown(SCR_IDENTIFY);
X #ifdef SPELLS
X! id:
X #endif
X if(!confused)
X while(invent && !ggetobj("identify", identify, cval));
X***************
X*** 665,671 ****
X } else {
X pline("The scroll catches fire and you burn your %s.",
X makeplural(body_part(HAND)));
X! losehp(1, "scroll of fire");
X }
X return(1);
X }
X--- 711,717 ----
X } else {
X pline("The scroll catches fire and you burn your %s.",
X makeplural(body_part(HAND)));
X! losehp(1, "scroll of fire", KILLED_BY_AN);
X }
X return(1);
X }
X***************
X*** 676,682 ****
X You("are uninjured.");
X } else {
X u.uhpmax -= num;
X! losehp(num, "scroll of fire");
X }
X destroy_item(SCROLL_SYM, AD_FIRE);
X #ifdef SPELLS
X--- 722,728 ----
X You("are uninjured.");
X } else {
X u.uhpmax -= num;
X! losehp(num, "scroll of fire", KILLED_BY_AN);
X }
X destroy_item(SCROLL_SYM, AD_FIRE);
X #ifdef SPELLS
X***************
X*** 689,697 ****
X if(dist(mtmp->mx,mtmp->my) < 3) {
X if (resists_fire(mtmp->data)) continue;
X if (u.uswallow) {
X! if (mtmp != u.ustuck) continue;
X! pline("%s gets heartburn.", Monnam(u.ustuck));
X! num *= 2;
X }
X mtmp->mhp -= num; /* No saving throw! */
X if(resists_cold(mtmp->data))
X--- 735,748 ----
X if(dist(mtmp->mx,mtmp->my) < 3) {
X if (resists_fire(mtmp->data)) continue;
X if (u.uswallow) {
X! if (mtmp != u.ustuck) continue;
X! if (is_animal(u.ustuck->data))
X! pline("%s gets heartburn.",
X! Monnam(u.ustuck));
X! else
X! You("toast %s slightly.",
X! Monnam(u.ustuck));
X! num *= 2;
X }
X mtmp->mhp -= num; /* No saving throw! */
X if(resists_cold(mtmp->data))
X***************
X*** 724,730 ****
X {
X Your("%s vibrates violently, and explodes!",xname(obj));
X bell();
X! losehp(rn2(2*(u.uhpmax+1)/3),"exploding wand");
X useup(obj);
X }
X
X--- 775,781 ----
X {
X Your("%s vibrates violently, and explodes!",xname(obj));
X bell();
X! losehp(rn2(2*(u.uhpmax+1)/3),"exploding wand", KILLED_BY_AN);
X useup(obj);
X }
X
X***************
X*** 745,751 ****
X pline("It suddenly becomes dark in here.");
X } else {
X if(u.uswallow){
X! pline("%s's stomach is lit.", Monnam(u.ustuck));
X return;
X }
X if(is_maze_lev){
X--- 796,809 ----
X pline("It suddenly becomes dark in here.");
X } else {
X if(u.uswallow){
X! if (is_animal(u.ustuck->data))
X! pline("%s's stomach is lit.", Monnam(u.ustuck));
X! else
X! if (is_whirly(u.ustuck->data))
X! pline("%s shines briefly.",
X! Monnam(u.ustuck));
X! else
X! pline("%s glistens.", Monnam(u.ustuck));
X return;
X }
X if(is_maze_lev){
X***************
X*** 829,834 ****
X--- 887,893 ----
X pline("Wiped out all %s.", n);
X if (&mons[i] == player_mon()) {
X u.uhp = -1;
X+ killer_format = KILLED_BY_AN;
X killer = "scroll of genocide";
X #ifdef POLYSELF
X if (u.umonnum >= 0)
X***************
X*** 935,940 ****
X--- 994,1000 ----
X pline("Wiped out all %s.", makeplural(buf));
X if(killplayer) {
X u.uhp = -1;
X+ killer_format = KILLED_BY_AN;
X killer = "genocide spell";
X #ifdef POLYSELF
X /* A polymorphed character will die as soon as he is rehumanized. */
X***************
X*** 961,967 ****
X }
X }
X
X! static void
X show_map_spot(x, y)
X register int x, y;
X {
X--- 1021,1030 ----
X }
X }
X
X! #endif /* OVLB */
X! #ifdef OVL0
X!
X! XSTATIC void
X show_map_spot(x, y)
X register int x, y;
X {
X***************
X*** 998,1003 ****
X--- 1061,1069 ----
X show_map_spot(zx, zy);
X }
X
X+ #endif /* OVL0 */
X+ #ifdef OVLB
X+
X void
X do_vicinity_map() {
X register int zx, zy;
X***************
X*** 1065,1071 ****
X return(1);
X } else if(!ct) {
X known = TRUE;
X! You("%s %s close nearby.", sobj ? "smell" : "sense",
X confused ? "something" : "food");
X } else {
X known = TRUE;
X--- 1131,1137 ----
X return(1);
X } else if(!ct) {
X known = TRUE;
X! You("%s %s nearby.", sobj ? "smell" : "sense",
X confused ? "something" : "food");
X } else {
X known = TRUE;
X***************
X*** 1136,1149 ****
X create_particular()
X {
X char buf[BUFSZ];
X! int which;
X
X do {
X pline("Create what kind of monster? [type the name] ");
X getlin(buf);
X! } while(strlen(buf) < 1);
X! which = name_to_mon(buf);
X! if (which != -1) {
X if (!(mons[which].geno & G_GENOD) && cant_create(&which) &&
X !Blind) {
X if (mons[which].geno & G_GENOD)
X--- 1202,1218 ----
X create_particular()
X {
X char buf[BUFSZ];
X! int which, tries = 0;
X
X do {
X pline("Create what kind of monster? [type the name] ");
X getlin(buf);
X! which = name_to_mon(buf);
X! if (which < 0) pline("I've never heard of such monsters.");
X! else break;
X! } while (++tries < 5);
X! if (tries == 5) pline(thats_enough_tries);
X! else {
X if (!(mons[which].geno & G_GENOD) && cant_create(&which) &&
X !Blind) {
X if (mons[which].geno & G_GENOD)
X***************
X*** 1157,1159 ****
X--- 1226,1230 ----
X return FALSE;
X }
X #endif /* WIZARD || EXPLORE_MODE */
X+
X+ #endif /* OVLB */
X*** src/Old/restore.c Mon Feb 19 18:56:14 1990
X--- src/restore.c Fri Feb 16 19:06:29 1990
X***************
X*** 99,105 ****
X register struct fruit *oldf;
X #endif
X int xl;
X! #ifdef LINT
X /* suppress "used before set" warning from lint */
X otmp2 = 0;
X #endif
X--- 99,105 ----
X register struct fruit *oldf;
X #endif
X int xl;
X! #if defined(LINT) || defined(__GNULINT__)
X /* suppress "used before set" warning from lint */
X otmp2 = 0;
X #endif
X***************
X*** 148,160 ****
X off_t differ;
X
X mread(fd, (genericptr_t)&monbegin, sizeof(monbegin));
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4)
X differ = (genericptr_t)(&mons[0]) - (genericptr_t)(monbegin);
X #else
X differ = (long)(&mons[0]) - (long)(monbegin);
X #endif
X
X! #ifdef LINT
X /* suppress "used before set" warning from lint */
X mtmp2 = 0;
X #endif
X--- 148,160 ----
X off_t differ;
X
X mread(fd, (genericptr_t)&monbegin, sizeof(monbegin));
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX)
X differ = (genericptr_t)(&mons[0]) - (genericptr_t)(monbegin);
X #else
X differ = (long)(&mons[0]) - (long)(monbegin);
X #endif
X
X! #if defined(LINT) || defined(__GNULINT__)
X /* suppress "used before set" warning from lint */
X mtmp2 = 0;
X #endif
X***************
X*** 167,173 ****
X mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst));
X if(!mtmp->m_id)
X mtmp->m_id = flags.ident++;
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4)
X /* ANSI type for differ is ptrdiff_t --
X * long may be wrong for segmented architecture --
X * may be better to cast pointers to (struct permonst *)
X--- 167,173 ----
X mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst));
X if(!mtmp->m_id)
X mtmp->m_id = flags.ident++;
X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX)
X /* ANSI type for differ is ptrdiff_t --
X * long may be wrong for segmented architecture --
X * may be better to cast pointers to (struct permonst *)
X***************
X*** 241,246 ****
X--- 241,249 ----
X if(tmp != getuid()) { /* strange ... */
X (void) close(fd);
X (void) unlink(SAVEF);
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X (void) puts("Saved game was not yours.");
X restoring = FALSE;
X return(0);
X***************
X*** 286,293 ****
X #endif
X mread(fd, (genericptr_t) &is_maze_lev, sizeof is_maze_lev);
X mread(fd, (genericptr_t) &u, sizeof(struct you));
X #ifdef SPELLS
X! mread(fd, (genericptr_t) spl_book, sizeof(struct spell) * (MAXSPELL + 1));
X #endif
X if(u.ustuck)
X mread(fd, (genericptr_t) &mid, sizeof mid);
X--- 289,311 ----
X #endif
X mread(fd, (genericptr_t) &is_maze_lev, sizeof is_maze_lev);
X mread(fd, (genericptr_t) &u, sizeof(struct you));
X+ if(u.uhp <= 0) {
X+ (void) close(fd);
X+ (void) unlink(SAVEF);
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X+ (void) puts("You were not healthy enough to survive restoration.");
X+ restoring = FALSE;
X+ return(0);
X+ }
X #ifdef SPELLS
X! mread(fd, (genericptr_t) spl_book,
X! sizeof(struct spell) * (MAXSPELL + 1));
X! #endif
X! #ifdef NAMED_ITEMS
X! mread(fd, (genericptr_t) artiexist,
X! (unsigned int)(sizeof(boolean) * artifact_num));
X #endif
X if(u.ustuck)
X mread(fd, (genericptr_t) &mid, sizeof mid);
X***************
X*** 349,358 ****
X
X if (er = Create(&fileName, 0, CREATOR, LEVEL_TYPE))
X SysBeep(1);
X! else {
X! msmsg(".");
X! nfd = open(lock, O_WRONLY | O_BINARY);
X! }
X (void)SetVol(0L, oldVolume);
X }
X # else
X--- 367,374 ----
X
X if (er = Create(&fileName, 0, CREATOR, LEVEL_TYPE))
X SysBeep(1);
X! msmsg(".");
X! nfd = open(lock, O_WRONLY | O_BINARY);
X (void)SetVol(0L, oldVolume);
X }
X # else
X***************
X*** 360,366 ****
X # endif /* MACOS */
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--- 376,382 ----
X # endif /* MACOS */
X #endif
X if (nfd < 0) panic("Cannot open temp file %s!\n", lock);
X! #if defined(DGK)
X if (!savelev(nfd, ltmp, COUNT | WRITE)) {
X
X /* The savelev can't proceed because the size required
X***************
X*** 423,428 ****
X--- 439,447 ----
X )
X #endif
X (void) unlink(SAVEF);
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X #ifdef REINCARNATION
X /* this can't be done earlier because we need to check the initial
X * showsyms against the one saved in each of the non-rogue levels */
X***************
X*** 489,495 ****
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--- 508,514 ----
X short tlev;
X #endif
X
X! #if defined(MSDOS) && !defined(TOS) && !defined(LATTICE) && !defined(AZTEC_C)
X setmode(fd, O_BINARY); /* is this required for TOS??? NO --ERS */
X #endif
X #ifdef TUTTI_FRUTTI
X***************
X*** 558,572 ****
X mread(fd, (genericptr_t) levl, sizeof(levl));
X #endif
X mread(fd, (genericptr_t) osymbol, sizeof(osymbol));
X- if (memcmp((genericptr_t) osymbol,
X- (genericptr_t) showsyms, sizeof (showsyms))
X #ifdef REINCARNATION
X! && dlvl != rogue_level
X! /* rogue level always uses default syms, and showsyms will still
X! * have its initial value from environment when restoring a
X! * game */
X #endif
X- ) {
X for (x = 0; x < COLNO; x++)
X for (y = 0; y < ROWNO; y++) {
X osym = levl[x][y].scrsym;
X--- 577,598 ----
X mread(fd, (genericptr_t) levl, sizeof(levl));
X #endif
X mread(fd, (genericptr_t) osymbol, sizeof(osymbol));
X #ifdef REINCARNATION
X! if (memcmp((genericptr_t) osymbol, ((dlevel==rogue_level)
X! ? (genericptr_t)savesyms : (genericptr_t)showsyms),
X! sizeof (osymbol))
X! && dlvl != rogue_level) {
X! /* rogue level always uses default syms. Although showsyms
X! * will be properly initialized from environment when restoring
X! * a game, this routine is called upon saving as well as
X! * restoring; when saving on the Rogue level, showsyms will
X! * be wrong, so use savesyms (which is always right, both on
X! * saving and restoring).
X! */
X! #else
X! if (memcmp((genericptr_t) osymbol,
X! (genericptr_t) showsyms, sizeof (showsyms))) {
X #endif
X for (x = 0; x < COLNO; x++)
X for (y = 0; y < ROWNO; y++) {
X osym = levl[x][y].scrsym;
X***************
X*** 768,773 ****
X--- 794,807 ----
X if (!ghostly) {
X nhp = mtmp->mhp +
X (regenerates(mtmp->data) ? tmoves : tmoves/20);
X+ if(!mtmp->mcansee && mtmp->mblinded) {
X+ if (mtmp->mblinded < tmoves) mtmp->mblinded = 0;
X+ else mtmp->mblinded -= tmoves;
X+ }
X+ if(!mtmp->mcanmove && mtmp->mfrozen) {
X+ if (mtmp->mfrozen < tmoves) mtmp->mfrozen = 0;
X+ else mtmp->mfrozen -= tmoves;
X+ }
X if(nhp > mtmp->mhpmax)
X mtmp->mhp = mtmp->mhpmax;
X else
X***************
X*** 780,786 ****
X }
X }
X
X- setgd();
X fgold = 0;
X while(gold = newgold(),
X mread(fd, (genericptr_t)gold, sizeof(struct gold)),
X--- 814,819 ----
X***************
X*** 915,920 ****
X--- 948,956 ----
X pline("Read %d instead of %u bytes.\n", rlen, len);
X if(restoring) {
X (void) unlink(SAVEF);
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X error("Error restoring old game.");
X }
X panic("Error reading level file.");
X*** src/Old/rip.c Mon Feb 19 18:56:50 1990
X--- src/rip.c Thu Jan 25 22:16:01 1990
X***************
X*** 5,11 ****
X #include "hack.h"
X #include <ctype.h>
X
X! static char *rip[] = {
X " ----------",
X " / \\",
X " / REST \\",
X--- 5,13 ----
X #include "hack.h"
X #include <ctype.h>
X
X! static void FDECL(center,(int,char *));
X!
X! static const char *rip_txt[] = {
X " ----------",
X " / \\",
X " / REST \\",
X***************
X*** 23,28 ****
X--- 25,32 ----
X 0
X };
X
X+ char **rip;
X+
X static void
X center(line, text)
X int line;
X***************
X*** 36,45 ****
X
X void
X outrip(){
X! register char **dp = rip;
X register char *dpx;
X char buf[BUFSZ];
X register int x, y;
X
X cls();
X Sprintf(buf, "%s", plname);
X--- 40,59 ----
X
X void
X outrip(){
X! register char **dp;
X register char *dpx;
X char buf[BUFSZ];
X register int x, y;
X+ int killed_by_line = 0;
X+
X+ rip = dp = (char **) alloc(sizeof(rip_txt));
X+ if (!dp) return;
X+ for (x = 0; rip_txt[x]; x++) {
X+ dp[x] = (char *) alloc((unsigned int)(strlen(rip_txt[x]) + 1));
X+ if (!dp[x]) return;
X+ Strcpy(dp[x], rip_txt[x]);
X+ }
X+ dp[x] = (char *)0;
X
X cls();
X Sprintf(buf, "%s", plname);
X***************
X*** 47,58 ****
X center(6, buf);
X Sprintf(buf, "%ld Au", u.ugold);
X center(7, buf);
X! Strcpy(buf, "killed by");
X! if (islower(*killer) && strncmp(killer, "the ", 4) &&
X! (strcmp(eos(killer)-4, "tion") || *(eos(killer)-5) == 'o') &&
X! strcmp(killer, "contaminated water"))
X! Strcat(buf, index(vowels, *killer) ? " an" : " a");
X! center(8, buf);
X Strcpy(buf, killer);
X if(strlen(buf) > 16) {
X register int i,i0,i1;
X--- 61,73 ----
X center(6, buf);
X Sprintf(buf, "%ld Au", u.ugold);
X center(7, buf);
X! if (killer_format != NO_KILLER_PREFIX) {
X! killed_by_line = 1;
X! Strcpy(buf, "killed by");
X! if (killer_format == KILLED_BY_AN)
X! Strcat(buf, index(vowels, *killer) ? " an" : " a");
X! center(8, buf);
X! }
X Strcpy(buf, killer);
X if(strlen(buf) > 16) {
X register int i,i0,i1;
X***************
X*** 61,70 ****
X if(buf[i] == ' ') i0 = i, i1 = i+1;
X if(!i0) i0 = i1 = 16;
X buf[i1 + 16] = 0;
X! center(10, buf+i1);
X buf[i0] = 0;
X }
X! center(9, buf);
X Sprintf(buf, "%4d", getyear());
X center(11, buf);
X for(y=8; *dp; y++,dp++){
X--- 76,85 ----
X if(buf[i] == ' ') i0 = i, i1 = i+1;
X if(!i0) i0 = i1 = 16;
X buf[i1 + 16] = 0;
X! center(9 + killed_by_line, buf+i1);
X buf[i0] = 0;
X }
X! center(8 + killed_by_line, buf);
X Sprintf(buf, "%4d", getyear());
X center(11, buf);
X for(y=8; *dp; y++,dp++){
X*** src/Old/rnd.c Mon Feb 19 18:57:04 1990
X--- src/rnd.c Thu Jan 25 22:14:22 1990
X***************
X*** 17,22 ****
X--- 17,24 ----
X #endif
X #endif /* LINT */
X
X+ #ifdef OVL2
X+
X int
X rn1(x,y) /* y <= rn1(x,y) < (y+x) */
X register int x, y;
X***************
X*** 24,29 ****
X--- 26,34 ----
X return(RND(x)+y);
X }
X
X+ #endif /* OVL2 */
X+ #ifdef OVL0
X+
X int
X rn2(x) /* 0 <= rn2(x) < x */
X register int x;
X***************
X*** 37,44 ****
X return(RND(x));
X }
X
X int
X! rnl(x) /* 0 <= rnl(x) < x; somtimes subtracting Luck */
X register int x; /* good luck approaches 0, bad luck approaches (x-1) */
X {
X register int i = RND(x);
X--- 42,52 ----
X return(RND(x));
X }
X
X+ #endif /* OVL0 */
X+ #ifdef OVLB
X+
X int
X! rnl(x) /* 0 <= rnl(x) < x; sometimes subtracting Luck */
X register int x; /* good luck approaches 0, bad luck approaches (x-1) */
X {
X register int i = RND(x);
X***************
X*** 52,57 ****
X--- 60,68 ----
X return i;
X }
X
X+ #endif /* OVLB */
X+ #ifdef OVL0
X+
X int
X rnd(x) /* 1 <= rnd(x) <= x */
X register int x;
X***************
X*** 65,70 ****
X--- 76,84 ----
X return(RND(x)+1);
X }
X
X+ #endif /* OVL0 */
X+ #ifdef OVL1
X+
X int
X d(n,x) /* n <= d(n,x) <= (n*x) */
X register int n, x;
X***************
X*** 75,80 ****
X--- 89,97 ----
X return(tmp);
X }
X
X+ #endif /* OVL1 */
X+ #ifdef OVLB
X+
X int
X rne(x) /* by stewr 870807 */
X register int x;
X***************
X*** 103,105 ****
X--- 120,124 ----
X return((int)x);
X }
X #endif
X+
X+ #endif /* OVLB */
X*** src/Old/rumors.c Mon Feb 19 18:57:18 1990
X--- src/rumors.c Mon Jan 22 21:02:34 1990
X***************
X*** 22,28 ****
X /* The oracle file consists of a number of multiple-line records, separated
X * (but not terminated) by "-----" lines.
X */
X!
X long first_rumor = sizeof(long);
X long true_rumor_size, false_rumor_size, end_rumor_file;
X #ifdef ORACLE
X--- 22,29 ----
X /* The oracle file consists of a number of multiple-line records, separated
X * (but not terminated) by "-----" lines.
X */
X! static void NDECL(init_rumors);
X! static void NDECL(outoracle);
X long first_rumor = sizeof(long);
X long true_rumor_size, false_rumor_size, end_rumor_file;
X #ifdef ORACLE
X***************
X*** 43,49 ****
X--- 44,56 ----
X Strcat(tmp,RUMORFILE);
X if(fp = fopen(tmp, "r")) {
X #else
X+ # ifdef MACOS
X+ if(!(fp = fopen(RUMORFILE, "r")))
X+ fp = openFile(RUMORFILE, "r");
X+ if (fp) {
X+ # else
X if(fp = fopen(RUMORFILE, "r")) {
X+ # endif
X #endif
X (void) fread((genericptr_t)&true_rumor_size,sizeof(long),1,fp);
X (void) fseek(fp, 0L, 2);
X***************
X*** 67,73 ****
X--- 74,86 ----
X Strcat(tmp,ORACLEFILE);
X if(fp = fopen(tmp, "r")) {
X #else
X+ # ifdef MACOS
X+ if(!(fp = fopen(ORACLEFILE, "r")))
X+ fp = openFile(ORACLEFILE, "r");
X+ if (fp) {
X+ # else
X if(fp = fopen(ORACLEFILE, "r")) {
X+ # endif
X #endif
X (void) fseek(fp, 0L, 2);
X oracle_size = ftell(fp);
X***************
X*** 112,118 ****
X if(rumors = fopen(tmp, "r")) {
X #else
X # ifdef MACOS
X! if(rumors = fopen(RUMORFILE, "r"))
X rumors = openFile(RUMORFILE, "r");
X if (rumors) {
X # else
X--- 125,131 ----
X if(rumors = fopen(tmp, "r")) {
X #else
X # ifdef MACOS
X! if(!(rumors = fopen(RUMORFILE, "r")))
X rumors = openFile(RUMORFILE, "r");
X if (rumors) {
X # else
X***************
X*** 131,136 ****
X--- 144,153 ----
X case -1: beginning = first_rumor + true_rumor_size;
X tidbit = true_rumor_size + Rand() % false_rumor_size;
X break;
X+ default:
X+ impossible("strange truth value for rumor");
X+ tidbit = 0; beginning = first_rumor;
X+ break;
X }
X (void) fseek(rumors, first_rumor + tidbit, 0);
X (void) fgets(line, COLNO, rumors);
X***************
X*** 176,182 ****
X if(oracles = fopen(tmp, "r")) {
X #else
X # ifdef MACOS
X! if(oracles = fopen(ORACLEFILE, "r"))
X oracles = openFile(ORACLEFILE, "r");
X if (oracles) {
X # else
X--- 193,199 ----
X if(oracles = fopen(tmp, "r")) {
X #else
X # ifdef MACOS
X! if(!(oracles = fopen(ORACLEFILE, "r")))
X oracles = openFile(ORACLEFILE, "r");
X if (oracles) {
X # else
X*** src/Old/save.c Mon Feb 19 18:57:35 1990
X--- src/save.c Fri Feb 16 22:07:43 1990
X***************
X*** 2,9 ****
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X /* block some unused #defines to avoid overloading some cpp's */
X- #define MONATTK_H
X #include "hack.h"
X #include "lev.h"
X
X--- 2,9 ----
X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X /* NetHack may be freely redistributed. See license for details. */
X
X+ #define MONATTK_H /* comment line for pre-compiled headers */
X /* block some unused #defines to avoid overloading some cpp's */
X #include "hack.h"
X #include "lev.h"
X
X***************
X*** 14,26 ****
X #ifndef NO_SIGNAL
X #include <signal.h>
X #endif /* !NO_SIGNAL */
X! #if defined(EXPLORE_MODE) && !defined(LSC) && !defined(O_RDONLY)
X #include <fcntl.h>
X #endif /* EXPLORE_MODE */
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--- 14,26 ----
X #ifndef NO_SIGNAL
X #include <signal.h>
X #endif /* !NO_SIGNAL */
X! #if defined(EXPLORE_MODE) && !defined(LSC) && !defined(O_RDONLY) && !defined(AZTEC_C)
X #include <fcntl.h>
X #endif /* EXPLORE_MODE */
X
X boolean hu; /* set during hang-up */
X
X! #if defined(DGK)
X struct finfo fileinfo[MAXLEVEL+1];
X long bytes_counted;
X int count_only;
X***************
X*** 28,66 ****
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 (void) fflush(stdout);
X if(multi > 0) nomul(0);
X } else {
X- #ifdef EXPLORE_MODE
X- # ifdef WIZARD
X- if(!discover && !wizard) {
X- # else
X- if(!discover) {
X- # endif
X- pline("Do you want to create a non-scoring, restartable save file? ");
X- if(yn() == 'y') discover = TRUE;
X- }
X- #endif
X clear_screen();
X (void) fflush(stdout);
X hu = FALSE;
X--- 28,66 ----
X boolean level_exists[MAXLEVEL+1];
X #endif
X
X! #if defined(DGK)
X static void savelev0();
X! #endif /* DGK */
X static void saveobjchn();
X static void savemonchn();
X static void savegoldchn();
X static void savetrapchn();
X static void savegenoinfo();
X! #if defined(DGK)
X static boolean swapout_oldest();
X static void copyfile();
X! #endif /* defined(DGK) */
X static void spill_objs();
X+ #ifdef __GNULINT__
X+ static long nulls[10];
X+ #else
X+ #define nulls nul
X+ #endif
X
X int
X dosave(){
X clrlin();
X+ #ifdef MACOS
X+ if(!flags.silent) SysBeep(1);
X+ if(UseMacAlertText(128, "Really save ?") != 1) {
X+ #else
X pline("Really save? "); /* especially useful if COMPRESS defined */
X if(yn() == 'n') {
X+ #endif
X clrlin();
X (void) fflush(stdout);
X if(multi > 0) nomul(0);
X } else {
X clear_screen();
X (void) fflush(stdout);
X hu = FALSE;
X***************
X*** 93,99 ****
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--- 93,99 ----
X register int fd, ofd;
X int tmp; /* not register ! */
X xchar ltmp;
X! #if defined(DGK)
X long fds, needed;
X int mode;
X #endif
X***************
X*** 110,116 ****
X #if defined(UNIX) || defined(VMS)
X (void) signal(SIGHUP, SIG_IGN);
X #endif
X! #if !defined(__TURBOC__) && !defined(OLD_TOS) && !defined(NO_SIGNAL)
X (void) signal(SIGINT, SIG_IGN);
X #endif
X
X--- 110,116 ----
X #if defined(UNIX) || defined(VMS)
X (void) signal(SIGHUP, SIG_IGN);
X #endif
X! #if !defined(__TURBOC__) && !defined(NO_SIGNAL)
X (void) signal(SIGINT, SIG_IGN);
X #endif
X
X***************
X*** 120,127 ****
X # endif
X # ifdef EXPLORE_MODE
X if(!hu) {
X!
X! fd = open(SAVEF, O_RDONLY);
X if (fd > 0) {
X (void) close(fd);
X clrlin();
X--- 120,130 ----
X # endif
X # ifdef EXPLORE_MODE
X if(!hu) {
X! # ifdef AMIGA_WBENCH
X! (fd = ami_wbench_getsave(O_RDONLY));
X! # else
X! (fd = open(SAVEF, O_RDONLY));
X! # endif
X if (fd > 0) {
X (void) close(fd);
X clrlin();
X***************
X*** 133,139 ****
X # ifdef TOS
X fd = creat(SAVEF, FCMASK);
X # else
X! fd = open(SAVEF, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, FCMASK);
X # endif
X #else /* MSDOS */
X # ifdef EXPLORE_MODE
X--- 136,146 ----
X # ifdef TOS
X fd = creat(SAVEF, FCMASK);
X # else
X! # ifdef AMIGA_WBENCH
X! fd=ami_wbench_getsave(O_WRONLY | O_CREAT | O_TRUNC);
X! # else
X! (fd = open(SAVEF, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, FCMASK));
X! # endif
X # endif
X #else /* MSDOS */
X # ifdef EXPLORE_MODE
X***************
X*** 183,188 ****
X--- 190,198 ----
X #endif /* MSDOS */
X if(fd < 0) {
X if(!hu) pline("Cannot open save file.");
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X (void) unlink(SAVEF); /* ab@unido */
X return(0);
X }
X***************
X*** 193,199 ****
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--- 203,209 ----
X change_luck(-1); /* and unido!ab */
X home();
X cl_end();
X! #if defined(DGK)
X if(!hu) msmsg("Saving: ");
X mode = COUNT;
X again:
X***************
X*** 235,241 ****
X bwrite(fd, (genericptr_t) &is_maze_lev, sizeof is_maze_lev);
X bwrite(fd, (genericptr_t) &u, sizeof(struct you));
X #ifdef SPELLS
X! bwrite(fd, (genericptr_t) spl_book, sizeof(struct spell) * (MAXSPELL + 1));
X #endif
X if(u.ustuck)
X bwrite(fd, (genericptr_t) &(u.ustuck->m_id), sizeof u.ustuck->m_id);
X--- 245,256 ----
X bwrite(fd, (genericptr_t) &is_maze_lev, sizeof is_maze_lev);
X bwrite(fd, (genericptr_t) &u, sizeof(struct you));
X #ifdef SPELLS
X! bwrite(fd, (genericptr_t) spl_book,
X! sizeof(struct spell) * (MAXSPELL + 1));
X! #endif
X! #ifdef NAMED_ITEMS
X! bwrite(fd, (genericptr_t) artiexist,
X! (unsigned)(sizeof(boolean) * artifact_num));
X #endif
X if(u.ustuck)
X bwrite(fd, (genericptr_t) &(u.ustuck->m_id), sizeof u.ustuck->m_id);
X***************
X*** 246,252 ****
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--- 261,267 ----
X savefruitchn(fd);
X #endif
X savenames(fd);
X! #if defined(DGK)
X if (mode == COUNT) {
X # ifdef ZEROCOMP
X bflush(fd);
X***************
X*** 256,261 ****
X--- 271,279 ----
X for (ltmp = 1; ltmp <= maxdlevel; ltmp++)
X if (ltmp != dlevel && fileinfo[ltmp].where)
X needed += fileinfo[ltmp].size + (sizeof ltmp);
X+ #ifdef AMIGA_WBENCH
X+ needed+=ami_wbench_iconsize(SAVEF);
X+ #endif
X fds = freediskspace(SAVEF);
X if(needed > fds) {
X if(!hu) {
X***************
X*** 264,269 ****
X--- 282,290 ----
X fds);
X }
X flushout();
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X (void) close(fd);
X (void) unlink(SAVEF);
X return 0;
X***************
X*** 273,279 ****
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--- 294,300 ----
X }
X #endif
X for(ltmp = (xchar)1; ltmp <= maxdlevel; ltmp++) {
X! #if defined(DGK)
X if (ltmp == dlevel || !fileinfo[ltmp].where) continue;
X if (fileinfo[ltmp].where != ACTIVE)
X swapin_file(ltmp);
X***************
X*** 294,299 ****
X--- 315,323 ----
X (void)SetVol(0L, savenum);
X #endif
X (void) unlink(SAVEF);
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_unlink(SAVEF);
X+ #endif
X if(!hu) done(TRICKED);
X return(0);
X }
X***************
X*** 303,309 ****
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--- 327,333 ----
X getlev(ofd, hackpid, ltmp, FALSE);
X (void) close(ofd);
X bwrite(fd, (genericptr_t) <mp, sizeof ltmp); /* level number */
X! #if defined(DGK)
X savelev(fd, ltmp, WRITE); /* actual level */
X #else
X savelev(fd, ltmp); /* actual level */
X***************
X*** 328,337 ****
X Strcat(cmd, SAVEF);
X (void) system(cmd);
X #endif
X return(1);
X }
X
X! #if defined(DGK) && !defined(OLD_TOS)
X boolean
X savelev(fd, lev, mode)
X int fd;
X--- 352,364 ----
X Strcat(cmd, SAVEF);
X (void) system(cmd);
X #endif
X+ #ifdef AMIGA_WBENCH
X+ ami_wbench_iconwrite(SAVEF);
X+ #endif
X return(1);
X }
X
X! #if defined(DGK)
X boolean
X savelev(fd, lev, mode)
X int fd;
X***************
X*** 385,391 ****
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--- 412,418 ----
X #endif
X
X if(fd < 0) panic("Save on bad file!"); /* impossible */
X! #if !defined(DGK)
X if(lev >= 0 && lev <= MAXLEVEL)
X level_exists[lev] = TRUE;
X #endif
X***************
X*** 430,438 ****
X * the display of the screen when the game is restored under
X * a potentially different value of showsyms from the
X * environment */
X! /* if a game is saved off the rogue level, the usual showsyms
X! * will be written out for the rogue level too, but they will
X! * be ignored on restore so it doesn't matter */
X bwrite(fd, (genericptr_t) savesyms, sizeof savesyms);
X else
X #endif
X--- 457,465 ----
X * the display of the screen when the game is restored under
X * a potentially different value of showsyms from the
X * environment */
X! /* if a game is saved while not on rogue level, the usual
X! * showsyms will be written out for the rogue level too, but
X! * they will be ignored on restore so it doesn't matter */
X bwrite(fd, (genericptr_t) savesyms, sizeof savesyms);
X else
X #endif
X***************
X*** 466,472 ****
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--- 493,499 ----
X for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp->nseg){
X bwrite(fd,(genericptr_t) wtmp,sizeof(struct wseg));
X }
X! #if defined(DGK)
X if (!count_only)
X #endif
X wsegs[tmp] = 0;
X***************
X*** 473,479 ****
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--- 500,506 ----
X }
X bwrite(fd,(genericptr_t) wgrowtime,sizeof(wgrowtime));
X #endif /* WORM /**/
X! #if defined(DGK)
X if (count_only) return;
X #endif
X billobjs = 0;
X***************
X*** 522,528 ****
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--- 549,555 ----
X flushoutrun(outrunlength);
X }
X if (outbufp) {
X! #if defined(DGK)
X if (!count_only) /* flush buffer */
X #endif
X (void) write(fd, outbuf, outbufp);
X***************
X*** 560,566 ****
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--- 587,593 ----
X register genericptr_t loc;
X register unsigned num;
X {
X! #if defined(DGK)
X bytes_counted += num;
X if (!count_only)
X #endif
X***************
X*** 593,599 ****
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--- 620,626 ----
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)
X if (!count_only)
X #endif
X free((genericptr_t) otmp);
X***************
X*** 620,626 ****
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--- 647,653 ----
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)
X if (!count_only)
X #endif
X free((genericptr_t) mtmp);
X***************
X*** 638,650 ****
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 gold = gold2;
X }
X! bwrite(fd, (genericptr_t)nul, sizeof(struct gold));
X }
X
X static void
X--- 665,677 ----
X while(gold) {
X gold2 = gold->ngold;
X bwrite(fd, (genericptr_t) gold, sizeof(struct gold));
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) gold);
X gold = gold2;
X }
X! bwrite(fd, (genericptr_t)nulls, sizeof(struct gold));
X }
X
X static void
X***************
X*** 656,668 ****
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 trap = trap2;
X }
X! bwrite(fd, (genericptr_t)nul, sizeof(struct trap));
X }
X
X #ifdef TUTTI_FRUTTI
X--- 683,695 ----
X while(trap) {
X trap2 = trap->ntrap;
X bwrite(fd, (genericptr_t) trap, sizeof(struct trap));
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) trap);
X trap = trap2;
X }
X! bwrite(fd, (genericptr_t)nulls, sizeof(struct trap));
X }
X
X #ifdef TUTTI_FRUTTI
X***************
X*** 683,695 ****
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--- 710,722 ----
X if (f1->fid >= 0) {
X bwrite(fd, (genericptr_t) f1, sizeof(struct fruit));
X }
X! #if defined(DGK)
X if (!count_only)
X #endif
X free((genericptr_t) f1);
X f1 = f2;
X }
X! bwrite(fd, (genericptr_t)nulls, sizeof(struct fruit));
X }
X #endif
X
X***************
X*** 703,709 ****
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--- 730,736 ----
X bwrite(fd, (genericptr_t) &(mons[i].geno), sizeof(unsigned));
X }
X
X! #if defined(DGK)
X boolean
X swapin_file(lev)
X int lev;
X***************
X*** 808,814 ****
X {
X register struct obj *otmp, *otmp2, *probj;
X
X! #ifdef LINT
X probj = (struct obj *)0; /* suppress "used before set" error */
X #endif
X for(otmp = fcobj; otmp; otmp = otmp2) {
X--- 835,841 ----
X {
X register struct obj *otmp, *otmp2, *probj;
X
X! #if defined(LINT) || defined(__GNULINT__)
X probj = (struct obj *)0; /* suppress "used before set" error */
X #endif
X for(otmp = fcobj; otmp; otmp = otmp2) {
X
END_OF_FILE
if test 53513 -ne `wc -c <'patch7.07'`; then
echo shar: \"'patch7.07'\" unpacked with wrong size!
fi
# end of 'patch7.07'
echo shar: End of archive 17 \(of 30\).
cp /dev/null ark17isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 30 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0