diff --git a/src/invent.c b/src/invent.c index a0963685c..5fa8fc2b3 100644 --- a/src/invent.c +++ b/src/invent.c @@ -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) { diff --git a/src/uhitm.c b/src/uhitm.c index e978e780e..b533cb570 100644 --- a/src/uhitm.c +++ b/src/uhitm.c @@ -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 &&