billr@saab.CNA.TEK.COM (Bill Randle) (11/23/89)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 8, Issue 65 Archive-name: NetHack3/Patch6l 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 12 (of 15)." # Contents: patches06l # Wrapped by billr@saab on Wed Nov 22 10:50:19 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patches06l' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patches06l'\" else echo shar: Extracting \"'patches06l'\" \(52555 characters\) sed "s/^X//" >'patches06l' <<'END_OF_FILE' X*** src/Old/topl.c Sun Nov 19 13:15:11 1989 X--- src/topl.c Sun Oct 22 11:45:53 1989 X*************** X*** 320,326 **** X X void X putstr(s) X! register char *s; X { X while(*s) putsym(*s++); X } X--- 320,326 ---- X X void X putstr(s) X! register const char *s; X { X while(*s) putsym(*s++); X } X*************** X*** 327,333 **** X X char X yn_function(resp, def) X! char *resp, def; X /* X * Generic yes/no function X */ X--- 327,334 ---- X X char X yn_function(resp, def) X! const char *resp; X! char def; X /* X * Generic yes/no function X */ X*** src/Old/topten.c Sun Nov 19 13:15:26 1989 X--- src/topten.c Sat Nov 18 21:20:51 1989 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)topten.c 3.0 88/11/24 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 89/11/15 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 37,45 **** X char date[7]; /* yymmdd */ X } *tt_head; X X! static char *itoa P((int)), *ordin P((int)); X static void outheader(); X! static int outentry P((int,struct toptenentry *,int)); X X void X topten(){ X--- 37,45 ---- X char date[7]; /* yymmdd */ X } *tt_head; X X! static char *FDECL(itoa, (int)), *FDECL(ordin, (int)); X static void outheader(); X! static int FDECL(outentry, (int,struct toptenentry *,int)); X X void X topten(){ X*************** X*** 416,422 **** X Strcat(linebuf, "starved to death"); X starv = TRUE; X } else if(!strcmp(t1->death,"poisoned")) { X! Strcat(linebuf, "was posioned"); X } else if(!strcmp(t1->death,"crushed")) { X Strcat(linebuf, "was crushed to death"); X } else if(!strncmp(t1->death, "turned to stone by ",19)) { X--- 416,422 ---- X Strcat(linebuf, "starved to death"); X starv = TRUE; X } else if(!strcmp(t1->death,"poisoned")) { X! Strcat(linebuf, "was poisoned"); X } else if(!strcmp(t1->death,"crushed")) { X Strcat(linebuf, "was crushed to death"); X } else if(!strncmp(t1->death, "turned to stone by ",19)) { X*************** X*** 437,452 **** X Sprintf(eos(linebuf), " [max %d]", t1->maxlvl); X if(quit && t1->death[4]) Strcat(linebuf, t1->death + 4); X } X! if(iskilled) Sprintf(eos(linebuf), " by %s%s", X (!strncmp(t1->death, "trick", 5) || !strncmp(t1->death, "the ", 4) X || !strncmp(t1->death, "Mr. ", 4) || !strncmp(t1->death, "Ms. ", 4) X || !strcmp(t1->death, "contaminated water") X || (!strncmp(eos(t1->death)-4,"tion",4) && *(eos(t1->death)-5)!='o') X! ) ? "" : X! index(vowels,*t1->death) ? "an " : "a ", X! t1->death); X! if (isstoned) Sprintf(eos(linebuf), " by %s%s", index(vowels, X! *(t1->death + 19)) ? "an " : "a ", t1->death + 19); X Strcat(linebuf, "."); X if(t1->maxhp) { X register char *bp = eos(linebuf); X--- 437,449 ---- X Sprintf(eos(linebuf), " [max %d]", t1->maxlvl); X if(quit && t1->death[4]) Strcat(linebuf, t1->death + 4); X } X! if(iskilled) Sprintf(eos(linebuf), " by %s", X (!strncmp(t1->death, "trick", 5) || !strncmp(t1->death, "the ", 4) X || !strncmp(t1->death, "Mr. ", 4) || !strncmp(t1->death, "Ms. ", 4) X || !strcmp(t1->death, "contaminated water") X || (!strncmp(eos(t1->death)-4,"tion",4) && *(eos(t1->death)-5)!='o') X! ) ? t1->death : an(t1->death)); X! if (isstoned) Sprintf(eos(linebuf), " by %s", an(t1->death + 19)); X Strcat(linebuf, "."); X if(t1->maxhp) { X register char *bp = eos(linebuf); X*************** X*** 566,572 **** X if(!argv[1][2]){ X argc--; X argv++; X! } else if(!argv[1][3] && index("ABCEHKPRSTVW", argv[1][2])) { X argv[1]++; X argv[1][0] = '-'; X } else argv[1] += 2; X--- 563,569 ---- X if(!argv[1][2]){ X argc--; X argv++; X! } else if(!argv[1][3] && index(pl_classes, argv[1][2])) { X argv[1]++; X argv[1][0] = '-'; X } else argv[1] += 2; X*************** X*** 680,688 **** X .hacklog or something in his home directory. */ X flags.beginner = (total_score < 6000); X for(i=0; i<6; i++) X! if(!index(totchars, "ABCEHKPRSTVW"[i])) { X flags.beginner = 1; X! if(!pl_character[0]) pl_character[0] = "ABCEHKPRSTVW"[i]; X break; X } X #endif /* nonsense /**/ X--- 677,685 ---- X .hacklog or something in his home directory. */ X flags.beginner = (total_score < 6000); X for(i=0; i<6; i++) X! if(!index(totchars, pl_classes[i])) { X flags.beginner = 1; X! if(!pl_character[0]) pl_character[0] = pl_classes[i]; X break; X } X #endif /* nonsense /**/ X*** src/Old/trap.c Sun Nov 19 13:16:07 1989 X--- src/trap.c Sat Nov 11 17:06:43 1989 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)trap.c 3.0 88/10/22 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: @(#)trap.c 3.0 89/11/10 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 196,201 **** X--- 196,207 ---- X Levitation ? "float" : "fly"); X break; X } X+ #ifdef POLYSELF X+ if(amorphous(uasmon)) { X+ pline("A bear trap closes harmlessly through you."); X+ break; X+ } X+ #endif X u.utrap = 4 + rn2(4); X u.utraptype = TT_BEARTRAP; X pline("A bear trap closes on your %s!", X*************** X*** 207,221 **** X break; X case STATUE_TRAP: X deltrap(trap); X! for(otmp=fobj; otmp; otmp=otmp->nobj) { X! if(otmp->otyp == STATUE && otmp->ox == u.ux && X! otmp->oy == u.uy && 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 } X- } X break; X case MONST_TRAP: X if(mtmp=makemon(&mons[trap->pm],u.ux,u.uy)) { X--- 213,226 ---- X break; X case STATUE_TRAP: 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 } X break; X case MONST_TRAP: X if(mtmp=makemon(&mons[trap->pm],u.ux,u.uy)) { X*************** X*** 323,329 **** X } else { X #ifdef ENDGAME X if(dlevel == ENDLEVEL) { X! pline("A shiver runs down your spine..."); X break; X } X #endif X--- 328,334 ---- X } else { X #ifdef ENDGAME X if(dlevel == ENDLEVEL) { X! You("feel a wrenching sensation."); X break; X } X #endif X*************** X*** 344,351 **** X You("are covered with rust!"); X rehumanize(); X break; X! } X #endif /* GOLEMS */ X #endif X /* Unlike monsters, traps cannot aim their rust attacks at X * you, so instead of looping through and taking either the X--- 349,364 ---- X You("are covered with rust!"); X rehumanize(); X break; X! } else X #endif /* GOLEMS */ X+ if (u.umonnum == PM_GREMLIN && rn2(3)) { X+ pline("A gush of water hits you!"); X+ if(mtmp = cloneu()) { X+ mtmp->mhpmax = (u.mhmax /= 2); X+ You("multiply."); X+ } X+ break; X+ } X #endif X /* Unlike monsters, traps cannot aim their rust attacks at X * you, so instead of looping through and taking either the X*************** X*** 635,641 **** X mtmp->mtrapseen |= (1 << tt); X switch (tt) { X case BEAR_TRAP: X! if(bigmonst(mtmp->data)) { X if(in_sight) X pline("%s is caught in a bear trap!", X Monnam(mtmp)); X--- 648,656 ---- X mtmp->mtrapseen |= (1 << tt); X switch (tt) { X case BEAR_TRAP: X! if(mtmp->data->msize > MZ_SMALL && X! !amorphous(mtmp->data)) { X! mtmp->mtrapped = 1; X if(in_sight) X pline("%s is caught in a bear trap!", X Monnam(mtmp)); X*************** X*** 644,650 **** X || mtmp->data == &mons[PM_BUGBEAR]) X && flags.soundok) X You("hear the roaring of an angry bear!"); X- mtmp->mtrapped = 1; X } X break; X #ifdef POLYSELF X--- 659,664 ---- X*************** X*** 665,672 **** X mon_nam(mtmp)); X mondied(mtmp); X trapkilled = TRUE; X! } X #endif /* GOLEMS */ X break; X case PIT: X case SPIKED_PIT: X--- 679,695 ---- X mon_nam(mtmp)); X mondied(mtmp); X trapkilled = TRUE; X! } else X #endif /* GOLEMS */ X+ if (mtmp->data == &mons[PM_GREMLIN] && rn2(3)) { X+ struct monst *mtmp2 = clone_mon(mtmp); X+ X+ if (mtmp2) { X+ mtmp2->mhpmax = (mtmp->mhpmax /= 2); X+ if(in_sight) X+ pline("%s multiplies.", Monnam(mtmp)); X+ } X+ } X break; X case PIT: X case SPIKED_PIT: X*************** X*** 740,746 **** X if(!is_flyer(mtmp->data) X #ifdef WORM X && !mtmp->wormno X! /* long worms cannot be allowed to change levels */ X #endif X ){ X #ifdef WALKIES X--- 763,769 ---- X if(!is_flyer(mtmp->data) X #ifdef WORM X && !mtmp->wormno X! /* long worms with tails mustn't change levels */ X #endif X ){ X #ifdef WALKIES X*************** X*** 866,872 **** X } X } else X if (Hallucination) X! pline("Oh wow! You're floating in the air!"); X else X You("start to float in the air!"); X } X--- 889,895 ---- X } X } else X if (Hallucination) X! pline("Up, up, and awaaaay! You're walking on air!"); X else X You("start to float in the air!"); X } X*************** X*** 1009,1015 **** X } X } X if (trap) X! You("jump onto the teleportation trap..."); X } X if(!trap && (!Teleportation || X (u.ulevel < (pl_character[0] == 'W' ? 8 : 12) X--- 1032,1043 ---- X } X } X if (trap) X! #ifdef POLYSELF X! You("%s onto the teleportation trap.", X! nolimbs(uasmon) ? "slither" : "jump"); X! #else X! You("jump onto the teleportation trap."); X! #endif X } X if(!trap && (!Teleportation || X (u.ulevel < (pl_character[0] == 'W' ? 8 : 12) X*************** X*** 1088,1094 **** X int attach; X { X if(!uchain || !uball){ X! impossible("Where are your chain and ball??"); X return; X } X if(!carried(uball)) X--- 1116,1122 ---- X int attach; X { X if(!uchain || !uball){ X! impossible("Where are your ball and chain?"); X return; X } X if(!carried(uball)) X*************** X*** 1230,1236 **** X } else X You("hear a deafening roar!"); X while(cnt--) X! (void) makemon((struct permonst *) 0, u.ux, u.uy); X } X else X switch (fate) { X--- 1258,1264 ---- X } else X You("hear a deafening roar!"); X while(cnt--) X! (void) makemon((struct permonst *) 0, u.ux, u.uy); X } X else X switch (fate) { X*************** X*** 1256,1262 **** X } else { X num = rnd(6); X u.uhpmax -= num; X! losehp(num,"a burst of flame"); X break; X } X } X--- 1284,1290 ---- X } else { X num = rnd(6); X u.uhpmax -= num; X! losehp(num,"burst of flame"); X break; X } X } X*************** X*** 1263,1276 **** X X /* odd feelings */ X case 13: pline("A shiver runs up and down your spine!"); X break; X! case 14: You("hear distant howling."); X break; X case 15: You("suddenly yearn for your distant homeland."); X break; X case 16: Your("pack shakes violently!"); X break; X! case 17: You("smell charred flesh."); X break; X X /* very occasionally something nice happens. */ X--- 1291,1309 ---- X X /* odd feelings */ X case 13: pline("A shiver runs up and down your spine!"); X+ /* TO DO: What if you're polymorphed into something spineless? */ X break; X! case 14: You(Hallucination ? X! "hear the moon howling at you." : X! "hear distant howling."); X break; X case 15: You("suddenly yearn for your distant homeland."); X break; X case 16: Your("pack shakes violently!"); X break; X! case 17: You(Hallucination ? X! "smell hamburgers." : X! "smell charred flesh."); X break; X X /* very occasionally something nice happens. */ X*************** X*** 1292,1301 **** X { register struct obj *obj; X X /* below plines added by GAN 10/30/86 */ X! if (Hallucination) X! You("feel in touch with the Universal Oneness."); X! else X! You("feel like someone is helping you."); X for(obj = invent; obj ; obj = obj->nobj) X if(obj->owornmask || obj->otyp == LOADSTONE) X obj->cursed = 0; X--- 1325,1333 ---- X { register struct obj *obj; X X /* below plines added by GAN 10/30/86 */ X! You(Hallucination ? X! "feel in touch with the Universal Oneness." : X! "feel like someone is helping you."); X for(obj = invent; obj ; obj = obj->nobj) X if(obj->owornmask || obj->otyp == LOADSTONE) X obj->cursed = 0; X*************** X*** 1328,1334 **** X } X X #ifdef POLYSELF X! if(u.usym == S_GREMLIN && rn2(3)) { X struct monst *mtmp; X if(mtmp = cloneu()) { X mtmp->mhpmax = (u.mhmax /= 2); X--- 1360,1366 ---- X } X X #ifdef POLYSELF X! if(u.umonnum == PM_GREMLIN && rn2(3)) { X struct monst *mtmp; X if(mtmp = cloneu()) { X mtmp->mhpmax = (u.mhmax /= 2); X*************** X*** 1376,1382 **** X int X dountrap() { /* disarm a trapped object */ X register struct obj *otmp; X! register boolean confused = (Confusion > 0); X register int x,y; X int ch; X struct trap *ttmp; X--- 1408,1414 ---- X int X dountrap() { /* disarm a trapped object */ X register struct obj *otmp; X! register boolean confused = (Confusion > 0 || Hallucination > 0); X register int x,y; X int ch; X struct trap *ttmp; X*************** X*** 1392,1440 **** X y = u.uy + u.dy; X X if(!u.dx && !u.dy) { X! if(OBJ_AT(x, y)) X! for(otmp = fobj; otmp; otmp = otmp->nobj) X! if((otmp->ox == x) && (otmp->oy == y)) X! if(Is_box(otmp)) { X! pline("There is %s here, check for traps? ", X! doname(otmp)); X! X! switch (ynq()) { X! case 'q': return(0); X! case 'n': continue; X! } X! X! if((otmp->otrapped && !confused X! && rn2(MAXLEVEL+2-dlevel) < 10) X! || confused && !rn2(3)) { X! You("find a trap on the %s! Disarm it? ", X! xname(otmp)); X X! switch (ynq()) { X! case 'q': return(1); X! case 'n': continue; X! } X! X! if(otmp->otrapped) { X! ch = 15 + X! (pl_character[0] == 'R') ? u.ulevel*3 : X! u.ulevel; X! if(confused || Fumbling || rnd(75+dlevel/2) > ch) { X! You("set it off!"); X! chest_trap(otmp, FINGER); X! } else { X! You("disarm it!"); X! otmp->otrapped = 0; X! } X! } else pline("That %s was not trapped.", X! doname(otmp)); X! return(1); X } else { X! You("find no traps on the %s.", X! xname(otmp)); X! return(1); X } X! } X if ((ttmp = t_at(x,y)) && ttmp->tseen) X You("cannot disable this trap."); X else X--- 1424,1465 ---- X y = u.uy + u.dy; X X if(!u.dx && !u.dy) { X! for(otmp = level.objects[x][y]; otmp; otmp = otmp->nexthere) X! if(Is_box(otmp)) { X! pline("There is %s here, check for traps? ", doname(otmp)); X X! switch (ynq()) { X! case 'q': return(0); X! case 'n': continue; X! } X! X! if((otmp->otrapped && !confused X! && rn2(MAXLEVEL+2-dlevel) < 10) X! || confused && !rn2(3)) { X! You("find a trap on the %s! Disarm it? ", xname(otmp)); X! X! switch (ynq()) { X! case 'q': return(1); X! case 'n': continue; X! } X! X! if(otmp->otrapped) { X! ch = 15 + (pl_character[0] == 'R') ? u.ulevel*3 X! : u.ulevel; X! if(confused || Fumbling || rnd(75+dlevel/2) > ch) { X! You("set it off!"); X! chest_trap(otmp, FINGER); X } else { X! You("disarm it!"); X! otmp->otrapped = 0; X } X! } else pline("That %s was not trapped.", doname(otmp)); X! return(1); X! } else { X! You("find no traps on the %s.", xname(otmp)); X! return(1); X! } X! } X if ((ttmp = t_at(x,y)) && ttmp->tseen) X You("cannot disable this trap."); X else X*************** X*** 1505,1514 **** X Sprintf(buf, "exploding %s", xname(obj)); X X delete_contents(obj); X! for(otmp = fobj; otmp; otmp = otmp2) { X! otmp2 = otmp->nobj; X! if((otmp->ox == u.ux) && (otmp->oy == u.uy)) X! delobj(otmp); X } X X losehp(d(6,6), buf); X--- 1530,1539 ---- X Sprintf(buf, "exploding %s", xname(obj)); X X delete_contents(obj); X! for(otmp = level.objects[u.ux][u.uy]; X! otmp; otmp = otmp2) { X! otmp2 = otmp->nexthere; X! delobj(otmp); X } X X losehp(d(6,6), buf); X*************** X*** 1689,1696 **** X unconscious() X { X return (multi < 0 && (!nomovemsg || X! !strncmp(nomovemsg,"You wake", 8) || X! !strncmp(nomovemsg,"You awake", 9) || X! !strncmp(nomovemsg,"You regain con", 15) || X! !strncmp(nomovemsg,"You are consci", 15))); X } X--- 1714,1721 ---- X unconscious() X { X return (multi < 0 && (!nomovemsg || X! !strncmp(nomovemsg,"You wake", 8) || X! !strncmp(nomovemsg,"You awake", 9) || X! !strncmp(nomovemsg,"You regain con", 15) || X! !strncmp(nomovemsg,"You are consci", 15))); X } X*** src/Old/u_init.c Sun Nov 19 13:17:03 1989 X--- src/u_init.c Fri Nov 17 19:32:23 1989 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)u_init.c 3.0 88/04/13 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: @(#)u_init.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*************** X*** 13,19 **** X Bitfield(trbless,2); X }; X X! static void ini_inv P((struct trobj *)); X X #define UNDEF_TYP 0 X #define UNDEF_SPE '\177' X--- 13,19 ---- X Bitfield(trbless,2); X }; X X! static void FDECL(ini_inv, (struct trobj *)); X X #define UNDEF_TYP 0 X #define UNDEF_SPE '\177' X*************** X*** 27,36 **** X "Priest", "Rogue", "Samurai", "Tourist", "Valkyrie", "Wizard" X }; X X! struct you zerou; X X! #define NR_OF_ROLES SIZE(roles) X! char rolesyms[NR_OF_ROLES + 1]; /* filled by u_init() */ X X struct trobj Cave_man[] = { X #define C_ARROWS 2 X--- 27,35 ---- X "Priest", "Rogue", "Samurai", "Tourist", "Valkyrie", "Wizard" X }; X X! const char *pl_classes = "ABCEHKPRSTVW"; X X! struct you zerou; X X struct trobj Cave_man[] = { X #define C_ARROWS 2 X*************** X*** 235,246 **** X static int X role_index(pc) X char pc; X! { /* must be called only from u_init() */ X! /* so that rolesyms[] is defined */ X register char *cp; X X! if(cp = index(rolesyms, pc)) X! return(cp - rolesyms); X return(-1); X } X X--- 234,244 ---- X static int X role_index(pc) X char pc; X! { X register char *cp; X X! if(cp = index(pl_classes, pc)) X! return(cp - pl_classes); X return(-1); X } X X*************** X*** 258,266 **** X roles[2] = "Cave-woman"; X roles[6] = "Priestess"; X } X- for(i = 0; i < NR_OF_ROLES; i++) X- rolesyms[i] = roles[i][0]; X- rolesyms[i] = 0; X X if(pc = pl_character[0]) { X if('a' <= pc && pc <= 'z') pc += 'A'-'a'; X--- 256,261 ---- X*************** X*** 290,305 **** X goto beginner; X X Printf("\nWhat kind of character are you:\n\n"); X! Printf(" An"); X! Printf(" %s,",roles[0]); X! for(i = 1; i < NR_OF_ROLES; i++) { X! Printf(" a%s %s", index(vowels,roles[i][0]) ? "n" : "", roles[i]); X! if((((i + 1) % 4) == 0) && (i != NR_OF_ROLES -1)) Printf(",\n "); X! else if(i < NR_OF_ROLES - 2) Printf(","); X! if(i == NR_OF_ROLES - 2) Printf(" or"); X } X Printf("?\n ["); X! for(i = 0; i < NR_OF_ROLES; i++) Printf("%c,", rolesyms[i]); X Printf(" or Q] "); X X while(pc = readchar()) { X--- 285,300 ---- X goto beginner; X X Printf("\nWhat kind of character are you:\n\n"); X! Printf(" %s,", An(roles[0])); X! for(i = 1; i < SIZE(roles); i++) { X! Printf(" %s", an(roles[i])); X! if((((i + 1) % 4) == 0) && (i != SIZE(roles) -1)) X! Printf(",\n "); X! else if(i < SIZE(roles) - 2) Printf(","); X! if(i == SIZE(roles) - 2) Printf(" or"); X } X Printf("?\n ["); X! for(i = 0; i < SIZE(roles); i++) Printf("%c,", pl_classes[i]); X Printf(" or Q] "); X X while(pc = readchar()) { X*************** X*** 321,331 **** X X beginner: X if(!pc) { X! i = rn2(NR_OF_ROLES); X! pc = rolesyms[i]; X! Printf("\nThis game you will be %s %s.\n", X! index("AEIOU", roles[i][0]) ? "an" : "a", X! roles[i]); X getret(); X /* give him some feedback in case mklev takes much time */ X (void) putchar('\n'); X--- 316,324 ---- X X beginner: X if(!pc) { X! i = rn2(SIZE(roles)); X! pc = pl_classes[i]; X! Printf("\nThis game you will be %s.\n", an(roles[i])); X getret(); X /* give him some feedback in case mklev takes much time */ X (void) putchar('\n'); X*************** X*** 503,509 **** X ini_inv(Wishing); X #endif X find_ac(); /* get initial ac value */ X! init_attr((pick != 'Y') ? 69 : 72); /* init attribute values */ X max_rank_sz(); /* set max str size for class ranks */ X /* X * Do we really need this? X--- 496,502 ---- X ini_inv(Wishing); X #endif X find_ac(); /* get initial ac value */ X! init_attr((pick != 'Y') ? 75 : 77); /* init attribute values */ X max_rank_sz(); /* set max str size for class ranks */ X /* X * Do we really need this? X*************** X*** 619,626 **** X if(obj->olet == FOOD_SYM && undefined) { X obj->known = 1; X /* needed for tins and eggs; harmless otherwise */ X! obj->bknown = (obj->otyp != DEAD_LIZARD); X! /* only for dead lizards does the blessing not matter */ X } X /* X * The below lines not needed because they don't correspond X--- 612,618 ---- X if(obj->olet == FOOD_SYM && undefined) { X obj->known = 1; X /* needed for tins and eggs; harmless otherwise */ X! obj->bknown = 1; X } X /* X * The below lines not needed because they don't correspond X*** src/Old/uhitm.c Sun Nov 19 13:17:33 1989 X--- src/uhitm.c Sun Nov 19 09:25:37 1989 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)uhitm.c 3.0 88/04/11 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: @(#)uhitm.c 3.0 89/11/19 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 344,353 **** X } X } else { X if(obj->olet == WEAPON_SYM || obj->otyp == PICK_AXE || X! obj->olet == ROCK_SYM) { X X if(obj == uwep && (obj->otyp > VOULGE || obj->otyp < BOOMERANG) X! && obj->otyp != PICK_AXE) X tmp = rnd(2); X else { X tmp = dmgval(obj, mon->data); X--- 344,353 ---- X } X } else { X if(obj->olet == WEAPON_SYM || obj->otyp == PICK_AXE || X! obj->otyp == UNICORN_HORN || obj->olet == ROCK_SYM) { X X if(obj == uwep && (obj->otyp > VOULGE || obj->otyp < BOOMERANG) X! && obj->otyp != PICK_AXE && obj->otyp != UNICORN_HORN) X tmp = rnd(2); X else { X tmp = dmgval(obj, mon->data); X*************** X*** 430,436 **** X xkilled(mon,0); X return(FALSE); X } X! tmp = bigmonst(&mons[obj->corpsenm]) ? 5 : 2 ; X break; X case EGG: /* only possible if hand-to-hand */ X if(obj->corpsenm > -1 X--- 430,436 ---- X xkilled(mon,0); X return(FALSE); X } X! tmp = mons[obj->corpsenm].msize + 1; X break; X case EGG: /* only possible if hand-to-hand */ X if(obj->corpsenm > -1 X*************** X*** 629,635 **** X X stoned = FALSE; X if (is_demon(uasmon) && !rn2(13) && !uwep X! # ifdef HARD X && u.umonnum != PM_SUCCUBUS && u.umonnum != PM_INCUBUS X && u.umonnum != PM_BALROG X # endif X--- 629,635 ---- X X stoned = FALSE; X if (is_demon(uasmon) && !rn2(13) && !uwep X! # ifdef INFERNO X && u.umonnum != PM_SUCCUBUS && u.umonnum != PM_INCUBUS X && u.umonnum != PM_BALROG X # endif X*************** X*** 1311,1317 **** X } X break; X case AD_COLD: /* brown mold or blue jelly */ X! if(dist(mon->mx, mon->my) <= 3) { X tmp = d((int)mon->m_lev+1, (int)ptr->mattk[i].damd); X if(Cold_resistance) { X shieldeff(u.ux, u.uy); X--- 1311,1317 ---- X } X break; X case AD_COLD: /* brown mold or blue jelly */ X! if(monnear(mon, u.ux, u.uy)) { X tmp = d((int)mon->m_lev+1, (int)ptr->mattk[i].damd); X if(Cold_resistance) { X shieldeff(u.ux, u.uy); X*************** X*** 1347,1353 **** X make_stunned((long)d((int)mon->m_lev+1, (int)ptr->mattk[i].damd), TRUE); X break; X case AD_FIRE: X! if(dist(mon->mx, mon->my) <= 3) { X tmp = d((int)mon->m_lev+1, (int)ptr->mattk[i].damd); X if(Fire_resistance) { X shieldeff(u.ux, u.uy); X--- 1347,1353 ---- X make_stunned((long)d((int)mon->m_lev+1, (int)ptr->mattk[i].damd), TRUE); X break; X case AD_FIRE: X! if(monnear(mon, u.ux, u.uy)) { X tmp = d((int)mon->m_lev+1, (int)ptr->mattk[i].damd); X if(Fire_resistance) { X shieldeff(u.ux, u.uy); X*************** X*** 1379,1385 **** X if(!u.ustuck && !mtmp->mflee && dmgtype(mtmp->data,AD_STCK)) X u.ustuck = mtmp; X if (Blind) goto generic; X! else if (levl[u.ux+u.dx][u.uy+u.dy].scrsym == DOOR_SYM) X #ifdef SPELLS X { X if (IS_ROCK(levl[u.ux+u.dx][u.uy+u.dy].typ) || X--- 1379,1385 ---- X if(!u.ustuck && !mtmp->mflee && dmgtype(mtmp->data,AD_STCK)) X u.ustuck = mtmp; X if (Blind) goto generic; X! else if (levl[u.ux+u.dx][u.uy+u.dy].scrsym == CLOSED_DOOR_SYM) X #ifdef SPELLS X { X if (IS_ROCK(levl[u.ux+u.dx][u.uy+u.dy].typ) || X*** src/Old/unixtty.c Sun Nov 19 14:51:27 1989 X--- src/unixtty.c Sun Nov 19 14:45:10 1989 X*************** X*** 38,43 **** X--- 38,44 ---- X #define CBRKMASK ICANON X #define CBRKON ! /* reverse condition */ X #define OSPEED(x) ((x).c_cflag & CBAUD) X+ #define IS_7BIT(x) ((x).c_cflag & CS7) X #define inputflags c_iflag X #define STRIPHI ISTRIP X #define GTTY(x) (ioctl(0, TCGETA, x)) X*************** X*** 63,68 **** X--- 64,70 ---- X #define CBRKMASK CBREAK X #define CBRKON /* empty */ X #define inputflags sg_flags /* don't know how enabling meta bits */ X+ #define IS_7BIT(x) (FALSE) X #define STRIPHI 0 /* should actually be done on BSD */ X #define OSPEED(x) (x).sg_ospeed X #define GTTY(x) (gtty(0, x)) X*************** X*** 154,160 **** X #endif X change++; X } X! curttyb.inputflags &=~ STRIPHI; X /* If an interrupt character is used, it will be overriden and X * set to ^C. X */ X--- 156,162 ---- X #endif X change++; X } X! if(!IS_7BIT(inittyb)) curttyb.inputflags &=~ STRIPHI; X /* If an interrupt character is used, it will be overriden and X * set to ^C. X */ X*** src/Old/vault.c Sun Nov 19 13:19:02 1989 X--- src/vault.c Sat Oct 21 20:52:11 1989 X*************** X*** 147,153 **** X int X gd_move(){ X int x, y, nx, ny; X! int dx, dy, gx, gy, typ, i; X struct fakecorridor *fcp; X register struct rm *crm; X X--- 147,154 ---- X int X gd_move(){ X int x, y, nx, ny; X! int dx, dy, gx, gy, i; X! uchar typ; X struct fakecorridor *fcp; X register struct rm *crm; X X*** src/Old/weapon.c Sun Nov 19 13:19:28 1989 X--- src/weapon.c Sun Nov 19 09:25:40 1989 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)weapon.c 3.0 89/04/24 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: @(#)weapon.c 3.0 89/11/19 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 22,28 **** X { X int tmp = 0; X X! if(otmp->olet == WEAPON_SYM || otmp->otyp == PICK_AXE) X tmp += otmp->spe; X X /* Put weapon specific "to hit" bonuses in below: */ X--- 22,29 ---- X { X int tmp = 0; X X! if(otmp->olet == WEAPON_SYM || otmp->otyp == PICK_AXE X! || otmp->otyp == UNICORN_HORN) X tmp += otmp->spe; X X /* Put weapon specific "to hit" bonuses in below: */ X*************** X*** 75,81 **** X X if(otmp->otyp == CREAM_PIE) return(0); X X! if(bigmonst(ptr)) { X if(objects[otmp->otyp].wldam) X tmp = rnd(objects[otmp->otyp].wldam); X switch (otmp->otyp) { X--- 76,82 ---- X X if(otmp->otyp == CREAM_PIE) return(0); X X! if(ptr->msize >= MZ_HUMAN) { X if(objects[otmp->otyp].wldam) X tmp = rnd(objects[otmp->otyp].wldam); X switch (otmp->otyp) { X*************** X*** 132,138 **** X if (otmp->otyp == BULLWHIP && thick_skinned(ptr)) X /* thick skinned/scaled creatures don't feel it */ X tmp = 0; X! if (otmp->olet == WEAPON_SYM || otmp->otyp == PICK_AXE) X tmp += otmp->spe; X X /* Put weapon vs. monster type damage bonuses in below: */ X--- 133,140 ---- X if (otmp->otyp == BULLWHIP && thick_skinned(ptr)) X /* thick skinned/scaled creatures don't feel it */ X tmp = 0; X! if (otmp->olet == WEAPON_SYM || otmp->otyp == PICK_AXE X! || otmp->otyp == UNICORN_HORN) X tmp += otmp->spe; X X /* Put weapon vs. monster type damage bonuses in below: */ X*************** X*** 256,261 **** X--- 258,264 ---- X /* 0 = used by any monster; 1 = only used by strong monsters */ X static const int hwep[][2] = X { {DWARVISH_MATTOCK,1}, {TWO_HANDED_SWORD,1}, {KATANA,0}, X+ {UNICORN_HORN,1}, X #ifdef WORM X {CRYSKNIFE,0}, X #endif X*************** X*** 281,287 **** X #else /* TOLKIEN */ X /* 0 = used by any monster; 1 = only used by strong monsters */ X static const int hwep[][2] = X! { {TWO_HANDED_SWORD,1}, {KATANA,0}, X #ifdef WORM X {CRYSKNIFE,0}, X #endif X--- 284,290 ---- X #else /* TOLKIEN */ X /* 0 = used by any monster; 1 = only used by strong monsters */ X static const int hwep[][2] = X! { {TWO_HANDED_SWORD,1}, {KATANA,0}, {UNICORN_HORN,1}, X #ifdef WORM X {CRYSKNIFE,0}, X #endif X*************** X*** 336,341 **** X--- 339,349 ---- X else if(ACURR(A_STR) < 69) sbon = 1; /* up to 18/50 */ X else if(ACURR(A_STR) < 118) sbon = 2; X else sbon = 3; X+ /* X+ * Temporary kludge - make it a bit easier for a low level character X+ * to hit until we tune the game a little better. X+ */ X+ sbon += (u.ulevel < 3) ? 2 : (u.ulevel < 5) ? 1 : 0; X X if(ACURR(A_DEX) < 4) return(sbon-3); X else if(ACURR(A_DEX) < 6) return(sbon-2); X*** src/Old/wield.c Sun Nov 19 13:19:57 1989 X--- src/wield.c Thu Oct 19 14:23:32 1989 X*************** X*** 28,34 **** X } X } X X! static const char wield_objs[] = { '#', '-', WEAPON_SYM, 0 }; X X int X dowield() X--- 28,34 ---- X } X } X X! static const char wield_objs[] = { '#', '-', WEAPON_SYM, TOOL_SYM, 0 }; X X int X dowield() X*************** X*** 76,81 **** X--- 76,82 ---- X res++; X if(wep->cursed && (wep->olet == WEAPON_SYM || X wep->otyp == HEAVY_IRON_BALL || wep->otyp == PICK_AXE || X+ wep->otyp == UNICORN_HORN || X wep->otyp == TIN_OPENER)) { X pline("The %s %s to your %s!", X aobjnam(wep, "weld"), X*************** X*** 96,104 **** X } X setuwep(wep); X } X if(res && uwep) X! unweapon = (uwep->otyp >= BOW || uwep->otyp <= BOOMERANG) ? X! TRUE : FALSE; X return(res); X } X X--- 97,108 ---- X } X setuwep(wep); X } X+ /* Note: Explicitly wielding a pick-axe will not give a "bashing" X+ * message. Wielding one via 'a'pplying it will. X+ */ X if(res && uwep) X! unweapon = ((uwep->otyp >= BOW || uwep->otyp <= BOOMERANG) && X! uwep->otyp != PICK_AXE && uwep->otyp != UNICORN_HORN); X return(res); X } X X*************** X*** 182,188 **** X { X if (obj && obj == uwep && obj->cursed && X (obj->olet == WEAPON_SYM || obj->otyp == HEAVY_IRON_BALL || X! obj->otyp == TIN_OPENER || obj->otyp == PICK_AXE)) X { X obj->bknown = 1; X return 1; X--- 186,193 ---- X { X if (obj && obj == uwep && obj->cursed && X (obj->olet == WEAPON_SYM || obj->otyp == HEAVY_IRON_BALL || X! obj->otyp == TIN_OPENER || obj->otyp == PICK_AXE || X! obj->otyp == UNICORN_HORN)) X { X obj->bknown = 1; X return 1; X*** src/Old/worm.c Sun Nov 19 13:20:24 1989 X--- src/worm.c Mon Nov 13 21:23:17 1989 X*************** X*** 142,147 **** X--- 142,151 ---- X newsym(wtmp->wx, wtmp->wy); X wtmp->wdispl = 0; X } X+ else if (cansee(wtmp->wx, wtmp->wy) && !wtmp->wdispl) { X+ atl(wtmp->wx, wtmp->wy, S_WORM_TAIL); X+ wtmp->wdispl = 1; X+ } X } X X void X*** src/Old/worn.c Sun Nov 19 13:20:37 1989 X--- src/worn.c Fri Nov 17 19:32:24 1989 X*************** X*** 1,11 **** X! /* SCCS Id: @(#)worn.c 3.0 88/12/23 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X #include "hack.h" X X! static const char crispy[] = "The flames of Hell burn you to a crisp."; X! static void set_armor_intrinsic P((struct obj *,long,BOOLEAN_P)); X X const struct worn { X long w_mask; X--- 1,11 ---- X! /* SCCS Id: @(#)worn.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 #include "hack.h" X X! static const char crispy[] = "The flames of hell burn you to a crisp."; X! static void FDECL(set_armor_intrinsic, (struct obj *,BOOLEAN_P)); X X const struct worn { X long w_mask; X*************** X*** 49,63 **** X u.uprops[objects[oobj->otyp].oc_oprop].p_flgs = X u.uprops[objects[oobj->otyp].oc_oprop].p_flgs & X ~wp->w_mask; X! set_armor_intrinsic(oobj, wp->w_mask, 0); X } X *(wp->w_obj) = obj; X if(obj) { X obj->owornmask |= wp->w_mask; X! u.uprops[objects[obj->otyp].oc_oprop].p_flgs = X u.uprops[objects[obj->otyp].oc_oprop].p_flgs | X wp->w_mask; X! set_armor_intrinsic(obj, wp->w_mask, 1); X } X } X /* A kludge to solve the problem of someone gaining fire resistance X--- 49,67 ---- X u.uprops[objects[oobj->otyp].oc_oprop].p_flgs = X u.uprops[objects[oobj->otyp].oc_oprop].p_flgs & X ~wp->w_mask; X! set_armor_intrinsic(oobj, 0); X } X *(wp->w_obj) = obj; X if(obj) { X obj->owornmask |= wp->w_mask; X! /* prevent getting intrinsics from wielding potions, etc... */ X! /* wp_mask should be same as mask at this point */ X! if(obj->olet == WEAPON_SYM || mask != W_WEP) { X! u.uprops[objects[obj->otyp].oc_oprop].p_flgs = X u.uprops[objects[obj->otyp].oc_oprop].p_flgs | X wp->w_mask; X! set_armor_intrinsic(obj, 1); X! } X } X } X /* A kludge to solve the problem of someone gaining fire resistance X*************** X*** 98,104 **** X u.uprops[objects[obj->otyp].oc_oprop].p_flgs & X ~wp->w_mask; X obj->owornmask &= ~wp->w_mask; X! set_armor_intrinsic(obj, wp->w_mask, 0); X } X /* See comments above in setworn(). The major difference is the X * need to check AMULET_SYM so if someone goes to Hell without X--- 102,108 ---- X u.uprops[objects[obj->otyp].oc_oprop].p_flgs & X ~wp->w_mask; X obj->owornmask &= ~wp->w_mask; X! set_armor_intrinsic(obj, 0); X } X /* See comments above in setworn(). The major difference is the X * need to check AMULET_SYM so if someone goes to Hell without X*************** X*** 129,137 **** X } X X static void X! set_armor_intrinsic(obj,maskbit,on) X register struct obj *obj; X- long maskbit; /* people can do funny things like wield armor */ X boolean on; X { X long *mask; X--- 133,140 ---- X } X X static void X! set_armor_intrinsic(obj,on) X register struct obj *obj; X boolean on; X { X long *mask; X*************** X*** 163,168 **** X default: X return; X } X! if (on) *mask |= maskbit; X! else *mask &= ~maskbit; X } X--- 166,171 ---- X default: X return; X } X! if (on) *mask |= WORN_ARMOR; X! else *mask &= ~WORN_ARMOR; X } X*** src/Old/zap.c Sun Nov 19 13:21:06 1989 X--- src/zap.c Sat Nov 11 17:59:32 1989 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)zap.c 3.0 88/10/25 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: @(#)zap.c 3.0 89/11/08 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 45,51 **** X X #ifdef TEXTCOLOR X static const int zapcolor[10] = { X! AT_ZAP, RED, AT_ZAP, WHITE, AT_ZAP, WHITE, X AT_ZAP, AT_ZAP, AT_ZAP, AT_ZAP X }; X #endif X--- 45,51 ---- X X #ifdef TEXTCOLOR X static const int zapcolor[10] = { X! AT_ZAP, RED|BRIGHT, AT_ZAP, WHITE|BRIGHT, AT_ZAP, WHITE|BRIGHT, X AT_ZAP, AT_ZAP, AT_ZAP, AT_ZAP X }; X #endif X*************** X*** 52,58 **** X X /* Routines for IMMEDIATE wands and spells. */ X /* bhitm: monster mtmp was hit by the effect of wand or spell otmp */ X! static int X bhitm(mtmp, otmp) X register struct monst *mtmp; X register struct obj *otmp; X--- 52,61 ---- X X /* Routines for IMMEDIATE wands and spells. */ X /* bhitm: monster mtmp was hit by the effect of wand or spell otmp */ X! #ifndef OVERLAY X! static X! #endif X! int X bhitm(mtmp, otmp) X register struct monst *mtmp; X register struct obj *otmp; X*************** X*** 168,188 **** X register struct obj *obj; X boolean ininv; X { X! register struct monst *mtmp; X X if(obj->otyp == CORPSE) { X! int montype,x,y,nl; X! char buf[BUFSZ]; X X- if (nl = obj->onamelth) Strcpy(buf, ONAME(obj)); X- montype = obj->corpsenm; X- if (ininv) { X- x = u.ux; y = u.uy; X- useup(obj); X- } else { X- x = obj->ox; y = obj->oy; X- useupf(obj); X- } X if (cant_create(&montype)) { /* will make zombie instead */ X mtmp = makemon(&mons[PM_HUMAN_ZOMBIE], x, y); X if (mtmp) { X--- 171,183 ---- X register struct obj *obj; X boolean ininv; X { X! register struct monst *mtmp = (struct monst *)0; X X if(obj->otyp == CORPSE) { X! int montype = obj->corpsenm; X! int x = ininv ? u.ux : obj->ox; X! int y = ininv ? u.uy : obj->oy; X X if (cant_create(&montype)) { /* will make zombie instead */ X mtmp = makemon(&mons[PM_HUMAN_ZOMBIE], x, y); X if (mtmp) { X*************** X*** 190,213 **** X mtmp->mspeed = MFAST; X } X } else { X #ifdef ARMY X if (is_mercenary(&mons[montype])) X montype = PM_UNARMORED_SOLDIER; X #endif X! mons[montype].pxlth += nl; X mtmp = makemon(&mons[montype], x, y); X! mons[montype].pxlth -= nl; X if (mtmp) { X /* Monster retains its name */ X! mtmp->mnamelth = nl; X! if (nl) Strcpy(NAME(mtmp), buf); X /* No inventory for newly revived monsters */ X! while(obj = (mtmp->minvent)) { X! mtmp->minvent = obj->nobj; X! free((genericptr_t)obj); X } X } X! } X } X return mtmp; X } X--- 185,214 ---- X mtmp->mspeed = MFAST; X } X } else { X+ struct obj *otmp; X #ifdef ARMY X if (is_mercenary(&mons[montype])) X montype = PM_UNARMORED_SOLDIER; X #endif X! mons[montype].pxlth += obj->onamelth; X mtmp = makemon(&mons[montype], x, y); X! mons[montype].pxlth -= obj->onamelth; X if (mtmp) { X /* Monster retains its name */ X! if (mtmp->mnamelth = obj->onamelth) X! Strcpy(NAME(mtmp), ONAME(obj)); X /* No inventory for newly revived monsters */ X! while(otmp = (mtmp->minvent)) { X! mtmp->minvent = otmp->nobj; X! free((genericptr_t)otmp); X } X } X! } X! if (mtmp && obj->oeaten) X! mtmp->mhp = eaten_stat(mtmp->mhp, obj); X! if (ininv) useup(obj); X! else useupf(obj); X! newsym(x, y); X } X return mtmp; X } X*************** X*** 247,252 **** X--- 248,272 ---- X } X X static int X+ bhitgold(gold, otmp) X+ register struct gold *gold; X+ register struct obj *otmp; X+ { X+ switch(otmp->otyp) { X+ case WAN_TELEPORTATION: X+ #ifdef SPELLS X+ case SPE_TELEPORT_AWAY: X+ #endif X+ rlocgold(gold); X+ break; X+ } X+ return 1; X+ } X+ X+ #ifndef OVERLAY X+ static X+ #endif X+ int X bhito(obj, otmp) /* object obj was hit by the effect of wand otmp */ X register struct obj *obj, *otmp; /* returns TRUE if sth was done */ X { X*************** X*** 294,301 **** X (otmp2->olet == WEAPON_SYM && otmp2->otyp <= SHURIKEN)) X otmp2->opoisoned = 1; X X! /* Turn dragon corpses into dragon armors */ X! if (obj->otyp == CORPSE && obj->corpsenm >= PM_GRAY_DRAGON X && obj->corpsenm <= PM_YELLOW_DRAGON) { X if (!rn2(10)) { /* Random failure */ X otmp2->otyp = TIN; X--- 314,322 ---- X (otmp2->olet == WEAPON_SYM && otmp2->otyp <= SHURIKEN)) X otmp2->opoisoned = 1; X X! if (obj->otyp == CORPSE){ X! /* Turn dragon corpses into dragon armors */ X! if (obj->corpsenm >= PM_GRAY_DRAGON X && obj->corpsenm <= PM_YELLOW_DRAGON) { X if (!rn2(10)) { /* Random failure */ X otmp2->otyp = TIN; X*************** X*** 309,314 **** X--- 330,344 ---- X otmp2->cursed = 0; X } X otmp2->corpsenm = obj->corpsenm; X+ /* and croc corpses into shoes */ X+ } else if (obj->corpsenm == PM_CROCODILE) { X+ otmp2->otyp = LOW_BOOTS; X+ otmp2->olet = ARMOR_SYM; X+ otmp2->spe = 0; X+ otmp2->rustfree = 1; X+ otmp2->quan = 1; X+ otmp2->cursed = 0; X+ } X } X X /* update the weight */ X*************** X*** 732,746 **** X (void)close_drawbridge(u.ux, u.uy); X else X #endif X! if (OBJ_AT(u.ux, u.uy)) { X! register struct obj *otmp,*otmp2; X X! /* changed by GAN to hit all objects there */ X! for(otmp = fobj; otmp ; otmp = otmp2) { X! otmp2 = otmp->nobj; X /* save pointer as bhito may destroy otmp */ X! if(otmp->ox == u.ux && otmp->oy == u.uy) X! (void) bhito(otmp, obj); X } X } X } X--- 762,778 ---- X (void)close_drawbridge(u.ux, u.uy); X else X #endif X! { X! register struct obj *otmp, *otmp2; X X! if(levl[u.ux][u.uy].gmask) X! (void) bhitgold(g_at(u.ux, u.uy), obj); X! for(otmp = level.objects[u.ux][u.uy]; X! otmp; otmp = otmp2) { X! /* changed by GAN to hit all objects there */ X! otmp2 = otmp->nexthere; X /* save pointer as bhito may destroy otmp */ X! (void) bhito(otmp, obj); X } X } X } X*************** X*** 842,852 **** X room->typ == SDOOR) { X room->typ = DOOR; X room->doormask = D_NODOOR; X! if(in_shop(zx,zy)) { X! shopdoor = TRUE; X! dlx = zx; X! dly = zy; X! } X digdepth -= 2; X } else { X room->typ = CORR; X--- 874,881 ---- X room->typ == SDOOR) { X room->typ = DOOR; X room->doormask = D_NODOOR; X! mnewsym(zx, zy); X! if (cansee(zx,zy)) prl(zx, zy); X digdepth -= 2; X } else { X room->typ = CORR; X*************** X*** 857,862 **** X--- 886,893 ---- X else if(room->typ == DOOR && X (room->doormask & (D_LOCKED | D_CLOSED))) { X room->doormask = D_NODOOR; X+ mnewsym(zx, zy); X+ if (cansee(zx,zy)) prl(zx, zy); X if(in_shop(zx,zy)) { X shopdoor = TRUE; X dlx = zx; X*************** X*** 870,876 **** X } X mnewsym(zx,zy); /* not always necessary */ X Tmp_at2(-1,-1); /* closing call */ X! if(shopdoor && !in_shop(u.ux, u.uy)) X pay_for_door(dlx, dly, "destroy"); X break; X } X--- 901,908 ---- X } X mnewsym(zx,zy); /* not always necessary */ X Tmp_at2(-1,-1); /* closing call */ X! if(!Blind) prl(u.ux+u.dx, u.uy+u.dy); X! if(shopdoor) X pay_for_door(dlx, dly, "destroy"); X break; X } X*************** X*** 907,915 **** X X void X hit(str,mtmp,force) X! register char *str; X register struct monst *mtmp; X! register char *force; /* usually either "." or "!" */ X { X if(!cansee(mtmp->mx,mtmp->my) || !flags.verbose) pline("The %s hits it.", str); X else pline("The %s hits %s%s", str, mon_nam(mtmp), force); X--- 939,947 ---- X X void X hit(str,mtmp,force) X! register const char *str; X register struct monst *mtmp; X! register const char *force; /* usually either "." or "!" */ X { X if(!cansee(mtmp->mx,mtmp->my) || !flags.verbose) pline("The %s hits it.", str); X else pline("The %s hits %s%s", str, mon_nam(mtmp), force); X*************** X*** 917,923 **** X X void X miss(str,mtmp) X! register char *str; X register struct monst *mtmp; X { X pline("The %s misses %s.", str, X--- 949,955 ---- X X void X miss(str,mtmp) X! register const char *str; X register struct monst *mtmp; X { X pline("The %s misses %s.", str, X*************** X*** 941,947 **** X { X register struct monst *mtmp; X register struct obj *otmp; X! register int typ; X boolean shopdoor = FALSE; X xchar dlx, dly; X X--- 973,979 ---- X { X register struct monst *mtmp; X register struct obj *otmp; X! register uchar typ; X boolean shopdoor = FALSE; X xchar dlx, dly; X X*************** X*** 995,1011 **** X range -= 3; X } X /* modified by GAN to hit all objects */ X! if(fhito && OBJ_AT(bhitpos.x, bhitpos.y)){ X int hitanything = 0; X! otmp = fobj; X! /* Fix for polymorph bug, Tim Wright */ X! while(otmp) { /* was a "for" loop. */ X! register struct obj *next_obj; X X! next_obj = otmp->nobj; X! if(otmp->ox == bhitpos.x && otmp->oy == bhitpos.y) X! hitanything += (*fhito)(otmp, obj); X! otmp = next_obj; X } X if(hitanything) range--; X } X--- 1027,1043 ---- X range -= 3; X } X /* modified by GAN to hit all objects */ X! if(fhito){ X int hitanything = 0; X! register struct obj *next_obj; X X! if((fhito == bhito) && levl[bhitpos.x][bhitpos.y].gmask) X! hitanything += bhitgold(g_at(bhitpos.x,bhitpos.y),obj); X! for(otmp = level.objects[bhitpos.x][bhitpos.y]; X! otmp; otmp = next_obj) { X! /* Fix for polymorph bug, Tim Wright */ X! next_obj = otmp->nexthere; X! hitanything += (*fhito)(otmp, obj); X } X if(hitanything) range--; X } X*************** X*** 1049,1055 **** X if(sym) X tmp_at(-1, is_pool(bhitpos.x,bhitpos.y) ? -1 : 0); X X! if(shopdoor && !in_shop(u.ux, u.uy)) X pay_for_door(dlx, dly, "destroy"); X X return (struct monst *)0; X--- 1081,1087 ---- X if(sym) X tmp_at(-1, is_pool(bhitpos.x,bhitpos.y) ? -1 : 0); X X! if(shopdoor) X pay_for_door(dlx, dly, "destroy"); X X return (struct monst *)0; X*************** X*** 1216,1237 **** X register struct obj *obj, *obj2; X register int scrquan, i, cnt = 0; X X! if(OBJ_AT(x, y)) X! for(obj = fobj; obj; obj = obj2) { X! obj2 = obj->nobj; X /* Bug fix - KAA */ X- if(obj->ox == x && obj->oy == y && X #ifdef SPELLS X! (obj->olet == SCROLL_SYM || obj->olet == SPBOOK_SYM)) { X #else X! obj->olet == SCROLL_SYM) { X #endif X scrquan = obj->quan; X for(i = 1; i <= scrquan ; i++) X if(!rn2(3)) { X cnt++; X- if(in_shop(u.ux, u.uy)) X- addtobill(obj, FALSE); X useupf(obj); X } X } X--- 1248,1265 ---- X register struct obj *obj, *obj2; X register int scrquan, i, cnt = 0; X X! for(obj = level.objects[x][y]; obj; obj = obj2) { X! obj2 = obj->nexthere; X /* Bug fix - KAA */ X #ifdef SPELLS X! if((obj->olet == SCROLL_SYM || obj->olet == SPBOOK_SYM)) { X #else X! if(obj->olet == SCROLL_SYM) { X #endif X scrquan = obj->quan; X for(i = 1; i <= scrquan ; i++) X if(!rn2(3)) { X cnt++; X useupf(obj); X } X } X*************** X*** 1252,1258 **** X register int dx,dy; X { X int abstype = abs(type) % 10; X! register char *fltxt = fl[abs(type)]; X struct rm *lev; X xchar range, olx, oly; X struct monst *mon; X--- 1280,1286 ---- X register int dx,dy; X { X int abstype = abs(type) % 10; X! register const char *fltxt = fl[abs(type)]; X struct rm *lev; X xchar range, olx, oly; X struct monst *mon; X*************** X*** 1307,1313 **** X Tmp_at2(-2,(int) dirlet(dx,dy)); X continue; X } X! if(is_pool(sx,sy) && abstype == 1 /* fire */) { X #ifdef STRONGHOLD X if(lev->typ != POOL) { /* MOAT or DRAWBRIDGE_UP */ X if(cansee(sx,sy)) X--- 1335,1348 ---- X Tmp_at2(-2,(int) dirlet(dx,dy)); X continue; X } X! if(abstype == 1 /* fire */ && X! (is_pool(sx,sy) || (lev->typ == ROOM && lev->icedpool))) { X! if(lev->typ == ROOM) { X! lev->typ = (lev->icedpool == ICED_POOL ? POOL : MOAT); X! lev->icedpool = 0; X! pline("The ice crackles and melts."); X! mnewsym(sx,sy); X! } else { X #ifdef STRONGHOLD X if(lev->typ != POOL) { /* MOAT or DRAWBRIDGE_UP */ X if(cansee(sx,sy)) X*************** X*** 1329,1345 **** X #ifdef STRONGHOLD X } X #endif X } X! if(is_pool(sx,sy) && abstype == 3 /* cold */) { X boolean moat = (lev->typ != POOL); X X range -= 3; X #ifdef STRONGHOLD X! if(lev->typ == DRAWBRIDGE_UP) X! lev->drawbridgemask |= DB_FLOOR; X! else X #endif X lev->typ = ROOM; X mnewsym(sx,sy); X if(cansee(sx,sy)) { X if(moat) X--- 1364,1385 ---- X #ifdef STRONGHOLD X } X #endif X+ } X } X! if(abstype == 3 /* cold */ && is_pool(sx,sy)) { X boolean moat = (lev->typ != POOL); X X range -= 3; X #ifdef STRONGHOLD X! if(lev->typ == DRAWBRIDGE_UP) { X! lev->drawbridgemask |= DB_ICE; X! } else { X #endif X lev->typ = ROOM; X+ lev->icedpool = (moat ? ICED_MOAT : ICED_POOL); X+ #ifdef STRONGHOLD X+ } X+ #endif X mnewsym(sx,sy); X if(cansee(sx,sy)) { X if(moat) X*************** X*** 1353,1360 **** X switch(abstype) { X case 1: X lev->doormask = D_NODOOR; X! if(cansee(sx,sy)) X pline("The door is consumed in flames!"); X else You("smell smoke."); X if(type >= 0 && in_shop(sx, sy)) { X shopdoor = TRUE; X--- 1393,1403 ---- X switch(abstype) { X case 1: X lev->doormask = D_NODOOR; X! mnewsym(sx,sy); X! if(cansee(sx,sy)) { X pline("The door is consumed in flames!"); X+ prl(sx,sy); X+ } X else You("smell smoke."); X if(type >= 0 && in_shop(sx, sy)) { X shopdoor = TRUE; X*************** X*** 1364,1371 **** X break; X case 3: X lev->doormask = D_NODOOR; X! if(cansee(sx,sy)) X pline("The door freezes and shatters!"); X else You("feel cold."); X if(type >= 0 && in_shop(sx, sy)) { X shopdoor = TRUE; X--- 1407,1417 ---- X break; X case 3: X lev->doormask = D_NODOOR; X! mnewsym(sx,sy); X! if(cansee(sx,sy)) { X pline("The door freezes and shatters!"); X+ prl(sx,sy); X+ } X else You("feel cold."); X if(type >= 0 && in_shop(sx, sy)) { X shopdoor = TRUE; X*************** X*** 1375,1382 **** X break; X case 4: X lev->doormask = D_NODOOR; X! if(cansee(sx,sy)) X pline("The door disintegrates!"); X else if(flags.soundok) X You("hear a crashing sound."); X if(type >= 0 && in_shop(sx, sy)) { X--- 1421,1431 ---- X break; X case 4: X lev->doormask = D_NODOOR; X! mnewsym(sx,sy); X! if(cansee(sx,sy)) { X pline("The door disintegrates!"); X+ prl(sx,sy); X+ } X else if(flags.soundok) X You("hear a crashing sound."); X if(type >= 0 && in_shop(sx, sy)) { X*************** X*** 1387,1394 **** X break; X case 5: X lev->doormask = D_BROKEN; X! if(cansee(sx,sy)) X pline("The door splinters!"); X else if(flags.soundok) X You("hear a crackling sound."); X if(type >= 0 && in_shop(sx, sy)) { X--- 1436,1446 ---- X break; X case 5: X lev->doormask = D_BROKEN; X! mnewsym(sx,sy); X! if(cansee(sx,sy)) { X pline("The door splinters!"); X+ prl(sx,sy); X+ } X else if(flags.soundok) X You("hear a crackling sound."); X if(type >= 0 && in_shop(sx, sy)) { X*************** X*** 1590,1596 **** X stop_occupation(); X } X if(!ZAP_POS(lev->typ)) { X! int bounce = 0, rmn; X if(cansee(sx,sy)) pline("The %s bounces!", fltxt); X range--; X if(!dx || !dy || !rn2(20)){ X--- 1642,1649 ---- X stop_occupation(); X } X if(!ZAP_POS(lev->typ)) { X! int bounce = 0; X! uchar rmn; X if(cansee(sx,sy)) pline("The %s bounces!", fltxt); X range--; X if(!dx || !dy || !rn2(20)){ X*************** X*** 1627,1632 **** X--- 1680,1706 ---- X abstype == 3 ? "shatter" : X abstype == 4 ? "disintegrate" : X "destroy"); X+ } X+ X+ void X+ rlocgold(gold) X+ register struct gold *gold; X+ { X+ register int tx, ty, otx, oty; X+ long val = gold->amount; X+ X+ otx = gold->gx; X+ oty = gold->gy; X+ do { X+ tx = rn1(COLNO-3,2); X+ ty = rn2(ROWNO); X+ } while(!goodpos(tx,ty,(struct permonst *)0)); X+ freegold(g_at(otx,oty)); X+ mkgold(val, tx, ty); X+ if(cansee(otx,oty)) X+ newsym(otx,oty); X+ if(cansee(tx,ty)) X+ newsym(tx,ty); X } X X void END_OF_FILE if test 52555 -ne `wc -c <'patches06l'`; then echo shar: \"'patches06l'\" unpacked with wrong size! fi # end of 'patches06l' fi echo shar: End of archive 12 \(of 15\). cp /dev/null ark12isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 15 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