Subject: v17i043: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch1b/31 Newsgroups: comp.sources.games Approved: billr@saab.CNA.TEK.COM Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller) Posting-number: Volume 17, Issue 43 Archive-name: nethack31/Patch1b Patch-To: nethack31: Volume 16, Issue 1-116 Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11 #! /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 'patches01a' <<'END_OF_FILE' X*** /tmp/da07997 Thu Feb 25 10:22:03 1993 X--- src/allmain.c Thu Feb 11 12:11:02 1993 X*************** X*** 30,39 **** X monstr_init(); /* monster strengths */ X objects_init(); X X- #ifdef MULDGN X- quest_init(); /* set up dynamic quest data */ X- #endif X- X (void) encumber_msg(); /* in case they auto-picked up something */ X X for(;;) { X--- 30,35 ---- X*************** X*** 47,56 **** X--- 43,58 ---- X X didmove = flags.move; X if(flags.move) { /* actual time passed */ X+ #ifdef POLYSELF X+ int oldmtimedone; X+ #endif X int wtcap; X X if (u.utotype) deferred_goto(); X wtcap = encumber_msg(); X+ #ifdef POLYSELF X+ oldmtimedone = u.mtimedone; X+ #endif X X #ifdef SOUNDS X dosounds(); X*************** X*** 201,206 **** X--- 203,212 ---- X else if (Underwater) X under_water(0); X X+ #ifdef POLYSELF X+ if ((oldmtimedone && !u.mtimedone) || X+ (!oldmtimedone && u.mtimedone)) moverate = 0; X+ #endif X } X if(multi < 0) { X if(!++multi){ X*************** X*** 358,363 **** X--- 364,370 ---- X */ X display_nhwindow(WIN_STATUS, FALSE); X display_nhwindow(WIN_MESSAGE, FALSE); X+ clear_glyph_buffer(); X display_nhwindow(WIN_MAP, FALSE); X } X X*************** X*** 385,390 **** X--- 392,398 ---- X #endif X #ifdef MULDGN X load_qtlist(); /* load up the quest text info */ X+ quest_init(); X if(flags.legacy && moves == 1) com_pager(1); X #endif X mklev(); X*** /tmp/da08013 Thu Feb 25 10:22:07 1993 X--- src/apply.c Wed Feb 24 13:10:43 1993 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)apply.c 3.1 92/12/10 */ 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: @(#)apply.c 3.1 93/02/19 */ X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 7,15 **** X X #ifdef OVLB X X! static const char NEARDATA tools[] = { TOOL_CLASS, 0 }; X X! static boolean NEARDATA did_dig_msg; X X #ifdef TOURIST X static int FDECL(use_camera, (struct obj *)); X--- 7,15 ---- X X #ifdef OVLB X X! static NEARDATA const char tools[] = { TOOL_CLASS, 0 }; X X! static NEARDATA boolean did_dig_msg; X X #ifdef TOURIST X static int FDECL(use_camera, (struct obj *)); X*************** X*** 47,53 **** X register struct monst *mtmp; X X if(Underwater) { X! pline("Using your camera underwater voids the warranty."); X return(0); X } X if(!getdir(NULL)) return(0); X--- 47,53 ---- X register struct monst *mtmp; X X if(Underwater) { X! pline("Using your camera underwater would void the warranty."); X return(0); X } X if(!getdir(NULL)) return(0); X*************** X*** 71,80 **** X if(cansee(mtmp->mx,mtmp->my)) X pline("The flash awakens %s.", mon_nam(mtmp)); /* a3 */ X } else if (mtmp->data->mlet != S_LIGHT) X! if((mtmp->mcansee && haseyes(mtmp->data)) X! || mtmp->mblinded) { X register int tmp = distu(mtmp->mx,mtmp->my); X- register int tmp2; X X if(cansee(mtmp->mx,mtmp->my)) X pline("%s is blinded by the flash!", Monnam(mtmp)); X--- 71,78 ---- X if(cansee(mtmp->mx,mtmp->my)) X pline("The flash awakens %s.", mon_nam(mtmp)); /* a3 */ X } else if (mtmp->data->mlet != S_LIGHT) X! if(mtmp->mcansee && haseyes(mtmp->data)) { X register int tmp = distu(mtmp->mx,mtmp->my); X X if(cansee(mtmp->mx,mtmp->my)) X pline("%s is blinded by the flash!", Monnam(mtmp)); X*************** X*** 92,101 **** X if(tmp < 3) { X mtmp->mblinded = 0; X } else { X! tmp2 = mtmp->mblinded; X! tmp2 += rnd(1 + 50/tmp); X! if(tmp2 > 127) tmp2 = 127; X! mtmp->mblinded = tmp2; X } X } X } X--- 90,96 ---- X if(tmp < 3) { X mtmp->mblinded = 0; X } else { X! mtmp->mblinded = rnd(1 + 50/tmp); X } X } X } X*************** X*** 111,117 **** X You("have no free %s!", body_part(HAND)); X return 0; X } else if (obj->owornmask) { X! You("can't use it while you're wearing it!"); X return 0; X } else if (obj->cursed) { X long old; X--- 106,112 ---- X You("have no free %s!", body_part(HAND)); X return 0; X } else if (obj->owornmask) { X! You("cannot use it while you're wearing it!"); X return 0; X } else if (obj->cursed) { X long old; X*************** X*** 119,126 **** X case 2: X old = Glib; X Glib += rn1(10, 3); X! Your("%s are %s!", makeplural(body_part(HAND)), X! (old ? "filthier than ever" : "now slimy")); X return 1; X case 1: X if (!Blindfolded) { X--- 114,121 ---- X case 2: X old = Glib; X Glib += rn1(10, 3); X! Your("%s %s!", makeplural(body_part(HAND)), X! (old ? "are filthier than ever" : "get slimy")); X return 1; X case 1: X if (!Blindfolded) { X*************** X*** 131,140 **** X make_blinded(Blinded + (long)u.ucreamed - old, TRUE); X } else { X if (ublindf->cursed) { X! You("pushed your blindfold %s.", X rn2(2) ? "cock-eyed" : "crooked"); X } else { X! You("pushed your blindfold off."); X Blindf_off(ublindf); X dropx(ublindf); X } X--- 126,135 ---- X make_blinded(Blinded + (long)u.ucreamed - old, TRUE); X } else { X if (ublindf->cursed) { X! You("push your blindfold %s.", X rn2(2) ? "cock-eyed" : "crooked"); X } else { X! You("push your blindfold off."); X Blindf_off(ublindf); X dropx(ublindf); X } X*************** X*** 169,175 **** X return 0; X } X X! static char hollow_str[] = "hear a hollow sound! This must be a secret %s!"; X X /* Strictly speaking it makes no sense for usage of a stethoscope to X not take any time; however, unless it did, the stethoscope would be X--- 164,170 ---- X return 0; X } X X! static char hollow_str[] = "hear a hollow sound. This must be a secret %s!"; X X /* Strictly speaking it makes no sense for usage of a stethoscope to X not take any time; however, unless it did, the stethoscope would be X*************** X*** 183,189 **** X register int rx, ry; X X if(!freehand()) { X! You("have no free %s!", body_part(HAND)); X return; X } X if (!getdir(NULL)) return; X--- 178,184 ---- X register int rx, ry; X X if(!freehand()) { X! You("have no free %s.", body_part(HAND)); X return; X } X if (!getdir(NULL)) return; X*************** X*** 194,200 **** X if (Underwater) X You("hear faint splashing."); X else if (u.dz < 0 || Levitation) X! You("can't reach the %s!", u.dz<0 ? "ceiling" : "floor"); X else if (Is_stronghold(&u.uz)) X You("hear the crackling of hellfire."); X else X--- 189,195 ---- X if (Underwater) X You("hear faint splashing."); X else if (u.dz < 0 || Levitation) X! You("can't reach the %s.", u.dz<0 ? "ceiling" : "floor"); X else if (Is_stronghold(&u.uz)) X You("hear the crackling of hellfire."); X else X*************** X*** 338,344 **** X int spotmon; X X if(!obj->leashmon && number_leashed() >= MAXLEASHED) { X! You("can't leash additional pets."); X return; X } X X--- 333,339 ---- X int spotmon; X X if(!obj->leashmon && number_leashed() >= MAXLEASHED) { X! You("cannot leash any more pets."); X return; X } X X*************** X*** 353,359 **** X } X X if(!(mtmp = m_at(x, y))) { X! pline("There is no creature here."); X return; X } X X--- 348,354 ---- X } X X if(!(mtmp = m_at(x, y))) { X! pline("There is no creature there."); X return; X } X X*************** X*** 361,375 **** X X if(!mtmp->mtame) { X if(!spotmon) X! pline("There is no creature here."); X else X! pline("%s is not %s!", Monnam(mtmp), (!obj->leashmon) ? X! "leashable" : "leashed"); X return; X } X if(!obj->leashmon) { X if(mtmp->mleashed) { X! pline("This %s is already leashed!", X spotmon ? l_monnam(mtmp) : "monster"); X return; X } X--- 356,370 ---- X X if(!mtmp->mtame) { X if(!spotmon) X! pline("There is no creature there."); X else X! pline("%s %s leashed!", Monnam(mtmp), (!obj->leashmon) ? X! "cannot be" : "is not"); X return; X } X if(!obj->leashmon) { X if(mtmp->mleashed) { X! pline("This %s is already leashed.", X spotmon ? l_monnam(mtmp) : "monster"); X return; X } X*************** X*** 381,391 **** X return; X } X if(obj->leashmon != (int)mtmp->m_id) { X! pline("This leash is not attached to that creature!"); X return; X } else { X if(obj->cursed) { X! pline("The leash wouldn't come off!"); X return; X } X mtmp->mleashed = 0; X--- 376,387 ---- X return; X } X if(obj->leashmon != (int)mtmp->m_id) { X! pline("This leash is not attached to that creature."); X return; X } else { X if(obj->cursed) { X! pline("The leash would not come off!"); X! obj->bknown = TRUE; X return; X } X mtmp->mleashed = 0; X*************** X*** 469,475 **** X Monnam(mtmp)); X } else { X if(um_dist(mtmp->mx, mtmp->my, 5)) { X! pline("%s's leash snaps loose!",Monnam(mtmp)); X m_unleash(mtmp); X } else { X if(um_dist(mtmp->mx, mtmp->my, 3)) { X--- 465,472 ---- X Monnam(mtmp)); X } else { X if(um_dist(mtmp->mx, mtmp->my, 5)) { X! pline("%s leash snaps loose!", X! s_suffix(Monnam(mtmp))); X m_unleash(mtmp); X } else { X if(um_dist(mtmp->mx, mtmp->my, 3)) { X*************** X*** 615,629 **** X if(On_stairs(u.ux, u.uy)) { X if(u.ux == xdnladder || u.ux == xupladder) X pline("The ladder resists your effort."); X! else pline("The stairs here are too hard to dig in."); X return(0); X } X if(IS_THRONE(levl[u.ux][u.uy].typ)) { X! pline("The throne here is too hard to break apart."); X return (0); X } X if(IS_ALTAR(levl[u.ux][u.uy].typ)) { X! pline("The altar here is too hard to break apart."); X return (0); X } X if(t_at(dpx, dpy) && !Can_dig_down(&u.uz)) { X--- 612,626 ---- X if(On_stairs(u.ux, u.uy)) { X if(u.ux == xdnladder || u.ux == xupladder) X pline("The ladder resists your effort."); X! else pline("The stairs are too hard to dig in."); X return(0); X } X if(IS_THRONE(levl[u.ux][u.uy].typ)) { X! pline("The throne is too hard to break apart."); X return (0); X } X if(IS_ALTAR(levl[u.ux][u.uy].typ)) { X! pline("The altar is too hard to break apart."); X return (0); X } X if(t_at(dpx, dpy) && !Can_dig_down(&u.uz)) { X*************** X*** 631,637 **** X return(0); X } X if(sobj_at(BOULDER, dpx, dpy)) { X! pline("There is not enough room here to dig."); X return(0); X } X if(Is_airlevel(&u.uz)) { X--- 628,634 ---- X return(0); X } X if(sobj_at(BOULDER, dpx, dpy)) { X! pline("There isn't enough room to dig here."); X return(0); X } X if(Is_airlevel(&u.uz)) { X*************** X*** 694,700 **** X ttmp = maketrap(dpx,dpy,PIT); X ttmp->tseen = 1; X if(Invisible) newsym(ttmp->tx,ttmp->ty); X! You("have dug a pit."); X u.utrap = rn1(4,2); X u.utraptype = TT_PIT; X vision_full_recalc = 1; /* vision limits change */ X--- 691,697 ---- X ttmp = maketrap(dpx,dpy,PIT); X ttmp->tseen = 1; X if(Invisible) newsym(ttmp->tx,ttmp->ty); X! You("dig a pit."); X u.utrap = rn1(4,2); X u.utraptype = TT_PIT; X vision_full_recalc = 1; /* vision limits change */ X*************** X*** 730,740 **** X } X } X lev->typ = CORR; X! digtxt = "You succeeded in cutting away some rock."; X } else if(IS_WALL(lev->typ)) { X if(shopedge) { X add_damage(dpx, dpy, 10L * ACURRSTR); X! dmgtxt = "dig into"; X } X if (level.flags.is_maze_lev) { X lev->typ = ROOM; X--- 727,737 ---- X } X } X lev->typ = CORR; X! digtxt = "You succeed in cutting away some rock."; X } else if(IS_WALL(lev->typ)) { X if(shopedge) { X add_damage(dpx, dpy, 10L * ACURRSTR); X! dmgtxt = "damage"; X } X if (level.flags.is_maze_lev) { X lev->typ = ROOM; X*************** X*** 744,757 **** X lev->typ = DOOR; X lev->doormask = D_NODOOR; X } X! digtxt = "You just made an opening in the wall."; X } else if(lev->typ == SDOOR) { X lev->typ = DOOR; X! digtxt = "You just broke through a secret door."; X if(!(lev->doormask & D_TRAPPED)) X lev->doormask = D_BROKEN; X } else if(closed_door(dpx, dpy)) { X! digtxt = "You just broke a hole through the door."; X if(shopedge) { X add_damage(dpx, dpy, 400L); X dmgtxt = "break"; X--- 741,754 ---- X lev->typ = DOOR; X lev->doormask = D_NODOOR; X } X! digtxt = "You make an opening in the wall."; X } else if(lev->typ == SDOOR) { X lev->typ = DOOR; X! digtxt = "You break through a secret door!"; X if(!(lev->doormask & D_TRAPPED)) X lev->doormask = D_BROKEN; X } else if(closed_door(dpx, dpy)) { X! digtxt = "You break through the door."; X if(shopedge) { X add_damage(dpx, dpy, 400L); X dmgtxt = "break"; X*************** X*** 780,786 **** X mtmp = makemon(&mons[PM_XORN], dpx, dpy); X break; X } X! if(mtmp) pline("The debris of your dig comes alive!"); X } X if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) { X b_trapped("door"); X--- 777,783 ---- X mtmp = makemon(&mons[PM_XORN], dpx, dpy); X break; X } X! if(mtmp) pline("The debris from your digging comes to life!"); X } X if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) { X b_trapped("door"); X*************** X*** 844,850 **** X boolean nohole = !Can_dig_down(&u.uz); X X if(ttmp && nohole) { X! pline("The floor here seems too hard to dig in."); X } else { X d_level newlevel; X X--- 841,847 ---- X boolean nohole = !Can_dig_down(&u.uz); X X if(ttmp && nohole) { X! pline("The floor here is too hard to dig in."); X } else { X d_level newlevel; X X*************** X*** 852,857 **** X--- 849,855 ---- X pline( X "The %s sloshes furiously for a moment, then subsides.", X is_lava(u.ux, u.uy) ? "lava" : "water"); X+ wake_nearby(); /* splashing */ X return; X } X if (lev->typ == DRAWBRIDGE_DOWN) { X*************** X*** 904,910 **** X * destroy the drawbridge. The following is X * a cop-out. --dlc X */ X! pline("The floor here seems too hard to dig in."); X return; X } X } X--- 902,908 ---- X * destroy the drawbridge. The following is X * a cop-out. --dlc X */ X! pline("The floor here is too hard to dig in."); X return; X } X } X*************** X*** 911,916 **** X--- 909,915 ---- X X lev->drawbridgemask &= DB_DIR; X if(typ == LAVAPOOL) lev->drawbridgemask |= DB_LAVA; X+ liquid_flow: X newsym(u.ux,u.uy); X X pline("As you dig a pit, it fills with %s!", X*************** X*** 927,937 **** X } X return; X } else if (lev->typ == ICE) { X! /* assume we can remove most of the ice by drilling X! * without melting it or allowing neighboring water X! * to flow in. X! */ X! lev->typ = ROOM; X } else if (IS_FOUNTAIN(lev->typ)) { X dogushforth(FALSE); X dryup(u.ux,u.uy); X--- 926,943 ---- X } X return; X } else if (lev->typ == ICE) { X! schar typ = fillholetyp(u.ux,u.uy); X! X! if(typ == ROOM) { X! if(nohole) { X! /* can't make a trapdoor, so make a pit */ X! ttmp = maketrap(u.ux, u.uy, PIT); X! } else X! ttmp = maketrap(u.ux, u.uy, TRAPDOOR); X! } else { X! lev->typ = typ; X! goto liquid_flow; X! } X } else if (IS_FOUNTAIN(lev->typ)) { X dogushforth(FALSE); X dryup(u.ux,u.uy); X*************** X*** 943,952 **** X #endif X /* the following two are here for the wand of digging */ X } else if(IS_THRONE(levl[u.ux][u.uy].typ)) { X! pline("The throne here is too hard to break apart."); X return; X } else if(IS_ALTAR(levl[u.ux][u.uy].typ)) { X! pline("The altar here is too hard to break apart."); X return; X } else if(ttmp) { X ttmp->ttyp = TRAPDOOR; X--- 949,958 ---- X #endif X /* the following two are here for the wand of digging */ X } else if(IS_THRONE(levl[u.ux][u.uy].typ)) { X! pline("The throne is too hard to break apart."); X return; X } else if(IS_ALTAR(levl[u.ux][u.uy].typ)) { X! pline("The altar is too hard to break apart."); X return; X } else if(ttmp) { X ttmp->ttyp = TRAPDOOR; X*************** X*** 958,964 **** X ttmp->tseen = 1; X if(Invisible) newsym(ttmp->tx,ttmp->ty); X if(ttmp->ttyp == PIT) { X! You("have dug a pit."); X if(!Levitation) { X u.utrap = rn1(4,2); X u.utraptype = TT_PIT; X--- 964,970 ---- X ttmp->tseen = 1; X if(Invisible) newsym(ttmp->tx,ttmp->ty); X if(ttmp->ttyp == PIT) { X! You("dig a pit."); X if(!Levitation) { X u.utrap = rn1(4,2); X u.utraptype = TT_PIT; X*************** X*** 967,973 **** X u.utrap = 0; X return; X } X! pline("You've made a hole in the floor."); X X /* floor objects get a chance of falling down. X * the case where the hero does NOT fall down X--- 973,979 ---- X u.utrap = 0; X return; X } X! pline("You dig a hole through the floor."); X X /* floor objects get a chance of falling down. X * the case where the hero does NOT fall down X*************** X*** 1072,1078 **** X if(Levitation) X You("don't have enough leverage."); X else X! You("cannot reach the ceiling."); X } else if(!u.dx && !u.dy && !u.dz) { X char buf[BUFSZ]; X int dam; X--- 1078,1084 ---- X if(Levitation) X You("don't have enough leverage."); X else X! You("can't reach the ceiling."); X } else if(!u.dx && !u.dy && !u.dz) { X char buf[BUFSZ]; X int dam; X*************** X*** 1079,1087 **** X X dam = rnd(2) + dbon() + obj->spe; X if (dam <= 0) dam = 1; X! You("hit yourself with your own pick-axe."); X /* self_pronoun() won't work twice in a sentence */ X! Strcpy(buf, self_pronoun("killed %sself with %%s own pick-axe", X "him")); X losehp(dam, self_pronoun(buf, "his"), NO_KILLER_PREFIX); X flags.botl=1; X--- 1085,1093 ---- X X dam = rnd(2) + dbon() + obj->spe; X if (dam <= 0) dam = 1; X! You("hit yourself with your pick-axe."); X /* self_pronoun() won't work twice in a sentence */ X! Strcpy(buf, self_pronoun("killed %sself with %%s pick-axe", X "him")); X losehp(dam, self_pronoun(buf, "his"), NO_KILLER_PREFIX); X flags.botl=1; X*************** X*** 1135,1141 **** X /* it must be air -- water checked above */ X You("swing your %s through thin air.", aobjnam(obj, NULL)); X } else if(Levitation) { X! You("cannot reach the floor."); X } else if (is_pool(u.ux, u.uy)) { X /* Monsters which swim also happen not to be able to dig */ X You("cannot stay underwater long enough."); X--- 1141,1147 ---- X /* it must be air -- water checked above */ X You("swing your %s through thin air.", aobjnam(obj, NULL)); X } else if(Levitation) { X! You("can't reach the floor."); X } else if (is_pool(u.ux, u.uy)) { X /* Monsters which swim also happen not to be able to dig */ X You("cannot stay underwater long enough."); X*************** X*** 1181,1191 **** X #ifdef POLYSELF X if(u.umonnum == PM_FLOATING_EYE) { X pline(Hallucination ? X! "Yow! The mirror stared back at you!" : X "Yikes! You've frozen yourself!"); X nomul(-rnd((MAXULEV+6) - (int)u.ulevel)); X } else if (u.usym == S_VAMPIRE) X! You("don't seem to reflect anything."); X else if(u.umonnum == PM_UMBER_HULK) { X pline("Huh? That doesn't look like you!"); X make_confused(HConfusion + d(3,4),FALSE); X--- 1187,1197 ---- X #ifdef POLYSELF X if(u.umonnum == PM_FLOATING_EYE) { X pline(Hallucination ? X! "Yow! The mirror stares back!" : X "Yikes! You've frozen yourself!"); X nomul(-rnd((MAXULEV+6) - (int)u.ulevel)); X } else if (u.usym == S_VAMPIRE) X! You("don't have a reflection."); X else if(u.umonnum == PM_UMBER_HULK) { X pline("Huh? That doesn't look like you!"); X make_confused(HConfusion + d(3,4),FALSE); X*************** X*** 1215,1221 **** X return 1; X } X if(Underwater) { X! You("offer the fish a chance to do some makeup."); X return 1; X } X if(u.dz) { X--- 1221,1229 ---- X return 1; X } X if(Underwater) { X! You(Hallucination ? X! "give the fish a chance to fix their makeup." : X! "reflect the murky water."); X return 1; X } X if(u.dz) { X*************** X*** 1232,1246 **** X mlet = mtmp->data->mlet; X if(mtmp->msleep) { X if (vis) X! pline ("%s is tired and doesn't look at your mirror.", X Monnam(mtmp)); X } else if (!mtmp->mcansee) { X if (vis) X! pline("%s can't see anything at the moment.", Monnam(mtmp)); X /* some monsters do special things */ X } else if (mlet == S_VAMPIRE || mlet == S_GHOST) { X if (vis) X! pline ("%s doesn't seem to reflect anything.", Monnam(mtmp)); X } else if(!mtmp->mcan && mtmp->data == &mons[PM_MEDUSA]) { X if (vis) X pline("%s is turned to stone!", Monnam(mtmp)); X--- 1240,1254 ---- X mlet = mtmp->data->mlet; X if(mtmp->msleep) { X if (vis) X! pline ("%s is too tired to look at your mirror.", X Monnam(mtmp)); X } else if (!mtmp->mcansee) { X if (vis) X! pline("%s can't see anything right now.", Monnam(mtmp)); X /* some monsters do special things */ X } else if (mlet == S_VAMPIRE || mlet == S_GHOST) { X if (vis) X! pline ("%s doesn't have a reflection.", Monnam(mtmp)); X } else if(!mtmp->mcan && mtmp->data == &mons[PM_MEDUSA]) { X if (vis) X pline("%s is turned to stone!", Monnam(mtmp)); X*************** X*** 1254,1260 **** X * but Medusa and umber hulks can. X */ X if (vis) X! pline("%s is frozen by its reflection.",Monnam(mtmp)); X else You("hear something stop moving."); X mtmp->mcanmove = 0; X if ( (int) mtmp->mfrozen + tmp > 127) X--- 1262,1268 ---- X * but Medusa and umber hulks can. X */ X if (vis) X! pline("%s is frozen by its reflection.", Monnam(mtmp)); X else You("hear something stop moving."); X mtmp->mcanmove = 0; X if ( (int) mtmp->mfrozen + tmp > 127) X*************** X*** 1262,1274 **** X else mtmp->mfrozen += tmp; X } else if(!mtmp->mcan && mtmp->data == &mons[PM_UMBER_HULK]) { X if (vis) X! pline ("%s has confused itself!", Monnam(mtmp)); X mtmp->mconf = 1; X } else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH X || mtmp->data==&mons[PM_SUCCUBUS])) { X if (vis) { X! pline ("%s looks beautiful in your mirror.",Monnam(mtmp)); X! pline ("She decides to take it!"); X } else pline ("It steals your mirror!"); X setnotworn(obj); /* in case mirror was wielded */ X freeinv(obj); X--- 1270,1282 ---- X else mtmp->mfrozen += tmp; X } else if(!mtmp->mcan && mtmp->data == &mons[PM_UMBER_HULK]) { X if (vis) X! pline ("%s confuses itself!", Monnam(mtmp)); X mtmp->mconf = 1; X } else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH X || mtmp->data==&mons[PM_SUCCUBUS])) { X if (vis) { X! pline ("%s admires herself in your mirror.", Monnam(mtmp)); X! pline ("She takes it!"); X } else pline ("It steals your mirror!"); X setnotworn(obj); /* in case mirror was wielded */ X freeinv(obj); X*************** X*** 1286,1298 **** X ; X else if ((mtmp->minvis && !perceives(mtmp->data)) X || !haseyes(mtmp->data)) X! pline("%s doesn't seem to be aware of its reflection.", X Monnam(mtmp)); X else X! pline("%s doesn't seem to mind %s reflection.", X! Monnam(mtmp), X! humanoid(mtmp->data) ? (mtmp->female ? "her" : "his") X! : "its"); X } X return 1; X } X--- 1294,1304 ---- X ; X else if ((mtmp->minvis && !perceives(mtmp->data)) X || !haseyes(mtmp->data)) X! pline("%s doesn't seem to notice its reflection.", X Monnam(mtmp)); X else X! pline("%s ignores %s reflection.", X! Monnam(mtmp), his[pronoun_gender(mtmp)]); X } X return 1; X } X*************** X*** 1304,1310 **** X You("ring %s.", the(xname(obj))); X X if(Underwater) { X! pline("But it sounds kind of muffled."); X return; X } X if(obj->otyp == BELL) { X--- 1310,1319 ---- X You("ring %s.", the(xname(obj))); X X if(Underwater) { X! #ifdef AMIGA X! amii_speaker( obj, "AwDwGwEwDhEhAqDqFwGw", AMII_MUFFLED_VOLUME ); X! #endif X! pline("But the sound is muffled."); X return; X } X if(obj->otyp == BELL) { X*************** X*** 1312,1317 **** X--- 1321,1329 ---- X pline(nothing_happens); X return; X } X+ #ifdef AMIGA X+ amii_speaker( obj, "awdwgwewdhehaqdqfwgw", AMII_MUFFLED_VOLUME ); X+ #endif X if(obj->cursed && !rn2(3)) { X register struct monst *mtmp; X X*************** X*** 1339,1346 **** X } X if(invocation_pos(u.ux, u.uy) && X !On_stairs(u.ux, u.uy) && !u.uswallow) { X! pline("%s emits an unnerving high-pitched sound...", X! The(xname(obj))); X obj->age = moves; X if(obj->spe > 0) obj->spe--; X wake_nearby(); X--- 1351,1360 ---- X } X if(invocation_pos(u.ux, u.uy) && X !On_stairs(u.ux, u.uy) && !u.uswallow) { X! pline("%s issues an unsettling shrill sound...", The(xname(obj))); X! #ifdef AMIGA X! amii_speaker( obj, "aefeaefeaefeaefeaefe", AMII_LOUDER_VOLUME ); X! #endif X obj->age = moves; X if(obj->spe > 0) obj->spe--; X wake_nearby(); X*************** X*** 1351,1356 **** X--- 1365,1373 ---- X if(obj->spe > 0) { X register int cnt = openit(); X if(cnt == -1) return; /* was swallowed */ X+ #ifdef AMIGA X+ amii_speaker( obj, "awawawDwEwCw", AMII_SOFT_VOLUME ); X+ #endif X switch(cnt) { X case 0: pline(nothing_happens); break; X case 1: pline("Something opens..."); break; X*************** X*** 1360,1365 **** X--- 1377,1385 ---- X obj->spe--; X } else pline(nothing_happens); X } else { /* uncursed */ X+ #ifdef AMIGA X+ amii_speaker( obj, "AeFeaeFeAefegW", AMII_OKAY_VOLUME ); X+ #endif X if(obj->spe > 0) { X register int cnt = findit(); X if(cnt == 0) pline(nothing_happens); X*************** X*** 1377,1387 **** X register struct obj *obj; X { X if(Underwater) { X! You("can't make fire under water."); X return; X } X if(obj->lamplit) { X! You("snuff the candle%s out.", obj->spe > 1 ? "s" : ""); X obj->lamplit = 0; X check_lamps(); X return; X--- 1397,1407 ---- X register struct obj *obj; X { X if(Underwater) { X! You("cannot make fire under water."); X return; X } X if(obj->lamplit) { X! You("snuff the candle%s.", obj->spe > 1 ? "s" : ""); X obj->lamplit = 0; X check_lamps(); X return; X*************** X*** 1391,1397 **** X return; X } X if(u.uswallow || obj->cursed) { X! pline("The candle%s flicker%s on for a moment, then die%s.", X obj->spe > 1 ? "s" : "", X obj->spe > 1 ? "" : "s", X obj->spe > 1 ? "" : "s"); X--- 1411,1417 ---- X return; X } X if(u.uswallow || obj->cursed) { X! pline("The candle%s flicker%s for a moment, then die%s.", X obj->spe > 1 ? "s" : "", X obj->spe > 1 ? "" : "s", X obj->spe > 1 ? "" : "s"); X*************** X*** 1403,1409 **** X obj->spe, X obj->spe > 1 ? "s" : "", X the(xname(obj))); X! pline("%s lit. %s emits a dim light.", X obj->spe == 1 ? "It is" : "They are", The(xname(obj))); X } else { X pline("%s's candles burn%s", The(xname(obj)), X--- 1423,1430 ---- X obj->spe, X obj->spe > 1 ? "s" : "", X the(xname(obj))); X! if (!Blind) X! pline("%s lit. %s shines dimly.", X obj->spe == 1 ? "It is" : "They are", The(xname(obj))); X } else { X pline("%s's candles burn%s", The(xname(obj)), X*************** X*** 1414,1421 **** X (obj->spe > 1 ? "s are" : " is")); X obj->age /= 2; X } else { X! if(obj->spe == 7) X! pline("%s glows with a strange light!", The(xname(obj))); X obj->known = 1; X } X obj->lamplit = 1; X--- 1435,1446 ---- X (obj->spe > 1 ? "s are" : " is")); X obj->age /= 2; X } else { X! if(obj->spe == 7) { X! if (Blind) X! pline("%s radiates a strange warmth!", The(xname(obj))); X! else X! pline("%s glows with a strange light!", The(xname(obj))); X! } X obj->known = 1; X } X obj->lamplit = 1; X*************** X*** 1472,1478 **** X (needed > 1L && obj->quan > 1L) ? "s" : "", X (needed > 1L && obj->quan > 1L) ? "" : "s"); X if(obj->unpaid) X! You("use %s, you bought %s!", X (needed > 1L && obj->quan > 1L) ? "them" : "it", X (needed > 1L && obj->quan > 1L) ? "them" : "it"); X if(!otmp->spe || otmp->age > obj->age) X--- 1497,1503 ---- X (needed > 1L && obj->quan > 1L) ? "s" : "", X (needed > 1L && obj->quan > 1L) ? "" : "s"); X if(obj->unpaid) X! verbalize("You burn %s, you bought %s!", X (needed > 1L && obj->quan > 1L) ? "them" : "it", X (needed > 1L && obj->quan > 1L) ? "them" : "it"); X if(!otmp->spe || otmp->age > obj->age) X*************** X*** 1513,1521 **** X if ((candle || otmp->otyp == CANDELABRUM_OF_INVOCATION) && X otmp->lamplit) { X register boolean many = candle ? otmp->quan > 1L : otmp->spe > 1; X! pline("The %scandle%s flame%s extinguished.", X! (candle ? "" : "candelabrum's "), X! (many ? "s'" : "'s"), (many ? "s are" : " is")); X otmp->lamplit = 0; X check_lamps(); X return(TRUE); X--- 1538,1547 ---- X if ((candle || otmp->otyp == CANDELABRUM_OF_INVOCATION) && X otmp->lamplit) { X register boolean many = candle ? otmp->quan > 1L : otmp->spe > 1; X! if (!Blind) X! pline("The %scandle%s flame%s extinguished.", X! (candle ? "" : "candelabrum's "), X! (many ? "s'" : "'s"), (many ? "s are" : " is")); X otmp->lamplit = 0; X check_lamps(); X return(TRUE); X*************** X*** 1530,1536 **** X if(obj->lamplit) { X if(obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP || X obj->otyp == BRASS_LANTERN) { X! Your("lamp is now off."); X obj->lamplit = 0; X check_lamps(); X return(TRUE); X--- 1556,1562 ---- X if(obj->lamplit) { X if(obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP || X obj->otyp == BRASS_LANTERN) { X! if (!Blind) Your("lamp is now off."); X obj->lamplit = 0; X check_lamps(); X return(TRUE); X*************** X*** 1567,1573 **** X return; X } X if(obj->cursed && !rn2(2)) X! pline("%s flicker%s on for a moment, then die%s.", X The(xname(obj)), X obj->quan > 1L ? "" : "s", X obj->quan > 1L ? "" : "s"); X--- 1593,1599 ---- X return; X } X if(obj->cursed && !rn2(2)) X! pline("%s flicker%s for a moment, then die%s.", X The(xname(obj)), X obj->quan > 1L ? "" : "s", X obj->quan > 1L ? "" : "s"); X*************** X*** 1586,1592 **** X if (obj->unpaid && Is_candle(obj) && X obj->age == 20L * (long)objects[obj->otyp].oc_cost) { X const char *it_them = obj->quan > 1L ? "them" : "it"; X! You("use %s, you've bought %s!", it_them, it_them); X bill_dummy_object(obj); X } X } X--- 1612,1618 ---- X if (obj->unpaid && Is_candle(obj) && X obj->age == 20L * (long)objects[obj->otyp].oc_cost) { X const char *it_them = obj->quan > 1L ? "them" : "it"; X! verbalize("You burn %s, you bought %s!", it_them, it_them); X bill_dummy_object(obj); X } X } X*************** X*** 1613,1619 **** X } X } X X! static const char NEARDATA cuddly[] = { TOOL_CLASS, 0 }; X X int X dorub() X--- 1639,1645 ---- X } X } X X! static NEARDATA const char cuddly[] = { TOOL_CLASS, 0 }; X X int X dorub() X*************** X*** 1683,1694 **** X You("cannot trample %s!", mon_nam(mtmp)); X return 0; X } else if (!isok(cc.x, cc.y) || X #ifdef POLYSELF X! (IS_ROCK(levl[cc.x][cc.y].typ) && !passes_walls(uasmon)) || X! #else X! IS_ROCK(levl[cc.x][cc.y].typ) || X #endif X! sobj_at(BOULDER, cc.x, cc.x) ) { X You("cannot jump there!"); X return 0; X } else { X--- 1709,1720 ---- X You("cannot trample %s!", mon_nam(mtmp)); X return 0; X } else if (!isok(cc.x, cc.y) || X+ ((IS_ROCK(levl[cc.x][cc.y].typ) || X+ sobj_at(BOULDER, cc.x, cc.y) || closed_door(cc.x, cc.y)) X #ifdef POLYSELF X! && !(passes_walls(uasmon) && may_passwall(cc.x, cc.y)) X #endif X! )) { X You("cannot jump there!"); X return 0; X } else { X*************** X*** 1696,1702 **** X switch(u.utraptype) { X case TT_BEARTRAP: { X register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE; X! You("rip yourself out of the bear trap! Ouch!"); X losehp(rnd(10), "jumping out of a bear trap", KILLED_BY); X set_wounded_legs(side, rn1(1000,500)); X break; X--- 1722,1728 ---- X switch(u.utraptype) { X case TT_BEARTRAP: { X register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE; X! You("rip yourself free of the bear trap! Ouch!"); X losehp(rnd(10), "jumping out of a bear trap", KILLED_BY); X set_wounded_legs(side, rn1(1000,500)); X break; X*************** X*** 1713,1719 **** X u.utrap = 0; X return 1; X case TT_INFLOOR: X! You("strain your %s, but are still stuck in the floor.", X makeplural(body_part(LEG))); X set_wounded_legs(LEFT_SIDE, rn1(10, 11)); X set_wounded_legs(RIGHT_SIDE, rn1(10, 11)); X--- 1739,1745 ---- X u.utrap = 0; X return 1; X case TT_INFLOOR: X! You("strain your %s, but you're still stuck in the floor.", X makeplural(body_part(LEG))); X set_wounded_legs(LEFT_SIDE, rn1(10, 11)); X set_wounded_legs(RIGHT_SIDE, rn1(10, 11)); X*************** X*** 1747,1753 **** X && !resists_ston(uasmon) X #endif X && !uarmg) { X! pline("Tinning a cockatrice corpse without gloves was not a very wise move..."); X #if defined(POLYSELF) X /* this will have to change if more monsters can poly */ X if(!(poly_when_stoned(uasmon) && polymon(PM_STONE_GOLEM))) X--- 1773,1779 ---- X && !resists_ston(uasmon) X #endif X && !uarmg) { X! pline("Tinning a cockatrice without wearing gloves is a fatal mistake..."); X #if defined(POLYSELF) X /* this will have to change if more monsters can poly */ X if(!(poly_when_stoned(uasmon) && polymon(PM_STONE_GOLEM))) X*************** X*** 1759,1773 **** X done(STONING); X } X } X- if (mons[corpse->corpsenm].cnutrit == 0) { X- You("can't tin something that insubstantial!"); X- return; X- } X if (is_rider(&mons[corpse->corpsenm])) { X revive_corpse(corpse, 0, FALSE); X! verbalize("Yes.... But War does not preserve its enemies..."); X return; X } X if(can = mksobj(TIN, FALSE, FALSE)) { X can->corpsenm = corpse->corpsenm; X can->cursed = obj->cursed; X--- 1785,1799 ---- X done(STONING); X } X } X if (is_rider(&mons[corpse->corpsenm])) { X revive_corpse(corpse, 0, FALSE); X! verbalize("Yes... But War does not preserve its enemies..."); X return; X } X+ if (mons[corpse->corpsenm].cnutrit == 0) { X+ pline("That's too insubstantial to tin."); X+ return; X+ } X if(can = mksobj(TIN, FALSE, FALSE)) { X can->corpsenm = corpse->corpsenm; X can->cursed = obj->cursed; X*************** X*** 1775,1784 **** X can->owt = weight(can); X can->known = 1; X can->spe = -1; /* Mark tinned tins. No spinach allowed... */ X can = hold_another_object(can, "You make, but cannot pick up, %s.", X doname(can), (const char *)0); X- if (carried(corpse)) useup(corpse); X- else useupf(corpse); X } else impossible("Tinning failed."); X } X X--- 1801,1822 ---- X can->owt = weight(can); X can->known = 1; X can->spe = -1; /* Mark tinned tins. No spinach allowed... */ X+ if (carried(corpse)) { X+ if(corpse->unpaid) { X+ verbalize("You tin it, you bought it!"); X+ bill_dummy_object(corpse); X+ } X+ useup(corpse); X+ } else { X+ if(costly_spot(corpse->ox, corpse->oy) && X+ !corpse->no_charge) { X+ verbalize("You tin it, you bought it!"); X+ bill_dummy_object(corpse); X+ } X+ useupf(corpse); X+ } X can = hold_another_object(can, "You make, but cannot pick up, %s.", X doname(can), (const char *)0); X } else impossible("Tinning failed."); X } X X*************** X*** 1874,1893 **** X } X x = u.ux + u.dx; y = u.uy + u.dy; X if (!isok(x,y)) { X! You("can't seem to put the figurine there."); X return; X } X! if (IS_ROCK(levl[x][y].typ) && !passes_walls(&mons[obj->corpsenm])) { X! You("can't place a figurine in solid rock!"); X return; X } X if (sobj_at(BOULDER,x,y) && !passes_walls(&mons[obj->corpsenm]) X && !throws_rocks(&mons[obj->corpsenm])) { X! You("can't fit the figurine on the boulder."); X return; X } X You("%s and it transforms.", X! (u.dx||u.dy) ? "set the figurine besides you" : X (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) ? X "release the figurine" : X (u.dz < 0 ? X--- 1912,1932 ---- X } X x = u.ux + u.dx; y = u.uy + u.dy; X if (!isok(x,y)) { X! You("cannot put the figurine there."); X return; X } X! if (IS_ROCK(levl[x][y].typ) && X! !(passes_walls(&mons[obj->corpsenm]) && may_passwall(x,y))) { X! You("cannot place a figurine in solid rock!"); X return; X } X if (sobj_at(BOULDER,x,y) && !passes_walls(&mons[obj->corpsenm]) X && !throws_rocks(&mons[obj->corpsenm])) { X! You("cannot fit the figurine on the boulder."); X return; X } X You("%s and it transforms.", X! (u.dx||u.dy) ? "set the figurine beside you" : X (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) ? X "release the figurine" : X (u.dz < 0 ? X*************** X*** 1897,1902 **** X--- 1936,1943 ---- X useup(obj); X } X X+ static NEARDATA const char lubricables[] = { ALL_CLASSES, ALLOW_NONE, 0 }; X+ X static void X use_grease(obj) X struct obj *obj; X*************** X*** 1903,1923 **** X { X struct obj *otmp; X X if (obj->spe > 0) { X! char allow_all[2]; X! if (obj->cursed && !rn2(2)) { X! pline("The %s slips from your fingers!",xname(obj)); X dropx(obj); X! obj->spe -= 1; X return; X } X! allow_all[0] = ALL_CLASSES; allow_all[1] = '\0'; X! otmp = getobj(allow_all,"grease"); X! if (otmp) { X! You("cover your %s with a thick layer of grease.",xname(otmp)); X otmp->greased = 1; X! obj->spe -= 1; X } X } X } X X--- 1944,1979 ---- X { X struct obj *otmp; X X+ if (Glib) { X+ dropx(obj); X+ pline("%s slips from your %s.", The(xname(obj)), X+ makeplural(body_part(FINGER))); X+ return; X+ } X+ X if (obj->spe > 0) { X! if ((obj->cursed || Fumbling) && !rn2(2)) { X! obj->spe--; X dropx(obj); X! pline("%s slips from your %s.", The(xname(obj)), X! makeplural(body_part(FINGER))); X return; X } X! otmp = getobj(lubricables, "grease"); X! if (!otmp) return; X! obj->spe--; X! if (otmp != &zeroobj) { X! You("cover your %s with a thick layer of grease.", X! xname(otmp)); X otmp->greased = 1; X! } else { X! Glib += rnd(15); X! You("coat your %s with grease.", X! makeplural(body_part(FINGER))); X } X+ } else { X+ pline("%s %s empty.", The(xname(obj)), X+ obj->known ? "is" : "seems to be"); X } X } X X*************** X*** 1940,1947 **** X else Blindf_off(obj); X } X else if (!ublindf) Blindf_on(obj); X! else You("are already %s", ublindf->otyp == TOWEL ? X! "covered by a towel." : "wearing a blindfold!"); X break; X case LARGE_BOX: X case CHEST: X--- 1996,2003 ---- X else Blindf_off(obj); X } X else if (!ublindf) Blindf_on(obj); X! else You("are already %s.", ublindf->otyp == TOWEL ? X! "covered by a towel" : "wearing a blindfold"); X break; X case LARGE_BOX: X case CHEST: X*************** X*** 1955,1961 **** X if(obj->spe > 0) { X register int cnt = 1; X X! obj->spe -= 1; X if(!rn2(23)) cnt += rn2(7) + 1; X while(cnt--) X (void) makemon((struct permonst *) 0, u.ux, u.uy); X--- 2011,2017 ---- X if(obj->spe > 0) { X register int cnt = 1; X X! obj->spe--; X if(!rn2(23)) cnt += rn2(7) + 1; X while(cnt--) X (void) makemon((struct permonst *) 0, u.ux, u.uy); X*************** X*** 2057,2075 **** X case DRUM_OF_EARTHQUAKE: X res = do_play_instrument(obj); X break; X! case HORN_OF_PLENTY: X if (obj->spe > 0) { X struct obj *otmp; X const char *what; X X! #ifdef MAC X! char melody [ 3 ] = { 0 , 0 , 0 } ; X! melody [ 0 ] = rn2 ( 8 ) + 'A' ; X! melody [ 1 ] = rn2 ( 8 ) + 'A' ; X! mac_speaker ( obj , & melody ) ; X! #endif X! X! obj->spe -= 1; X if (!rn2(13)) { X otmp = mkobj(POTION_CLASS, FALSE); X if (objects[otmp->otyp].oc_magic) do { X--- 2113,2124 ---- X case DRUM_OF_EARTHQUAKE: X res = do_play_instrument(obj); X break; X! case HORN_OF_PLENTY: /* not a musical instrument */ X if (obj->spe > 0) { X struct obj *otmp; X const char *what; X X! obj->spe--; X if (!rn2(13)) { X otmp = mkobj(POTION_CLASS, FALSE); X if (objects[otmp->otyp].oc_magic) do { X*************** X*** 2086,2092 **** X otmp->blessed = obj->blessed; X otmp->cursed = obj->cursed; X otmp->owt = weight(otmp); X! otmp = hold_another_object(otmp, u.uswallow ? X "Oops! %s away from you!" : X "Oops! %s to the floor!", X The(aobjnam(otmp, "slip")), X--- 2135,2143 ---- X otmp->blessed = obj->blessed; X otmp->cursed = obj->cursed; X otmp->owt = weight(otmp); X! otmp = hold_another_object(otmp, X! (u.uswallow || Is_airlevel(&u.uz) || X! u.uinwater || Is_waterlevel(&u.uz)) ? X "Oops! %s away from you!" : X "Oops! %s to the floor!", X The(aobjnam(otmp, "slip")), X*** /tmp/da08021 Thu Feb 25 10:22:11 1993 X--- src/artifact.c Tue Feb 23 15:12:12 1993 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)artifact.c 3.1 93/01/17 */ 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: @(#)artifact.c 3.1 93/02/17 */ X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 192,197 **** X--- 192,213 ---- X return a; X } X X+ /* X+ * This function is used to un-create an artifact. Normally, when an artifact X+ * is destroyed, it cannot be re-created by any means. However, if you call X+ * this function _before_ destroying the object, then the artifact can be X+ * re-created later on. Currently used only by the wish code. X+ */ X+ void X+ artifact_unexist(otmp) X+ register struct obj *otmp; X+ { X+ if (otmp->oartifact && artiexist[otmp->oartifact]) X+ artiexist[otmp->oartifact] = 0; X+ else X+ impossible("Destroying non-existing artifact?!"); X+ } X+ X #endif /* OVLB */ X #ifdef OVL0 X X*************** X*** 401,407 **** X char buf[BUFSZ]; X X if (!yours) return 0; X! You("feel a blast of power flow from %s!", the(xname(obj))); X dmg = d((Antimagic ? 2 : 4) , ((oart->spfx & SPFX_INTEL) ? 10 : 4)); X Sprintf(buf, "touching %s", oart->name); X losehp(dmg, buf, KILLED_BY); X--- 417,423 ---- X char buf[BUFSZ]; X X if (!yours) return 0; X! pline("You are blasted by %s power!", s_suffix(the(xname(obj)))); X dmg = d((Antimagic ? 2 : 4) , ((oart->spfx & SPFX_INTEL) ? 10 : 4)); X Sprintf(buf, "touching %s", oart->name); X losehp(dmg, buf, KILLED_BY); X*************** X*** 410,416 **** X X /* can pick it up unless you're totally non-synch'd with the artifact */ X if(badclass && badalign && (oart->spfx & SPFX_INTEL)) { X! if (yours) pline("%s refuses to be held by you!", The(xname(obj))); X return 0; X } X X--- 426,432 ---- X X /* can pick it up unless you're totally non-synch'd with the artifact */ X if(badclass && badalign && (oart->spfx & SPFX_INTEL)) { X! if (yours) pline("%s evades your grasp!", The(xname(obj))); X return 0; X } X X*************** X*** 550,556 **** X } X if (attacks(AD_COLD, otmp)) { X if (realizes_damage) { X! pline("The chilling blade freezes %s!", hittee); X return TRUE; X } X } X--- 566,572 ---- X } X if (attacks(AD_COLD, otmp)) { X if (realizes_damage) { X! pline("The ice-cold blade freezes %s!", hittee); X return TRUE; X } X } X*************** X*** 558,564 **** X if (realizes_damage) { X if(youattack && otmp != uwep) X pline("%s hits %s!", The(xname(otmp)), hittee); X! pline("A bolt of lightning zaps %s!", hittee); X return TRUE; X } X } X--- 574,580 ---- X if (realizes_damage) { X if(youattack && otmp != uwep) X pline("%s hits %s!", The(xname(otmp)), hittee); X! pline("Lightning strikes %s!", hittee); X return TRUE; X } X } X*************** X*** 723,729 **** X } X } else if (youdefend && !MB_RESISTED_ATTACK X && (attack_index == MB_INDEX_PURGE)) { X! You("lose some magical energy!"); X if (u.uenmax > 0) u.uenmax--; X if (u.uen > 0) u.uen--; X flags.botl = 1; X--- 739,745 ---- X } X } else if (youdefend && !MB_RESISTED_ATTACK X && (attack_index == MB_INDEX_PURGE)) { X! You("lose magical energy!"); X if (u.uenmax > 0) u.uenmax--; X if (u.uen > 0) u.uen--; X flags.botl = 1; X*************** X*** 800,809 **** X if (!youdefend) { X if (!has_head(mdef->data) || notonhead) { X if (youattack) X! pline("Somehow you miss %s wildly.", X mon_nam(mdef)); X else if (vis) X! pline("Somehow %s misses wildly.", X mon_nam(magr)); X *dmgptr = 0; X return (youattack || vis); X--- 816,825 ---- X if (!youdefend) { X if (!has_head(mdef->data) || notonhead) { X if (youattack) X! pline("Somehow, you miss %s wildly.", X mon_nam(mdef)); X else if (vis) X! pline("Somehow, %s misses wildly.", X mon_nam(magr)); X *dmgptr = 0; X return (youattack || vis); X*************** X*** 817,823 **** X } else { X #ifdef POLYSELF X if (!has_head(uasmon)) { X! pline("Somehow %s misses you wildly.", X mon_nam(magr)); X *dmgptr = 0; X return TRUE; X--- 833,839 ---- X } else { X #ifdef POLYSELF X if (!has_head(uasmon)) { X! pline("Somehow, %s misses you wildly.", X mon_nam(magr)); X *dmgptr = 0; X return TRUE; X*************** X*** 884,890 **** X } X X static const char recharge_type[] = { ALLOW_COUNT, ALL_CLASSES, 0 }; X! static const char NEARDATA invoke_types[] = X { ALL_CLASSES, WEAPON_CLASS, ARMOR_CLASS, RING_CLASS, AMULET_CLASS, X TOOL_CLASS, 0 }; X X--- 900,906 ---- X } X X static const char recharge_type[] = { ALLOW_COUNT, ALL_CLASSES, 0 }; X! static NEARDATA const char invoke_types[] = X { ALL_CLASSES, WEAPON_CLASS, ARMOR_CLASS, RING_CLASS, AMULET_CLASS, X TOOL_CLASS, 0 }; X X*************** X*** 1021,1027 **** X You("feel very disoriented for a moment."); X } else { X if(!Blind) You("are surrounded by a shimmering sphere!"); X! else You("momentarily feel weightless."); X goto_level(&newlev, FALSE, FALSE, FALSE); X } X break; X--- 1037,1043 ---- X You("feel very disoriented for a moment."); X } else { X if(!Blind) You("are surrounded by a shimmering sphere!"); X! else You("feel weightless for a moment."); X goto_level(&newlev, FALSE, FALSE, FALSE); X } X break; X*************** X*** 1048,1060 **** X nothing_special: X /* you had the property from some other source too */ X if (carried(obj)) X! You("feel a surge of power, but notice no effect."); X return 1; X } X switch(oart->inv_prop) { X case CONFLICT: X if(on) You("feel like a rabble-rouser."); X! else You("feel the tension decrease in your vicinity."); X break; X case LEVITATION: X if(on) float_up(); X--- 1064,1076 ---- X nothing_special: X /* you had the property from some other source too */ X if (carried(obj)) X! You("feel a surge of power, but nothing seems to happen."); X return 1; X } X switch(oart->inv_prop) { X case CONFLICT: X if(on) You("feel like a rabble-rouser."); X! else You("feel the tension decrease around you."); X break; X case LEVITATION: X if(on) float_up(); X*** /tmp/da08029 Thu Feb 25 10:22:14 1993 X--- src/attrib.c Thu Feb 18 10:58:23 1993 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)attrib.c 3.1 92/10/26 */ X /* Copyright 1988, 1989, 1990, 1992, M. Stephenson */ X /* NetHack may be freely redistributed. See license for details. */ X X--- 1,4 ---- X! /* SCCS Id: @(#)attrib.c 3.1 93/02/17 */ X /* Copyright 1988, 1989, 1990, 1992, M. Stephenson */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 156,162 **** X { A_NEUTRAL, 0 }, 12, 10, 14, 1, 0 }; X X static long next_check = 600L; /* arbitrary first setting */ X! static const struct clattr NEARDATA *NDECL(clx); X static void NDECL(init_align); X static void NDECL(exerper); X X--- 156,162 ---- X { A_NEUTRAL, 0 }, 12, 10, 14, 1, 0 }; X X static long next_check = 600L; /* arbitrary first setting */ X! static NEARDATA const struct clattr *NDECL(clx); X static void NDECL(init_align); X static void NDECL(exerper); X X*************** X*** 449,455 **** X break; X case A_WIS: You((mod_val >0) ? X "must have been very observant." : X! "must not have been paying attention."); X break; X case A_DEX: You((mod_val >0) ? X "must have been working on your reflexes." : X--- 449,455 ---- X break; X case A_WIS: You((mod_val >0) ? X "must have been very observant." : X! "haven't been paying attention."); X break; X case A_DEX: You((mod_val >0) ? X "must have been working on your reflexes." : X*************** X*** 457,463 **** X break; X case A_CON: You((mod_val >0) ? X "must be leading a healthy life-style." : X! "must not have been watching your health."); X break; X } X } X--- 457,463 ---- X break; X case A_CON: You((mod_val >0) ? X "must be leading a healthy life-style." : X! "haven't been watching your health."); X break; X } X } X*** /tmp/da08037 Thu Feb 25 10:22:16 1993 X--- src/ball.c Thu Feb 18 10:58:25 1993 X*************** X*** 1,4 **** X! /* SCCS Id: @(#)ball.c 3.1 92/11/04 */ 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: @(#)ball.c 3.1 93/02/17 */ X /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X /* NetHack may be freely redistributed. See license for details. */ X X*************** X*** 367,386 **** X X if ((is_pool(uchain->ox, uchain->oy) && X (levl[uchain->ox][uchain->oy].typ == POOL || X! !is_pool(uball->ox, uball->oy) || X levl[uball->ox][uball->oy].typ == POOL)) X! || ((t = t_at(uchain->ox, uchain->oy)) && X (t->ttyp == PIT || X t->ttyp == SPIKED_PIT || X t->ttyp == TRAPDOOR)) ) { X X if (Levitation) { X! You("feel a tug from your iron ball."); X if (t) t->tseen = 1; X } else { X struct monst *victim; X X! You("are jerked back by your iron ball!"); X if (victim = m_at(uchain->ox, uchain->oy)) { X int tmp; X X--- 367,386 ---- X X if ((is_pool(uchain->ox, uchain->oy) && X (levl[uchain->ox][uchain->oy].typ == POOL || X! !is_pool(uball->ox, uball->oy) || X levl[uball->ox][uball->oy].typ == POOL)) X! || ((t = t_at(uchain->ox, uchain->oy)) && X (t->ttyp == PIT || X t->ttyp == SPIKED_PIT || X t->ttyp == TRAPDOOR)) ) { X X if (Levitation) { X! You("feel a tug from the iron ball."); X if (t) t->tseen = 1; X } else { X struct monst *victim; X X! You("are jerked back by the iron ball!"); X if (victim = m_at(uchain->ox, uchain->oy)) { X int tmp; X X*************** X*** 556,562 **** X X if (forward) { X if(rn2(6)) { X! You("get dragged downstairs by the iron ball."); X losehp(rnd(6), "dragged downstairs by an iron ball", X NO_KILLER_PREFIX); X litter(); X--- 556,562 ---- X X if (forward) { X if(rn2(6)) { X! pline("The iron ball drags you downstairs!"); X losehp(rnd(6), "dragged downstairs by an iron ball", X NO_KILLER_PREFIX); X litter(); X*************** X*** 569,575 **** X dragchance -= 2; X } X if( (int) dragchance >= rnd(6)) { X! You("get dragged downstairs by the iron ball."); X losehp(rnd(3), "dragged downstairs by an iron ball", X NO_KILLER_PREFIX); X exercise(A_STR, FALSE); X--- 569,575 ---- X dragchance -= 2; X } X if( (int) dragchance >= rnd(6)) { X! pline("The iron ball drags you downstairs!"); X losehp(rnd(3), "dragged downstairs by an iron ball", X NO_KILLER_PREFIX); X exercise(A_STR, FALSE); X*** /tmp/da08045 Thu Feb 25 10:22:19 1993 X--- src/bones.c Thu Feb 18 11:17:46 1993 X*************** X*** 165,171 **** X X if(ledger_no(&u.uz) <= 0 || ledger_no(&u.uz) > maxledgerno()) return; X if(no_bones_level(&u.uz)) return; /* no bones for specific levels */ X! if(!rn2(1 + (depth(&u.uz)>>2)) /* fewer ghosts on low levels */ X #ifdef WIZARD X && !wizard X #endif X--- 165,178 ---- X X if(ledger_no(&u.uz) <= 0 || ledger_no(&u.uz) > maxledgerno()) return; X if(no_bones_level(&u.uz)) return; /* no bones for specific levels */ X! if(!Is_branchlev(&u.uz)) { X! /* no bones on non-branches with portals */ X! for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) X! if (ttmp->ttyp == MAGIC_PORTAL) return; X! } X! X! if(depth(&u.uz) <= 0 || /* bulletproofing for endgame */ X! !rn2(1 + (depth(&u.uz)>>2)) /* fewer ghosts on low levels */ X #ifdef WIZARD X && !wizard X #endif X*************** X*** 259,265 **** X if(mtmp->mtame) mtmp->mtame = mtmp->mpeaceful = 0; X } X for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) { X- if(ttmp->ttyp == MAGIC_PORTAL) deltrap(ttmp); X ttmp->tseen = 0; X } X resetobjs(fobj,FALSE); X--- 266,271 ---- X*** /tmp/da08053 Thu Feb 25 10:22:21 1993 X--- src/botl.c Fri Feb 19 11:01:43 1993 X*************** X*** 30,36 **** X #ifndef OVLB X STATIC_DCL int mrank_sz; X #else /* OVLB */ X! STATIC_OVL int NEARDATA mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */ X #endif /* OVLB */ X X struct rank_title { X--- 30,36 ---- X #ifndef OVLB X STATIC_DCL int mrank_sz; X #else /* OVLB */ X! STATIC_OVL NEARDATA int mrank_sz = 0; /* loaded by max_rank_sz (from u_init) */ X #endif /* OVLB */ X X struct rank_title { X*************** X*** 99,111 **** X {"Elentar", "Elentari"} /* Star-king, -queen (Q.) */ X } }, X { 'H',0, PM_HEALER, { X! {"Barber", "Midwife"}, X! {"Leech", 0}, X {"Embalmer", 0}, X {"Dresser", 0}, X! {"Bone Setter", 0}, X {"Herbalist", 0}, X! {"Apothecary", 0}, X {"Physician", 0}, X {"Chirurgeon", 0} X } }, X--- 99,111 ---- X {"Elentar", "Elentari"} /* Star-king, -queen (Q.) */ X } }, X { 'H',0, PM_HEALER, { X! {"Rhizotomist", 0}, X! {"Empiric", 0}, X {"Embalmer", 0}, X {"Dresser", 0}, X! {"Medici ossium", 0}, X {"Herbalist", 0}, X! {"Magister", 0}, X {"Physician", 0}, X {"Chirurgeon", 0} X } }, X*************** X*** 286,291 **** X--- 286,305 ---- X #endif /* OVLB */ X #ifdef OVL0 X X+ #ifdef SCORE_ON_BOTL X+ long X+ botl_score() X+ { X+ int deepest = deepest_lev_reached(FALSE); X+ long ugold = u.ugold + hidden_gold(); X+ X+ if ((ugold -= u.ugold0) < 0L) ugold = 0L; X+ return ugold + u.urexp + (long)(50 * (deepest - 1)) X+ + (long)(deepest > 30 ? 10000 : X+ deepest > 20 ? 1000*(deepest - 20) : 0); X+ } X+ #endif X+ X static void X bot1() X { X*************** X*** 335,350 **** X Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? " Chaotic" : X (u.ualign.type == A_NEUTRAL) ? " Neutral" : " Lawful"); X #ifdef SCORE_ON_BOTL X! if (flags.showscore) { X! int deepest = deepest_lev_reached(FALSE); X! long ugold = u.ugold + hidden_gold(); X! X! if ((ugold -= u.ugold0) < 0L) ugold = 0L; X! Sprintf(nb = eos(nb), " S:%ld", X! ugold + u.urexp + (long)(50 * (deepest - 1)) X! + (long)(deepest > 30 ? 10000 : X! deepest > 20 ? 1000*(deepest - 20) : 0)); X! } X #endif X curs(WIN_STATUS, 1, 0); X putstr(WIN_STATUS, 0, newbot1); X--- 349,356 ---- X Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? " Chaotic" : X (u.ualign.type == A_NEUTRAL) ? " Neutral" : " Lawful"); X #ifdef SCORE_ON_BOTL X! if (flags.showscore) X! Sprintf(nb = eos(nb), " S:%ld", botl_score()); X #endif X curs(WIN_STATUS, 1, 0); X putstr(WIN_STATUS, 0, newbot1); X END_OF_FILE if test 56557 -ne `wc -c <'patches01a'`; then echo shar: \"'patches01a'\" unpacked with wrong size! fi # end of 'patches01a' echo shar: End of archive 2 \(of 31\). 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 31 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 31 archives. echo "Now execute 'patchit.sh'" 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