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 {