Fumbling while riding

Being stuck on a cursed saddle overrides Fumbling if hero would have
fallen off steed.
This commit is contained in:
PatR
2023-12-24 00:54:48 -08:00
parent a30c5ceba2
commit 036d2a929f
2 changed files with 19 additions and 8 deletions

View File

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

View File

@@ -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.",