]> granicus.if.org Git - nethack/commitdiff
egg hatching message bug
authornethack.allison <nethack.allison>
Sat, 29 Nov 2003 18:48:13 +0000 (18:48 +0000)
committernethack.allison <nethack.allison>
Sat, 29 Nov 2003 18:48:13 +0000 (18:48 +0000)
>     From the newsgroup:  an egg carried by the hero hatched and the
> resulting monster was placed in hiding underneath an adjacent object.
> The silly hatching message given was "You see it drop from your pack."
> (Player said he was using 3.4.1, but the relevant code hasn't changed
> since then.)

doc/fixes34.3
src/apply.c

index bec10e46ee295833ca61580a615da01aeeb6f8f4..64b0ad5b6041183b347d19b9dd38d6181a43cacf 100644 (file)
@@ -96,6 +96,7 @@ when you're asleep you shouldn't "notice" monsters that have become undetected
 must be able to reach floor in order to use stethoscope on corpse or statue
 fix a few coordinate (y,y) -> (x,y) typos in apply.c, mon.c, and wizard.c
 killing a long worm on a drawbridge could produce a panic
+suppress "it" and adjust message when you see a figurine transform, then hide
 
 
 Platform- and/or Interface-Specific Fixes
index 1b8925cc7052c30a2b95a6e0b501adc5fd5181b9..36564e359c46e2ab23448c84947dea61302a711a 100644 (file)
@@ -1705,22 +1705,44 @@ long timeout;
        cansee_spot = cansee(cc.x, cc.y);
        mtmp = make_familiar(figurine, cc.x, cc.y, TRUE);
        if (mtmp) {
-           Sprintf(monnambuf, "%s",a_monnam(mtmp));
+           char hidebuf[BUFSZ];
+           struct obj *mshelter;
+           /*
+            * We're suppressing "it" here because if
+            * the monster ends up undetected, the "it"
+            * makes no sense since monnambuf is only
+            * used in "You see <mon>" type messages.
+            *
+            * It has been suggested that it might be
+            * better to have the transformed figurine
+            * monster wait until the next turn before
+            * hiding, but that is currently not implemented.
+            */
+           Sprintf(monnambuf, "%s",
+                       x_monnam(mtmp, ARTICLE_A, (char *)0,
+                                SUPPRESS_IT, FALSE));
+           if (mtmp->mundetected) {
+               if ((mshelter = level.objects[mtmp->mx][mtmp->my]) != 0)
+                       Sprintf(hidebuf, " and %s under %s",
+                               locomotion(mtmp->data, "crawl"),                                doname(mshelter));
+               else
+                       Strcpy(hidebuf, " and hide");
+           } else hidebuf[0] = '\0';
+
            switch (figurine->where) {
                case OBJ_INVENT:
                    if (Blind)
                        You_feel("%s %s from your pack!", something,
                            locomotion(mtmp->data,"drop"));
                    else
-                       You("see %s %s out of your pack!",
-                           monnambuf,
-                           locomotion(mtmp->data,"drop"));
+                       You("see %s %s out of your pack%s!",
+                           monnambuf, locomotion(mtmp->data,"drop"), hidebuf);
                    break;
 
                case OBJ_FLOOR:
                    if (cansee_spot && !silent) {
-                       You("suddenly see a figurine transform into %s!",
-                               monnambuf);
+                       You("suddenly see a figurine transform into %s%s!",
+                               monnambuf, hidebuf);
                        redraw = TRUE;  /* update figurine's map location */
                    }
                    break;
@@ -1738,8 +1760,9 @@ long timeout;
                            Strcpy(carriedby, "empty water");
                        else
                            Strcpy(carriedby, "thin air");
-                       You("see %s %s out of %s!", monnambuf,
-                           locomotion(mtmp->data, "drop"), carriedby);
+                       You("see %s %s out of %s%s!", monnambuf,
+                           locomotion(mtmp->data, "drop"), carriedby,
+                           hidebuf);
                    }
                    break;
 #if 0