billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 9, Issue 2 Archive-name: NetHack3/Patch7b 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 2 (of 30)." # Contents: patch7.06 # Wrapped by billr@saab on Wed Feb 21 10:04:23 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patch7.06' -a "${1}" != "-c" ; then echo shar: Renaming existing file \"'patch7.06'\" to \"'patch7.06.orig'\" mv -f 'patch7.06' 'patch7.06.orig' fi echo shar: Extracting \"'patch7.06'\" \(57309 characters\) sed "s/^X//" >'patch7.06' <<'END_OF_FILE' X*** src/Old/potion.c Mon Feb 19 18:51:51 1990 X--- src/potion.c Sun Feb 18 11:46:24 1990 X*************** X*** 4,14 **** X--- 4,27 ---- X X #include "hack.h" X X+ #ifdef OVLB X static int nothing, unkn; X+ #endif /* OVLB */ X+ X #ifdef WORM X+ X+ extern boolean notonhead; X+ X+ #ifdef OVLB X+ X boolean notonhead = FALSE; X+ X+ #endif /* OVLB */ X+ X #endif X X+ #ifdef OVLB X+ X static const char beverages[] = { POTION_SYM, 0 }; X X void X*************** X*** 128,136 **** X if (!Blind && talk) pline("Everything looks SO boring now."); X for (mtmp=fmon; mtmp; mtmp=mtmp->nmon) X if (showmon(mtmp)) X! atl(mtmp->mx, mtmp->my, (!mtmp->mappearance || X Protection_from_shape_changers) X! ? mtmp->data->mlet : mtmp->mappearance); X flags.botl = 1; X } X if (xtime && !old ) { X--- 141,149 ---- X if (!Blind && talk) pline("Everything looks SO boring now."); X for (mtmp=fmon; mtmp; mtmp=mtmp->nmon) X if (showmon(mtmp)) X! atl(mtmp->mx, mtmp->my, (!mtmp->m_ap_type || X Protection_from_shape_changers) X! ? mtmp->data->mlet : (char) mimic_appearance(mtmp)); X flags.botl = 1; X } X if (xtime && !old ) { X*************** X*** 159,164 **** X--- 172,181 ---- X dodrink() { X register struct obj *otmp; X X+ if (Strangled) { X+ pline("If you can't breathe air, how can you drink liquid?"); X+ return 0; X+ } X #ifdef FOUNTAINS X /* Is there a fountain to drink from here? */ X if (IS_FOUNTAIN(levl[u.ux][u.uy].typ)) { X*************** X*** 271,277 **** X u.ualigntyp == U_CHAOTIC) { X if(otmp->blessed) { X pline("This burns like acid!"); X! losehp(d(2,6), "potion of holy water"); X } else if(otmp->cursed) { X You("feel quite proud of yourself."); X healup(d(2,6),0,0,0); X--- 288,301 ---- X u.ualigntyp == U_CHAOTIC) { X if(otmp->blessed) { X pline("This burns like acid!"); X! if (u.ulycn != -1) { X! Your("affinity to %s disappears!", X! makeplural(mons[u.ulycn].mname)); X! if(uasmon == &mons[u.ulycn] && !Polymorph_control) X! rehumanize(); X! u.ulycn = -1; X! } X! losehp(d(2,6), "potion of holy water", KILLED_BY_AN); X } else if(otmp->cursed) { X You("feel quite proud of yourself."); X healup(d(2,6),0,0,0); X*************** X*** 293,299 **** X } else { X if(u.ualigntyp == U_LAWFUL) { X pline("This burns like acid!"); X! losehp(d(2,6), "potion of unholy water"); X } else X You("feel full of dread."); X } X--- 317,324 ---- X } else { X if(u.ualigntyp == U_LAWFUL) { X pline("This burns like acid!"); X! losehp(d(2,6), "potion of unholy water", X! KILLED_BY_AN); X } else X You("feel full of dread."); X } X*************** X*** 304,310 **** X Hallucination ? "furniture polish" : "liquid fire"); X if (!otmp->blessed) make_confused(HConfusion + d(3,8),FALSE); X /* the whiskey makes us feel better */ X! if(u.uhp < u.uhpmax) losehp(-1, "bottle of whiskey"); X lesshungry(10 * (2 + bcsign(otmp))); X if(otmp->cursed) { X You("pass out."); X--- 329,335 ---- X Hallucination ? "furniture polish" : "liquid fire"); X if (!otmp->blessed) make_confused(HConfusion + d(3,8),FALSE); X /* the whiskey makes us feel better */ X! if(u.uhp < u.uhpmax) losehp(-1, "", 0); /* can't kill you */ X lesshungry(10 * (2 + bcsign(otmp))); X if(otmp->cursed) { X You("pass out."); X*************** X*** 340,349 **** X--- 365,382 ---- X You("feel rather airy."), unkn++; X } X if (otmp->blessed && !(HInvis & INTRINSIC)) { X+ #ifndef MACOS X pline("Do you want the invisibility to be permanent? "); X nothing = 0; X if (yn()=='n') HInvis += rn1(15,31); X else HInvis |= INTRINSIC; X+ #else X+ nothing = 0; X+ if (UseMacAlertText(128, X+ "Do you want the invisibility to be permanent ?") X+ == 2) HInvis += rn1(15,31); X+ else HInvis |= INTRINSIC; X+ #endif X } else HInvis += rn1(15,31); X if(otmp->cursed) { X pline("For some reason, you feel your presence is known."); X*************** X*** 411,417 **** X pline("(But in fact it was mildly stale orange juice.)"); X #endif X if (pl_character[0] != 'H') X! losehp(1, "mildly contaminated potion"); X } else { X if(Poison_resistance) X #ifdef TUTTI_FRUTTI X--- 444,451 ---- X pline("(But in fact it was mildly stale orange juice.)"); X #endif X if (pl_character[0] != 'H') X! losehp(1, "mildly contaminated potion", X! KILLED_BY_AN); X } else { X if(Poison_resistance) X #ifdef TUTTI_FRUTTI X*************** X*** 427,433 **** X adjattrib(typ,Poison_resistance ? -1 : -rn1(4,3), TRUE); X if(!Poison_resistance) X losehp(rnd(10)+5*!!(otmp->cursed), X! "contaminated potion"); X } X } X if(Hallucination) { X--- 461,467 ---- X adjattrib(typ,Poison_resistance ? -1 : -rn1(4,3), TRUE); X if(!Poison_resistance) X losehp(rnd(10)+5*!!(otmp->cursed), X! "contaminated potion", KILLED_BY_AN); X } X } X if(Hallucination) { X*************** X*** 526,532 **** X You("hit your %s on the ceiling.", X body_part(HEAD)); X losehp(uarmh ? 1 : rnd(10), X! "collision with the ceiling"); X } else (void) doup(); X } X } else X--- 560,567 ---- X You("hit your %s on the ceiling.", X body_part(HEAD)); X losehp(uarmh ? 1 : rnd(10), X! "colliding with the ceiling", X! KILLED_BY); X } else (void) doup(); X } X } else X*************** X*** 591,597 **** X void X strange_feeling(obj,txt) X register struct obj *obj; X! register char *txt; X { X if(flags.beginner) X You("have a %s feeling for a moment, then it passes.", X--- 626,632 ---- X void X strange_feeling(obj,txt) X register struct obj *obj; X! register const char *txt; X { X if(flags.beginner) X You("have a %s feeling for a moment, then it passes.", X*************** X*** 617,623 **** X register struct monst *mon; X register struct obj *obj; X { X! register char *botlnam = bottlenames[rn2(SIZE(bottlenames))]; X boolean uclose, isyou = (mon == &youmonst); X X if(isyou) { X--- 652,658 ---- X register struct monst *mon; X register struct obj *obj; X { X! register const char *botlnam = bottlenames[rn2(SIZE(bottlenames))]; X boolean uclose, isyou = (mon == &youmonst); X X if(isyou) { X*************** X*** 624,630 **** X uclose = TRUE; X pline("The %s crashes on your %s and breaks into shivers.", X botlnam, body_part(HEAD)); X! losehp(rnd(2), "thrown potion"); X } else { X uclose = (dist(mon->mx,mon->my) < 3); X if(Blind) pline("Crash!"); X--- 659,665 ---- X uclose = TRUE; X pline("The %s crashes on your %s and breaks into shivers.", X botlnam, body_part(HEAD)); X! losehp(rnd(2), "thrown potion", KILLED_BY_AN); X } else { X uclose = (dist(mon->mx,mon->my) < 3); X if(Blind) pline("Crash!"); X*************** X*** 675,684 **** X pmon(mon); X break; X case POT_PARALYSIS: X! mon->mfroz = 1; X break; X case POT_SPEED: X! mon->mspeed = MFAST; X break; X case POT_BLINDNESS: X { X--- 710,726 ---- X pmon(mon); X break; X case POT_PARALYSIS: X! if (mon->mcanmove) { X! mon->mcanmove = 0; X! /* really should be rnd(5) for consistency with players X! * breathing potions, but... X! */ X! mon->mfrozen = rnd(25); X! } X break; X case POT_SPEED: X! if (mon->mspeed == MSLOW) mon->mspeed = 0; X! else mon->mspeed = MFAST; X break; X case POT_BLINDNESS: X { X*************** X*** 685,690 **** X--- 727,733 ---- X register int btmp = 64 + rn2(32) + X rn2(32) * !resist(mon, POTION_SYM, 0, NOTELL); X mon->mblinded |= btmp; X+ mon->mcansee = 0; X } X break; X case POT_WATER: X*************** X*** 857,863 **** X dodip() X { X register struct obj *potion, *obj; X! char *tmp; X uchar here; X X if(!(obj = getobj("#", "dip"))) X--- 900,906 ---- X dodip() X { X register struct obj *potion, *obj; X! const char *tmp; X uchar here; X X if(!(obj = getobj("#", "dip"))) X*************** X*** 919,925 **** X if (obj->blessed) { X if (!Blind) X Your("%s %s.", aobjnam(obj, "glow"), X! Hallucination ? hcolor() : "brown"); X obj->blessed=0; X obj->bknown=1; X goto poof; X--- 962,968 ---- X if (obj->blessed) { X if (!Blind) X Your("%s %s.", aobjnam(obj, "glow"), X! Hallucination ? hcolor() : (const char *)"brown"); X obj->blessed=0; X obj->bknown=1; X goto poof; X*************** X*** 1014,1020 **** X if(obj->otyp == UNICORN_HORN && neutralizes(obj, potion)) { X pline("The potion clears."); X potion->otyp = POT_WATER; X! potion->blessed = potion->cursed = 0; X return(1); X } X X--- 1057,1064 ---- X if(obj->otyp == UNICORN_HORN && neutralizes(obj, potion)) { X pline("The potion clears."); X potion->otyp = POT_WATER; X! potion->blessed = 0; X! potion->cursed = 0; X return(1); X } X X*************** X*** 1087,1094 **** X at(mtmp->mx, mtmp->my, X (uchar)(Hallucination ? rndmonsym() : mtmp->data->mlet), X AT_MON); X! if (otmp && otmp->cursed && (mtmp->msleep || mtmp->mfroz)) { X! mtmp->msleep = mtmp->mfroz = 0; X woken = TRUE; X } X } X--- 1131,1139 ---- X at(mtmp->mx, mtmp->my, X (uchar)(Hallucination ? rndmonsym() : mtmp->data->mlet), X AT_MON); X! if (otmp && otmp->cursed && (mtmp->msleep || !mtmp->mcanmove)) { X! mtmp->msleep = mtmp->mfrozen = 0; X! mtmp->mcanmove = 1; X woken = TRUE; X } X } X*************** X*** 1102,1107 **** X--- 1147,1155 ---- X return(0); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X /* object_detect is also used in the crystal ball routine */ X /* returns 1 if nothing was detected */ X /* returns 0 if something was detected */ X*************** X*** 1111,1155 **** X { X register struct obj *objs; X register struct monst *mtmp; X X if(!fobj) { X! if (otmp) X! strange_feeling(otmp, "You feel a pull downward."); X! return(1); X! } else { X! int mfound=FALSE; X! X! for(objs = fobj; objs; objs = objs->nobj) X! if(objs->ox != u.ux || objs->oy != u.uy) X! goto outobjmap; X! You("sense the presence of objects nearby."); X! return(0); X! outobjmap: X! cls(); X! for(objs = fobj; objs; objs = objs->nobj) X at(objs->ox, objs->oy, (uchar)(Hallucination ? rndobjsym() : objs->olet), AT_OBJ); X! /* monster possessions added by GAN 12/16/86 */ X! for(mtmp = fmon ; mtmp ; mtmp = mtmp->nmon) X! if(mtmp->minvent) X! for(objs = mtmp->minvent;objs;objs = objs->nobj) X! at(mtmp->mx, mtmp->my, (uchar)objs->olet, AT_OBJ); X! if (otmp && otmp->cursed) { X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { X! if (mtmp->mimic) { X! mnexto(mtmp); X! mfound = TRUE; X! } X } X } X- prme(); X- You("sense the presence of objects."); X- if (mfound) pline("Objects sense the presence of you."); X- more(); X- docrt(); X } X return(0); X } X X /* the detections are pulled out so they can */ X /* also be used in the crystal ball routine */ X /* returns 1 if nothing was detected */ X--- 1159,1214 ---- X { X register struct obj *objs; X register struct monst *mtmp; X+ boolean mfound=FALSE; X X if(!fobj) { X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { X! if (mtmp->minvent) { X! /* OK, it's used for 2 different things */ X! mfound = TRUE; X! break; X! } X! } X! if (!mfound) { X! if (otmp) X! strange_feeling(otmp, "You feel a pull downward."); X! return(1); X! } X! } X! mfound = FALSE; X! for(objs = fobj; objs; objs = objs->nobj) X! if(objs->ox != u.ux || objs->oy != u.uy) X! goto outobjmap; X! You("sense the presence of objects nearby."); X! return(0); X! outobjmap: X! cls(); X! for(objs = fobj; objs; objs = objs->nobj) X at(objs->ox, objs->oy, (uchar)(Hallucination ? rndobjsym() : objs->olet), AT_OBJ); X! /* monster possessions added by GAN 12/16/86 */ X! for(mtmp = fmon ; mtmp ; mtmp = mtmp->nmon) X! if(mtmp->minvent) X! for(objs = mtmp->minvent;objs;objs = objs->nobj) X! at(mtmp->mx, mtmp->my, (uchar)objs->olet, AT_OBJ); X! if (otmp && otmp->cursed) { X! for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { X! if (mtmp->mimic) { X! mnexto(mtmp); X! mfound = TRUE; X } X } X } X+ prme(); X+ You("sense the presence of objects."); X+ if (mfound) pline("Objects sense the presence of you."); X+ more(); X+ docrt(); X return(0); X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X /* the detections are pulled out so they can */ X /* also be used in the crystal ball routine */ X /* returns 1 if nothing was detected */ X*************** X*** 1220,1222 **** X--- 1279,1283 ---- X docrt(); X return(0); X } X+ X+ #endif /* OVLB */ X*** src/Old/pray.c Mon Feb 19 18:52:47 1990 X--- src/pray.c Wed Feb 7 18:37:36 1990 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)pray.c 3.0 89/01/10 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ X /* NetHack may be freely redistributed. See license for details. */ X--- 1,4 ---- X! /* SCCS Id: @(#)pray.c 3.0 89/11/20 X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ X /* NetHack may be freely redistributed. See license for details. */ X*************** X*** 6,18 **** X #include "hack.h" X X #ifdef THEOLOGY X X #define ALIGNLIM (5L + (moves/200L)) X X struct ghods { X- X char classlet; X! char *law, *balance, *chaos; X } gods[] = { X X 'A', /* Central American */ "Quetzalcotl", "Camaxtli", "Huhetotl", X--- 6,23 ---- X #include "hack.h" X X #ifdef THEOLOGY X+ static int NDECL(in_trouble); X+ static void FDECL(fix_worst_trouble,(int)); X+ static void NDECL(angrygods); X+ static void NDECL(pleased); X+ static void NDECL(gods_upset); X+ static void FDECL(consume_offering,(struct obj *)); X X #define ALIGNLIM (5L + (moves/200L)) X X struct ghods { X char classlet; X! const char *law, *balance, *chaos; X } gods[] = { X X 'A', /* Central American */ "Quetzalcotl", "Camaxtli", "Huhetotl", X*************** X*** 159,165 **** X { X int i; X struct obj *otmp = (struct obj *)0; X! char *what = NULL; X X u.ublesscnt += rnz(100); X switch (trouble) { X--- 164,170 ---- X { X int i; X struct obj *otmp = (struct obj *)0; X! const char *what = NULL; X X u.ublesscnt += rnz(100); X switch (trouble) { X*************** X*** 187,193 **** X pline("%s glow surrounds you.", X An(Hallucination ? hcolor() : golden)); X } else You("feel much better."); X! u.uhp = u.uhpmax += 5; X flags.botl = 1; X break; X case TROUBLE_STUCK_IN_WALL: X--- 192,201 ---- X pline("%s glow surrounds you.", X An(Hallucination ? hcolor() : golden)); X } else You("feel much better."); X! if (u.uhpmax < u.ulevel * 5 + 11) X! u.uhp = u.uhpmax += rnd(5); X! else X! u.uhp = u.uhpmax; X flags.botl = 1; X break; X case TROUBLE_STUCK_IN_WALL: X*************** X*** 207,217 **** X what = rightglow; X } X goto decurse; X- break; X case TROUBLE_CURSED_BLINDFOLD: X otmp = ublindf; X goto decurse; X- break; X case TROUBLE_PUNISHED: X Your("chain disappears."); X unpunish(); X--- 215,223 ---- X*************** X*** 261,268 **** X otmp->bknown = 1; X if (!Blind) X Your("%s %s.", X! what ? what : aobjnam (otmp, "softly glow"), X! Hallucination ? hcolor() : amber); X break; X case TROUBLE_HALLUCINATION: X pline ("Looks like you are back in Kansas."); X--- 267,274 ---- X otmp->bknown = 1; X if (!Blind) X Your("%s %s.", X! what ? what : (const char *)aobjnam (otmp, "softly glow"), X! Hallucination ? hcolor() : amber); X break; X case TROUBLE_HALLUCINATION: X pline ("Looks like you are back in Kansas."); X*************** X*** 269,275 **** X make_hallucinated(0L,FALSE); X break; X case TROUBLE_BLIND: X! pline ("Your %s feel better.", makeplural(body_part(EYE))); X make_blinded(0L,FALSE); X break; X case TROUBLE_POISONED: X--- 275,281 ---- X make_hallucinated(0L,FALSE); X break; X case TROUBLE_BLIND: X! Your("%s feel better.", makeplural(body_part(EYE))); X make_blinded(0L,FALSE); X break; X case TROUBLE_POISONED: X*************** X*** 304,310 **** X X /* changed from tmp = u.ugangr + abs (u.uluck) -- rph */ X tmp = 3*u.ugangr + X! (u.uluck > 0 || u.ualign > 3 ? -u.uluck/3 : -u.uluck); X if (tmp < 0) tmp = 0; /* possible if bad alignment but good luck */ X tmp = (tmp > 15 ? 15 : tmp); /* lets be a little reasonable */ X switch (tmp ? rn2(tmp): 0) { X--- 310,316 ---- X X /* changed from tmp = u.ugangr + abs (u.uluck) -- rph */ X tmp = 3*u.ugangr + X! (Luck > 0 || u.ualign > 3 ? -Luck/3 : -Luck); X if (tmp < 0) tmp = 0; /* possible if bad alignment but good luck */ X tmp = (tmp > 15 ? 15 : tmp); /* lets be a little reasonable */ X switch (tmp ? rn2(tmp): 0) { X*************** X*** 323,339 **** X break; X case 2: X case 3: X # ifdef POLYSELF X! pline("A voice booms out: \"Thou %s, %s.\"", X ugod_is_angry() ? "hast strayed from the path" : X "art arrogant", X u.usym == S_HUMAN ? "mortal" : "creature"); X # else X! pline("A voice booms out: \"Thou %s, mortal.\"", X ugod_is_angry() ? "hast strayed from the path" : X "art arrogant"); X # endif X! pline("\"Thou must relearn thy lessons!\""); X adjattrib(A_WIS, -1, FALSE); X if (u.ulevel > 1) { X losexp(); X--- 329,346 ---- X break; X case 2: X case 3: X+ pline("A voice thunders:"); X # ifdef POLYSELF X! pline("\"Thou %s, %s.\"", X ugod_is_angry() ? "hast strayed from the path" : X "art arrogant", X u.usym == S_HUMAN ? "mortal" : "creature"); X # else X! pline("\"Thou %s, mortal.\"", X ugod_is_angry() ? "hast strayed from the path" : X "art arrogant"); X # endif X! verbalize("Thou must relearn thy lessons!"); X adjattrib(A_WIS, -1, FALSE); X if (u.ulevel > 1) { X losexp(); X*************** X*** 355,366 **** X rndcurse(); X break; X case 7: X! case 8: pline("A voice booms out: \"Thou durst call upon me?\""); X # ifdef POLYSELF X pline("\"Then die, %s!\"", X u.usym == S_HUMAN ? "mortal" : "creature"); X # else X! pline("\"Then die, mortal!\""); X # endif X (void) makemon(&mons[ndemon()], u.ux, u.uy); X break; X--- 362,374 ---- X rndcurse(); X break; X case 7: X! case 8: pline("A voice booms out:"); X! verbalize("Thou durst call upon me?"); X # ifdef POLYSELF X pline("\"Then die, %s!\"", X u.usym == S_HUMAN ? "mortal" : "creature"); X # else X! verbalize("Then die, mortal!"); X # endif X (void) makemon(&mons[ndemon()], u.ux, u.uy); X break; X*************** X*** 389,399 **** X ohno: X if (Disint_resistance) { X You("bask in the disintegration beam for a minute..."); X! pline("A voice rings out: \"I believe it not!\""); X break; X } X } X You("fry to a crisp."); X killer = "holy wrath"; X done(DIED); X break; X--- 397,409 ---- X ohno: X if (Disint_resistance) { X You("bask in the disintegration beam for a minute..."); X! pline("A voice rings out:"); X! verbalize("I believe it not!"); X break; X } X } X You("fry to a crisp."); X+ killer_format = KILLED_BY_AN; X killer = "holy wrath"; X done(DIED); X break; X*************** X*** 438,448 **** X if (!trouble) pat_on_head = 1; X else { X #ifdef ALTARS X! int action = rn1(on_altar() ? 3 + on_shrine() : 2, u.uluck+1); X X if (!on_altar()) action = max(action,2); X #else X! int action = rn1(4,u.uluck+1); X #endif X X switch(min(action,5)) { X--- 448,458 ---- X if (!trouble) pat_on_head = 1; X else { X #ifdef ALTARS X! int action = rn1(on_altar() ? 3 + on_shrine() : 2, Luck+1); X X if (!on_altar()) action = max(action,2); X #else X! int action = rn1(4,Luck+1); X #endif X X switch(min(action,5)) { X*************** X*** 461,467 **** X } X X if(pat_on_head) X! switch(rn2((u.uluck + 6)>>1)) { X X case 0: break; X case 1: X--- 471,477 ---- X } X X if(pat_on_head) X! switch(rn2((Luck + 6)>>1)) { X X case 0: break; X case 1: X*************** X*** 486,495 **** X break; X case 3: X #if defined(STRONGHOLD) && defined(MUSIC) X! /* takes 2 hints to get the music to enter the Stronghold */ X if (flags.soundok) { X if(music_heard < 1) { X! pline("A voice booms out: \"Hark, mortal!\""); X verbalize("To enter the castle, thou must play the right tune!"); X music_heard++; X break; X--- 496,511 ---- X break; X case 3: X #if defined(STRONGHOLD) && defined(MUSIC) X! /* takes 2 hints to get the music to enter the stronghold */ X if (flags.soundok) { X if(music_heard < 1) { X! pline("A voice rings out:"); X! # ifdef POLYSELF X! pline("\"Hark, %s!\"", X! u.usym == S_HUMAN ? "mortal" : "creature"); X! # else X! verbalize("Hark, mortal!"); X! # endif X verbalize("To enter the castle, thou must play the right tune!"); X music_heard++; X break; X*************** X*** 532,539 **** X } X case 5: X { X! char *msg="\"and thus I grant thee the gift of %s!\""; X! pline("A voice booms out: \"Thou hast pleased me with thy progress,\""); X if (!(HTelepat & INTRINSIC)) { X HTelepat |= INTRINSIC; X pline(msg, "Telepathy"); X--- 548,556 ---- X } X case 5: X { X! const char *msg="\"and thus I grant thee the gift of %s!\""; X! pline("A voice booms out:"); X! verbalize("Thou hast pleased me with thy progress,"); X if (!(HTelepat & INTRINSIC)) { X HTelepat |= INTRINSIC; X pline(msg, "Telepathy"); X*************** X*** 550,559 **** X } else u.ublessed++; X pline(msg, "my protection"); X } X! pline ("\"Use it wisely in my name!\""); X break; X } X case 7: X #ifdef ELBERETH X if (u.ualign > 3 && !u.uhand_of_elbereth) { X u.uhand_of_elbereth = TRUE; X--- 567,577 ---- X } else u.ublessed++; X pline(msg, "my protection"); X } X! verbalize("Use it wisely in my name!"); X break; X } X case 7: X+ case 8: X #ifdef ELBERETH X if (u.ualign > 3 && !u.uhand_of_elbereth) { X u.uhand_of_elbereth = TRUE; X*************** X*** 561,569 **** X HFire_resistance |= INTRINSIC; X HCold_resistance |= INTRINSIC; X HPoison_resistance |= INTRINSIC; X if (u.ualigntyp != U_CHAOTIC) { X! pline("A voice booms out: \"I crown thee...\""); X! pline("\"The Hand of Elbereth!\""); X #ifdef NAMED_ITEMS X if(uwep && (uwep->otyp == LONG_SWORD)) { X bless(uwep); X--- 579,587 ---- X HFire_resistance |= INTRINSIC; X HCold_resistance |= INTRINSIC; X HPoison_resistance |= INTRINSIC; X+ pline("A voice booms out:"); X if (u.ualigntyp != U_CHAOTIC) { X! verbalize("I crown thee... The Hand of Elbereth!"); X #ifdef NAMED_ITEMS X if(uwep && (uwep->otyp == LONG_SWORD)) { X bless(uwep); X*************** X*** 575,581 **** X } else { X register struct obj *obj; X #ifdef NAMED_ITEMS X! pline("A voice booms out: \"Thou art chosen to steal souls for Arioch!\""); X /* This does the same damage as Excalibur. X * Disadvantages: doesn't do bonuses to undead; X * doesn't aid searching. X--- 593,600 ---- X } else { X register struct obj *obj; X #ifdef NAMED_ITEMS X! const char *Stormbringer = "Stormbringer"; X! X /* This does the same damage as Excalibur. X * Disadvantages: doesn't do bonuses to undead; X * doesn't aid searching. X*************** X*** 585,612 **** X * +5 weapon and turn it into a Stormbringer. X * Advantage: they don't need to already have a X * sword of the right type to get it... X */ X if (Blind) X pline("Something appears at your %s.", X makeplural(body_part(FOOT))); X else X pline("%s sword appears at your %s!", X! An(Hallucination ? hcolor() : black), X makeplural(body_part(FOOT))); X- obj = mksobj(BROADSWORD, FALSE); X- obj = oname(obj, "Stormbringer", 0); X obj->rustfree = 1; X obj->cursed = 0; X- obj->blessed = 1; X /* Why bless it? Why not. After all, chaotic gods X * will bless regular weapons. And blessed really X * means given sanctified to a deity, which is certainly X * sensible even for Stormbringer and a chaotic deity... X */ X! obj->spe = 1; X dropy(obj); X #else X! pline("Thou shalt become the servant of Arioch!"); X #endif X } X break; X--- 604,646 ---- X * +5 weapon and turn it into a Stormbringer. X * Advantage: they don't need to already have a X * sword of the right type to get it... X+ * However, if Stormbringer already exists in X+ * the game, an ordinary good broadsword is X+ * given and the messages are a bit different. X */ X+ obj = mksobj(BROADSWORD, FALSE); X+ if (exist_artifact(obj, Stormbringer)) X+ verbalize("Thou art chosen to take lives for Arioch!"); X+ else X+ verbalize("Thou art chosen to steal souls for Arioch!"); X if (Blind) X pline("Something appears at your %s.", X makeplural(body_part(FOOT))); X else X pline("%s sword appears at your %s!", X! An(exist_artifact(obj, Stormbringer) ? X! (const char *)"wide" : X! Hallucination ? hcolor() : black), X makeplural(body_part(FOOT))); X obj->rustfree = 1; X obj->cursed = 0; X /* Why bless it? Why not. After all, chaotic gods X * will bless regular weapons. And blessed really X * means given sanctified to a deity, which is certainly X * sensible even for Stormbringer and a chaotic deity... X */ X! obj->blessed = 1; X! X! /* if not "Stormbringer", make it a bit better otherwise */ X! if (exist_artifact(obj, Stormbringer)) X! obj->spe = 3; X! else X! obj->spe = 1; X! /* existence of "Stormbringer" is checked in oname() */ X! obj = oname(obj, Stormbringer, 0); X dropy(obj); X #else X! verbalize("Thou shalt become the servant of Arioch!"); X #endif X } X break; X*************** X*** 616,624 **** X case 6: pline ("An object appears at your %s!", X makeplural(body_part(FOOT))); X #ifdef SPELLS X! (void) mkobj_at(SPBOOK_SYM, u.ux, u.uy); X #else X! (void) mkobj_at(SCROLL_SYM, u.ux, u.uy); X #endif X break; X X--- 650,658 ---- X case 6: pline ("An object appears at your %s!", X makeplural(body_part(FOOT))); X #ifdef SPELLS X! bless(mkobj_at(SPBOOK_SYM, u.ux, u.uy)); X #else X! bless(mkobj_at(SCROLL_SYM, u.ux, u.uy)); X #endif X break; X X*************** X*** 645,657 **** X #else X if (u.ugangr++) angrygods(); X else { /* exactly one warning */ X! #ifdef ALTARS X! pline("The voice of %s booms out: \"Thou hast angered me.\"", X on_altar() ? a_gname() : u_gname()); X! #else X! pline("A voice booms out: \"Thou hast angered me.\""); X! #endif X! pline("\"Disturb me again at thine own risk!\""); X } X #endif X } X--- 679,692 ---- X #else X if (u.ugangr++) angrygods(); X else { /* exactly one warning */ X! # ifdef ALTARS X! pline("The voice of %s booms out:", X on_altar() ? a_gname() : u_gname()); X! # else X! pline("A voice booms out:"); X! # endif X! verbalize("Thou hast angered me."); X! verbalize("Disturb me again at thine own peril!"); X } X #endif X } X*************** X*** 665,674 **** X register struct obj *otmp; X { X if (Hallucination) X! pline ("Your sacrifice sprouts wings and a propeller and roars away!"); X else if (Blind && u.ualigntyp == U_LAWFUL) X! pline("Your sacrifice disappears!"); X! else pline ("Your sacrifice is consumed in a %s!", X u.ualigntyp == U_LAWFUL ? "flash of light" : "burst of flame"); X if (carried(otmp)) useup(otmp); X else useupf(otmp); X--- 700,709 ---- X register struct obj *otmp; X { X if (Hallucination) X! Your("sacrifice sprouts wings and a propeller and roars away!"); X else if (Blind && u.ualigntyp == U_LAWFUL) X! Your("sacrifice disappears!"); X! else Your("sacrifice is consumed in a %s!", X u.ualigntyp == U_LAWFUL ? "flash of light" : "burst of flame"); X if (carried(otmp)) useup(otmp); X else useupf(otmp); X*************** X*** 679,686 **** X { X register struct obj *otmp; X int value = 0; X- X #ifdef ALTARS X if (!on_altar()) { X You("are not standing on an altar."); X return 0; X--- 714,724 ---- X { X register struct obj *otmp; X int value = 0; X #ifdef ALTARS X+ /* Note: normal altar aligns are 0, 1, 2; this is -1, 0, 1 so it */ X+ /* can be compared with u.ualigntyp */ X+ int altaralign = (levl[u.ux][u.uy].altarmask & ~A_SHRINE) - 1; X+ X if (!on_altar()) { X You("are not standing on an altar."); X return 0; X*************** X*** 726,732 **** X if (u.ualigntyp != U_CHAOTIC) X pline("You'll regret this infamous offense!"); X #ifdef ALTARS X! if (levl[u.ux][u.uy].altarmask & ~A_SHRINE) { X /* curse the lawful/neutral altar */ X pline("The altar is stained with human blood."); X levl[u.ux][u.uy].altarmask = A_CHAOS; X--- 764,770 ---- X if (u.ualigntyp != U_CHAOTIC) X pline("You'll regret this infamous offense!"); X #ifdef ALTARS X! if (altaralign != U_CHAOTIC) { X /* curse the lawful/neutral altar */ X pline("The altar is stained with human blood."); X levl[u.ux][u.uy].altarmask = A_CHAOS; X*************** X*** 735,741 **** X register struct monst *dmon; X /* Human sacrifice on a chaotic altar is equivalent to demon summoning */ X #ifdef THEOLOGY X! if (levl[u.ux][u.uy].altarmask & A_SHRINE) X pline("The blood covers the altar!"); X else { X #endif X--- 773,779 ---- X register struct monst *dmon; X /* Human sacrifice on a chaotic altar is equivalent to demon summoning */ X #ifdef THEOLOGY X! if (altaralign == U_CHAOTIC) X pline("The blood covers the altar!"); X else { X #endif X*************** X*** 776,788 **** X if (mtmp == &mons[PM_BLACK_UNICORN]) unicalign = -1; X else if (mtmp == &mons[PM_GRAY_UNICORN]) unicalign = 0; X else if (mtmp == &mons[PM_WHITE_UNICORN]) unicalign = 1; X! if (unicalign == u.ualigntyp) { X pline("Such an action is an insult to %s!", (unicalign== -1) X ? "chaos" : unicalign ? "law" : "neutrality"); X adjattrib(A_WIS, -1, TRUE); X value = -5; X! } else if ((unicalign == -u.ualigntyp) || X! (!u.ualigntyp && unicalign)) { X if (u.ualign < ALIGNLIM) X You("feel stridently %s!", (u.ualigntyp== U_CHAOTIC) ? X "chaotic" : u.ualigntyp ? "lawful" : "neutral"); X--- 814,831 ---- X if (mtmp == &mons[PM_BLACK_UNICORN]) unicalign = -1; X else if (mtmp == &mons[PM_GRAY_UNICORN]) unicalign = 0; X else if (mtmp == &mons[PM_WHITE_UNICORN]) unicalign = 1; X! #ifdef __GNULINT__ X! else { impossible("Bad unicorn type??"); unicalign = 0; } X! #endif X! /* If same as altar, always a very bad action. */ X! if (unicalign == altaralign) { X pline("Such an action is an insult to %s!", (unicalign== -1) X ? "chaos" : unicalign ? "law" : "neutrality"); X adjattrib(A_WIS, -1, TRUE); X value = -5; X! } else if (u.ualigntyp == altaralign) { X! /* If different from altar, and altar is same as yours, */ X! /* get maximum alignment */ X if (u.ualign < ALIGNLIM) X You("feel stridently %s!", (u.ualigntyp== U_CHAOTIC) ? X "chaotic" : u.ualigntyp ? "lawful" : "neutral"); X*************** X*** 789,795 **** X else You("feel you are thoroughly on the right path."); X u.ualign = ALIGNLIM; X value += 3; X! } X } X } X #ifdef ENDGAME X--- 832,843 ---- X else You("feel you are thoroughly on the right path."); X u.ualign = ALIGNLIM; X value += 3; X! } else if (unicalign == u.ualigntyp) { X! /* If sacrificing unicorn of your alignment to altar not of */ X! /* your alignment, your god gets angry and it's a conversion */ X! u.ualign = -1; X! value = 1; X! } else value += 3; X } X } X #ifdef ENDGAME X*************** X*** 824,831 **** X if(carried(otmp)) useup(otmp); /* well, it's gone now */ X else useupf(otmp); X You("offer the Amulet to %s...", a_gname()); X! if (u.ualigntyp != X! (levl[u.ux][u.uy].altarmask & ~A_SHRINE) - 1) { X /* And the opposing team picks him up and X carries him off on their shoulders */ X pline("%s accepts your gift, and gains dominion over %s...", X--- 872,878 ---- X if(carried(otmp)) useup(otmp); /* well, it's gone now */ X else useupf(otmp); X You("offer the Amulet to %s...", a_gname()); X! if (u.ualigntyp != altaralign) { X /* And the opposing team picks him up and X carries him off on their shoulders */ X pline("%s accepts your gift, and gains dominion over %s...", X*************** X*** 833,844 **** X pline("%s is enraged...", u_gname()); X pline("Fortunately, %s permits you to live...", a_gname()); X pline("A cloud of %s smoke surrounds you...", X! Hallucination ? hcolor() : "orange"); X done(ESCAPED); X } else { /* super big win */ X pline("An invisible choir sings, and you are bathed in radiance..."); X! pline("\"Congratulations, mortal! In return for thy service,"); X! pline("I grant thee the gift of Immortality!\""); X You("ascend to the status of Demigod..."); X done(ASCENDED); X } X--- 880,892 ---- X pline("%s is enraged...", u_gname()); X pline("Fortunately, %s permits you to live...", a_gname()); X pline("A cloud of %s smoke surrounds you...", X! Hallucination ? hcolor() : (const char *)"orange"); X done(ESCAPED); X } else { /* super big win */ X pline("An invisible choir sings, and you are bathed in radiance..."); X! verbalize("Congratulations, mortal!"); X! more(); X! verbalize("In return for thy service, I grant thee the gift of Immortality!"); X You("ascend to the status of Demigod..."); X done(ASCENDED); X } X*************** X*** 872,878 **** X boolean consumed = FALSE; X #ifdef ALTARS X /* Sacrificing at an altar of a different alignment */ X! if (u.ualigntyp != (levl[u.ux][u.uy].altarmask & ~A_SHRINE) - 1) { X /* Is this a conversion ? */ X if(ugod_is_angry()) { X if(u.ualignbase[0] == u.ualignbase[1]) { X--- 920,926 ---- X boolean consumed = FALSE; X #ifdef ALTARS X /* Sacrificing at an altar of a different alignment */ X! if (u.ualigntyp != altaralign) { X /* Is this a conversion ? */ X if(ugod_is_angry()) { X if(u.ualignbase[0] == u.ualignbase[1]) { X*************** X*** 883,893 **** X You("have a sudden sense of a new direction."); X /* The player wears a helm of opposite alignment? */ X if (uarmh && uarmh->otyp == HELM_OF_OPPOSITE_ALIGNMENT) X! u.ualignbase[0] = X! (levl[u.ux][u.uy].altarmask & ~A_SHRINE) - 1; X else X! u.ualigntyp = u.ualignbase[0] = X! (levl[u.ux][u.uy].altarmask & ~A_SHRINE) - 1; X flags.botl = 1; X /* Beware, Conversion is costly */ X change_luck(-3); X--- 931,939 ---- X You("have a sudden sense of a new direction."); X /* The player wears a helm of opposite alignment? */ X if (uarmh && uarmh->otyp == HELM_OF_OPPOSITE_ALIGNMENT) X! u.ualignbase[0] = altaralign; X else X! u.ualigntyp = u.ualignbase[0] = altaralign; X flags.botl = 1; X /* Beware, Conversion is costly */ X change_luck(-3); X*************** X*** 894,902 **** X u.ublesscnt += 300; X adjalign((int)(u.ualignbase[1] * (ALIGNLIM / 2))); X } else { X! pline("%s rejects your sacrifice!",a_gname()); X! pline("The voice of %s booms: \"Suffer, infidel!\"", X! u_gname()); X adjalign(-5); X u.ugangr += 3; X adjattrib(A_WIS, -2, TRUE); X--- 940,948 ---- X u.ublesscnt += 300; X adjalign((int)(u.ualignbase[1] * (ALIGNLIM / 2))); X } else { X! pline("%s rejects your sacrifice!", a_gname()); X! pline("The voice of %s booms:", u_gname()); X! verbalize("Suffer, infidel!"); X adjalign(-5); X u.ugangr += 3; X adjattrib(A_WIS, -2, TRUE); X*************** X*** 921,927 **** X pline("The newly consecrated altar glows %s.", X Hallucination ? hcolor() : X u.ualigntyp == U_LAWFUL ? white : X! u.ualigntyp ? black : "gray"); X } else { X pline("Unluckily, you feel the power of %s decrease.", X u_gname()); X--- 967,973 ---- X pline("The newly consecrated altar glows %s.", X Hallucination ? hcolor() : X u.ualigntyp == U_LAWFUL ? white : X! u.ualigntyp ? black : (const char *)"gray"); X } else { X pline("Unluckily, you feel the power of %s decrease.", X u_gname()); X*************** X*** 983,988 **** X--- 1029,1036 ---- X if(!rn2(10)) { X otmp = mk_aligned_artifact((unsigned)(levl[u.ux][u.uy].altarmask & ~A_SHRINE)); X if(otmp) { X+ if (otmp->spe < 0) otmp->spe = 0; X+ if (otmp->cursed) otmp->cursed = 0; X dropy(otmp); X pline("An object appears at your %s!", X makeplural(body_part(FOOT))); X*************** X*** 993,999 **** X change_luck((value * LUCKMAX) / (MAXVALUE * 2)); X if (u.uluck != saved_luck) { X if (Blind) X! You("think you stepped on something."); X else You(Hallucination ? X "see crabgrass at your %s. A funny thing in a dungeon." : X "glimpse a four-leaf clover at your %s.", X--- 1041,1048 ---- X change_luck((value * LUCKMAX) / (MAXVALUE * 2)); X if (u.uluck != saved_luck) { X if (Blind) X! You("think something brushed your %s.", X! body_part(FOOT)); X else You(Hallucination ? X "see crabgrass at your %s. A funny thing in a dungeon." : X "glimpse a four-leaf clover at your %s.", X*************** X*** 1027,1038 **** X #ifdef POLYSELF X if (is_undead(uasmon)) { X if (aligntyp == 1 || (aligntyp == 0 && !rn2(10))) { X! pline(aligntyp == 1 ? X! "\"Vile creature, thou durst call upon me?\"" : X! "\"Walk no more, perversion of nature!\""); X You("feel like you are falling apart."); X rehumanize(); X! losehp(rnd(20), "residual undead turning effect"); X return(1); X } X } X--- 1076,1088 ---- X #ifdef POLYSELF X if (is_undead(uasmon)) { X if (aligntyp == 1 || (aligntyp == 0 && !rn2(10))) { X! verbalize(aligntyp == 1 ? X! "Vile creature, thou durst call upon me?" : X! "Walk no more, perversion of nature!"); X You("feel like you are falling apart."); X rehumanize(); X! losehp(rnd(20), "residual undead turning effect", X! KILLED_BY_AN); X return(1); X } X } X*************** X*** 1070,1076 **** X u.ublesscnt += rnz(250); X change_luck(-3); X gods_upset(); X! } else if ((int)u.uluck < 0 || u.ugangr || align < 0) X angrygods(); /* naughty */ X else if (align >= 0) pleased(); /* nice */ X nomovemsg = "You finish your prayer."; X--- 1120,1126 ---- X u.ublesscnt += rnz(250); X change_luck(-3); X gods_upset(); X! } else if ((int)Luck < 0 || u.ugangr || align < 0) X angrygods(); /* naughty */ X else if (align >= 0) pleased(); /* nice */ X nomovemsg = "You finish your prayer."; X*************** X*** 1118,1124 **** X # endif X ) { X X! pline("For some reason, the gods seem not to listen to you."); X aggravate(); X return(0); X } X--- 1168,1174 ---- X # endif X ) { X X! pline("For some reason, the gods seem to ignore you."); X aggravate(); X return(0); X } X*************** X*** 1144,1150 **** X X if(Confusion) { X pline("Unfortunately, your voice falters."); X! mtmp->mflee = mtmp->mfroz = mtmp->msleep = 0; X } else if (! resist(mtmp, '\0', 0, TELL)) X switch (mtmp->data->mlet) { X /* this is intentional, lichs are tougher X--- 1194,1201 ---- X X if(Confusion) { X pline("Unfortunately, your voice falters."); X! mtmp->mflee = mtmp->mfrozen = mtmp->msleep = 0; X! mtmp->mcanmove = 1; X } else if (! resist(mtmp, '\0', 0, TELL)) X switch (mtmp->data->mlet) { X /* this is intentional, lichs are tougher X*************** X*** 1177,1189 **** X } X X #ifdef ALTARS X! char * X a_gname() X { X return(a_gname_at(u.ux, u.uy)); X } X X! char * X a_gname_at(x,y) /* returns the name of an altar's deity */ X xchar x, y; X { X--- 1228,1240 ---- X } X X #ifdef ALTARS X! const char * X a_gname() X { X return(a_gname_at(u.ux, u.uy)); X } X X! const char * X a_gname_at(x,y) /* returns the name of an altar's deity */ X xchar x, y; X { X*************** X*** 1223,1234 **** X altar_wrath(x, y) X register int x, y; X { X! if(!strcmp(a_gname_at(x,y), u_gname())) { X! pline("%s's voice booms: \"How darest thou desecrate my altar!\"", X! a_gname_at(x,y)); X adjattrib(A_WIS, -1, FALSE); X } else { X! pline("A voice whispers in your ear: \"Thou shalt pay, infidel!\""); X change_luck(-1); X } X } X--- 1274,1286 ---- X altar_wrath(x, y) X register int x, y; X { X! if(!strcmp(a_gname_at(x,y), u_gname())) { X! pline("The voice of %s booms:", a_gname_at(x,y)); X! verbalize("How darest thou desecrate my altar!"); X adjattrib(A_WIS, -1, FALSE); X } else { X! pline("A voice whispers in your ear:"); X! verbalize("Thou shalt pay, infidel!"); X change_luck(-1); X } X } X*************** X*** 1236,1242 **** X #endif /* ALTARS */ X X #ifdef THEOLOGY X! char * X u_gname() { /* returns the name of the player's deity */ X register struct ghods *aghod; X X--- 1288,1294 ---- X #endif /* ALTARS */ X X #ifdef THEOLOGY X! const char * X u_gname() { /* returns the name of the player's deity */ X register struct ghods *aghod; X X*** src/Old/pri.c Mon Feb 19 18:53:47 1990 X--- src/pri.c Sun Feb 18 16:31:50 1990 X*************** X*** 2,9 **** X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X /* block some unused #defines to avoid overloading some cpp's */ X- #define MONATTK_H X #include "hack.h" X #include <ctype.h> /* for isalpha() */ X #if defined(ALTARS) && defined(THEOLOGY) X--- 2,9 ---- X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X+ #define MONATTK_H /* comment line for pre-compiled headers */ X /* block some unused #defines to avoid overloading some cpp's */ X #include "hack.h" X #include <ctype.h> /* for isalpha() */ X #if defined(ALTARS) && defined(THEOLOGY) X*************** X*** 11,21 **** X #endif X #include "termcap.h" X X! static void FDECL(hilite, (int,int,UCHAR_P, UCHAR_P)); X! static void FDECL(cornbot, (int)); X! static boolean FDECL(ismnst, (CHAR_P)); X #ifdef TEXTCOLOR X! static uchar FDECL(mimic_color, (UCHAR_P)); X #endif X X #ifndef ASCIIGRAPH X--- 11,20 ---- X #endif X #include "termcap.h" X X! OSTATIC void FDECL(hilite, (int,int,UCHAR_P, UCHAR_P)); X! OSTATIC void FDECL(cornbot, (int)); X #ifdef TEXTCOLOR X! OSTATIC uchar FDECL(mimic_color, (struct monst *)); X #endif X X #ifndef ASCIIGRAPH X*************** X*** 23,41 **** X #endif X X #ifndef g_putch X static boolean GFlag = FALSE; /* graphic flag */ X #endif X X /* 100 suffices for bot(); must be larger than COLNO */ X #define MAXCO 100 X! static char oldbot1[MAXCO], newbot1[MAXCO]; X! static char oldbot2[MAXCO], newbot2[MAXCO]; X static const char *dispst = "*0#@#0#*0#@#0#*0#@#0#*0#@#0#*0#@#0#*"; X! static int mrank_sz = 0; /* loaded by max_rank_sz (called in u_init) */ X X! #ifdef CLIPPING X! #define curs(x, y) win_curs((x), (y)-2) X! #endif X X void X swallowed(first) X--- 22,61 ---- X #endif X X #ifndef g_putch X+ #ifdef OVL0 X static boolean GFlag = FALSE; /* graphic flag */ X+ #endif /* OVL0 */ X #endif X X /* 100 suffices for bot(); must be larger than COLNO */ X #define MAXCO 100 X! VSTATIC char oldbot1[MAXCO], newbot1[MAXCO]; X! VSTATIC char oldbot2[MAXCO], newbot2[MAXCO]; X! #ifdef OVL2 X static const char *dispst = "*0#@#0#*0#@#0#*0#@#0#*0#@#0#*0#@#0#*"; X! #endif /* OVL2 */ X! #ifndef OVLB X! OSTATIC int mrank_sz; X! #else /* OVLB */ X! XSTATIC int mrank_sz = 0; /* loaded by max_rank_sz (called in u_init) */ X! #endif /* OVLB */ X! X! #ifdef CLIPPING X! #define curs(x, y) (void) win_curs((x), (y)-2) X! #endif X! X! #ifdef OVL0 X! X! char * X! eos(s) X! register char *s; X! { X! while(*s) s++; X! return(s); X! } X X! #endif /* OVL0 */ X! #ifdef OVLB X X void X swallowed(first) X*************** X*** 135,145 **** X u.udispl = 0; X levl[u.udisx][u.udisy].scrsym = news0(u.udisx, u.udisy); X } X! doredraw(); X } X } X #endif /* CLIPPING */ X X /* X * Allow for a different implementation than this... X */ X--- 155,168 ---- X u.udispl = 0; X levl[u.udisx][u.udisy].scrsym = news0(u.udisx, u.udisy); X } X! (void) doredraw(); X } X } X #endif /* CLIPPING */ X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X /* X * Allow for a different implementation than this... X */ X*************** X*** 224,229 **** X--- 247,255 ---- X #endif X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X+ X void X prme(){ X if(!Invisible X*************** X*** 236,246 **** X } X } X X void X shieldeff(x, y) /* produce a magical shield effect at x,y */ X register xchar x, y; X { X! register char *ch; X register struct monst *mtmp = 0; X X if((x != u.ux) || (y != u.uy)) { X--- 262,275 ---- X } X } X X+ #endif /* OVLB */ X+ #ifdef OVL2 X+ X void X shieldeff(x, y) /* produce a magical shield effect at x,y */ X register xchar x, y; X { X! register const char *ch; X register struct monst *mtmp = 0; X X if((x != u.ux) || (y != u.uy)) { X*************** X*** 276,281 **** X--- 305,313 ---- X return; X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X int X doredraw() X { X*************** X*** 283,288 **** X--- 315,323 ---- X return 0; X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X void X docrt() X { X*************** X*** 318,324 **** X mtmp->mdispl = 0; X seemons(); /* force new positions to be shown */ X X! #if ((defined(DGK) && !defined(TEXTCOLOR)) || defined(MACOS)) & !defined(CLIPPING) X # ifdef MACOS X t = (term_info *)GetWRefCon(HackWindow); X if (!t->inColor) X--- 353,359 ---- X mtmp->mdispl = 0; X seemons(); /* force new positions to be shown */ X X! #if ((defined(DGK) && !defined(TEXTCOLOR)) || defined(MACOS)) && !defined(CLIPPING) X # ifdef MACOS X t = (term_info *)GetWRefCon(HackWindow); X if (!t->inColor) X*************** X*** 329,339 **** X for(y = 0; y < ROWNO; y++) { X char buf[COLNO+1]; X int start, end; X! # if defined(OLD_TOS) || defined(LSC) || defined(AZTEC) X setmem(buf, COLNO, ' '); X # else X memset(buf, ' ', COLNO); X! # endif /* OLD_TOS */ X for(x = 0, start = -1, end = -1; x < COLNO; x++) X if((room = &levl[x][y])->new) { X room->new = 0; X--- 364,374 ---- X for(y = 0; y < ROWNO; y++) { X char buf[COLNO+1]; X int start, end; X! # if defined(LSC) || defined(AZTEC) || defined(AZTEC_C) X setmem(buf, COLNO, ' '); X # else X memset(buf, ' ', COLNO); X! # endif X for(x = 0, start = -1, end = -1; x < COLNO; x++) X if((room = &levl[x][y])->new) { X room->new = 0; X*************** X*** 391,397 **** X bot(); X } X X! static void X cornbot(lth) X register int lth; X { X--- 426,435 ---- X bot(); X } X X! #endif /* OVL0 */ X! #ifdef OVLB X! X! XSTATIC void X cornbot(lth) X register int lth; X { X*************** X*** 400,405 **** X--- 438,446 ---- X flags.botl = 1; X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X void X docorner(xmin, ymax) X register int xmin, ymax; X*************** X*** 467,472 **** X--- 508,516 ---- X } X } X X+ #endif /* OVL0 */ X+ #ifdef OVL1 X+ X void X seeglds() X { X*************** X*** 532,537 **** X--- 576,584 ---- X } X } X X+ #endif /* OVL1 */ X+ #ifdef OVL0 X+ X void X seemons() X { X*************** X*** 564,577 **** X if (Hallucination) X atl(mon->mx,mon->my, X (char) ((!mon->mimic || Protection_from_shape_changers) ? X! rndmonsym() : (mon->mappearance == CLOSED_DOOR_SYM) ? X! CLOSED_DOOR_SYM : rndobjsym())); X else X X atl(mon->mx,mon->my, X! (!mon->mappearance || X Protection_from_shape_changers) ? X! mon->data->mlet : mon->mappearance); X mon->mdispl = 1; X mon->mdx = mon->mx; X mon->mdy = mon->my; X--- 611,624 ---- X if (Hallucination) X atl(mon->mx,mon->my, X (char) ((!mon->mimic || Protection_from_shape_changers) ? X! rndmonsym() : (mon->m_ap_type == M_AP_FURNITURE) ? X! showsyms[mon->mappearance] : rndobjsym())); X else X X atl(mon->mx,mon->my, X! (!mon->m_ap_type || X Protection_from_shape_changers) ? X! mon->data->mlet : (char) mimic_appearance(mon)); X mon->mdispl = 1; X mon->mdx = mon->mx; X mon->mdy = mon->my; X*************** X*** 584,589 **** X--- 631,639 ---- X #endif X } X X+ #endif /* OVL0 */ X+ #ifdef OVL1 X+ X void X unpmon(mon) X register struct monst *mon; X*************** X*** 594,599 **** X--- 644,652 ---- X } X } X X+ #endif /* OVL1 */ X+ #ifdef OVL0 X+ X void X nscr() { X register int x, y; X*************** X*** 618,623 **** X--- 671,679 ---- X scrly = ROWNO; X } X X+ #endif /* OVL0 */ X+ #ifdef OVL1 X+ X /* Make sure that there are 18 entries in the rank arrays. */ X /* 0 and even entries are male ranks, odd entries are female. */ X X*************** X*** 873,879 **** X "Elentari", /* Star-queen (Q.) */ /* Elbereth (S.) */ X }; X X! static const char ** X rank_array() { X register const char **ranks; X X--- 929,941 ---- X "Elentari", /* Star-queen (Q.) */ /* Elbereth (S.) */ X }; X X! #endif /* OVL1 */ X! X! OSTATIC const char **NDECL(rank_array); X! X! #ifdef OVL1 X! X! XSTATIC const char ** X rank_array() { X register const char **ranks; X X*************** X*** 895,901 **** X return(ranks); X } X X! static char * X rank() { X register int place; X register const char **ranks = rank_array(); X--- 957,969 ---- X return(ranks); X } X X! #endif /* OVL1 */ X! X! OSTATIC const char *rank(); X! X! #ifdef OVL1 X! X! XSTATIC const char * X rank() { X register int place; X register const char **ranks = rank_array(); X*************** X*** 915,920 **** X--- 983,991 ---- X return(pl_character); X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X void X max_rank_sz() { X register int i, maxr = 0; X*************** X*** 928,933 **** X--- 999,1007 ---- X else mrank_sz = strlen(pl_character); X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X static void X fillbot(row,oldbot,newbot) X int row; X*************** X*** 1094,1100 **** X } X if(Confusion) Sprintf(eos(newbot2), " Conf"); X if(Sick) Sprintf(eos(newbot2), " Sick"); X! if(Blinded) Sprintf(eos(newbot2), " Blind"); X if(Stunned) Sprintf(eos(newbot2), " Stun"); X if(Hallucination) Sprintf(eos(newbot2), " Hallu"); X #ifdef CLIPPING X--- 1168,1174 ---- X } X if(Confusion) Sprintf(eos(newbot2), " Conf"); X if(Sick) Sprintf(eos(newbot2), " Sick"); X! if(Blind) Sprintf(eos(newbot2), " Blind"); X if(Stunned) Sprintf(eos(newbot2), " Stun"); X if(Hallucination) Sprintf(eos(newbot2), " Hallu"); X #ifdef CLIPPING X*************** X*** 1113,1118 **** X--- 1187,1194 ---- X flags.botl = flags.botlx = 0; X } X X+ #endif /* OVL0 */ X+ #ifdef OVLB X X void X mstatusline(mtmp) X*************** X*** 1171,1176 **** X--- 1247,1255 ---- X flags.botlx = 1; X } X X+ #endif /* OVLB */ X+ #ifdef OVL2 X+ X char X rndmonsym() X { X*************** X*** 1177,1183 **** X return(mons[rn2(NUMMONS - 1)].mlet); X } X X! static const char objsyms[] = { X WEAPON_SYM, ARMOR_SYM, POTION_SYM, SCROLL_SYM, WAND_SYM, X #ifdef SPELLS X SPBOOK_SYM, X--- 1256,1267 ---- X return(mons[rn2(NUMMONS - 1)].mlet); X } X X! /* X! * we don't use objsyms here because (someday) objsyms may be X! * user programmable X! */ X! X! static const char rndobs[] = { X WEAPON_SYM, ARMOR_SYM, POTION_SYM, SCROLL_SYM, WAND_SYM, X #ifdef SPELLS X SPBOOK_SYM, X*************** X*** 1187,1193 **** X char X rndobjsym() X { X! return objsyms[rn2(SIZE(objsyms))]; X } X X static const char *hcolors[] = { X--- 1271,1277 ---- X char X rndobjsym() X { X! return rndobs[rn2(SIZE(rndobs))]; X } X X static const char *hcolors[] = { X*************** X*** 1209,1220 **** X return hcolors[rn2(SIZE(hcolors))]; X } X X /*ARGSUSED*/ X! static void X hilite(x, y, let, typ) X int x, y; X uchar let, typ; X { X if (let == ' ' X #if !defined(MSDOS) && !defined(MACOS) X || !flags.standout X--- 1293,1310 ---- X return hcolors[rn2(SIZE(hcolors))]; X } X X+ #endif /* OVL2 */ X+ #ifdef OVL0 X+ X /*ARGSUSED*/ X! XSTATIC void X hilite(x, y, let, typ) X int x, y; X uchar let, typ; X { X+ #ifdef TEXTCOLOR X+ boolean colorit; X+ #endif X if (let == ' ' X #if !defined(MSDOS) && !defined(MACOS) X || !flags.standout X*************** X*** 1233,1244 **** X || let == S_MIMIC_DEF) X /* is an object */ X typ = AT_OBJ; X! else if (ismnst((char) let)) X /* is a monster */ X typ = AT_MON; X } X #ifdef TEXTCOLOR X! if (flags.use_color) { X switch (typ) { X case AT_MON: X switch (let) { X--- 1323,1341 ---- X || let == S_MIMIC_DEF) X /* is an object */ X typ = AT_OBJ; X! else if (vism_at(x, y)) X /* is a monster */ X typ = AT_MON; X } X #ifdef TEXTCOLOR X! # ifdef REINCARNATION X! colorit = flags.use_color && dlevel != rogue_level; X! # else X! colorit = flags.use_color; X! # endif X! if (colorit) { X! struct monst *mtmp; X! X switch (typ) { X case AT_MON: X switch (let) { X*************** X*** 1246,1255 **** X typ = HI_OBJ; X break; X default: X! if (u.ux == x && u.uy == y) X typ = uasmon->mcolor; X! else if (level.monsters[x][y]) X! typ = level.monsters[x][y]->data->mcolor; X else X typ = 0; X } X--- 1343,1354 ---- X typ = HI_OBJ; X break; X default: X! if (u.ux == x && u.uy == y && u.usym == let) X typ = uasmon->mcolor; X! else if (mtmp = m_at(x, y)) X! typ = mtmp->m_ap_type ? X! mimic_color(mtmp) : X! mtmp->data->mcolor; X else X typ = 0; X } X*************** X*** 1266,1274 **** X typ = mons[otmp->corpsenm].mcolor; X else X typ = objects[level.objects[x][y]->otyp].oc_color; X! } X! else X! typ = mimic_color(let); X } X break; X case AT_MAP: X--- 1365,1372 ---- X typ = mons[otmp->corpsenm].mcolor; X else X typ = objects[level.objects[x][y]->otyp].oc_color; X! } else X! typ = mimic_color(m_at(x, y)); X } X break; X case AT_MAP: X*************** X*** 1295,1347 **** X break; X } X } X! if (typ && flags.use_color) X! xputs(hilites[typ]); X else X #endif X if (typ == AT_MON) revbeg(); X! X g_putch(let); X X #ifdef TEXTCOLOR X! if (typ && flags.use_color) xputs(HE); else X #endif X if (typ == AT_MON) m_end(); X } X X! static boolean X! ismnst(let) X! char let; X! { X! register int ct; X! register struct permonst *ptr; X! X! if (let & 0x80) return 0; X! if (isalpha(let)) return 1; /* for speed */ X X! for (ct = 0 ; ct < NUMMONS; ct++) { X! ptr = &mons[ct]; X! if(ptr->mlet == let) return 1; X } X! #ifdef WORM X! if (let == S_WORM_TAIL) return 1; X! #endif X! return 0; X } X X #ifdef TEXTCOLOR X /* pick an appropriate color for a mimic imitating an object */ X X! static uchar X! mimic_color(let) X! uchar let; X { X! int i; X! X! for(i = 0; i < NROFOBJECTS; i++) { X! if (objects[i].oc_olet == let) X! return objects[i].oc_color; X } X- return HI_OBJ; X } X #endif X--- 1393,1476 ---- X break; X } X } X! if (typ && colorit) X! xputs(hilites[Hallucination ? rn2(MAXCOLORS) : typ]); X else X #endif X+ #ifdef REINCARNATION X+ if (typ == AT_MON && dlevel != rogue_level) revbeg(); X+ #else X if (typ == AT_MON) revbeg(); X! #endif X g_putch(let); X X #ifdef TEXTCOLOR X! if (typ && colorit) xputs(HE); else X #endif X+ #ifdef REINCARNATION X+ if (typ == AT_MON && dlevel != rogue_level) m_end(); X+ #else X if (typ == AT_MON) m_end(); X+ #endif X } X X! #endif /* OVL0 */ X! #ifdef OVL2 X! X! /* X! * find the appropriate symbol for printing a mimic X! */ X X! uchar X! mimic_appearance(mon) X! struct monst *mon; X! { X! switch(mon->m_ap_type) { X! case M_AP_NOTHING: X! return mon->data->mlet; X! case M_AP_FURNITURE: X! return showsyms[mon->mappearance]; X! case M_AP_OBJECT: X! return objects[mon->mappearance].oc_olet; X! case M_AP_MONSTER: X! return mons[mon->mappearance].mlet; X! case M_AP_GOLD: X! return GOLD_SYM; X! default: X! impossible("Monster mimicking %d", mon->m_ap_type); X! return 0; X } X! /*NOTREACHED*/ X } X X #ifdef TEXTCOLOR X /* pick an appropriate color for a mimic imitating an object */ X X! XSTATIC uchar X! mimic_color(mtmp) X! struct monst *mtmp; X { X! if (!mtmp) X! return 0; X! switch (mtmp->m_ap_type) { X! case M_AP_NOTHING: X! return mtmp->data->mcolor; X! case M_AP_FURNITURE: X! # ifdef FOUNTAINS X! if (mtmp->mappearance == S_fountain && hilites[BLUE] != HI) X! return BLUE; X! # endif X! return 0; X! case M_AP_OBJECT: X! return objects[mtmp->mappearance].oc_color; X! case M_AP_MONSTER: X! return mons[mtmp->mappearance].mcolor; X! case M_AP_GOLD: X! return HI_GOLD; X! default: X! return 0; X } X } X #endif X+ X+ #endif /* OVL2 */ X END_OF_FILE if test 57309 -ne `wc -c <'patch7.06'`; then echo shar: \"'patch7.06'\" unpacked with wrong size! fi # end of 'patch7.06' echo shar: End of archive 2 \(of 30\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 30 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0