From: nethack.rankin Date: Thu, 26 Sep 2002 04:05:54 +0000 (+0000) Subject: two figurine tweaks X-Git-Tag: MOVE2GIT~2408 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=846de96a4ac7ff49c2a0edc46c7fed8f725b2c01;p=nethack two figurine tweaks Fix the reported problem of applying a figurine while swallowed and getting a message about setting the figuring on the ground. Rather than coming with special messages, just prevent it would activating if you're swallowed at the time. Also prevent figurines from creating the 4th erinys or 10th Nazgul. I'm not sure whether to bother doing similar handling for stone-to-flesh cast on statues. --- diff --git a/doc/fixes34.1 b/doc/fixes34.1 index ccfe90b67..a9f1d55b0 100644 --- a/doc/fixes34.1 +++ b/doc/fixes34.1 @@ -256,6 +256,8 @@ for wizard and explore modes, skip second screen of ^X output when first polyself into minotaur causes hard headgear to fall off with multiple leashes in use, 2nd had 50/50 chance of having unbounded length GOLDOBJ: coins aren't subject to curses/blesses and don't need identification +can no longer activate a figurine while engulfed +can't use figurines to get too many erinyes or Nazgul Platform- and/or Interface-Specific Fixes diff --git a/src/apply.c b/src/apply.c index 0a5ba9dfe..75f52d604 100644 --- a/src/apply.c +++ b/src/apply.c @@ -1700,6 +1700,11 @@ boolean quietly; { xchar x,y; + if (carried(obj) && u.uswallow) { + if (!quietly) + You("don't have enough room in here."); + return FALSE; + } x = cc->x; y = cc->y; if (!isok(x,y)) { if (!quietly) @@ -1729,6 +1734,11 @@ register struct obj *obj; xchar x, y; coord cc; + if (u.uswallow) { + /* can't activate a figurine while swallowed */ + if (!figurine_location_checks(obj, (coord *)0, FALSE)) + return; + } if(!getdir((char *)0)) { flags.move = multi = 0; return; diff --git a/src/dog.c b/src/dog.c index c1a38a6f1..03374e806 100644 --- a/src/dog.c +++ b/src/dog.c @@ -56,8 +56,20 @@ boolean quietly; int chance, trycnt = 100; do { - if (otmp) { - pm = &mons[otmp->corpsenm]; /* Figurine; otherwise spell */ + if (otmp) { /* figurine; otherwise spell */ + int mndx = otmp->corpsenm; + pm = &mons[mndx]; + /* activating a figurine provides one way to exceed the + maximum number of the target critter created--unless + it has a special limit (erinys, Nazgul) */ + if ((mvitals[mndx].mvflags & G_EXTINCT) && + mbirth_limit(mndx) != MAXMONNO) { + if (!quietly) + /* have just been given "You + the figurine and it transforms." message */ + pline("... into a pile of dust."); + break; /* mtmp is null */ + } } else if (!rn2(3)) { pm = &mons[pet_type()]; } else {