B01016 - misplaced "you steal" message after being blasted by an artifact

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.
This commit is contained in:
cohrs
2002-07-07 20:22:57 +00:00
parent 5802922a3d
commit 40c4800613
2 changed files with 12 additions and 2 deletions

View 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) {

View 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 &&