From: PatR Date: Sat, 18 Jun 2016 22:38:00 +0000 (-0700) Subject: fix #H3723 - eating "YUM YUM" scroll X-Git-Tag: NetHack-3.6.1_RC01~665 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1cad5efe1715cb98a8a51308f9d44932f2d0fd6b;p=nethack fix #H3723 - eating "YUM YUM" scroll From November, 2014, player thought eating a scroll labeled YUM YUM while polymorphed ought to give a special message. While implementing it, I noticed that if a g.cube managed to get on to a spot containing a scroll of scare monster, it would eat that along with everything else. --- diff --git a/doc/fixes36.1 b/doc/fixes36.1 index dc7db5c3b..34ceec7fc 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -300,6 +300,7 @@ conduct: wishing for an artifact and not getting it because it already exists counts as wishing for an artifact, just like when not getting it because of quest restrictions or too many artifacts in play does avoid ring of poison resistance as starting equipment for orcish wizard +gelatinous cube shouldn't be able to eat a scroll of scare monster Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository diff --git a/src/eat.c b/src/eat.c index ffc787d8a..5b8f08a8d 100644 --- a/src/eat.c +++ b/src/eat.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 eat.c $NHDT-Date: 1454715969 2016/02/05 23:46:09 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.163 $ */ +/* NetHack 3.6 eat.c $NHDT-Date: 1466289475 2016/06/18 22:37:55 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.169 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2014,12 +2014,23 @@ eatspecial() vault_gd_watching(GD_EATGOLD); return; } + if (objects[otmp->otyp].oc_material == PAPER) { #ifdef MAIL - if (otmp->otyp == SCR_MAIL) { - /* no nutrition */ - pline("This junk mail is less than satisfying."); - } + if (otmp->otyp == SCR_MAIL) + /* no nutrition */ + pline("This junk mail is less than satisfying."); + else #endif + if (otmp->otyp == SCR_SCARE_MONSTER) + /* to eat scroll, hero is currently polymorphed into a monster */ + pline("Yuck%c", otmp->blessed ? '!' : '.'); + else if (otmp->oclass == SCROLL_CLASS + /* check description after checking for specific scrolls */ + && !strcmpi(OBJ_DESCR(objects[otmp->otyp]), "YUM YUM")) + pline("Yum%c", otmp->blessed ? '!' : '.'); + else + pline("Needs salt..."); + } if (otmp->oclass == POTION_CLASS) { otmp->quan++; /* dopotion() does a useup() */ (void) dopotion(otmp); @@ -2453,8 +2464,11 @@ doeat() u.uconduct.unvegan++; u.uconduct.food++; - if (otmp->cursed) + if (otmp->cursed) { (void) rottenfood(otmp); + nodelicious = TRUE; + } else if (objects[otmp->otyp].oc_material == PAPER) + nodelicious = TRUE; if (otmp->oclass == WEAPON_CLASS && otmp->opoisoned) { pline("Ecch - that must have been poisonous!"); @@ -2463,7 +2477,7 @@ doeat() losehp(rnd(15), xname(otmp), KILLED_BY_AN); } else You("seem unaffected by the poison."); - } else if (!otmp->cursed && !nodelicious) { + } else if (!nodelicious) { pline("%s%s is delicious!", (obj_is_pname(otmp) && otmp->oartifact < ART_ORB_OF_DETECTION) diff --git a/src/mon.c b/src/mon.c index b194470f2..457313246 100644 --- a/src/mon.c +++ b/src/mon.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mon.c $NHDT-Date: 1463534459 2016/05/18 01:20:59 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.221 $ */ +/* NetHack 3.6 mon.c $NHDT-Date: 1466289475 2016/06/18 22:37:55 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.227 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -908,7 +908,12 @@ struct monst *mtmp; && !resists_ston(mtmp)) /* don't engulf boulders and statues or ball&chain */ || otmp->oclass == ROCK_CLASS - || otmp == uball || otmp == uchain) { + || otmp == uball || otmp == uchain + /* normally mtmp won't have stepped onto scare monster + scroll, but if it does, don't eat or engulf that + (note: scrolls inside eaten containers will still + become engulfed) */ + || otmp->otyp == SCR_SCARE_MONSTER) { /* do nothing--neither eaten nor engulfed */ continue; @@ -940,11 +945,18 @@ struct monst *mtmp; } else { /* devour */ ++count; - if (cansee(mtmp->mx, mtmp->my) && flags.verbose) - pline("%s eats %s!", Monnam(mtmp), - distant_name(otmp, doname)); - else if (flags.verbose) - You_hear("a slurping sound."); + if (cansee(mtmp->mx, mtmp->my)) { + if (flags.verbose) + pline("%s eats %s!", Monnam(mtmp), + distant_name(otmp, doname)); + /* give this one even if !verbose */ + if (otmp->oclass == SCROLL_CLASS + && !strcmpi(OBJ_DESCR(objects[otmp->otyp]), "YUM YUM")) + pline("Yum%c", otmp->blessed ? '!' : '.'); + } else { + if (flags.verbose) + You_hear("a slurping sound."); + } /* Heal up to the object's weight in hp */ if (mtmp->mhp < mtmp->mhpmax) { mtmp->mhp += objects[otmp->otyp].oc_weight;