billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 9, Issue 11 Archive-name: NetHack3/Patch7k 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 11 (of 30)." # Contents: patch7.08 # Wrapped by billr@saab on Wed Feb 21 10:04:32 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patch7.08' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch7.08'\" to \"'patch7.08.orig'\" mv -f 'patch7.08' 'patch7.08.orig' fi echo shar: Extracting \"'patch7.08'\" \(55436 characters\) sed "s/^X//" >'patch7.08' <<'END_OF_FILE' X*** src/Old/shk.c Mon Feb 19 18:58:28 1990 X--- src/shk.c Sun Feb 18 11:46:50 1990 X*************** X*** 1,9 **** X! /* SCCS Id: @(#)shk.c 3.0 89/11/15 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 X #include "eshk.h" X--- 1,9 ---- X! /* SCCS Id: @(#)shk.c 3.0 89/11/27 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 X #include "eshk.h" X*************** X*** 10,16 **** X X #ifdef KOPS X static int FDECL(makekops, (coord *)); X! static void kops_gone(); X #endif /* KOPS */ X X #define NOTANGRY(mon) mon->mpeaceful X--- 10,16 ---- X X #ifdef KOPS X static int FDECL(makekops, (coord *)); X! static void NDECL(kops_gone); X #endif /* KOPS */ X X #define NOTANGRY(mon) mon->mpeaceful X*************** X*** 18,34 **** X X /* Descriptor of current shopkeeper. Note that the bill need not be X per-shopkeeper, since it is valid only when in a shop. */ X! static struct monst *shopkeeper = 0; X! static struct bill_x *bill; X! static int shlevel = 0; /* level of this shopkeeper */ X /* struct obj *billobjs; /* objects on bill with bp->useup */ X /* only accessed here and by save & restore */ X! static long int total; /* filled by addupbill() */ X! static long int followmsg; /* last time of follow message */ X static void setpaid(), FDECL(findshk, (int)); X static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *)); X static struct obj *FDECL(bp_to_obj, (struct bill_x *)); X X /* X invariants: obj->unpaid iff onbill(obj) [unless bp->useup] X obj->quan <= bp->bquan X--- 18,37 ---- X X /* Descriptor of current shopkeeper. Note that the bill need not be X per-shopkeeper, since it is valid only when in a shop. */ X! VSTATIC struct monst *shopkeeper; X! VSTATIC struct bill_x *bill; X! VSTATIC int shlevel; /* level of this shopkeeper */ X /* struct obj *billobjs; /* objects on bill with bp->useup */ X /* only accessed here and by save & restore */ X! VSTATIC long int total; /* filled by addupbill() */ X! VSTATIC long int followmsg; /* last time of follow message */ X! X static void setpaid(), FDECL(findshk, (int)); X static int FDECL(dopayobj, (struct bill_x *)), FDECL(getprice, (struct obj *)); X static struct obj *FDECL(bp_to_obj, (struct bill_x *)); X X+ #ifdef OVLB X+ X /* X invariants: obj->unpaid iff onbill(obj) [unless bp->useup] X obj->quan <= bp->bquan X*************** X*** 106,111 **** X--- 109,117 ---- X } X } X X+ #endif /* OVLB */ X+ #ifdef OVL2 X+ X int X inshop() { X register int roomno = inroom(u.ux,u.uy); X*************** X*** 252,257 **** X--- 258,268 ---- X NOTANGRY(shopkeeper) = 1; X } X if(!ESHK(shopkeeper)->following && inhishop(shopkeeper)) { X+ if(Invis) { X+ pline("%s senses your presence.", shkname(shopkeeper)); X+ verbalize("Invisible customers are not welcome!"); X+ } X+ else X if(ANGRY(shopkeeper)) X pline("\"So, %s, you dare return to %s's %s?!\"", X plname, X*************** X*** 267,276 **** X ESHK(shopkeeper)->visitct++ ? " again" : "", X shkname(shopkeeper), X shtypes[rt - SHOPBASE].name); X! if(carrying(PICK_AXE) != (struct obj *)0) { X! pline(NOTANGRY(shopkeeper) ? X! "\"Will you please leave your pick-axe outside?\"" : X! "\"Leave the pick-axe outside.\""); X if(dochug(shopkeeper)) { X u.uinshop = 0; /* he died moving */ X return(0); X--- 278,287 ---- X ESHK(shopkeeper)->visitct++ ? " again" : "", X shkname(shopkeeper), X shtypes[rt - SHOPBASE].name); X! if(carrying(PICK_AXE) != (struct obj *)0 && !Invis) { X! verbalize(NOTANGRY(shopkeeper) ? X! "Will you please leave your pick-axe outside?" : X! "Leave the pick-axe outside."); X if(dochug(shopkeeper)) { X u.uinshop = 0; /* he died moving */ X return(0); X*************** X*** 283,288 **** X--- 294,302 ---- X return (int)u.uinshop; X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X int X inhishop(mtmp) X register struct monst *mtmp; X*************** X*** 597,606 **** X #endif /* MSDOS /**/ X } X } X! pline("\"Thank you for shopping in %s's %s!\"", X shkname(shopkeeper), X shtypes[rooms[ESHK(shopkeeper)->shoproom].rtype - SHOPBASE].name); X- NOTANGRY(shopkeeper) = 1; X return(1); X } X X--- 611,620 ---- X #endif /* MSDOS /**/ X } X } X! if(!ANGRY(shopkeeper)) X! pline("\"Thank you for shopping in %s's %s!\"", X shkname(shopkeeper), X shtypes[rooms[ESHK(shopkeeper)->shoproom].rtype - SHOPBASE].name); X return(1); X } X X*************** X*** 790,798 **** X if (ACURR(A_CHA) > 18) tmp /= 2L; X else if (ACURR(A_CHA) > 17) tmp = (tmp * 2L)/3L; X else if (ACURR(A_CHA) > 15) tmp = (tmp * 3L)/4L; X- else if (ACURR(A_CHA) < 11) tmp = (tmp * 4L)/3L; X- else if (ACURR(A_CHA) < 8) tmp = (tmp * 3L)/2L; X else if (ACURR(A_CHA) < 6) tmp *= 2L; X return(tmp); X } X X--- 804,813 ---- X if (ACURR(A_CHA) > 18) tmp /= 2L; X else if (ACURR(A_CHA) > 17) tmp = (tmp * 2L)/3L; X else if (ACURR(A_CHA) > 15) tmp = (tmp * 3L)/4L; X else if (ACURR(A_CHA) < 6) tmp *= 2L; X+ else if (ACURR(A_CHA) < 8) tmp = (tmp * 3L)/2L; X+ else if (ACURR(A_CHA) < 11) tmp = (tmp * 4L)/3L; X+ if (!tmp) return 1; X return(tmp); X } X X*************** X*** 940,956 **** X return; X } X /* you dropped something of your own - probably want to sell it */ X! if(shopkeeper->msleep || shopkeeper->mfroz || !inhishop(shopkeeper)) X return; X ltmp = (long) getprice(obj) * (long) obj->quan; X- if(ESHK(shopkeeper)->billct == BILLSZ X- || !saleable(rooms[ESHK(shopkeeper)->shoproom].rtype-SHOPBASE, obj) X- || obj->olet == BALL_SYM || ltmp == 0L X- || (obj->olet == FOOD_SYM && obj->oeaten)) { X- pline("%s seems not interested.", Monnam(shopkeeper)); X- obj->no_charge = 1; X- return; X- } X if (ANGRY(shopkeeper) || (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2)) X #ifdef SHIRT X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X--- 955,963 ---- X return; X } X /* you dropped something of your own - probably want to sell it */ X! if(shopkeeper->msleep || !shopkeeper->mcanmove || !inhishop(shopkeeper)) X return; X ltmp = (long) getprice(obj) * (long) obj->quan; X if (ANGRY(shopkeeper) || (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2)) X #ifdef SHIRT X || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X*************** X*** 959,968 **** X ltmp /= 3L; X NOTANGRY(shopkeeper) = 1; X } else ltmp /= 2L; X if(ESHK(shopkeeper)->robbed) { X if((ESHK(shopkeeper)->robbed -= ltmp) < 0L) X ESHK(shopkeeper)->robbed = 0L; X! pline("\"Thank you for your contribution to restock this recently plundered shop.\""); X return; X } X if(ltmp > shopkeeper->mgold) X--- 966,983 ---- X ltmp /= 3L; X NOTANGRY(shopkeeper) = 1; X } else ltmp /= 2L; X+ if(ESHK(shopkeeper)->billct == BILLSZ X+ || !saleable(rooms[ESHK(shopkeeper)->shoproom].rtype-SHOPBASE, obj) X+ || obj->olet == BALL_SYM || ltmp == 0L X+ || (obj->olet == FOOD_SYM && obj->oeaten)) { X+ pline("%s seems not interested.", Monnam(shopkeeper)); X+ obj->no_charge = 1; X+ return; X+ } X if(ESHK(shopkeeper)->robbed) { X if((ESHK(shopkeeper)->robbed -= ltmp) < 0L) X ESHK(shopkeeper)->robbed = 0L; X! verbalize("Thank you for your contribution to restock this recently plundered shop."); X return; X } X if(ltmp > shopkeeper->mgold) X*************** X*** 983,989 **** X--- 998,1009 ---- X { X register struct bill_x *bp; X register struct obj *obj; X+ #ifdef __GNULINT__ X+ long totused, thisused = 0L; X+ /* possibly a bug in the GCC; clearly thisused is always set before use */ X+ #else X long totused, thisused; X+ #endif X char buf[BUFSZ]; X X if(mode == 0) { X*************** X*** 1058,1064 **** X case FOOD_SYM: X /* simpler hunger check, (2-4)*cost */ X if (u.uhs >= HUNGRY) tmp *= u.uhs; X! if (obj->oeaten) tmp /= 2; /* partly eaten */ X break; X case WAND_SYM: X if (obj->spe == -1) tmp = 0; X--- 1078,1084 ---- X case FOOD_SYM: X /* simpler hunger check, (2-4)*cost */ X if (u.uhs >= HUNGRY) tmp *= u.uhs; X! if (obj->oeaten) tmp = eaten_stat(tmp, obj); /* partly eaten */ X break; X case WAND_SYM: X if (obj->spe == -1) tmp = 0; X*************** X*** 1085,1091 **** X register struct monst *shkp = shopkeeper; X X if(obj->otyp != PICK_AXE) return(0); X! if(u.uinshop && shkp && !shkp->mfroz && !shkp->msleep && X inroom(u.ux+u.dx, u.uy+u.dy) + 1 == u.uinshop && X shkp->mx == ESHK(shkp)->shk.x && shkp->my == ESHK(shkp)->shk.y && X u.ux == ESHK(shkp)->shd.x && u.uy == ESHK(shkp)->shd.y) { X--- 1105,1111 ---- X register struct monst *shkp = shopkeeper; X X if(obj->otyp != PICK_AXE) return(0); X! if(u.uinshop && shkp && shkp->mcanmove && !shkp->msleep && X inroom(u.ux+u.dx, u.uy+u.dy) + 1 == u.uinshop && X shkp->mx == ESHK(shkp)->shk.x && shkp->my == ESHK(shkp)->shk.y && X u.ux == ESHK(shkp)->shd.x && u.uy == ESHK(shkp)->shd.y) { X*************** X*** 1110,1116 **** X register schar appr; X int z; X schar shkroom; X! boolean uondoor, satdoor, avoid, badinv; X X omx = shkp->mx; X omy = shkp->my; X--- 1130,1136 ---- X register schar appr; X int z; X schar shkroom; X! boolean uondoor = FALSE, satdoor, avoid = FALSE, badinv; X X omx = shkp->mx; X omy = shkp->my; X*************** X*** 1207,1212 **** X--- 1227,1235 ---- X return(move_special(shkp,shkroom,appr,uondoor,avoid,omx,omy,gx,gy)); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X int X online(x,y) /* New version to speed things up. X * Compiler dependant, may not always work. X*************** X*** 1222,1227 **** X--- 1245,1253 ---- X *} X */ X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X /* for use in levl_follower (mondata.c) */ X boolean X is_fshk(mtmp) X*************** X*** 1249,1259 **** X pline("\"%s, do not damage the floor here!\"", X flags.female ? "Madam" : "Sir"); X if (pl_character[0] == 'K') adjalign(-sgn(u.ualigntyp)); X! } else if(!um_dist(shopkeeper->mx, shopkeeper->my, 5) && X! !shopkeeper->msleep && !shopkeeper->mfroz) { X! register struct obj *obj, *obj2; X X! if(dist(shopkeeper->mx, shopkeeper->my) > 2) { X mnexto(shopkeeper); X /* for some reason he can't come next to you */ X if(dist(shopkeeper->mx, shopkeeper->my) > 2) { X--- 1275,1287 ---- X pline("\"%s, do not damage the floor here!\"", X flags.female ? "Madam" : "Sir"); X if (pl_character[0] == 'K') adjalign(-sgn(u.ualigntyp)); X! } else X! if(!um_dist(shopkeeper->mx, shopkeeper->my, 5) && X! !shopkeeper->msleep && shopkeeper->mcanmove && X! (ESHK(shopkeeper)->billct || ESHK(shopkeeper)->debit)) { X! register struct obj *obj, *obj2; X X! if(dist(shopkeeper->mx, shopkeeper->my) > 2) { X mnexto(shopkeeper); X /* for some reason he can't come next to you */ X if(dist(shopkeeper->mx, shopkeeper->my) > 2) { X*************** X*** 1263,1278 **** X return; X } else pline("%s leaps, and grabs your backpack!", X shkname(shopkeeper)); X! } else pline("%s grabs your backpack!", shkname(shopkeeper)); X X! for(obj = invent; obj; obj = obj2) { X obj2 = obj->nobj; X if(obj->owornmask) continue; X freeinv(obj); X obj->nobj = shopkeeper->minvent; X shopkeeper->minvent = obj; X subfrombill(obj); X! } X } X } X X--- 1291,1309 ---- X return; X } else pline("%s leaps, and grabs your backpack!", X shkname(shopkeeper)); X! } else pline("%s grabs your backpack!", shkname(shopkeeper)); X X! for(obj = invent; obj; obj = obj2) { X obj2 = obj->nobj; X if(obj->owornmask) continue; X+ #ifdef WALKIES X+ if(obj->otyp == LEASH && obj->leashmon) continue; X+ #endif X freeinv(obj); X obj->nobj = shopkeeper->minvent; X shopkeeper->minvent = obj; X subfrombill(obj); X! } X } X } X X*************** X*** 1306,1311 **** X--- 1337,1345 ---- X } X #endif X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X boolean X in_shop(x,y) X register int x, y; X*************** X*** 1316,1338 **** X return (IS_SHOP(rooms[roomno])); X } X X void X pay_for_door(x,y,dmgstr) X int x, y; X! char *dmgstr; X { X struct monst *mtmp; X int roomno = inroom(x, y); X! register int damage; X X /* make sure this function is not used in the wrong place */ X if(!(IS_DOOR(levl[x][y].typ) && in_shop(x, y))) return; X X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) X! if(mtmp->isshk && ESHK(mtmp)->shoproom == roomno X! && ESHK(mtmp)->shoplevel == dlevel) { X! shopkeeper = mtmp; X! } X X if(!shopkeeper) return; X X--- 1350,1372 ---- X return (IS_SHOP(rooms[roomno])); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X void X pay_for_door(x,y,dmgstr) X int x, y; X! const char *dmgstr; X { X struct monst *mtmp; X int roomno = inroom(x, y); X! long damage; X! boolean uinshp = in_shop(u.ux, u.uy); X X /* make sure this function is not used in the wrong place */ X if(!(IS_DOOR(levl[x][y].typ) && in_shop(x, y))) return; X X! findshk(roomno); X X if(!shopkeeper) return; X X*************** X*** 1347,1360 **** X } X X /* if he's not in his shop.. */ X! if(!in_shop(shopkeeper->mx ,shopkeeper->my)) return; X X! if(in_shop(u.ux, u.uy)) mnexto(shopkeeper); X! else { X /* if a !shopkeeper shows up at the door, move him */ X if(MON_AT(x, y) && (mtmp = m_at(x, y)) != shopkeeper) { X if(flags.soundok) { X! You("hear an angry voice: \"Out of my way, scum!\""); X (void) fflush(stdout); X #if defined(SYSV) || defined(ULTRIX) || defined(VMS) X (void) X--- 1381,1404 ---- X } X X /* if he's not in his shop.. */ X! if(!in_shop(shopkeeper->mx ,shopkeeper->my)) { X! if(!cansee(shopkeeper->mx, shopkeeper->my)) return; X! goto gethim; X! } X X! if(uinshp) { X! if(um_dist(shopkeeper->mx, shopkeeper->my, 1) && X! !um_dist(shopkeeper->mx, shopkeeper->my, 3)) { X! pline("%s leaps towards you!", shkname(shopkeeper)); X! mnexto(shopkeeper); X! } X! if(um_dist(shopkeeper->mx, shopkeeper->my, 1)) goto gethim; X! } else { X /* if a !shopkeeper shows up at the door, move him */ X if(MON_AT(x, y) && (mtmp = m_at(x, y)) != shopkeeper) { X if(flags.soundok) { X! You("hear an angry voice:"); X! verbalize("Out of my way, scum!"); X (void) fflush(stdout); X #if defined(SYSV) || defined(ULTRIX) || defined(VMS) X (void) X*************** X*** 1372,1403 **** X pmon(shopkeeper); X } X X! if(!strcmp(dmgstr, "destroy")) damage = 400; X! else damage = (ACURR(A_STR) > 18) ? 400 : 20 * ACURR(A_STR); X X- if(um_dist(x, y, 1) || u.ugold < (long) damage || !rn2(50)) { X- if(um_dist(x, y, 1)) X- pline("%s shouts: \"Who dared %s my door?\"", X- shkname(shopkeeper), dmgstr); X- else pline("\"How dare you %s my door?\"", dmgstr); X NOTANGRY(shopkeeper) = 0; X ESHK(shopkeeper)->following = 1; X return; X } X X! pline("\"Cad! You did %d zorkmids worth of damage!\" Pay? ", damage); X if(yn() != 'n') { X! u.ugold -= (long) damage; X! shopkeeper->mgold += (long) damage; X flags.botl = 1; X pline("Mollified, %s accepts your restitution.", X shkname(shopkeeper)); X- X /* move shk back to his home loc */ X home_shk(shopkeeper); X NOTANGRY(shopkeeper) = 1; X! } X! else { X verbalize("Oh, yes! You'll pay!"); X ESHK(shopkeeper)->following = 1; X NOTANGRY(shopkeeper) = 0; X--- 1416,1453 ---- X pmon(shopkeeper); X } X X! if(!strcmp(dmgstr, "destroy")) damage = 400L; X! else damage = (long)(ACURR(A_STR) > 18) ? 400 : 20 * ACURR(A_STR); X! X! if((um_dist(x, y, 1) && !uinshp) || X! (u.ugold + ESHK(shopkeeper)->credit) < damage X! || !rn2(50)) { X! if(um_dist(x, y, 1) && !uinshp) { X! pline("%s shouts:", shkname(shopkeeper)); X! pline("\"Who dared %s my door?\"", dmgstr); X! } X! else X! gethim: X! pline("\"How dare you %s my door?\"", dmgstr); X X NOTANGRY(shopkeeper) = 0; X ESHK(shopkeeper)->following = 1; X return; X } X X! if(Invis) Your("invisibility does not fool %s!", shkname(shopkeeper)); X! pline("\"Cad! You did %ld zorkmids worth of damage!\" Pay? ", damage); X if(yn() != 'n') { X! damage = check_credit(damage, shopkeeper); X! u.ugold -= damage; X! shopkeeper->mgold += damage; X flags.botl = 1; X pline("Mollified, %s accepts your restitution.", X shkname(shopkeeper)); X /* move shk back to his home loc */ X home_shk(shopkeeper); X NOTANGRY(shopkeeper) = 1; X! } else { X verbalize("Oh, yes! You'll pay!"); X ESHK(shopkeeper)->following = 1; X NOTANGRY(shopkeeper) = 0; X*************** X*** 1466,1473 **** X otmp->otyp <= DRUM_OF_EARTHQUAKE) || /* 5 - 9 */ X #endif X otmp->olet == WAND_SYM) { /* 3 - 11 */ X! if(otmp->spe == 1) tmp += (tmp/3L); X! else tmp = (tmp/4L); X } X else return(0L); X return(tmp); X--- 1516,1522 ---- X otmp->otyp <= DRUM_OF_EARTHQUAKE) || /* 5 - 9 */ X #endif X otmp->olet == WAND_SYM) { /* 3 - 11 */ X! if(otmp->spe > 1) tmp = (tmp/4L); X } X else return(0L); X return(tmp); X*************** X*** 1486,1488 **** X--- 1535,1603 ---- X ESHK(shopkeeper)->debit += cost_per_charge(otmp); X } X } X+ X+ boolean X+ block_door(x,y) /* used in domove to block diagonal shop-exit */ X+ register int x, y; X+ { X+ register int roomno = inroom(x, y); X+ X+ if(!in_shop(u.ux, u.uy)) return(FALSE); X+ X+ if(!IS_DOOR(levl[x][y].typ)) return(FALSE); X+ X+ if(roomno != inroom(u.ux,u.uy)) return(FALSE); X+ X+ findshk(roomno); X+ X+ if(inhishop(shopkeeper) X+ && shopkeeper->mx == ESHK(shopkeeper)->shk.x X+ && shopkeeper->my == ESHK(shopkeeper)->shk.y X+ /* Actually, the shk should be made to block _any_ */ X+ /* door, including a door the player digs, if the */ X+ /* shk is within a 'jumping' distance. */ X+ && ESHK(shopkeeper)->shd.x == x && ESHK(shopkeeper)->shd.y == y X+ && shopkeeper->mcanmove && !shopkeeper->msleep X+ && (ESHK(shopkeeper)->debit || ESHK(shopkeeper)->billct || X+ ESHK(shopkeeper)->robbed)) { X+ pline("%s%s blocks your way!", shkname(shopkeeper), X+ Invis ? " senses your motion and" : ""); X+ return(TRUE); X+ } X+ return(FALSE); X+ } X+ X+ boolean X+ block_entry(x,y) /* used in domove to block diagonal shop-entry */ X+ register int x, y; X+ { X+ register int sx, sy, roomno = inroom(x, y); X+ X+ if(roomno != inroom(u.ux,u.uy)) return(FALSE); X+ X+ if(!(in_shop(u.ux, u.uy) && IS_DOOR(levl[u.ux][u.uy].typ) && X+ levl[u.ux][u.uy].doormask == D_BROKEN)) return(FALSE); X+ X+ findshk(roomno); X+ if(!inhishop(shopkeeper)) return(FALSE); X+ X+ if(ESHK(shopkeeper)->shd.x != u.ux || ESHK(shopkeeper)->shd.y != u.uy) X+ return(FALSE); X+ X+ sx = ESHK(shopkeeper)->shk.x; X+ sy = ESHK(shopkeeper)->shk.y; X+ X+ if(shopkeeper->mx == sx && shopkeeper->my == sy X+ && shopkeeper->mcanmove && !shopkeeper->msleep X+ && in_shop(x, y) X+ && (x == sx-1 || x == sx+1 || y == sy-1 || y == sy+1) X+ && (Invis || carrying(PICK_AXE)) X+ ) { X+ pline("%s%s blocks your way!", shkname(shopkeeper), X+ Invis ? " senses your motion and" : ""); X+ return(TRUE); X+ } X+ return(FALSE); X+ } X+ X+ #endif /* OVLB */ X*** src/Old/shknam.c Mon Feb 19 18:59:31 1990 X--- src/shknam.c Sun Feb 11 12:27:44 1990 X*************** X*** 7,12 **** X--- 7,14 ---- X #include "hack.h" X #include "eshk.h" X X+ #ifdef OVLB X+ X static const char *shkliquors[] = { X /* Ukraine */ X "Njezjin", "Tsjernigof", "Gomel", "Ossipewsk", "Gorlowka", X*************** X*** 137,142 **** X--- 139,145 ---- X * In the latter case, prepend it with a unary minus so the code can know X * (by testing the sign) whether to use mkobj() or mksobj(). X */ X+ X const struct shclass shtypes[] = { X {"general store", RANDOM_SYM, X #ifdef SPELLS X*************** X*** 144,152 **** X #else X 47, X #endif X! D_SHOP, {{100, RANDOM_SYM}, {0, 0}, {0, 0}}, shkgeneral}, X {"used armor dealership", ARMOR_SYM, 14, X! D_SHOP, {{90, ARMOR_SYM}, {10, WEAPON_SYM}, {0, 0}}, shkarmors}, X {"second hand bookstore", SCROLL_SYM, 10, D_SHOP, X #ifdef SPELLS X {{90, SCROLL_SYM}, {10, SPBOOK_SYM}, {0, 0}}, X--- 147,155 ---- X #else X 47, X #endif X! D_SHOP, {{100, RANDOM_SYM}, {0, 0}, {0, 0}}, (char **)shkgeneral}, X {"used armor dealership", ARMOR_SYM, 14, X! D_SHOP, {{90, ARMOR_SYM}, {10, WEAPON_SYM}, {0, 0}}, (char **)shkarmors}, X {"second hand bookstore", SCROLL_SYM, 10, D_SHOP, X #ifdef SPELLS X {{90, SCROLL_SYM}, {10, SPBOOK_SYM}, {0, 0}}, X*************** X*** 153,178 **** X #else X {{100, SCROLL_SYM}, {0, 0}, {0, 0}}, X #endif X! shkbooks}, X {"liquor emporium", POTION_SYM, 10, D_SHOP, X! {{100, POTION_SYM}, {0, 0}, {0, 0}}, shkliquors}, X {"antique weapons outlet", WEAPON_SYM, 5, D_SHOP, X! {{90, WEAPON_SYM}, {10, ARMOR_SYM}, {0, 0}}, shkweapons}, X {"delicatessen", FOOD_SYM, 5, D_SHOP, X! {{95, FOOD_SYM}, {5, POTION_SYM}, {0, 0}}, shkfoods}, X {"jewelers", RING_SYM, 3, D_SHOP, X! {{85, RING_SYM}, {10, GEM_SYM}, {5, AMULET_SYM}, {0, 0}}, shkrings}, X {"quality apparel and accessories", WAND_SYM, 3, D_SHOP, X {{90, WAND_SYM}, {5, -LEATHER_GLOVES}, {5, -ELVEN_CLOAK}, {0, 0}}, X! shkwands}, X {"hardware store", TOOL_SYM, 3, D_SHOP, X! {{100, TOOL_SYM}, {0, 0}, {0, 0}}, shktools}, X /* Actually shktools is ignored; the code specifically chooses a X * random implementor name (the only shop type with random shopkeepers) X */ X #ifdef SPELLS X {"rare books", SPBOOK_SYM, 3, D_SHOP, X! {{90, SPBOOK_SYM}, {10, SCROLL_SYM}, {0, 0}}, shkbooks}, X #endif X {NULL, 0, 0, 0, {{0, 0}, {0, 0}, {0, 0}}, (char **)0} X }; X--- 156,181 ---- X #else X {{100, SCROLL_SYM}, {0, 0}, {0, 0}}, X #endif X! (char **)shkbooks}, X {"liquor emporium", POTION_SYM, 10, D_SHOP, X! {{100, POTION_SYM}, {0, 0}, {0, 0}}, (char **)shkliquors}, X {"antique weapons outlet", WEAPON_SYM, 5, D_SHOP, X! {{90, WEAPON_SYM}, {10, ARMOR_SYM}, {0, 0}}, (char **)shkweapons}, X {"delicatessen", FOOD_SYM, 5, D_SHOP, X! {{95, FOOD_SYM}, {5, POTION_SYM}, {0, 0}}, (char **)shkfoods}, X {"jewelers", RING_SYM, 3, D_SHOP, X! {{85, RING_SYM}, {10, GEM_SYM}, {5, AMULET_SYM}, {0, 0}}, (char **)shkrings}, X {"quality apparel and accessories", WAND_SYM, 3, D_SHOP, X {{90, WAND_SYM}, {5, -LEATHER_GLOVES}, {5, -ELVEN_CLOAK}, {0, 0}}, X! (char **)shkwands}, X {"hardware store", TOOL_SYM, 3, D_SHOP, X! {{100, TOOL_SYM}, {0, 0}, {0, 0}}, (char **)shktools}, X /* Actually shktools is ignored; the code specifically chooses a X * random implementor name (the only shop type with random shopkeepers) X */ X #ifdef SPELLS X {"rare books", SPBOOK_SYM, 3, D_SHOP, X! {{90, SPBOOK_SYM}, {10, SCROLL_SYM}, {0, 0}}, (char **)shkbooks}, X #endif X {NULL, 0, 0, 0, {{0, 0}, {0, 0}, {0, 0}}, (char **)0} X }; X*************** X*** 191,197 **** X (mtmp=makemon(ptr,sx,sy))) { X mtmp->mimic = 1; X /* note: makemon will set the mimic symbol to a shop item */ X! if (rn2(10) >= dlevel) mtmp->mappearance = S_MIMIC_DEF; X } else if ((atype = get_shop_item(shp - shtypes)) < 0) X (void) mksobj_at(-atype, sx, sy); X else (void) mkobj_at(atype, sx, sy); X--- 194,203 ---- X (mtmp=makemon(ptr,sx,sy))) { X mtmp->mimic = 1; X /* note: makemon will set the mimic symbol to a shop item */ X! if (rn2(10) >= dlevel) { X! mtmp->m_ap_type = M_AP_OBJECT; X! mtmp->mappearance = STRANGE_OBJECT; X! } X } else if ((atype = get_shop_item(shp - shtypes)) < 0) X (void) mksobj_at(-atype, sx, sy); X else (void) mkobj_at(atype, sx, sy); X*************** X*** 208,214 **** X for(i = 0; i < dlevel; i++) X if (strlen(nlp[i]) == 0) { X /* Not enough names, try general name */ X! if (nlp != shkgeneral) X findname(nampt, shkgeneral); X else X Strcpy(nampt, "Dirk"); X--- 214,220 ---- X for(i = 0; i < dlevel; i++) X if (strlen(nlp[i]) == 0) { X /* Not enough names, try general name */ X! if (nlp != (char **)shkgeneral) X findname(nampt, shkgeneral); X else X Strcpy(nampt, "Dirk"); X*************** X*** 278,284 **** X ESHK(shk)->following = 0; X ESHK(shk)->billct = 0; X shk->mgold = 1000L + 30L*(long)rnd(100); /* initial capital */ X! if (shp->shknms == shktools) { X static int who; X who = rn2(sizeof(shktools)/sizeof(char *) - 1); X if (who==21) ESHK(shk)->ismale = FALSE; X--- 284,290 ---- X ESHK(shk)->following = 0; X ESHK(shk)->billct = 0; X shk->mgold = 1000L + 30L*(long)rnd(100); /* initial capital */ X! if (shp->shknms == (char **)shktools) { X static int who; X who = rn2(sizeof(shktools)/sizeof(char *) - 1); X if (who==21) ESHK(shk)->ismale = FALSE; X*************** X*** 296,302 **** X void X stock_room(shp, sroom) X /* stock a newly-created room with artifacts */ X! struct shclass *shp; X register struct mkroom *sroom; X { X /* X--- 302,308 ---- X void X stock_room(shp, sroom) X /* stock a newly-created room with artifacts */ X! const struct shclass *shp; X register struct mkroom *sroom; X { X /* X*************** X*** 306,325 **** X * door get artifacts). X */ X register int sx, sy, sh; X X /* first, try to place a shopkeeper in the room */ X if ((sh = shkinit(shp, sroom)) < 0) X return; X X! /* make sure no doorways without doors in shops */ X! for(sx = sroom->lx - 1; sx <= sroom->hx + 1; sx++) X! for(sy = sroom->ly - 1; sy <= sroom->hy + 1; sy++) { X! if(IS_DOOR(levl[sx][sy].typ)) X! if (levl[sx][sy].doormask == D_NODOOR) { X! levl[sx][sy].doormask = D_ISOPEN; X! mnewsym(sx,sy); X! } X } X X for(sx = sroom->lx; sx <= sroom->hx; sx++) X for(sy = sroom->ly; sy <= sroom->hy; sy++) { X--- 312,347 ---- X * door get artifacts). X */ X register int sx, sy, sh; X+ char buf[BUFSZ]; X X /* first, try to place a shopkeeper in the room */ X if ((sh = shkinit(shp, sroom)) < 0) X return; X X! /* make sure no doorways without doors, and no */ X! /* trapped doors, in shops. */ X! sx = doors[sroom->fdoor].x; X! sy = doors[sroom->fdoor].y; X! X! if(levl[sx][sy].doormask == D_NODOOR) { X! levl[sx][sy].doormask = D_ISOPEN; X! mnewsym(sx,sy); X } X+ if(levl[sx][sy].doormask & D_TRAPPED) { X+ levl[sx][sy].doormask &= ~D_TRAPPED; X+ levl[sx][sy].doormask = D_LOCKED; X+ } X+ X+ if(levl[sx][sy].doormask == D_LOCKED) { X+ register int m = sx, n = sy; X+ X+ if(IS_ROOM(levl[sx+1][sy].typ)) m--; X+ else if(IS_ROOM(levl[sx-1][sy].typ)) m++; X+ if(IS_ROOM(levl[sx][sy+1].typ)) n--; X+ else if(IS_ROOM(levl[sx][sy-1].typ)) n++; X+ Sprintf(buf, "Closed for inventory"); X+ make_engr_at(m, n, buf); X+ } X X for(sx = sroom->lx; sx <= sroom->hx; sx++) X for(sy = sroom->ly; sy <= sroom->hy; sy++) { X*************** X*** 336,341 **** X--- 358,366 ---- X */ X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X int X saleable(nshop, obj) /* does "shop" stock this item type */ X register int nshop; X*************** X*** 359,365 **** X get_shop_item(type) X int type; X { X! struct shclass *shp = shtypes+type; X register int i,j; X X /* select an appropriate artifact type at random */ X--- 384,390 ---- X get_shop_item(type) X int type; X { X! const struct shclass *shp = shtypes+type; X register int i,j; X X /* select an appropriate artifact type at random */ X*************** X*** 368,370 **** X--- 393,397 ---- X X return shp->iprobs[i].itype; X } X+ X+ #endif /* OVL0 */ X*** src/Old/sit.c Mon Feb 19 18:59:54 1990 X--- src/sit.c Mon Jan 15 12:37:51 1990 X*************** X*** 33,39 **** X switch (rnd(13)) { X case 1: X adjattrib(rn2(A_MAX), -rn1(4,3), FALSE); X! losehp(rnd(10), "cursed throne"); X break; X case 2: X adjattrib(rn2(A_MAX), 1, FALSE); X--- 33,39 ---- X switch (rnd(13)) { X case 1: X adjattrib(rn2(A_MAX), -rn1(4,3), FALSE); X! losehp(rnd(10), "cursed throne", KILLED_BY_AN); X break; X case 2: X adjattrib(rn2(A_MAX), 1, FALSE); X*************** X*** 42,49 **** X pline("A%s charge of electricity shoots through your body!", X (Shock_resistance) ? "" : " massive"); X if(Shock_resistance) X! losehp(rnd(6), "electric chair"); X! else losehp(rnd(30), "electric chair"); X break; X case 4: X You("feel much, much better!"); X--- 42,49 ---- X pline("A%s charge of electricity shoots through your body!", X (Shock_resistance) ? "" : " massive"); X if(Shock_resistance) X! losehp(rnd(6), "electric chair", KILLED_BY_AN); X! else losehp(rnd(30), "electric chair", KILLED_BY_AN); X break; X case 4: X You("feel much, much better!"); X*************** X*** 78,89 **** X case 9: X You("hear a voice echo:"); X pline("\"A curse upon thee for sitting upon this most holy throne!\""); X! if (u.uluck > 0) { X make_blinded(Blinded + rn1(100,250),TRUE); X } else rndcurse(); X break; X case 10: X! if (u.uluck < 0 || (HSee_invisible & INTRINSIC)) { X pline("An image forms in your mind."); X do_mapping(); X } else { X--- 78,89 ---- X case 9: X You("hear a voice echo:"); X pline("\"A curse upon thee for sitting upon this most holy throne!\""); X! if (Luck > 0) { X make_blinded(Blinded + rn1(100,250),TRUE); X } else rndcurse(); X break; X case 10: X! if (Luck < 0 || (HSee_invisible & INTRINSIC)) { X pline("An image forms in your mind."); X do_mapping(); X } else { X*************** X*** 92,98 **** X } X break; X case 11: X! if (u.uluck < 0) { X You("feel threatened."); X aggravate(); X } else { X--- 92,98 ---- X } X break; X case 11: X! if (Luck < 0) { X You("feel threatened."); X aggravate(); X } else { X*************** X*** 180,186 **** X HFire_resistance &= ~INTRINSIC; X if (Inhell && !Fire_resistance) { X You("burn to a crisp."); X! killer = "gremlin curse"; X done(BURNING); X } else You("feel warmer."); X break; X--- 180,187 ---- X HFire_resistance &= ~INTRINSIC; X if (Inhell && !Fire_resistance) { X You("burn to a crisp."); X! killer_format = NO_KILLER_PREFIX; X! killer = self_pronoun("a gremlin stole %s fire resistance in hell", "his"); X done(BURNING); X } else You("feel warmer."); X break; X*** src/Old/sounds.c Mon Feb 19 19:00:11 1990 X--- src/sounds.c Fri Feb 16 22:11:07 1990 X*************** X*** 1,22 **** X! /* SCCS Id: @(#)sounds.c 3.0 88/06/19 */ X /* NetHack may be freely redistributed. See license for details. */ X /* Copyright (c) 1989 Janet Walz, Mike Threepoint */ X X /* block some unused #defines to avoid overloading some cpp's */ X X- #define ONAMES_H X #include "hack.h" X #include "edog.h" X X void X verbalize(str) X! register char *str; X { X if(flags.soundok) pline("\"%s\"", str); X } X X #ifdef SOUNDS X X void X dosounds() X { X--- 1,30 ---- X! /* SCCS Id: @(#)sounds.c 3.0 90/02/05 */ X /* NetHack may be freely redistributed. See license for details. */ X /* Copyright (c) 1989 Janet Walz, Mike Threepoint */ X X+ #define ONAMES_H /* comment line for pre-compiled headers */ X /* block some unused #defines to avoid overloading some cpp's */ X X #include "hack.h" X #include "edog.h" X X+ static int FDECL(domonnoise,(struct monst *)); X+ X+ #ifdef OVLB X+ X void X verbalize(str) X! register const char *str; X { X if(flags.soundok) pline("\"%s\"", str); X } X X+ #endif /* OVLB */ X+ X #ifdef SOUNDS X X+ #ifdef OVL0 X+ X void X dosounds() X { X*************** X*** 24,29 **** X--- 32,43 ---- X register struct mkroom *sroom; X register xchar roomtype; X register int croomno; X+ boolean gold_in_vault, u_in_room; X+ register int vx, vy; X+ X+ #ifdef __GNULINT__ X+ gold_in_vault = u_in_room = FALSE; X+ #endif X X hallu = Hallucination ? 1 : 0; X X*************** X*** 61,79 **** X for (sroom = &rooms[0]; ; sroom++) { /* find any special room */ X if (sroom->hx < 0) break; /* no more rooms */ X if (sroom->rtype != OROOM) { X if (sroom->rtype < SHOPBASE) X roomtype = sroom->rtype; X! else { X! croomno = inroom(u.ux,u.uy); X! if (croomno == -1 || sroom != &rooms[croomno]) X /* player not presently in shop */ X! /* other special room types disappear when player X! enters */ X! roomtype = SHOPBASE; X } X break; X } X } X switch (roomtype) { X #ifdef THRONES X case COURT: X--- 75,104 ---- X for (sroom = &rooms[0]; ; sroom++) { /* find any special room */ X if (sroom->hx < 0) break; /* no more rooms */ X if (sroom->rtype != OROOM) { X+ croomno = inroom(u.ux,u.uy); X+ u_in_room = croomno >= 0 && sroom == &rooms[croomno]; X if (sroom->rtype < SHOPBASE) X roomtype = sroom->rtype; X! else if (!u_in_room) { X /* player not presently in shop */ X! /* NOTE: other special room types disappear when player X! enters (except VAULT) */ X! roomtype = SHOPBASE; X } X break; X } X } X+ X+ if (roomtype == VAULT) { X+ gold_in_vault = FALSE; X+ for (vx = sroom->lx; vx <= sroom->hx && !gold_in_vault; vx++) X+ for (vy = sroom->ly; vy <= sroom->hy; vy++) X+ if (g_at(vx, vy)) { X+ gold_in_vault = TRUE; X+ break; X+ } X+ } X+ X switch (roomtype) { X #ifdef THRONES X case COURT: X*************** X*** 108,116 **** X } X break; X case VAULT: X! switch (rn2(2)+hallu) { X case 0: X! You("hear someone counting money."); X break; X case 1: X You("hear the footsteps of a guard on patrol."); X--- 133,145 ---- X } X break; X case VAULT: X! if(gd_sound()) X! switch (rn2(2)+hallu) { X case 0: X! if (gold_in_vault && !u_in_room) X! You("hear someone counting money."); X! else X! You("hear someone searching."); X break; X case 1: X You("hear the footsteps of a guard on patrol."); X*************** X*** 198,203 **** X--- 227,234 ---- X } X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X X #include "eshk.h" X X*************** X*** 283,290 **** X--- 314,345 ---- X break; X } X } X+ X+ #endif /* OVLB */ X+ X #endif /* SOUNDS */ X X+ #ifdef OVLB X+ X+ /* for the connoisseurs ... */ X+ static const char *Qmen[] = { X+ "Max", /* Born */ X+ "Wolfgang", /* Pauli */ X+ "Louis", /* de Broglie */ X+ "Erwin", /* Schroedinger */ X+ "Werner", /* Heisenberg */ X+ "Niels", /* Bohr */ X+ "Paul", /* Dirac */ X+ "Pascual", /* Jordan */ X+ "Dick", /* Feynman */ X+ "Sam" }; /* Beckett ("Oh, boy." :-) */ X+ X+ struct monst * X+ qname(mtmp) X+ struct monst *mtmp; X+ { X+ return(christen_monst(mtmp, Qmen[rn2(SIZE(Qmen))])); X+ } X X static int X domonnoise(mtmp) X*************** X*** 391,397 **** X kludge("%s moans.", Monnam(mtmp)); X else if (mtmp->mconf || mtmp->mstun) X verbalize(!rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?"); X! else if (mtmp->mblinded) X verbalize("I can't see!"); X else if (mtmp->mtrapped) X verbalize("I'm trapped!"); X--- 446,452 ---- X kludge("%s moans.", Monnam(mtmp)); X else if (mtmp->mconf || mtmp->mstun) X verbalize(!rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?"); X! else if (!mtmp->mcansee) X verbalize("I can't see!"); X else if (mtmp->mtrapped) X verbalize("I'm trapped!"); X*************** X*** 418,423 **** X--- 473,492 ---- X case PM_ARCHEOLOGIST: X kludge("%s describes a recent article in \"Spelunker Today\" magazine.", Monnam(mtmp)); X break; X+ case PM_QUANTUM_MECHANIC: X+ /* a trademark line for other Quantum Leap cultists -3. */ X+ if (mtmp->mnamelth && strcmp(NAME(mtmp), "Sam") == 0) X+ verbalize("Oh, boy."); X+ else { X+ const char *Qman; X+ X+ do Qman = Qmen[rn2(SIZE(Qmen))]; X+ while (mtmp->mnamelth && strcmp(NAME(mtmp), Qman) == 0); X+ X+ kludge("%s asks if you've seen %s anywhere around.", X+ Monnam(mtmp), Qman); X+ } X+ break; X default: X kludge("%s discusses dungeon exploration.", Monnam(mtmp)); X } X*************** X*** 481,492 **** X (void) demon_talk(mtmp); X break; X } X # endif X- case MS_JEER: X- kludge("%s jeers at you.", Monnam(mtmp)); X- break; X case MS_CUSS: X! cuss(mtmp); X break; X case MS_GUARD: X if (u.ugold) X--- 550,560 ---- X (void) demon_talk(mtmp); X break; X } X+ /* fall through */ X # endif X case MS_CUSS: X! if (!mtmp->mpeaceful && !mtmp->mtame) X! cuss(mtmp); X break; X case MS_GUARD: X if (u.ugold) X*************** X*** 596,602 **** X pline("I see nobody there."); X return(0); X } X! if (mtmp->mfroz || mtmp->msleep) { X kludge("%s seems not to notice you.", Monnam(mtmp)); X return 0; X } X--- 664,670 ---- X pline("I see nobody there."); X return(0); X } X! if (!mtmp->mcanmove || mtmp->msleep) { X kludge("%s seems not to notice you.", Monnam(mtmp)); X return 0; X } X*************** X*** 603,605 **** X--- 671,675 ---- X X return domonnoise(mtmp); X } X+ X+ #endif /* OVLB */ X*** src/Old/sp_lev.c Mon Feb 19 19:00:38 1990 X--- src/sp_lev.c Wed Feb 7 18:38:30 1990 X*************** X*** 14,20 **** X #ifdef STRONGHOLD X #include "sp_lev.h" X X! #if defined(MSDOS) || defined(MACOS) && !defined(AMIGA) X # define RDMODE "rb" X #else X # define RDMODE "r" X--- 14,20 ---- X #ifdef STRONGHOLD X #include "sp_lev.h" X X! #if defined(MACOS) || (defined(MSDOS) && !defined(AMIGA)) X # define RDMODE "rb" X #else X # define RDMODE "r" X*************** X*** 470,477 **** X get_location(&x, &y); X X typ = tmpaltar.align == -11 ? rn2(3) : X! tmpaltar.align < 0 ? ralign[-tmpaltar.align-1] : X! tmpaltar.align; X if (tmpaltar.shrine) X typ |= A_SHRINE; X X--- 470,477 ---- X get_location(&x, &y); X X typ = tmpaltar.align == -11 ? rn2(3) : X! (tmpaltar.align < 0 ? ralign[-tmpaltar.align-1] : X! tmpaltar.align); X if (tmpaltar.shrine) X typ |= A_SHRINE; X X*************** X*** 570,576 **** X X boolean X load_special(name) X! char *name; X { X FILE *fd; X boolean result; X--- 570,576 ---- X X boolean X load_special(name) X! const char *name; X { X FILE *fd; X boolean result; X*** src/Old/spell.c Mon Feb 19 19:01:01 1990 X--- src/spell.c Wed Feb 7 18:37:45 1990 X*************** X*** 45,63 **** X if (uarmg) { X if (uarmg->rustfree) X Your("gloves seem unaffected."); X! else if (uarmg->spe > -6) { X Your("gloves corrode!"); X uarmg->spe--; X } else X! Your("gloves look quite corroded."); X break; X } X if(Poison_resistance) { X losestr(rn1(1,2)); X! losehp(rnd(6), "contact poison"); X } else { X losestr(rn1(4,3)); X! losehp(rnd(10), "contact poison"); X } X break; X case 6: X--- 45,63 ---- X if (uarmg) { X if (uarmg->rustfree) X Your("gloves seem unaffected."); X! else if (uarmg->spe > -2) { X Your("gloves corrode!"); X uarmg->spe--; X } else X! Your("gloves %s quite corroded.",Blind ? "feel":"look"); X break; X } X if(Poison_resistance) { X losestr(rn1(1,2)); X! losehp(rnd(6), "contact-poisoned spellbook", KILLED_BY_AN); X } else { X losestr(rn1(4,3)); X! losehp(rnd(10), "contact-poisoned spellbook", KILLED_BY_AN); X } X break; X case 6: X*************** X*** 67,73 **** X } else { X pline("As you read the book, it explodes in your %s!", X body_part(FACE)); X! losehp (2*rnd(10)+5, "exploding rune"); X } X break; X default: X--- 67,73 ---- X } else { X pline("As you read the book, it explodes in your %s!", X body_part(FACE)); X! losehp (2*rnd(10)+5, "exploding rune", KILLED_BY_AN); X } X break; X default: X*************** X*** 316,322 **** X X #ifdef HARD X if (confused || X! ((int)(ACURR(A_INT) + u.uluck) - 3 * spellev(spell)) < 0) { X X if (Hallucination) X pline("Far out... a light show!"); X--- 316,322 ---- X X #ifdef HARD X if (confused || X! ((int)(ACURR(A_INT) + Luck) - 3 * spellev(spell)) < 0) { X X if (Hallucination) X pline("Far out... a light show!"); X*************** X*** 353,359 **** X else (void) getdir(1); X if(!u.dx && !u.dy && !u.dz) { X if((damage = zapyourself(pseudo))) X! losehp(damage, "self-inflicted injury"); X } else weffects(pseudo); X } else weffects(pseudo); X break; X--- 353,361 ---- X else (void) getdir(1); X if(!u.dx && !u.dy && !u.dz) { X if((damage = zapyourself(pseudo))) X! losehp(damage, X! self_pronoun("zapped %sself with a spell", "him"), X! NO_KILLER_PREFIX); X } else weffects(pseudo); X } else weffects(pseudo); X break; X*************** X*** 425,430 **** X--- 427,433 ---- X X static char X spellet(spl) X+ int spl; X { X return (spl < 27) ? ('a' + spl - 1) : ('A' + spl - 27); X } X*** src/Old/steal.c Mon Feb 19 19:01:28 1990 X--- src/steal.c Sat Feb 17 20:19:49 1990 X*************** X*** 4,10 **** X X #include "hack.h" X X! static char * X equipname(otmp) X X register struct obj *otmp; X--- 4,12 ---- X X #include "hack.h" X X! #ifdef OVLB X! X! static const char * X equipname(otmp) X X register struct obj *otmp; X*************** X*** 42,48 **** X freegold(gold); X if(Invisible) newsym(u.ux, u.uy); X pline("%s quickly snatches some gold from between your %s!", X! Monnam(mtmp), makeplural(body_part(FOOT))); X if(!u.ugold || !rn2(5)) { X rloc(mtmp); X mtmp->mflee = 1; X--- 44,50 ---- X freegold(gold); X if(Invisible) newsym(u.ux, u.uy); X pline("%s quickly snatches some gold from between your %s!", X! Blind ? "It" : Monnam(mtmp), makeplural(body_part(FOOT))); X if(!u.ugold || !rn2(5)) { X rloc(mtmp); X mtmp->mflee = 1; X*************** X*** 74,80 **** X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) X if(mtmp->m_id == stealmid) { X freeinv(otmp); X! pline("%s steals %s!", Monnam(mtmp), doname(otmp)); X mpickobj(mtmp,otmp); X mtmp->mflee = 1; X rloc(mtmp); X--- 76,82 ---- X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) X if(mtmp->m_id == stealmid) { X freeinv(otmp); X! pline("%s steals %s!", Blind ? "It" : Monnam(mtmp), doname(otmp)); X mpickobj(mtmp,otmp); X mtmp->mflee = 1; X rloc(mtmp); X*************** X*** 158,186 **** X break; X case ARMOR_SYM: X /* Stop putting on armor which has been stolen. */ X! if (donning(otmp)) X! afternmv = 0; X! if(multi < 0 || otmp == uarms){ X if (otmp == uarm) (void) Armor_off(); X! else if (otmp == uarmc) (void) Cloak_off(); X else if (otmp == uarmf) (void) Boots_off(); X else if (otmp == uarmg) (void) Gloves_off(); X else if (otmp == uarmh) (void) Helmet_off(); X! else if (otmp == uarms) (void) Shield_off(); X else setworn((struct obj *)0, otmp->owornmask & W_ARMOR); X break; X } X! { int curssv = otmp->cursed; X otmp->cursed = 0; X stop_occupation(); X if(flags.female) X pline("%s charms you. You gladly %s your %s.", X! Monnam(mtmp), X curssv ? "let her take" : "hand over", X equipname(otmp)); X else X pline("%s seduces you and %s off your %s.", X! Amonnam(mtmp, Blind ? "gentle" : "beautiful"), X curssv ? "helps you to take" : "you start taking", X equipname(otmp)); X named++; X--- 160,187 ---- X break; X case ARMOR_SYM: X /* Stop putting on armor which has been stolen. */ X! if (donning(otmp)) { X! cancel_don(); X if (otmp == uarm) (void) Armor_off(); X! /* else if (otmp == uarmc) (void) Cloak_off(); */ X else if (otmp == uarmf) (void) Boots_off(); X else if (otmp == uarmg) (void) Gloves_off(); X else if (otmp == uarmh) (void) Helmet_off(); X! /* else if (otmp == uarms) (void) Shield_off(); */ X else setworn((struct obj *)0, otmp->owornmask & W_ARMOR); X break; X } X! { int curssv = otmp->cursed; X otmp->cursed = 0; X stop_occupation(); X if(flags.female) X pline("%s charms you. You gladly %s your %s.", X! Blind ? "She" : Monnam(mtmp), X curssv ? "let her take" : "hand over", X equipname(otmp)); X else X pline("%s seduces you and %s off your %s.", X! Blind ? "It" : Amonnam(mtmp, "beautiful"), X curssv ? "helps you to take" : "you start taking", X equipname(otmp)); X named++; X*************** X*** 207,213 **** X return(0); X } X break; X! } X default: X impossible("Tried to steal a strange worn thing."); X } X--- 208,214 ---- X return(0); X } X break; X! } X default: X impossible("Tried to steal a strange worn thing."); X } X*************** X*** 217,227 **** X if(otmp == uball) unpunish(); X X freeinv(otmp); X! pline("%s stole %s.", named ? "She" : Monnam(mtmp), doname(otmp)); X mpickobj(mtmp,otmp); X if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE X && !resists_ston(mtmp->data)) { X! pline("%s turns to stone.", Monnam(mtmp)); X stoned = TRUE; X xkilled(mtmp, 0); X return -1; X--- 218,228 ---- X if(otmp == uball) unpunish(); X X freeinv(otmp); X! pline("%s stole %s.", named ? "She" : (Blind ? "It" : Monnam(mtmp)), doname(otmp)); X mpickobj(mtmp,otmp); X if (otmp->otyp == CORPSE && otmp->corpsenm == PM_COCKATRICE X && !resists_ston(mtmp->data)) { X! pline("%s turns to stone.", Blind ? "It" : Monnam(mtmp)); X stoned = TRUE; X xkilled(mtmp, 0); X return -1; X*************** X*** 229,234 **** X--- 230,238 ---- X return((multi < 0) ? 0 : 1); X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X void X mpickobj(mtmp,otmp) X register struct monst *mtmp; X*************** X*** 238,243 **** X--- 242,250 ---- X mtmp->minvent = otmp; X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X void X stealamulet(mtmp) X register struct monst *mtmp; X*************** X*** 250,256 **** X setnotworn(otmp); X freeinv(otmp); X mpickobj(mtmp,otmp); X! pline("%s stole %s!", Monnam(mtmp), doname(otmp)); X rloc(mtmp); X return; X } X--- 257,263 ---- X setnotworn(otmp); X freeinv(otmp); X mpickobj(mtmp,otmp); X! pline("%s stole %s!", Blind ? "It":Monnam(mtmp), doname(otmp)); X rloc(mtmp); X return; X } X*************** X*** 257,262 **** X--- 264,272 ---- X } X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X /* release the objects the killed animal has stolen */ X void X relobj(mtmp,show) X*************** X*** 266,275 **** X register struct obj *otmp, *otmp2; X X for(otmp = mtmp->minvent; otmp; otmp = otmp2){ X- place_object(otmp, mtmp->mx, mtmp->my); X otmp2 = otmp->nobj; X- otmp->nobj = fobj; X if (flooreffects(otmp,mtmp->mx,mtmp->my)) continue; X fobj = otmp; X stackobj(fobj); X if(show & cansee(mtmp->mx,mtmp->my)) X--- 276,285 ---- X register struct obj *otmp, *otmp2; X X for(otmp = mtmp->minvent; otmp; otmp = otmp2){ X otmp2 = otmp->nobj; X if (flooreffects(otmp,mtmp->mx,mtmp->my)) continue; X+ place_object(otmp, mtmp->mx, mtmp->my); X+ otmp->nobj = fobj; X fobj = otmp; X stackobj(fobj); X if(show & cansee(mtmp->mx,mtmp->my)) X*************** X*** 285,287 **** X--- 295,299 ---- X atl(mtmp->mx,mtmp->my, Hallucination ? rndobjsym() : GOLD_SYM); X } X } X+ X+ #endif /* OVL0 */ X*** src/Old/termcap.c Mon Feb 19 19:01:50 1990 X--- src/termcap.c Fri Feb 16 22:11:10 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" /* for ROWNO, COLNO, *HI, *HE, *AS, *AE */ X X #include <ctype.h> /* for isdigit() */ 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" /* for ROWNO, COLNO, *HI, *HE, *AS, *AE */ X X #include <ctype.h> /* for isdigit() */ X*************** X*** 10,16 **** X X #include "termcap.h" X X! #if !defined(SYSV) || defined(TOS) || defined(UNIXPC) X # ifndef LINT X extern /* it is defined in libtermlib (libtermcap) */ X # endif X--- 10,16 ---- X X #include "termcap.h" X X! #if (!defined(SYSV) && !defined(HPUX)) || defined(TOS) || defined(UNIXPC) X # ifndef LINT X extern /* it is defined in libtermlib (libtermcap) */ X # endif X*************** X*** 20,26 **** X #endif X X #ifdef ASCIIGRAPH X! boolean IBMgraphics = FALSE; X #endif X X X--- 20,32 ---- X #endif X X #ifdef ASCIIGRAPH X! X! #ifdef OVLB X! X! boolean IBMgraphics = FALSE; X! X! #endif /* OVLB */ X! X #endif X X X*************** X*** 30,60 **** X #define Tgetstr(key) (tgetstr(key,&tbufptr)) X #endif /* MICROPORT_286_BUG **/ X X! static void nocmov(); X #ifdef TEXTCOLOR X # ifdef TERMLIB X! static void init_hilite(); X # endif X #endif X X! static char *HO, *CL, *CE, *UP, *CM, *ND, *XD, *BC, *SO, *SE, *TI, *TE; X! static char *VS, *VE, *US, *UE; X! static char *MR, *ME; X #if 0 X! static char *MB, *MH; X! static char *MD; /* may already be in use below */ X #endif X #ifdef TERMLIB X # ifdef TEXTCOLOR X! static char *MD; X # endif X! static int SG; X! static char PC = '\0'; X! static char tbuf[512]; X! #endif X X #ifndef TERMLIB X! static char tgotobuf[20]; X # ifdef TOS X #define tgoto(fmt, x, y) (Sprintf(tgotobuf, fmt, y+' ', x+' '), tgotobuf) X # else X--- 36,74 ---- X #define Tgetstr(key) (tgetstr(key,&tbufptr)) X #endif /* MICROPORT_286_BUG **/ X X! OSTATIC void FDECL(nocmov, (int, int)); X #ifdef TEXTCOLOR X # ifdef TERMLIB X! static void NDECL(init_hilite); X # endif X #endif X X! VSTATIC char *HO, *CL, *CE, *UP, *CM, *ND, *XD, *BC, *SO, *SE, *TI, *TE; X! VSTATIC char *VS, *VE, *US, *UE; X! VSTATIC char *MR, *ME; X #if 0 X! VSTATIC char *MB, *MH; X! VSTATIC char *MD; /* may already be in use below */ X #endif X #ifdef TERMLIB X # ifdef TEXTCOLOR X! VSTATIC char *MD; X # endif X! VSTATIC int SG; X! #ifdef OVLB X! XSTATIC char PC = '\0'; X! #else /* OVLB */ X! OSTATIC char PC; X! #endif /* OVLB */ X! VSTATIC char tbuf[512]; X! #endif X! X! #ifdef OVLB X! static char nullstr[] = ""; X! #endif /* OVLB */ X X #ifndef TERMLIB X! VSTATIC char tgotobuf[20]; X # ifdef TOS X #define tgoto(fmt, x, y) (Sprintf(tgotobuf, fmt, y+' ', x+' '), tgotobuf) X # else X*************** X*** 62,72 **** X # endif X #endif /* TERMLIB */ X X void X startup() X { X #ifdef TERMLIB X! register char *term; X register char *tptr; X char *tbufptr, *pc; X #endif X--- 76,88 ---- X # endif X #endif /* TERMLIB */ X X+ #ifdef OVLB X+ X void X startup() X { X #ifdef TERMLIB X! register const char *term; X register char *tptr; X char *tbufptr, *pc; X #endif X*************** X*** 122,127 **** X--- 138,145 ---- X showsyms[S_room] = 0xfa; /* meta-z, centered dot */ X showsyms[S_ndoor] = 0xfa; X showsyms[S_pool] = 0xf7; /* meta-w, approx. equals */ X+ showsyms[S_hodoor] = 0xfe; /* meta-~, small centered square */ X+ showsyms[S_vodoor] = 0xfe; X } X #endif /* ASCIIGRAPH */ X X*************** X*** 328,339 **** X US = Tgetstr("us"); X UE = Tgetstr("ue"); X SG = tgetnum("sg"); /* -1: not fnd; else # of spaces left by so */ X! if(!SO || !SE || (SG > 0)) SO = SE = US = UE = ""; X TI = Tgetstr("ti"); X TE = Tgetstr("te"); X! VS = VE = ""; X # ifdef TERMINFO X! VS = Tgetstr("enacs"); /* graphics start */ X # endif X # if 0 X MB = Tgetstr("mb"); /* blink */ X--- 346,357 ---- X US = Tgetstr("us"); X UE = Tgetstr("ue"); X SG = tgetnum("sg"); /* -1: not fnd; else # of spaces left by so */ X! if(!SO || !SE || (SG > 0)) SO = SE = US = UE = nullstr; X TI = Tgetstr("ti"); X TE = Tgetstr("te"); X! VS = VE = nullstr; X # ifdef TERMINFO X! VS = Tgetstr("eA"); /* enable graphics */ X # endif X # if 0 X MB = Tgetstr("mb"); /* blink */ X*************** X*** 419,425 **** X register int x, y; /* not xchar: perhaps xchar is unsigned and X curx-x would be unsigned as well */ X { X- X if (y == cury && x == curx) X return; X if(!ND && (curx != x || x <= 3)) { /* Extremely primitive */ X--- 437,442 ---- X*************** X*** 438,445 **** X cmov(x, y); X } X X! static void X nocmov(x, y) X { X if (cury > y) { X if(UP) { X--- 455,466 ---- X cmov(x, y); X } X X! #endif /* OVLB */ X! #ifdef OVL0 X! X! XSTATIC void X nocmov(x, y) X+ int x,y; X { X if (cury > y) { X if(UP) { X*************** X*** 510,516 **** X X void X xputs(s) X! char *s; X { X #ifndef MACOS X # ifndef TERMLIB X--- 531,537 ---- X X void X xputs(s) X! const char *s; X { X #ifndef MACOS X # ifndef TERMLIB X*************** X*** 544,549 **** X--- 565,573 ---- X } X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X void X clear_screen() { X xputs(CL); X*************** X*** 550,555 **** X--- 574,582 ---- X home(); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X void X home() X { X*************** X*** 633,638 **** X--- 660,668 ---- X } X #endif X X+ #endif /* OVL0 */ X+ #ifdef OVL1 X+ X #if !defined(MSDOS) && !defined(MACOS) X # ifdef VMS X static const short tmspc10[] = { /* from termcap */ X*************** X*** 668,674 **** X--- 698,708 ---- X tputs("$<50>", 1, xputc); X # endif X # else X+ # ifdef __STDC__ X+ tputs("50", 1, (int (*)())xputc); X+ # else X tputs("50", 1, xputc); X+ # endif X # endif X X else if(ospeed > 0 && ospeed < SIZE(tmspc10)) if(CM) { X*************** X*** 684,689 **** X--- 718,726 ---- X #endif /* MSDOS || MACOS */ X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X void X cl_eos() /* free after Robert Viduya */ X { /* must only be called with curx = 1 */ X*************** X*** 762,781 **** X static void X init_hilite() X { X int backg = BLACK, foreg = WHITE, len; X register int c, color; X X for (c = 0; c < SIZE(hilites); c++) X hilites[c] = HI; X X # ifdef TOS X! hilites[RED] = hilites[BRIGHT+RED] = "\033b1"; X! hilites[BLUE] = hilites[BRIGHT+BLUE] = "\033b2"; X! hilites[CYAN] = hilites[BRIGHT+CYAN] = "\033b3\033c2"; X! hilites[ORANGE_COLORED] = hilites[RED]; X! hilites[WHITE] = hilites[GRAY] = "\033b3"; X! hilites[MAGENTA] = hilites[BRIGHT+MAGENTA] = "\033b1\033c2"; X! HE = "\033q\033b3\033c0"; /* to turn off the color stuff too */ X # else /* TOS */ X /* find the background color, HI[len] == 'm' */ X len = strlen(HI) - 1; X--- 799,827 ---- X static void X init_hilite() X { X+ # ifdef TOS X+ int c; X+ static char unhilite[] = "\033q\033b3\033c0"; X+ # else X int backg = BLACK, foreg = WHITE, len; X register int c, color; X+ # endif X X for (c = 0; c < SIZE(hilites); c++) X hilites[c] = HI; X X # ifdef TOS X! hilites[BROWN] = "\033b0\033c1"; X! hilites[RED] = "\033b1"; X! hilites[MAGENTA] = hilites[MAGENTA|BRIGHT] = "\033b1\033c2"; X! hilites[CYAN] = hilites[CYAN|BRIGHT] = "\033b3\033c2"; X! hilites[BLUE] = hilites[BLUE|BRIGHT] = "\033b2"; X! hilites[GREEN] = hilites[GREEN|BRIGHT] = "\033b2\033c3"; X! hilites[GRAY] = "\033b3\033c0"; X! hilites[ORANGE_COLORED] = "\033b3\033c1"; X! hilites[YELLOW] = "\033b1\033c3"; X! hilites[WHITE] = "\033b0\033c3"; X! HE = unhilite; /* to turn off the color stuff too */ X # else /* TOS */ X /* find the background color, HI[len] == 'm' */ X len = strlen(HI) - 1; X*************** X*** 817,819 **** X--- 863,867 ---- X } X # endif /* UNIX */ X #endif /* TEXTCOLOR */ X+ X+ #endif /* OVLB */ X END_OF_FILE if test 55436 -ne `wc -c <'patch7.08'`; then echo shar: \"'patch7.08'\" unpacked with wrong size! fi # end of 'patch7.08' echo shar: End of archive 11 \(of 30\). cp /dev/null ark11isdone 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