]> granicus.if.org Git - nethack/commitdiff
unicorn horn dipping
authornethack.rankin <nethack.rankin>
Wed, 2 Oct 2002 21:33:08 +0000 (21:33 +0000)
committernethack.rankin <nethack.rankin>
Wed, 2 Oct 2002 21:33:08 +0000 (21:33 +0000)
     Implement <Someone>'s suggestion for addressing <Someone>'s
complaint about the inadequate feedback given when dipping a unicorn
horn into a potion to convert it into water.  (Mainly, if the potion
has already been given a name, you won't be prompted to give it one
when dipping transforms it; if that was the last one you had, getting
"The potion clears." isn't sufficient to let you keep track of what
type of potion was cleared.  You still have to keep track of such
stuff yourself, but now you'll get "The swirly potion clears." so you
at least don't have to start remembering or recording the type prior
to dipping.)

     The hallucination handling isn't very useful; the description is
given will full accuracy by the immediately following inventory update.

doc/fixes34.1
src/potion.c

index 1cf3156d79f10e31f5ea03e3193d6862fe7eb4fd..c7f2079ac95654611ac98ce2e9e5c25bb5a3813e 100644 (file)
@@ -264,6 +264,7 @@ only include unknown gems as likely choices when applying known touchstone
 prevent mbodypart() from returning animal parts for lights
 removing a ring might relearn what it is after amnesia
 sleeping shopkeeper shouldn't talk to digging player
+give more specific feedback when dipping unicorn horns into potions
 
 
 Platform- and/or Interface-Specific Fixes
index a657cb776a378c724beee8e983a30d647f58d75d..fcff6d02fce03608470c8a1a6b9a59d5fcaef1ce 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)potion.c   3.4     2002/09/08      */
+/*     SCCS Id: @(#)potion.c   3.4     2002/10/02      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -1857,7 +1857,13 @@ dodip()
        potion->in_use = FALSE;         /* didn't go poof */
        if ((obj->otyp == UNICORN_HORN || obj->otyp == AMETHYST) &&
            (mixture = mixtype(obj, potion)) != 0) {
+               char oldbuf[BUFSZ], newbuf[BUFSZ];
                boolean more_than_one = potion->quan > 1;
+
+               oldbuf[0] = '\0';
+               if (potion->dknown)
+                   Sprintf(oldbuf, "%s ",
+                           hcolor(OBJ_DESCR(objects[potion->otyp])));
                /* with multiple merged potions, split off one and
                   just clear it */
                if (potion->quan > 1L) {
@@ -1875,24 +1881,20 @@ dodip()
                else
                    singlepotion->cursed = obj->cursed;  /* odiluted left as-is */
                singlepotion->bknown = FALSE;
-               if (Blind)
-                       singlepotion->dknown = FALSE;
-               else {
-                       if (mixture == POT_WATER &&
-#ifdef DCC30_BUG
-                           (singlepotion->dknown = !Hallucination,
-                            singlepotion->dknown != 0))
-#else
-                           (singlepotion->dknown = !Hallucination) != 0)
-#endif
-                               pline_The("potion%s clears.",
-                                       more_than_one ? " that you dipped into" : "");
-                       else
-                               pline_The("potion%s turns %s.",
-                                       more_than_one ? " that you dipped into" : "",
-                                       hcolor(OBJ_DESCR(objects[mixture])));
+               if (Blind) {
+                   singlepotion->dknown = FALSE;
+               } else {
+                   singlepotion->dknown = !Hallucination;
+                   if (mixture == POT_WATER && singlepotion->dknown)
+                       Sprintf(newbuf, "clears");
+                   else
+                       Sprintf(newbuf, "turns %s",
+                               hcolor(OBJ_DESCR(objects[mixture])));
+                   pline_The("%spotion%s %s.", oldbuf,
+                             more_than_one ? " that you dipped into" : "",
+                             newbuf);
                }
-               obj_extract_self(singlepotion);
+               obj_extract_self(singlepotion);
                singlepotion = hold_another_object(singlepotion,
                                        "You juggle and drop %s!",
                                        doname(singlepotion), (const char *)0);