From 1f4198c705de6fed709cc57b732a2320cf8992a0 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sat, 6 Jun 2026 15:01:54 -0400 Subject: [PATCH] aklys message improvements --- src/dothrow.c | 54 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/src/dothrow.c b/src/dothrow.c index c10d6ccb0..45a0e00cf 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -1437,7 +1437,8 @@ throwing_weapon(struct obj *obj) || obj->otyp == WAR_HAMMER || obj->otyp == AKLYS); } -/* the currently thrown object is returning to you (not for boomerangs) */ +/* the currently thrown object is returning to you (not for boomerangs + or tethered weapons) */ staticfn void sho_obj_return_to_u(struct obj *obj) { @@ -1520,7 +1521,8 @@ throwit( boolean crossbowing, impaired = (Confusion || Stunned || Blind || Hallucination || Fumbling), - tethered_weapon = (arw && arw->tethered && (wep_mask & W_WEP) != 0); + tethered_weapon = (arw && arw->tethered && (wep_mask & W_WEP) != 0), + tether_released_msg = FALSE; gn.notonhead = FALSE; /* reset potentially stale value */ if ((obj->cursed || obj->greased) && (u.dx || u.dy) && !rn2(7)) { @@ -1685,8 +1687,14 @@ throwit( /* bhit display cleanup was left with this caller for tethered_weapon, but clean it up now since we're about to return */ - if (tethered_weapon) + if (tethered_weapon) { + if (!tether_released_msg) { + pline("The tether comes off your %s.", + body_part(ARM)); + tether_released_msg = TRUE; + } tmp_at(DISP_END, 0); + } throwit_return(FALSE); return; } @@ -1699,8 +1707,14 @@ throwit( if (!gt.thrownobj) { /* missile has already been handled */ - if (tethered_weapon) + if (tethered_weapon) { + if (!tether_released_msg) { + pline("The tether comes off your %s.", + body_part(ARM)); + tether_released_msg = TRUE; + } tmp_at(DISP_END, 0); + } } else if (u.uswallow && !iflags.returning_missile) { swallowit(obj); return; @@ -1738,21 +1752,16 @@ throwit( if obj is quivered, remove it before wielding */ if (obj->owornmask & W_QUIVER) setuqwep((struct obj *) 0); -#if 0 - setuwep(obj); - set_twoweap(twoweap); /* u.twoweap = twoweap */ -#endif if (cansee(gb.bhitpos.x, gb.bhitpos.y)) newsym(gb.bhitpos.x, gb.bhitpos.y); } if (!dmg) { if (tethered_weapon) { - pline(Blind ? "%s%s back and is left" - " dangling from your %s." - : "%s%s and is left dangling from your %s.", - Blind ? "Your tethered weapon" : Tobjnam(obj, "return"), - Blind ? " snaps" : "", - body_part(ARM)); + /* Blind mods unnecessary; you know what you threw, + * and it is tethered to your arm */ + pline("Your tethered %s snaps back but the tether slips from your %s.", + simpleonames(obj), body_part(ARM)); + tether_released_msg = TRUE; } else { pline(Blind ? "%s lands %s your %s." @@ -1764,9 +1773,8 @@ throwit( } else { dmg += rnd(3); if (tethered_weapon) { - Your("tethered %s your %s!", - Blind ? "weapon returns and hits" : Tobjnam(obj, "hit"), - body_part(ARM)); + Your("tethered %s returns and hits your %s!", + simpleonames(obj), body_part(ARM)); } else { pline( Blind @@ -1789,14 +1797,22 @@ throwit( if (!ship_object(obj, u.ux, u.uy, FALSE)) dropy(obj); } else { - pline_The("%s tether releases from your %s!", + if (!tether_released_msg) { + pline_The("%s tether comes off your %s.", s_suffix(simpleonames(obj)), body_part(ARM)); + tether_released_msg = TRUE; + } } } throwit_return(TRUE); return; } else { if (tethered_weapon) { + if (!tether_released_msg) { + pline("The tether comes off your %s.", + body_part(ARM)); + tether_released_msg = TRUE; + } tmp_at(DISP_END, 0); /* when this location is stepped on, the weapon will be auto-picked up due to 'obj->how_lost' of LOST_THROWN; @@ -1806,8 +1822,6 @@ throwit( explicitly rewield the weapon to get throw-and-return capability back anyway, quivered or not shouldn't matter */ - pline("The tether snaps off your %s!", - body_part(ARM)); } else { pline("%s to return!", Tobjnam(obj, "fail")); }