From a15d5173260f728e9a9c24e8231f0edfd539138a Mon Sep 17 00:00:00 2001 From: Michael Meyer Date: Mon, 4 Dec 2023 14:40:16 -0500 Subject: [PATCH] Refine ice fumbling effects vs mounted hero Fumbling makes the hero fall from the saddle, but the justification was weak if the only fumbling source is riding over ice (the messages were things like "you drop the reins" which made more sense from magical fumbling). Make all fumbling from ice alone go into the ice-specific "slip on the ice" block and add a chance to fall from your mount there. If fumbling from another source while riding on ice, the hero will always fall from his steed, since that's what happens on normal floor -- ice had actually been reducing this chance. --- src/timeout.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/timeout.c b/src/timeout.c index 36dd27076..dee2509f7 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -1175,14 +1175,23 @@ slip_or_trip(void) an(mons[otmp->corpsenm].pmnames[NEUTRAL])); instapetrify(gk.killer.name); } - } else if (rn2(3) && is_ice(u.ux, u.uy)) { + } else if ((HFumbling & FROMOUTSIDE) || (is_ice(u.ux, u.uy) && !rn2(3))) { + /* is fumbling from ice alone? */ + boolean ice_only = !(EFumbling || (HFumbling & ~FROMOUTSIDE)); + pline("%s %s%s on the ice.", - u.usteed ? upstart(x_monnam(u.usteed, - (has_mgivenname(u.usteed)) ? ARTICLE_NONE - : ARTICLE_THE, - (char *) 0, SUPPRESS_SADDLE, FALSE)) + u.usteed ? upstart(x_monnam(u.usteed, ARTICLE_THE, (char *) 0, + SUPPRESS_SADDLE, FALSE)) : "You", rn2(2) ? "slip" : "slide", on_foot ? "" : "s"); + /* 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))) { + You("lose your balance."); + dismount_steed(DISMOUNT_FELL); + } } else { if (on_foot) { switch (rn2(4)) {