billr@saab.CNA.TEK.COM (Bill Randle) (02/09/91)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 12, Issue 26 Archive-name: NetHack3/Patch10b Patch-To: NetHack3: Volume 7, Issue 56-93 Environment: #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 8)." # Contents: do_patch10.sh patch10.03 # Wrapped by billr@saab on Fri Feb 8 17:18:57 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'do_patch10.sh' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'do_patch10.sh'\" to \"'do_patch10.sh.orig'\" mv -f 'do_patch10.sh' 'do_patch10.sh.orig' fi echo shar: Extracting \"'do_patch10.sh'\" \(354 characters\) sed "s/^X//" >'do_patch10.sh' <<'END_OF_FILE' X#! /bin/sh X# script to call patch to apply diff files X# make sure all of the patch files (and this file) are in your top level X# NetHack directory X# Xecho "deleting outdated files" Xrm -f others/exesmurf.uu others/splitf.c others/splitf.uu others/suputils.doc Xecho "applying patch10" Xcat patch10.?? | patch -p Xecho "all patches applied, check for rejects" END_OF_FILE if test 354 -ne `wc -c <'do_patch10.sh'`; then echo shar: \"'do_patch10.sh'\" unpacked with wrong size! fi chmod +x 'do_patch10.sh' # end of 'do_patch10.sh' if test -f 'patch10.03' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch10.03'\" to \"'patch10.03.orig'\" mv -f 'patch10.03' 'patch10.03.orig' fi echo shar: Extracting \"'patch10.03'\" \(52441 characters\) sed "s/^X//" >'patch10.03' <<'END_OF_FILE' X*** src/mthrowu.c Sat May 26 23:17:25 1990 X--- src/mthrowu.c Fri Feb 1 10:57:41 1991 X*************** X*** 6,12 **** X X STATIC_DCL int FDECL(movedist,(int,int,int,int)); X STATIC_DCL void FDECL(drop_throw,(struct obj *,BOOLEAN_P,int,int)); X! STATIC_DCL void FDECL(m_throw,(int,int,int,int,int,struct obj *)); X X #define URETREATING(x,y) (movedist(u.ux,u.uy,x,y) > movedist(u.ux0,u.uy0,x,y)) X X--- 6,12 ---- X X STATIC_DCL int FDECL(movedist,(int,int,int,int)); X STATIC_DCL void FDECL(drop_throw,(struct obj *,BOOLEAN_P,int,int)); X! STATIC_DCL void FDECL(m_throw,(struct monst *,int,int,int,int,int,struct obj *)); X X #define URETREATING(x,y) (movedist(u.ux,u.uy,x,y) > movedist(u.ux0,u.uy0,x,y)) X X*************** X*** 99,105 **** X #ifdef OVL1 X X STATIC_OVL void X! m_throw(x, y, dx, dy, range, obj) X register int x,y,dx,dy,range; /* direction and range */ X register struct obj *obj; X { X--- 99,106 ---- X #ifdef OVL1 X X STATIC_OVL void X! m_throw(mon, x, y, dx, dy, range, obj) X! register struct monst *mon; X register int x,y,dx,dy,range; /* direction and range */ X register struct obj *obj; X { X*************** X*** 119,129 **** X * after obj. X */ X obj->nobj = singleobj->nobj; X X if(sym) { X tmp_at(-1, sym); /* open call */ X #ifdef TEXTCOLOR X! tmp_at(-3, (int)objects[obj->otyp].oc_color); X #else X tmp_at(-3, (int)AT_OBJ); X #endif X--- 120,146 ---- X * after obj. X */ X obj->nobj = singleobj->nobj; X+ /* Get rid of object. This cannot be done later on; what if the X+ * player dies before then, leaving the monster with 0 daggers? X+ * (This caused the infamous 2^32-1 orcish dagger bug). X+ */ X+ if (!obj->quan) { X+ if(obj->olet == VENOM_SYM) { X+ /* venom is not in the monster's inventory chain */ X+ free((genericptr_t) obj); X+ } else { X+ m_useup(mon, obj); X+ } X+ } X X+ /* Note: drop_throw may destroy singleobj. Since obj must be destroyed X+ * early to avoid the dagger bug, anyone who modifies this code should X+ * be careful not to use either one after it's been freed. X+ */ X if(sym) { X tmp_at(-1, sym); /* open call */ X #ifdef TEXTCOLOR X! tmp_at(-3, (int)objects[singleobj->otyp].oc_color); X #else X tmp_at(-3, (int)AT_OBJ); X #endif X*************** X*** 137,143 **** X if(MON_AT(bhitpos.x, bhitpos.y)) { X mtmp = m_at(bhitpos.x,bhitpos.y); X X! if(mtmp->data->ac + 8 + obj->spe <= rnd(20)) { X if (!vis) pline("It is missed."); X else miss(distant_name(singleobj,xname), mtmp); X if (!range) { /* Last position; object drops */ X--- 154,160 ---- X if(MON_AT(bhitpos.x, bhitpos.y)) { X mtmp = m_at(bhitpos.x,bhitpos.y); X X! if(mtmp->data->ac + 8 + singleobj->spe <= rnd(20)) { X if (!vis) pline("It is missed."); X else miss(distant_name(singleobj,xname), mtmp); X if (!range) { /* Last position; object drops */ X*************** X*** 145,158 **** X break; X } X } else { X! damage = dmgval(obj, mtmp->data); X if (damage < 1) damage = 1; X! if (obj->otyp==ACID_VENOM && resists_acid(mtmp->data)) X damage = 0; X if (!vis) pline("It is hit%s", exclam(damage)); X else hit(distant_name(singleobj,xname), X mtmp,exclam(damage)); X! if (obj->opoisoned) { X if (resists_poison(mtmp->data)) { X if (vis) X pline("The poison doesn't seem to affect %s.", X--- 162,175 ---- X break; X } X } else { X! damage = dmgval(singleobj, mtmp->data); X if (damage < 1) damage = 1; X! if (singleobj->otyp==ACID_VENOM && resists_acid(mtmp->data)) X damage = 0; X if (!vis) pline("It is hit%s", exclam(damage)); X else hit(distant_name(singleobj,xname), X mtmp,exclam(damage)); X! if (singleobj->opoisoned) { X if (resists_poison(mtmp->data)) { X if (vis) X pline("The poison doesn't seem to affect %s.", X*************** X*** 166,172 **** X } X } X } X! if (obj->otyp==SILVER_ARROW && (is_were(mtmp->data) X || is_demon(mtmp->data) X || mtmp->data->mlet == S_VAMPIRE X || (mtmp->data->mlet==S_IMP X--- 183,189 ---- X } X } X } X! if (singleobj->otyp==SILVER_ARROW && (is_were(mtmp->data) X || is_demon(mtmp->data) X || mtmp->data->mlet == S_VAMPIRE X || (mtmp->data->mlet==S_IMP X*************** X*** 176,182 **** X else pline("Its flesh is seared!"); X damage += rnd(20); X } X! if (obj->otyp==ACID_VENOM && cansee(mtmp->mx,mtmp->my)){ X if (resists_acid(mtmp->data)) { X pline("%s is unaffected.", vis ? Monnam(mtmp) X : "It"); X--- 193,199 ---- X else pline("Its flesh is seared!"); X damage += rnd(20); X } X! if (singleobj->otyp==ACID_VENOM && cansee(mtmp->mx,mtmp->my)){ X if (resists_acid(mtmp->data)) { X pline("%s is unaffected.", vis ? Monnam(mtmp) X : "It"); X*************** X*** 194,201 **** X mondied(mtmp); X } X X! if((obj->otyp == CREAM_PIE) || X! (obj->otyp == BLINDING_VENOM)) { X if (vis) X pline("%s is blinded by the %s.", X Monnam(mtmp), xname(singleobj)); X--- 211,218 ---- X mondied(mtmp); X } X X! if((singleobj->otyp == CREAM_PIE) || X! (singleobj->otyp == BLINDING_VENOM)) { X if (vis) X pline("%s is blinded by the %s.", X Monnam(mtmp), xname(singleobj)); X*************** X*** 215,221 **** X if (bhitpos.x == u.ux && bhitpos.y == u.uy) { X if (multi) nomul(0); X X! switch(obj->otyp) { X int dam; X case CREAM_PIE: X case BLINDING_VENOM: X--- 232,238 ---- X if (bhitpos.x == u.ux && bhitpos.y == u.uy) { X if (multi) nomul(0); X X! switch(singleobj->otyp) { X int dam; X case CREAM_PIE: X case BLINDING_VENOM: X*************** X*** 222,240 **** X hitu = thitu(8, 0, singleobj, xname(singleobj)); X break; X default: X! dam = dmgval(obj, uasmon); X if (dam < 1) dam = 1; X! hitu = thitu(8+obj->spe, dam, singleobj, X xname(singleobj)); X } X! if (hitu && obj->opoisoned) X /* it's safe to call xname twice because it's the X same object both times... */ X poisoned(xname(singleobj), A_STR, xname(singleobj), 10); X! if(hitu && (obj->otyp == CREAM_PIE || X! obj->otyp == BLINDING_VENOM)) { X blindinc = rnd(25); X! if(obj->otyp == CREAM_PIE) { X if(!Blind) pline("Yecch! You've been creamed."); X else pline("There's something sticky all over your %s.", body_part(FACE)); X } else { /* venom in the eyes */ X--- 239,257 ---- X hitu = thitu(8, 0, singleobj, xname(singleobj)); X break; X default: X! dam = dmgval(singleobj, uasmon); X if (dam < 1) dam = 1; X! hitu = thitu(8+singleobj->spe, dam, singleobj, X xname(singleobj)); X } X! if (hitu && singleobj->opoisoned) X /* it's safe to call xname twice because it's the X same object both times... */ X poisoned(xname(singleobj), A_STR, xname(singleobj), 10); X! if(hitu && (singleobj->otyp == CREAM_PIE || X! singleobj->otyp == BLINDING_VENOM)) { X blindinc = rnd(25); X! if(singleobj->otyp == CREAM_PIE) { X if(!Blind) pline("Yecch! You've been creamed."); X else pline("There's something sticky all over your %s.", body_part(FACE)); X } else { /* venom in the eyes */ X*************** X*** 343,349 **** X if (canseemon(mtmp)) X pline("%s %s %s!", Monnam(mtmp), verb, an(xname(otmp))); X otmp->quan = savequan; X! m_throw(mtmp->mx, mtmp->my, sgn(tbx), sgn(tby), X movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy), otmp); X if (!otmp->quan) m_useup(mtmp, otmp); X nomul(0); X--- 360,366 ---- X if (canseemon(mtmp)) X pline("%s %s %s!", Monnam(mtmp), verb, an(xname(otmp))); X otmp->quan = savequan; X! m_throw(mtmp, mtmp->mx, mtmp->my, sgn(tbx), sgn(tby), X movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy), otmp); X if (!otmp->quan) m_useup(mtmp, otmp); X nomul(0); X*************** X*** 386,392 **** X if(!rn2(BOLT_LIM-movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy))) { X if (canseemon(mtmp)) X pline("%s spits venom!", Monnam(mtmp)); X! m_throw(mtmp->mx, mtmp->my, sgn(tbx), sgn(tby), X movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy), otmp); X nomul(0); X return 0; X--- 403,409 ---- X if(!rn2(BOLT_LIM-movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy))) { X if (canseemon(mtmp)) X pline("%s spits venom!", Monnam(mtmp)); X! m_throw(mtmp, mtmp->mx, mtmp->my, sgn(tbx), sgn(tby), X movedist(mtmp->mx,mtmp->mux,mtmp->my,mtmp->muy), otmp); X nomul(0); X return 0; X*** src/o_init.c Wed May 9 09:24:18 1990 X--- src/o_init.c Wed Jan 30 08:48:38 1991 X*************** X*** 241,247 **** X #ifdef MACOS X char *descr[TOTAL_OBJS]; X #endif X! struct objclass *now = &objects[0]; X bwrite(fd, (genericptr_t)&now, sizeof now); X bwrite(fd, (genericptr_t)bases, sizeof bases); X bwrite(fd, (genericptr_t)disco, sizeof disco); X--- 241,247 ---- X #ifdef MACOS X char *descr[TOTAL_OBJS]; X #endif X! const char *now = objects[0].oc_name; /* location of "strange object" */ X bwrite(fd, (genericptr_t)&now, sizeof now); X bwrite(fd, (genericptr_t)bases, sizeof bases); X bwrite(fd, (genericptr_t)disco, sizeof disco); X*************** X*** 273,280 **** X { X register int i; X unsigned int len; X! struct objclass *then; X! long differ; X #ifdef MACOS X /* provides position-independent save & restore */ X /* by giving each object a number, keep track of it */ X--- 273,280 ---- X { X register int i; X unsigned int len; X! char *then; /* old location of "strange object" */ X! register int differ; /*(ptrdiff_t)*/ X #ifdef MACOS X /* provides position-independent save & restore */ X /* by giving each object a number, keep track of it */ X*************** X*** 305,334 **** X objects[i].oc_descr = d[switches[i]].descr; X } X #else X! # if !defined(MSDOS) && !defined(M_XENIX) && !defined(HPUX) && !defined(VAXC) X! differ = (genericptr_t)&objects[0] - (genericptr_t)then; X! # else X! differ = (long)&objects[0] - (long)then; X! # endif X #endif /* MACOS */ X for(i=0; i < TOTAL_OBJS; i++) { X #ifndef MACOS X! if (objects[i].oc_name) { X! # if !defined(MSDOS) && !defined(M_XENIX) && !defined(HPUX) && !defined(VAXC) X objects[i].oc_name += differ; X! # else X! objects[i].oc_name = X! (const char *)((long)(objects[i].oc_name) + differ); X! # endif X! } X! if (objects[i].oc_descr) { X! # if !defined(MSDOS) && !defined(M_XENIX) && !defined(HPUX) && !defined(VAXC) X objects[i].oc_descr += differ; X- # else X- objects[i].oc_descr = X- (const char *)((long)(objects[i].oc_descr) + differ); X- # endif X- } X #endif /* MACOS */ X if (objects[i].oc_uname) { X mread(fd, (genericptr_t) &len, sizeof len); X--- 305,318 ---- X objects[i].oc_descr = d[switches[i]].descr; X } X #else X! differ = objects[0].oc_name - then; /* note: expected to be 0 */ X #endif /* MACOS */ X for(i=0; i < TOTAL_OBJS; i++) { X #ifndef MACOS X! if (differ && objects[i].oc_name) X objects[i].oc_name += differ; X! if (differ && objects[i].oc_descr) X objects[i].oc_descr += differ; X #endif /* MACOS */ X if (objects[i].oc_uname) { X mread(fd, (genericptr_t) &len, sizeof len); X*** src/objnam.c Mon Jun 4 13:04:34 1990 X--- src/objnam.c Tue Jan 15 17:50:50 1991 X*************** X*** 9,15 **** X X /* "an uncursed partly eaten guardian naga hatchling corpse" */ X #define PREFIX 50 X! #define SCHAR_MAX 127 X X #ifndef OVLB X X--- 9,15 ---- X X /* "an uncursed partly eaten guardian naga hatchling corpse" */ X #define PREFIX 50 X! #define SCHAR_LIM 127 X X #ifndef OVLB X X*************** X*** 1175,1182 **** X spesgn = -1; /* cheaters get what they deserve */ X spe = abs(spe); X } X! if (spe > SCHAR_MAX) X! spe = SCHAR_MAX; X X /* now we have the actual name, as delivered by xname, say X green potions called whisky X--- 1175,1182 ---- X spesgn = -1; /* cheaters get what they deserve */ X spe = abs(spe); X } X! if (spe > SCHAR_LIM) X! spe = SCHAR_LIM; X X /* now we have the actual name, as delivered by xname, say X green potions called whisky X*** src/options.c Tue Jun 26 21:20:29 1990 X--- src/options.c Tue Jan 8 09:39:45 1991 X*************** X*** 18,23 **** X--- 18,26 ---- X initoptions() X { X register char *opts; X+ #ifdef MACOS X+ char keepname[PL_NSIZ]; /* for save file starts */ X+ #endif X X flags.time = flags.nonews = flags.notombstone = flags.end_own = X flags.standout = flags.nonull = flags.ignintr = FALSE; X*************** X*** 55,61 **** X--- 58,67 ---- X read_config_file(); X #endif /* MSDOS */ X #ifdef MACOS X+ if (plname[0] == '\0') keepname[0] = '\0'; X+ else Strcpy(keepname, plname); /* keep name from save file */ X read_config_file(); X+ if (keepname[0] != '\0') Strcpy(plname, keepname); X flags.standout = TRUE; X #endif X if(opts = getenv("NETHACKOPTIONS")) X*************** X*** 62,70 **** X parseoptions(opts,TRUE); X #ifdef TUTTI_FRUTTI X (void)fruitadd(pl_fruit); X! objects[SLIME_MOLD].oc_name = "\033"; X! /* Put something untypable in there */ X! /* We cannot just use NULL because that marks the end of objects */ X #endif X } X X--- 68,78 ---- X parseoptions(opts,TRUE); X #ifdef TUTTI_FRUTTI X (void)fruitadd(pl_fruit); X! /* Remove "slime mold" from list of object names; this will */ X! /* prevent it from being wished unless it's actually present */ X! /* as a named (or default) fruit. Wishing for "fruit" will */ X! /* result in the player's preferred fruit [better than "\033"]. */ X! objects[SLIME_MOLD].oc_name = "fruit"; X #endif X } X X*************** X*** 171,177 **** X assign_ibm_graphics() X { X #ifdef ASCIIGRAPH X! flags.IBMgraphics = TRUE; /* not set from command line */ X X showsyms[S_vwall] = 0xb3; /* meta-3, vertical rule */ X showsyms[S_hwall] = 0xc4; /* meta-D, horizontal rule */ X--- 179,186 ---- X assign_ibm_graphics() X { X #ifdef ASCIIGRAPH X! flags.IBMgraphics = TRUE; X! flags.DECgraphics = FALSE; X X showsyms[S_vwall] = 0xb3; /* meta-3, vertical rule */ X showsyms[S_hwall] = 0xc4; /* meta-D, horizontal rule */ X*************** X*** 199,205 **** X assign_dec_graphics() X { X #ifdef TERMLIB X! flags.DECgraphics = TRUE; /* not set from command line */ X X showsyms[S_vwall] = 0xf8; /* vertical rule */ X showsyms[S_hwall] = 0xf1; /* horizontal rule */ X--- 208,215 ---- X assign_dec_graphics() X { X #ifdef TERMLIB X! flags.DECgraphics = TRUE; X! flags.IBMgraphics = FALSE; X X showsyms[S_vwall] = 0xf8; /* vertical rule */ X showsyms[S_hwall] = 0xf1; /* horizontal rule */ X*************** X*** 299,304 **** X--- 309,317 ---- X X if (!strncmp(opts, "num", 3)) { X flags.num_pad = !negated; X+ #ifndef AMIGA X+ if (!from_env) number_pad(flags.num_pad ? 1 : 0); X+ #endif X return; X } X X*** src/panic.c Sun Mar 4 13:44:05 1990 X--- src/panic.c Tue Jan 29 09:13:55 1991 X*************** X*** 6,12 **** X */ X /* NetHack may be freely redistributed. See license for details. */ X X! #define NEED_VARARGS X #include "config.h" X X #ifdef MSDOS X--- 6,12 ---- X */ X /* NetHack may be freely redistributed. See license for details. */ X X! #define NEED_VARARGS /* Uses ... */ /* comment line for pre-compiled headers */ X #include "config.h" X X #ifdef MSDOS X*** src/pickup.c Tue Jun 26 21:20:30 1990 X--- src/pickup.c Mon Feb 4 09:57:07 1991 X*************** X*** 278,284 **** X pline("There %s %s here, but %s.", X (obj->quan == 1) ? "is" : "are", X doname(obj), X! !invent ? "it is too heavy for you to lift" X : "you cannot carry any more"); X if(obj->otyp == SCR_SCARE_MONSTER) X if(obj->spe) obj->spe = 0; X--- 278,287 ---- X pline("There %s %s here, but %s.", X (obj->quan == 1) ? "is" : "are", X doname(obj), X! !invent ? X! (obj->quan == 1 ? X! "it is too heavy for you to lift" X! : "they are too heavy for you to lift") X : "you cannot carry any more"); X if(obj->otyp == SCR_SCARE_MONSTER) X if(obj->spe) obj->spe = 0; X*************** X*** 619,636 **** X struct obj *obj; X { X struct obj *otmp, *cobj; X X cobj = obj->cobj; X delete_contents(cobj); X X for (otmp = invent; otmp; otmp = otmp->nobj) X! if (otmp == cobj) break; X X! if (otmp) { X! You("see your %s blow apart!", xname(otmp)); X! useup(otmp); X! /*return(0);*/ X! } else panic("explode_bag: bag not in invent."); X } X X void X--- 622,652 ---- X struct obj *obj; X { X struct obj *otmp, *cobj; X+ boolean found = FALSE; X X cobj = obj->cobj; X delete_contents(cobj); X X for (otmp = invent; otmp; otmp = otmp->nobj) X! if (otmp == cobj) { X! found = TRUE; X! Your("%s blows apart!", xname(otmp)); X! useup(otmp); X! break; X! } X X! if (!found) { X! /* maybe the bag was on the floor */ X! for (otmp=level.objects[u.ux][u.uy]; otmp; otmp=otmp->nexthere) X! if (otmp == cobj) { X! found = TRUE; X! pline("The %s blows apart!", xname(otmp)); X! useupf(otmp); X! break; X! } X! } X! X! if (!found) panic("explode_bag: bag not found."); X } X X void X*** src/polyself.c Thu May 31 00:31:48 1990 X--- src/polyself.c Sat Jan 5 14:59:48 1991 X*************** X*** 123,130 **** X--- 123,136 ---- X } X (void)strcat(SAVEF, ".sav"); X # else X+ # ifdef MACOS X+ strncpy(SAVEF, plname, (FILENAME - 2)); /* .e */ X+ SAVEF[(FILENAME - 2)] = '\0'; X+ regularize(SAVEF); X+ # else X Sprintf(SAVEF, "save/%d%s", getuid(), plname); X regularize(SAVEF+5); /* avoid . or / in name */ X+ # endif X # endif X #endif X #ifdef WIZARD X*************** X*** 135,140 **** X--- 141,148 ---- X skinback(); X find_ac(); X if (sticky) uunstick(); X+ if(is_pool(u.ux,u.uy) && !Levitation && !u.ustuck && !Wwalking) X+ drown(); X #endif X } X X*************** X*** 326,331 **** X--- 334,342 ---- X pline("Use the command #sit to lay an egg."); X } X find_ac(); X+ if(is_pool(u.ux,u.uy) && !Levitation && !u.ustuck && !Wwalking X+ && !is_flyer(uasmon) && !is_swimmer(uasmon)) X+ drown(); X return(1); X } X X*************** X*** 450,460 **** X prme(); X flags.botl = 1; X find_ac(); X } X X int X dobreathe() { X! if(!getdir(1)) return(0); X if (rn2(4)) X You("produce a loud and noxious belch."); X else { X--- 461,477 ---- X prme(); X flags.botl = 1; X find_ac(); X+ if(is_pool(u.ux,u.uy) && !Levitation && !u.ustuck && !Wwalking) X+ drown(); X } X X int X dobreathe() { X! if (Strangled) { X! You("can't breathe. Sorry."); X! return(0); X! } X! if (!getdir(1)) return(0); X if (rn2(4)) X You("produce a loud and noxious belch."); X else { X*** src/potion.c Fri Jun 1 16:59:24 1990 X--- src/potion.c Thu Jan 31 11:24:54 1991 X*************** X*** 516,523 **** X #ifdef SPELLS X case SPE_HASTE_SELF: X #endif X! if(!(Fast & TIMEOUT)) X! You("are suddenly moving much faster."); X else { X Your("%s get new energy.", X makeplural(body_part(LEG))); X--- 516,524 ---- X #ifdef SPELLS X case SPE_HASTE_SELF: X #endif X! if(!(Fast & ~INTRINSIC)) /* wwf@doe.carleton.ca */ X! You("are suddenly moving %sfaster.", X! Fast ? "" : "much "); X else { X Your("%s get new energy.", X makeplural(body_part(LEG))); X*************** X*** 537,542 **** X--- 538,546 ---- X if((dlevel > 1 || u.uhave_amulet) && X dlevel <= MAXLEVEL) { X You("rise up, through the ceiling!"); X+ # ifdef MACOS X+ segments |= SEG_POTION; X+ # endif X goto_level((dlevel==1) ? ENDLEVEL X : dlevel-1, FALSE, FALSE); X } else You("have an uneasy feeling."); X*************** X*** 543,551 **** X #else X if(dlevel > 1 && dlevel <= MAXLEVEL) { X You("rise up, through the ceiling!"); X! #ifdef MACOS X segments |= SEG_POTION; X! #endif X goto_level(dlevel-1, FALSE, FALSE); X } else You("have an uneasy feeling."); X #endif X--- 547,555 ---- X #else X if(dlevel > 1 && dlevel <= MAXLEVEL) { X You("rise up, through the ceiling!"); X! # ifdef MACOS X segments |= SEG_POTION; X! # endif X goto_level(dlevel-1, FALSE, FALSE); X } else You("have an uneasy feeling."); X #endif X*** src/prisym.co Wed Feb 06 04:41:48 1991 X--- src/prisym.c Wed Feb 06 04:48:30 1991 X*************** X*** 24,30 **** X impossible("atl(%d,%d,%c)",x,y,ch); X return; X } X! if(crm->seen && crm->scrsym == ch) return; X /* crm->scrsym = (uchar) ch; */ X /* wrong if characters are signed but uchar is larger than char, X * and ch, when passed, was greater than 127. X--- 24,38 ---- X impossible("atl(%d,%d,%c)",x,y,ch); X return; X } X! if(crm->seen && crm->scrsym == ch X! #ifdef TEXTCOLOR X! /* Force update if color used. Otherwise objects with X! * same screen symbols but different colors show up X! * in wrong color in certain situations. X! */ X! && !flags.use_color X! #endif X! ) return; X /* crm->scrsym = (uchar) ch; */ X /* wrong if characters are signed but uchar is larger than char, X * and ch, when passed, was greater than 127. X*** src/read.c Thu May 31 15:56:51 1990 X--- src/read.c Wed Jan 16 16:42:50 1991 X*************** X*** 714,720 **** X if(!Blind) X pline("Oh, look, what a pretty fire in your %s.", X makeplural(body_part(HAND))); X! else You("feal a pleasant warmth in your %s.", X makeplural(body_part(HAND))); X } else { X pline("The scroll catches fire and you burn your %s.", X--- 714,720 ---- X if(!Blind) X pline("Oh, look, what a pretty fire in your %s.", X makeplural(body_part(HAND))); X! else You("feel a pleasant warmth in your %s.", X makeplural(body_part(HAND))); X } else { X pline("The scroll catches fire and you burn your %s.", X*** src/restore.c Tue Jun 26 21:20:31 1990 X--- src/restore.c Sun Jan 6 15:55:35 1991 X*************** X*** 152,167 **** X register struct monst *mtmp, *mtmp2; X register struct monst *first = 0; X int xl; X- X struct permonst *monbegin; X! off_t differ; X X mread(fd, (genericptr_t)&monbegin, sizeof(monbegin)); X! #if !defined(MSDOS) && !defined(M_XENIX) && !defined(THINKC4) && !defined(HPUX) && !defined(VAXC) 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--- 152,163 ---- X register struct monst *mtmp, *mtmp2; X register struct monst *first = 0; X int xl; X struct permonst *monbegin; X! boolean moved; X X+ /* get the original base address */ X mread(fd, (genericptr_t)&monbegin, sizeof(monbegin)); X! moved = (monbegin != mons); X X #if defined(LINT) || defined(__GNULINT__) X /* suppress "used before set" warning from lint */ X*************** X*** 176,199 **** 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) && !defined(VAXC) 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! * rather than (genericptr_t) X! * this code handles save file -- so any bug should glow X! * probably best not to keep lint from complaining X! */ X! /*#ifdef LINT /* possible compiler/hardware dependency - */ X! /* if (differ) mtmp->data = NULL;*/ X! /*#else*/ X! mtmp->data = (struct permonst *) X! ((genericptr_t)mtmp->data + differ); X! /*#endif /*LINT*/ X! #else X! mtmp->data = (struct permonst *) X! ((long) mtmp->data + differ); X! #endif X if(mtmp->minvent) X mtmp->minvent = restobjchn(fd, ghostly); X mtmp2 = mtmp; X--- 172,181 ---- X mread(fd, (genericptr_t) mtmp, (unsigned) xl + sizeof(struct monst)); X if(!mtmp->m_id) X mtmp->m_id = flags.ident++; X! if (moved && mtmp->data) { X! int offset = mtmp->data - monbegin; /*(ptrdiff_t)*/ X! mtmp->data = mons + offset; /* new permonst location */ X! } X if(mtmp->minvent) X mtmp->minvent = restobjchn(fd, ghostly); X mtmp2 = mtmp; X*************** X*** 885,892 **** X } X } X #endif X! if(ghostly && lev > medusa_level && lev < stronghold_level && X! xdnstair == 0) { X coord cc; X X mazexy(&cc); X--- 867,879 ---- X } X } X #endif X! if(ghostly && lev > medusa_level X! #ifdef STRONGHOLD X! && lev < stronghold_level X! #else X! && !Inhell X! #endif X! && xdnstair == 0) { X coord cc; X X mazexy(&cc); X*** src/save.c Sat May 26 08:35:56 1990 X--- src/save.c Sat Jan 5 15:07:00 1991 X*************** X*** 333,338 **** X--- 333,349 ---- X bflush(fd); X #endif X (void) close(fd); X+ #if defined(VMS) && !defined(SECURE) X+ /* X+ Make sure the save file is owned by the current process. That's X+ the default for non-privileged users, but for priv'd users the X+ file will be owned by the directory's owner instead of the user. X+ */ X+ # ifdef getuid /*(see vmsunix.c)*/ X+ # undef getuid X+ # endif X+ (void) chown(SAVEF, getuid(), getgid()); X+ #endif /* VMS && !SECURE */ X glo(dlevel); X (void) unlink(lock); /* get rid of current level --jgm */ X glo(0); X*** src/shk.c Thu May 31 21:34:50 1990 X--- src/shk.c Sat Jan 5 15:01:22 1991 X*************** X*** 830,836 **** X if (ANGRY(shopkeeper) || X (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2)) X #ifdef SHIRT X! || (uarmu && !uarm) /* wearing just a Hawaiian shirt */ X #endif X ) X tmp += tmp/3; X--- 830,836 ---- X if (ANGRY(shopkeeper) || X (pl_character[0] == 'T' && u.ulevel < (MAXULEV/2)) X #ifdef SHIRT X! || (uarmu && !uarm && !uarmc) /* wearing just a Hawaiian shirt */ X #endif X ) X tmp += tmp/3; X*************** X*** 840,845 **** X--- 840,848 ---- X else if (ACURR(A_CHA) < 6) tmp *= 2; X else if (ACURR(A_CHA) < 8) tmp = (tmp * 3)/2; X else if (ACURR(A_CHA) < 11) tmp = (tmp * 4)/3; X+ #ifdef NAMED_ITEMS X+ if (is_artifact(obj)) tmp *= 4; X+ #endif X if (!tmp) return 1; X return(tmp); X } X*************** X*** 1135,1140 **** X--- 1138,1146 ---- X pline("Strange... carrying a chain?"); X break; X } X+ #ifdef NAMED_ITEMS X+ if (is_artifact(obj)) tmp *= 25; X+ #endif X return(tmp); X } X X*** src/sounds.c Thu May 31 15:56:55 1990 X--- src/sounds.c Sat Jan 5 14:59:56 1991 X*************** X*** 239,244 **** X--- 239,245 ---- X growl(mtmp) X register struct monst *mtmp; X { X+ if (mtmp->msleep || !mtmp->mcanmove) return; X /* presumably nearness and soundok checks have already been made */ X switch (mtmp->data->msound) { X case MS_SILENT: X*************** X*** 274,279 **** X--- 275,281 ---- X register struct monst *mtmp; X /* the sounds of mistreated pets */ X { X+ if (mtmp->msleep || !mtmp->mcanmove) return; X /* presumably nearness and soundok checks have already been made */ X switch (mtmp->data->msound) { X case MS_MEW: X*************** X*** 300,305 **** X--- 302,308 ---- X register struct monst *mtmp; X /* the sounds of distressed pets */ X { X+ if (mtmp->msleep || !mtmp->mcanmove) return; X /* presumably nearness and soundok checks have already been made */ X switch (mtmp->data->msound) { X case MS_MEW: X*************** X*** 345,351 **** X domonnoise(mtmp) X register struct monst *mtmp; X { X! /* presumably nearness checks have already been made */ X if (!flags.soundok) return(0); X switch (mtmp->data->msound) { X #ifdef ORACLE X--- 348,354 ---- X domonnoise(mtmp) X register struct monst *mtmp; X { X! /* presumably nearness and sleep checks have already been made */ X if (!flags.soundok) return(0); X switch (mtmp->data->msound) { X #ifdef ORACLE X*** src/steal.c Thu May 31 15:56:56 1990 X--- src/steal.c Sat Jan 5 15:01:12 1991 X*************** X*** 104,110 **** X /* the following is true if successful on first of two attacks. */ X if(!monnear(mtmp, u.ux, u.uy)) return(0); X X! if(!invent){ X /* Not even a thousand men in armor can strip a naked man. */ X if(Blind) X pline("Somebody tries to rob you, but finds nothing to steal."); X--- 104,114 ---- X /* the following is true if successful on first of two attacks. */ X if(!monnear(mtmp, u.ux, u.uy)) return(0); X X! if(!invent X! #ifdef POLYSELF X! || (inv_cnt() == 1 && uskin) X! #endif X! ){ X /* Not even a thousand men in armor can strip a naked man. */ X if(Blind) X pline("Somebody tries to rob you, but finds nothing to steal."); X*************** X*** 123,134 **** X } X X tmp = 0; X! for(otmp = invent; otmp; otmp = otmp->nobj) if(!uarm || otmp != uarmc) X! tmp += ((otmp->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL)) ? 5 : 1); X tmp = rn2(tmp); X! for(otmp = invent; otmp; otmp = otmp->nobj) if(!uarm || otmp != uarmc) X! if((tmp -= ((otmp->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL)) ? 5 : 1)) X! < 0) break; X if(!otmp) { X impossible("Steal fails!"); X return(0); X--- 127,150 ---- X } X X tmp = 0; X! for(otmp = invent; otmp; otmp = otmp->nobj) X! if((!uarm || otmp != uarmc) X! #ifdef POLYSELF X! && otmp != uskin X! #endif X! ) X! tmp += ((otmp->owornmask & X! (W_ARMOR | W_RING | W_AMUL | W_TOOL)) ? 5 : 1); X tmp = rn2(tmp); X! for(otmp = invent; otmp; otmp = otmp->nobj) X! if((!uarm || otmp != uarmc) X! #ifdef POLYSELF X! && otmp != uskin X! #endif X! ) X! if((tmp -= ((otmp->owornmask & X! (W_ARMOR | W_RING | W_AMUL | W_TOOL)) ? 5 : 1)) < 0) X! break; X if(!otmp) { X impossible("Steal fails!"); X return(0); X*** src/termcap.c Tue Jun 26 21:20:32 1990 X--- src/termcap.c Thu Jan 10 09:52:41 1991 X*************** X*** 56,61 **** X--- 56,62 ---- X #endif X X #ifdef OVLB X+ static char *KS = NULL, *KE = NULL; /* keypad sequences */ X static char nullstr[] = ""; X #endif /* OVLB */ X X*************** X*** 82,91 **** X X #ifdef TERMLIB X # ifdef VMS X! term = getenv("EMACS_TERM"); X if (!term) X- term = getenv("NETHACK_TERM"); X- if (!term) X # endif X term = getenv("TERM"); X #endif X--- 83,92 ---- X X #ifdef TERMLIB X # ifdef VMS X! term = verify_termcap(); /* jump thru some hoops */ X! if (!term) term = getenv("NETHACK_TERM"); X! if (!term) term = getenv("EMACS_TERM"); X if (!term) X # endif X term = getenv("TERM"); X #endif X*************** X*** 231,249 **** X error("Unknown terminal type: %s.", term); X if(pc = Tgetstr("pc")) X PC = *pc; X # ifdef TERMINFO X! if(!(BC = Tgetstr("le"))) { X # else X! if(!(BC = Tgetstr("bc"))) { X! # endif X! # if !defined(MINIMAL_TERM) && !defined(HISX) X if(!tgetflag("bs")) X error("Terminal must backspace."); X! # endif X BC = tbufptr; X tbufptr += 2; X *BC = '\b'; X! } X # ifdef MINIMAL_TERM X HO = NULL; X # else X--- 232,253 ---- X error("Unknown terminal type: %s.", term); X if(pc = Tgetstr("pc")) X PC = *pc; X+ X+ if(!(BC = Tgetstr("le"))) /* both termcap and terminfo use le */ X # ifdef TERMINFO X! error("Terminal must backspace."); X # else X! if(!(BC = Tgetstr("bc"))) { /* termcap also uses bc/bs */ X! # if !defined(MINIMAL_TERM) && !defined(HISX) X if(!tgetflag("bs")) X error("Terminal must backspace."); X! # endif X BC = tbufptr; X tbufptr += 2; X *BC = '\b'; X! } X! # endif X! X # ifdef MINIMAL_TERM X HO = NULL; X # else X*************** X*** 304,309 **** X--- 308,315 ---- X # ifdef TERMINFO X VS = Tgetstr("eA"); /* enable graphics */ X # endif X+ KS = Tgetstr("ks"); /* keypad start (special mode) */ X+ KE = Tgetstr("ke"); /* keypad end (ordinary mode [ie, digits]) */ X # if 0 X MB = Tgetstr("mb"); /* blink */ X MD = Tgetstr("md"); /* boldface */ X*************** X*** 345,350 **** X--- 351,373 ---- X } X X void X+ number_pad(state) X+ int state; X+ { X+ switch (state) { X+ case -1: /* activate keypad mode (escape sequences) */ X+ if (KS && *KS) xputs(KS); X+ break; X+ case 1: /* activate numeric mode for keypad (digits) */ X+ if (KE && *KE) xputs(KE); X+ break; X+ case 0: /* don't need to do anything--leave terminal as-is */ X+ default: X+ break; X+ } X+ } X+ X+ void X start_screen() X { X xputs(TI); X*************** X*** 356,365 **** X * since people may reasonably be using the UK set X */ X xputs("\033)0"); X! /* 'as' and 'ae' are missing from some termcaps */ X! if (!AS) AS = "\016"; /* ^N */ X! if (!AE) AE = "\017"; /* ^O */ X } X } X X void X--- 379,391 ---- X * since people may reasonably be using the UK set X */ X xputs("\033)0"); X! /* these values are missing from some termcaps */ X! if (!AS) AS = "\016"; /* ^N (shift-out [graphics font]) */ X! if (!AE) AE = "\017"; /* ^O (shift-in [regular font]) */ X! if (!KS) KS = "\033="; /* ESC= (application keypad mode) */ X! if (!KE) KE = "\033>"; /* ESC> (numeric keypad mode) */ X } X+ if (flags.num_pad) number_pad(1); /* make keypad send digits */ X } X X void X*************** X*** 390,396 **** X } X #endif X X! #endif /* OVLB */ X #ifdef OVLB X void X curs(x, y) X--- 416,422 ---- X } X #endif X X! #endif /* OVL0 */ X #ifdef OVLB X void X curs(x, y) X*** src/timeout.c Mon May 28 16:48:10 1990 X--- src/timeout.c Tue Feb 5 08:55:44 1991 X*************** X*** 103,112 **** X */ X register int time_luck = stone_luck(FALSE); X boolean nostone = !carrying(LUCKSTONE); X X! if(u.uluck > 0 && (nostone || time_luck < 0)) X u.uluck--; X! else if(u.uluck < 0 && (nostone || time_luck > 0)) X u.uluck++; X } X X--- 103,113 ---- X */ X register int time_luck = stone_luck(FALSE); X boolean nostone = !carrying(LUCKSTONE); X+ int baseluck = (flags.moonphase == FULL_MOON) ? 1 : 0; X X! if(u.uluck > baseluck && (nostone || time_luck < 0)) X u.uluck--; X! else if(u.uluck < baseluck && (nostone || time_luck > 0)) X u.uluck++; X } X X*************** X*** 130,136 **** X done(POISONING); X break; X case FAST: X! You("feel yourself slowing down."); X break; X case CONFUSION: X HConfusion = 1; /* So make_confused works properly */ X--- 131,141 ---- X done(POISONING); X break; X case FAST: X! if (Fast & ~INTRINSIC) /* boot speed */ X! ; X! else X! You("feel yourself slowing down%s.", X! Fast ? " a bit" : ""); X break; X case CONFUSION: X HConfusion = 1; /* So make_confused works properly */ X*** src/topten.c Sun May 27 20:28:03 1990 X--- src/topten.c Wed Jan 30 08:52:00 1991 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)topten.c 3.0 89/12/31 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)topten.c 3.0 91/01/20 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 7,24 **** X /* block some unused #defines to avoid overloading some cpp's */ X #include "hack.h" X X! #ifndef MACOS X #include <errno.h> /* George Barbanis */ X! #else X extern short macflags; X extern WindowPtr HackWindow; X #endif X X- #ifdef NO_FILE_LINKS X- #include <fcntl.h> /* Ralf Brown */ X- #endif X- #include <ctype.h> X- X #ifdef NO_SCAN_BRACK X static void FDECL(nsb_mung_line,(char*)); X static void FDECL(nsb_unmung_line,(char*)); X--- 7,26 ---- X /* block some unused #defines to avoid overloading some cpp's */ X #include "hack.h" X X! #if defined(UNIX) || defined(VMS) X #include <errno.h> /* George Barbanis */ X! extern int errno; X! # if defined(NO_FILE_LINKS) && !defined(O_WRONLY) X! #include <fcntl.h> /* Ralf Brown */ X! # endif X! #endif /* UNIX || VMS */ X! #include <ctype.h> X! X! #ifdef MACOS X extern short macflags; X extern WindowPtr HackWindow; X #endif X X #ifdef NO_SCAN_BRACK X static void FDECL(nsb_mung_line,(char*)); X static void FDECL(nsb_unmung_line,(char*)); X*************** X*** 142,148 **** X # endif X #endif /* UNIX */ X #ifdef VMS X! char *reclock = "record_lock;1"; X char recfile[] = RECORD; X #else X const char *recfile = RECORD; X--- 144,150 ---- X # endif X #endif /* UNIX */ X #ifdef VMS X! const char *reclock = "record.lock;1"; X char recfile[] = RECORD; X #else X const char *recfile = RECORD; X*************** X*** 159,165 **** X char *loglock = "logfile_lock"; X # endif /* UNIX */ X # ifdef VMS X! char *loglock = "logfile_lock;1"; X # endif /* VMS */ X # if defined(UNIX) || defined(VMS) X int sleeplgct = 30; X--- 161,167 ---- X char *loglock = "logfile_lock"; X # endif /* UNIX */ X # ifdef VMS X! const char *loglock = "logfile.lock;1"; X # endif /* VMS */ X # if defined(UNIX) || defined(VMS) X int sleeplgct = 30; X*************** X*** 216,223 **** X # else X while(link(lgfile, loglock) == -1) { X # endif /* NO_FILE_LINKS */ X- extern int errno; X- X if (errno == ENOENT) /* If no such file, do not keep log */ X goto lgend; /* George Barbanis */ X HUP perror(loglock); X--- 218,223 ---- X*************** X*** 244,261 **** X # if defined(UNIX) || defined(VMS) X (void) unlink(loglock); X # endif /* UNIX or VMS */ X! lgend:; X # ifdef NO_FILE_LINKS X (void) close(lockfd) ; X # endif X! # if defined(WIZARD) || defined(EXPLORE_MODE) X if (wizard || discover) { X Printf("\nSince you were in %s mode, the score list will not be checked.\n", X wizard ? "wizard" : "discover"); X return; X } X! # endif X! #endif /* LOGFILE */ X X #if defined(UNIX) || defined(VMS) X # ifdef NO_FILE_LINKS X--- 244,263 ---- X # if defined(UNIX) || defined(VMS) X (void) unlink(loglock); X # endif /* UNIX or VMS */ X! lgend: ; X # ifdef NO_FILE_LINKS X (void) close(lockfd) ; X+ free((genericptr_t) loglock) ; X # endif X! #endif /* LOGFILE */ X! X! #if defined(WIZARD) || defined(EXPLORE_MODE) X if (wizard || discover) { X Printf("\nSince you were in %s mode, the score list will not be checked.\n", X wizard ? "wizard" : "discover"); X return; X } X! #endif X X #if defined(UNIX) || defined(VMS) X # ifdef NO_FILE_LINKS X*************** X*** 289,301 **** X X t = (term_info *)GetWRefCon(HackWindow); X SetVol((StringPtr)0L, t->recordVRefNum); X! if (!(rfile = fopen(recfile,"r"))) { X! short i; X! X rfile = openFile(recfile,"r"); X- } X } X- X if (!rfile) { X #else X if(!(rfile = fopen(recfile,"r"))){ X--- 291,299 ---- X X t = (term_info *)GetWRefCon(HackWindow); X SetVol((StringPtr)0L, t->recordVRefNum); X! if (!(rfile = fopen(recfile,"r"))) X rfile = openFile(recfile,"r"); X } X if (!rfile) { X #else X if(!(rfile = fopen(recfile,"r"))){ X*************** X*** 303,311 **** X HUP (void) puts("Cannot open record file!"); X goto unlock; X } X- #ifdef NO_FILE_LINKS X- (void) close(lockfd) ; X- #endif X HUP (void) putchar('\n'); X X /* assure minimum number of points */ X--- 301,306 ---- X*************** X*** 359,370 **** X if(flg) { /* rewrite record file */ X (void) fclose(rfile); X #ifdef VMS X! { X! char *sem = rindex(recfile, ';'); X! X! if (sem) X! *sem = '\0'; X! } X #endif X if(!(rfile = fopen(recfile,"w"))){ X HUP (void) puts("Cannot write record file\n"); X--- 354,362 ---- X if(flg) { /* rewrite record file */ X (void) fclose(rfile); X #ifdef VMS X! { char *semi_colon = rindex(recfile, ';'); X! if (semi_colon) *semi_colon = '\0'; X! } X #endif X if(!(rfile = fopen(recfile,"w"))){ X HUP (void) puts("Cannot write record file\n"); X*************** X*** 441,451 **** X #endif X unlock: ; X #if defined(UNIX) || defined(VMS) X # ifdef NO_FILE_LINKS X (void) close(lockfd) ; X # endif X- if (unlink(reclock) < 0) X- Printf("Can't unlink %s\n",reclock) ; X #endif X } X X--- 433,444 ---- X #endif X unlock: ; X #if defined(UNIX) || defined(VMS) X+ if (unlink(reclock) < 0) X+ Printf("Can't unlink %s\n",reclock) ; X # ifdef NO_FILE_LINKS X (void) close(lockfd) ; X+ free((genericptr_t) reclock) ; X # endif X #endif X } X X*************** X*** 474,480 **** X char linebuf[BUFSZ], linebuf2[BUFSZ]; X X linebuf[0] = linebuf2[0] = 0; X! if(rank) Sprintf(eos(linebuf), " %2d", rank); X else Strcat(linebuf, " "); X X Sprintf(eos(linebuf), " %10ld %.10s", t1->points, t1->name); X--- 467,473 ---- X char linebuf[BUFSZ], linebuf2[BUFSZ]; X X linebuf[0] = linebuf2[0] = 0; X! if(rank) Sprintf(eos(linebuf), "%3d", rank); X else Strcat(linebuf, " "); X X Sprintf(eos(linebuf), " %10ld %.10s", t1->points, t1->name); X*** src/trap.c Tue Jun 26 21:20:36 1990 X--- src/trap.c Sat Feb 2 16:58:28 1991 X*************** X*** 40,45 **** X--- 40,46 ---- X X #ifdef OVLB X X+ static int FDECL(teleok, (int,int,BOOLEAN_P)); X static void NDECL(vtele); X X /* Generic rust-armor function. Returns TRUE if a message was printed; X*************** X*** 99,118 **** X { X register struct trap *ttmp; X register struct permonst *ptr; X X if (ttmp = t_at(x,y)) { X! if (u.utrap && X! ((u.utraptype == TT_BEARTRAP && typ != BEAR_TRAP) || X! (u.utraptype == TT_WEB && typ != WEB) || X! (u.utraptype == TT_PIT && typ != PIT && typ != SPIKED_PIT))) X! u.utrap = 0; X! ttmp->ttyp = typ; X! return ttmp; X } X- ttmp = newtrap(); X ttmp->ttyp = typ; X- ttmp->tx = x; X- ttmp->ty = y; X switch(typ) { X case MONST_TRAP: /* create a monster in "hiding" */ X { int tryct = 0; X--- 100,121 ---- X { X register struct trap *ttmp; X register struct permonst *ptr; X+ register boolean oldplace; X X if (ttmp = t_at(x,y)) { X! oldplace = TRUE; X! if (u.utrap && (x == u.ux) && (y == u.uy) && X! ((u.utraptype == TT_BEARTRAP && typ != BEAR_TRAP) || X! (u.utraptype == TT_WEB && typ != WEB) || X! (u.utraptype == TT_PIT && typ != PIT && typ != SPIKED_PIT))) X! u.utrap = 0; X! } else { X! oldplace = FALSE; X! ttmp = newtrap(); X! ttmp->tx = x; X! ttmp->ty = y; X } X ttmp->ttyp = typ; X switch(typ) { X case MONST_TRAP: /* create a monster in "hiding" */ X { int tryct = 0; X*************** X*** 123,129 **** X } while ((noattacks(&mons[ttmp->pm]) || X !mons[ttmp->pm].mmove) && ++tryct < 100); X if (tryct == 100) { X! free((genericptr_t)ttmp); X return(struct trap *)0; X } X break; X--- 126,135 ---- X } while ((noattacks(&mons[ttmp->pm]) || X !mons[ttmp->pm].mmove) && ++tryct < 100); X if (tryct == 100) { X! if (oldplace) X! deltrap(ttmp); X! else X! free((genericptr_t)ttmp); X return(struct trap *)0; X } X break; X*************** X*** 138,184 **** X } X ttmp->tseen = 0; X ttmp->once = 0; X! ttmp->ntrap = ftrap; X! ftrap = ttmp; X return(ttmp); X } X X! int X! teleok(x, y) X register int x, y; X { /* might throw him into a POOL X * removed by GAN 10/20/86 X */ X #ifdef STUPID X boolean tmp1, tmp2, tmp3; X! # ifdef POLYSELF X tmp1 = isok(x,y) && (!IS_ROCK(levl[x][y].typ) || X passes_walls(uasmon)) && !MON_AT(x, y); X! # else X tmp1 = isok(x,y) && !IS_ROCK(levl[x][y].typ) && !MON_AT(x, y); X! # endif X! tmp2 = !sobj_at(BOULDER,x,y) && !t_at(x,y); X tmp3 = !(is_pool(x,y) && X !(Levitation || Wwalking X! #ifdef POLYSELF X || is_flyer(uasmon) X! #endif X )) && !closed_door(x,y); X return(tmp1 && tmp2 && tmp3); X #else X return( isok(x,y) && X! # ifdef POLYSELF X (!IS_ROCK(levl[x][y].typ) || passes_walls(uasmon)) && X! # else X !IS_ROCK(levl[x][y].typ) && X! # endif X !MON_AT(x, y) && X! !sobj_at(BOULDER,x,y) && !t_at(x,y) && X !(is_pool(x,y) && X !(Levitation || Wwalking X! #ifdef POLYSELF X || is_flyer(uasmon) X! #endif X )) && !closed_door(x,y)); X #endif X /* Note: gold is permitted (because of vaults) */ X--- 144,193 ---- X } X ttmp->tseen = 0; X ttmp->once = 0; X! if (!oldplace) { X! ttmp->ntrap = ftrap; X! ftrap = ttmp; X! } X return(ttmp); X } X X! static int X! teleok(x, y, trapok) X register int x, y; X+ boolean trapok; X { /* might throw him into a POOL X * removed by GAN 10/20/86 X */ X #ifdef STUPID X boolean tmp1, tmp2, tmp3; X! # ifdef POLYSELF X tmp1 = isok(x,y) && (!IS_ROCK(levl[x][y].typ) || X passes_walls(uasmon)) && !MON_AT(x, y); X! # else X tmp1 = isok(x,y) && !IS_ROCK(levl[x][y].typ) && !MON_AT(x, y); X! # endif X! tmp2 = !sobj_at(BOULDER,x,y) && (trapok || !t_at(x,y)); X tmp3 = !(is_pool(x,y) && X !(Levitation || Wwalking X! # ifdef POLYSELF X || is_flyer(uasmon) X! # endif X )) && !closed_door(x,y); X return(tmp1 && tmp2 && tmp3); X #else X return( isok(x,y) && X! # ifdef POLYSELF X (!IS_ROCK(levl[x][y].typ) || passes_walls(uasmon)) && X! # else X !IS_ROCK(levl[x][y].typ) && X! # endif X !MON_AT(x, y) && X! !sobj_at(BOULDER,x,y) && (trapok || !t_at(x,y)) && X !(is_pool(x,y) && X !(Levitation || Wwalking X! # ifdef POLYSELF X || is_flyer(uasmon) X! # endif X )) && !closed_door(x,y)); X #endif X /* Note: gold is permitted (because of vaults) */ X*************** X*** 194,200 **** X X x = rn2(2) ? croom->lx : croom->hx; X y = rn2(2) ? croom->ly : croom->hy; X! if(teleok(x,y)) { X teleds(x,y); X return; X } X--- 203,209 ---- X X x = rn2(2) ? croom->lx : croom->hx; X y = rn2(2) ? croom->ly : croom->hy; X! if(teleok(x,y,FALSE)) { X teleds(x,y); X return; X } X*************** X*** 252,257 **** X--- 261,267 ---- X register int ttype = trap->ttyp; X register struct monst *mtmp; X register struct obj *otmp; X+ int pm = trap->pm; X X nomul(0); X if(trap->tseen && !Fumbling && !(ttype == PIT X*************** X*** 307,314 **** X deltrap(trap); X for(otmp=level.objects[u.ux][u.uy]; X otmp; otmp = otmp->nexthere) X! if(otmp->otyp == STATUE && otmp->corpsenm == trap->pm) X! if(mtmp=makemon(&mons[trap->pm],u.ux,u.uy)) { X pline("The statue comes to life!"); X delobj(otmp); X break; X--- 317,324 ---- X deltrap(trap); X for(otmp=level.objects[u.ux][u.uy]; X otmp; otmp = otmp->nexthere) X! if(otmp->otyp == STATUE && otmp->corpsenm == pm) X! if(mtmp=makemon(&mons[pm],u.ux,u.uy)) { X pline("The statue comes to life!"); X delobj(otmp); X break; X*************** X*** 315,321 **** X } X break; X case MONST_TRAP: X! if(mtmp=makemon(&mons[trap->pm],u.ux,u.uy)) { X mtmp->mpeaceful = FALSE; X switch(mtmp->data->mlet) { X case S_PIERCER: X--- 325,332 ---- X } X break; X case MONST_TRAP: X! deltrap(trap); X! if(mtmp=makemon(&mons[pm],u.ux,u.uy)) { X mtmp->mpeaceful = FALSE; X switch(mtmp->data->mlet) { X case S_PIERCER: X*************** X*** 333,339 **** X break; X } X } X- deltrap(trap); X break; X case ARROW_TRAP: X pline("An arrow shoots out at you!"); X--- 344,349 ---- X*************** X*** 562,581 **** X You("feel momentarily different."); X /* Trap did nothing; don't remove it --KAA */ X } else { X You("feel a change coming over you."); X polyself(); X- deltrap(trap); X } X break; X #endif X case MGTRP: /* A magic trap. */ X if (!rn2(30)) { X- You("are caught in a magical explosion!"); X- losehp(rnd(10), "magical explosion", KILLED_BY_AN); X- #ifdef SPELLS X- Your("body absorbs some of the magical energy!"); X- u.uen = (u.uenmax += 2); X- #endif X deltrap(trap); X if(Invisible X #ifdef POLYSELF X--- 572,585 ---- X You("feel momentarily different."); X /* Trap did nothing; don't remove it --KAA */ X } else { X+ deltrap(trap); X You("feel a change coming over you."); X polyself(); X } X break; X #endif X case MGTRP: /* A magic trap. */ X if (!rn2(30)) { X deltrap(trap); X if(Invisible X #ifdef POLYSELF X*************** X*** 582,587 **** X--- 586,597 ---- X && !u.uundetected X #endif X ) newsym(u.ux,u.uy); X+ You("are caught in a magical explosion!"); X+ losehp(rnd(10), "magical explosion", KILLED_BY_AN); X+ #ifdef SPELLS X+ Your("body absorbs some of the magical energy!"); X+ u.uen = (u.uenmax += 2); X+ #endif X } else domagictrap(); X break; X case SQBRD: /* stepped on a squeaky board */ X*************** X*** 1058,1064 **** X void X tele() { X coord cc; X! register int nux,nuy; X X #ifdef STRONGHOLD X /* Disable teleportation in stronghold && Vlad's Tower */ X--- 1068,1075 ---- X void X tele() { X coord cc; X! register int nux, nuy; X! short tcnt = 0; X X #ifdef STRONGHOLD X /* Disable teleportation in stronghold && Vlad's Tower */ X*************** X*** 1081,1087 **** X You("feel disoriented for a moment."); X return; X } X! if(Teleport_control) { X if (unconscious()) X pline("Being unconscious, you cannot control your teleport."); X else { X--- 1092,1102 ---- X You("feel disoriented for a moment."); X return; X } X! if(Teleport_control X! #ifdef WIZARD X! || wizard X! #endif X! ) { X if (unconscious()) X pline("Being unconscious, you cannot control your teleport."); X else { X*************** X*** 1091,1097 **** X getpos(&cc, 1, "the desired position"); /* 1: force valid */ X /* possible extensions: introduce a small error if X magic power is low; allow transfer to solid rock */ X! if(teleok(cc.x, cc.y)){ X teleds(cc.x, cc.y); X return; X } X--- 1106,1112 ---- X getpos(&cc, 1, "the desired position"); /* 1: force valid */ X /* possible extensions: introduce a small error if X magic power is low; allow transfer to solid rock */ X! if(teleok(cc.x, cc.y, FALSE)){ X teleds(cc.x, cc.y); X return; X } X*************** X*** 1098,1108 **** X pline("Sorry..."); X } X } X do { X nux = rnd(COLNO-1); X nuy = rn2(ROWNO); X! } while(!teleok(nux, nuy)); X! teleds(nux, nuy); X } X X void X--- 1113,1124 ---- X pline("Sorry..."); X } X } X+ X do { X nux = rnd(COLNO-1); X nuy = rn2(ROWNO); X! } while (!teleok(nux, nuy, tcnt>200) && tcnt++ < 400); X! if (tcnt < 400) teleds(nux, nuy); X } X X void X*************** X*** 1219,1229 **** X X #ifdef SPELLS X if (castit) X # ifdef WIZARD X! if (!spelleffects(++sp_no, TRUE) && !wizard) return(0); X! # else X! return spelleffects(++sp_no, TRUE); X # endif X #endif X X #ifdef WALKIES X--- 1235,1247 ---- X X #ifdef SPELLS X if (castit) X+ if (spelleffects(++sp_no, TRUE)) X+ return(1); X+ else X # ifdef WIZARD X! if (!wizard) X # endif X+ return(0); X #endif X X #ifdef WALKIES X*** src/uhitm.c Tue Jun 26 21:20:37 1990 X--- src/uhitm.c Sat Jan 5 15:08:19 1991 X*************** X*** 70,75 **** X--- 70,80 ---- X if (mon->mtame) { X struct monst *m3; X X+ /* because m2 is a copy of mon it is tame but not init'ed. X+ * however, tamedog will not re-tame a tame dog, so m2 X+ * must be made non-tame to get initialized properly. X+ */ X+ m2->mtame = 0; X if (m3 = tamedog(m2, (struct obj *)0)) X m2 = m3; X } X*** src/unixmain.c Thu May 24 23:00:42 1990 X--- src/unixmain.c Sat Jan 5 15:00:05 1991 X*************** X*** 345,351 **** X flags.moonphase = phase_of_the_moon(); X if(flags.moonphase == FULL_MOON) { X You("are lucky! Full moon tonight."); X! if(!u.uluck) change_luck(1); X } else if(flags.moonphase == NEW_MOON) { X pline("Be careful! New moon tonight."); X } X--- 345,351 ---- X flags.moonphase = phase_of_the_moon(); X if(flags.moonphase == FULL_MOON) { X You("are lucky! Full moon tonight."); X! change_luck(1); X } else if(flags.moonphase == NEW_MOON) { X pline("Be careful! New moon tonight."); X } X*** src/unixtty.c Sun Mar 4 13:44:10 1990 X--- src/unixtty.c Tue Jan 15 17:50:55 1991 X*************** X*** 37,42 **** X--- 37,45 ---- X #define cbrkflgs c_lflag X #define CBRKMASK ICANON X #define CBRKON ! /* reverse condition */ X+ #ifndef CBAUD X+ # define CBAUD _CBAUD /* for POSIX nitpickers (like RS/6000 cc) */ X+ #endif X #define OSPEED(x) ((x).c_cflag & CBAUD) X #define IS_7BIT(x) ((x).c_cflag & CS7) X #define inputflags c_iflag X*** src/unixunix.c Tue Apr 17 23:57:36 1990 X--- src/unixunix.c Wed Jan 30 08:49:06 1991 X*************** X*** 112,118 **** X static struct stat buf, hbuf; X X void X! gethdate(name) char *name; { X /* old version - for people short of space */ X /* X /* register char *np; X--- 112,118 ---- X static struct stat buf, hbuf; X X void X! gethdate(name) const char *name; { X /* old version - for people short of space */ X /* X /* register char *np; X*** src/zap.c Tue Jun 26 21:20:41 1990 X--- src/zap.c Sun Jan 6 15:55:18 1991 X*************** X*** 1517,1523 **** X--- 1517,1530 ---- X } else { X #endif X lev->typ = ROOM; X+ #ifdef STUPID X+ if (moat) X+ lev->icedpool = ICED_MOAT; X+ else X+ lev->icedpool = ICED_POOL; X+ #else X lev->icedpool = (moat ? ICED_MOAT : ICED_POOL); X+ #endif X #ifdef STRONGHOLD X } X #endif X END_OF_FILE if test 52441 -ne `wc -c <'patch10.03'`; then echo shar: \"'patch10.03'\" unpacked with wrong size! fi # end of 'patch10.03' echo shar: End of archive 2 \(of 8\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 6 7 8 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 8 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0