From 036d2a929f6bd1c24b6652e1066049a1e29615e8 Mon Sep 17 00:00:00 2001 From: PatR Date: Sun, 24 Dec 2023 00:54:48 -0800 Subject: [PATCH] Fumbling while riding Being stuck on a cursed saddle overrides Fumbling if hero would have fallen off steed. --- doc/fixes3-7-0.txt | 1 + src/timeout.c | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index d92d0a25e..f6e5969a9 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1337,6 +1337,7 @@ level temperature affects monster generation amulet of unchanging cannot be polymorphed wishing for a "lit candle" provided one, but the feedback as it was added into invent was "partly used candle (lit)" because of how 'lit' timer works +don't fall off steed because of Fumbling if saddle is cursed Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/src/timeout.c b/src/timeout.c index 7d8204dc7..851ded8a9 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -1165,7 +1165,7 @@ attach_fig_transform_timeout(struct obj *figurine) static void slip_or_trip(void) { - struct obj *otmp = vobj_at(u.ux, u.uy), *otmp2; + struct obj *otmp = vobj_at(u.ux, u.uy), *otmp2, *saddle; const char *what; char buf[BUFSZ]; boolean on_foot = !u.usteed; @@ -1207,19 +1207,25 @@ slip_or_trip(void) /* is fumbling from ice alone? */ boolean ice_only = !(EFumbling || (HFumbling & ~FROMOUTSIDE)); - pline("%s %s%s %s the ice.", + pline("%s %s %s the ice.", u.usteed ? upstart(x_monnam(u.usteed, ARTICLE_THE, (char *) 0, SUPPRESS_SADDLE, FALSE)) : "You", - rn2(2) ? "slip" : "slide", on_foot ? "" : "s", + /* "steed": arbitrary value that will use third person verb + regardless of what u.usteed might be named, as opposed to + "you" (second person, which won't have final 's' added) */ + vtense(u.usteed ? "steed" : "you", rn2(2) ? "slip" : "slide"), /* sometimes slipping due to ice occurs during turn that hero has just moved off the ice; phrase things differently then */ is_ice(u.ux, u.uy) ? "on" : "off"); /* fumbling outside of ice while mounted always causes the hero to - fall from the saddle, so to avoid a counterintuitive effect where - ice makes riding _less_ hazardous, unconditionally dismount if - fumbling is from a non-ice source */ - if (!on_foot && (!ice_only || !rn2(3))) { + fall from the saddle (unless it is cursed), so to avoid a + counterintuitive effect where ice makes riding _less_ hazardous, + unconditionally dismount if fumbling is from a non-ice source */ + if (!on_foot + && ((saddle = which_armor(u.usteed, W_SADDLE)) == 0 + || !saddle->cursed) + && (!ice_only || !rn2(3))) { You("lose your balance."); dismount_steed(DISMOUNT_FELL); } @@ -1241,7 +1247,11 @@ slip_or_trip(void) You("stumble."); break; } - } else { + + /* mounted; saddle should never end up being Null here; + don't fall off when it happens to be cursed */ + } else if ((saddle = which_armor(u.usteed, W_SADDLE)) == 0 + || !saddle->cursed) { switch (rn2(4)) { case 1: Your("%s slip out of the stirrups.",