diff --git a/src/dothrow.c b/src/dothrow.c index cb568a779..a996d672f 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -2033,7 +2033,30 @@ thitmonst( if (mon->mcanmove) { pline("%s catches %s.", Some_Monnam(mon), the(xname(obj))); - if (mon->mpeaceful) { + /* leader will keep tossed invocation item after you've done the + invocation and it's become unnecessary for completion.. */ + if ((u.uevent.invoked && objects[obj->otyp].oc_unique + && obj->otyp != AMULET_OF_YENDOR) + /* ...or any special item, if you've made him angry */ + || !mon->mpeaceful) { + /* give an explanation for keeping the item only if leader is + not doing it out of anger */ + if (mon->mpeaceful && !Deaf) { + /* just in case, identify the object so its name will + appear in the message */ + fully_identify_obj(obj); + verbalize("%s part in this is finished.", + s_suffix(The(xname(obj)))); + verbalize( + "We will guard it in case it is ever needed again, %s forbid.", + align_gname(u.ualignbase[A_ORIGINAL])); + } + if (*u.ushops || obj->unpaid) /* not very likely... */ + check_shop_obj(obj, mon->mx, mon->my, FALSE); + (void) mpickobj(mon, obj); + } else { + /* under normal circumstances, leader will say something and + then return the item to the hero */ boolean next2u = monnear(mon, u.ux, u.uy); finish_quest(obj); /* acknowledge quest completion */ @@ -2043,11 +2066,6 @@ thitmonst( sho_obj_return_to_u(obj); obj = addinv(obj); /* back into your inventory */ (void) encumber_msg(); - } else { - /* angry leader caught it and isn't returning it */ - if (*u.ushops || obj->unpaid) /* not very likely... */ - check_shop_obj(obj, mon->mx, mon->my, FALSE); - (void) mpickobj(mon, obj); } return 1; /* caller doesn't need to place it */ } diff --git a/src/quest.c b/src/quest.c index 2da242924..9e12604c0 100644 --- a/src/quest.c +++ b/src/quest.c @@ -228,13 +228,6 @@ finish_quest(struct obj *obj) /* quest artifact or thrown unique item or faux { struct obj *otmp; - /* - * Possible extensions [would mostly need to be done in thitmonst()]: - * if the invocation has already been performed, leader keeps any - * thrown (or kicked) invocation item, perhaps stating the intent - * to guard it for the future; - */ - if (obj && !is_quest_artifact(obj)) { /* tossed an invocation item (or [fake] AoY) at the quest leader */ if (Deaf)