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