]> granicus.if.org Git - nethack/commitdiff
B01016 - misplaced "you steal" message after being blasted by an artifact
authorcohrs <cohrs>
Sun, 7 Jul 2002 20:22:57 +0000 (20:22 +0000)
committercohrs <cohrs>
Sun, 7 Jul 2002 20:22:57 +0000 (20:22 +0000)
I saw no straight-forward way to insert the message earlier in the
sequence, so...  I reasoned that you might not yet have a good grasp and
not be able to continue holding the object when reverting form.  So, I made
this into a drop case and made the drop message a rare past tense message.
Past tense is still OK for the other drop cases.
While testing this, I noticed you'd keep stealing even after reverting
form.  Added code to stop this.  Finally, there was a missing MON_NOWEP
call in the stealing code, added it.

src/invent.c
src/uhitm.c

index a0963685ce2ee8f2dd8480674d481acf11489812..5fa8fc2b350476609187ceaf4cf047d84b4da97a 100644 (file)
@@ -384,6 +384,7 @@ const char *drop_fmt, *drop_arg, *hold_msg;
            /* place_object may change these */
            boolean crysknife = (obj->otyp == CRYSKNIFE);
            int oerode = obj->oerodeproof;
+           boolean wasUpolyd = Upolyd;
 
            /* in case touching this object turns out to be fatal */
            place_object(obj, u.ux, u.uy);
@@ -392,6 +393,12 @@ const char *drop_fmt, *drop_arg, *hold_msg;
                obj_extract_self(obj);  /* remove it from the floor */
                dropy(obj);             /* now put it back again :-) */
                return obj;
+           } else if (wasUpolyd && !Upolyd) {
+               /* loose your grip if you revert your form */
+               if (drop_fmt) pline(drop_fmt, drop_arg);
+               obj_extract_self(obj);
+               dropy(obj);
+               return obj;
            }
            obj_extract_self(obj);
            if (crysknife) {
index e978e780ee0025e60b7b721e3dd8cb533eb27639..b533cb570d0a49240a2e10815ede92835855712b 100644 (file)
@@ -1102,12 +1102,15 @@ struct attack *mattk;
        }
 
        while ((otmp = mdef->minvent) != 0) {
+           if (!Upolyd) break;         /* no longer have ability to steal */
            /* take the object away from the monster */
            obj_extract_self(otmp);
            if ((unwornmask = otmp->owornmask) != 0L) {
                mdef->misc_worn_check &= ~unwornmask;
-               if (otmp->owornmask & W_WEP)
+               if (otmp->owornmask & W_WEP) {
                    setmnotwielded(mdef,otmp);
+                   MON_NOWEP(mdef);
+               }
                otmp->owornmask = 0L;
                update_mon_intrinsics(mdef, otmp, FALSE);
 
@@ -1116,7 +1119,7 @@ struct attack *mattk;
                          Monnam(mdef), mhis(mdef));
            }
            /* give the object to the character */
-           otmp = hold_another_object(otmp, "You steal %s.",
+           otmp = hold_another_object(otmp, "You snatched but dropped %s.",
                                       doname(otmp), "You steal: ");
            if (otmp->where != OBJ_INVENT) continue;
            if (otmp->otyp == CORPSE &&