Have leader keep already-used invocation items

The other suggestion from Pat about potential extensions to bda0b3b.  I
think it's interesting from a story perspective, and hopefully nobody
will run into this by mistake when they hoped to use the Candelabra as a
light source later!  The specific language used by the leader could be
changed if someone has a better idea (as could the code itself, for that
matter).
This commit is contained in:
Michael Meyer
2023-09-21 00:40:31 -04:00
committed by PatR
parent dedf1ade18
commit 602af21ca3
2 changed files with 24 additions and 13 deletions

View File

@@ -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 */
}

View File

@@ -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)