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
+1
View File
@@ -1337,6 +1337,7 @@ level temperature affects monster generation
amulet of unchanging cannot be polymorphed amulet of unchanging cannot be polymorphed
wishing for a "lit candle" provided one, but the feedback as it was added into 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 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 Fixes to 3.7.0-x General Problems Exposed Via git Repository
+18 -8
View File
@@ -1165,7 +1165,7 @@ attach_fig_transform_timeout(struct obj *figurine)
static void static void
slip_or_trip(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; const char *what;
char buf[BUFSZ]; char buf[BUFSZ];
boolean on_foot = !u.usteed; boolean on_foot = !u.usteed;
@@ -1207,19 +1207,25 @@ slip_or_trip(void)
/* is fumbling from ice alone? */ /* is fumbling from ice alone? */
boolean ice_only = !(EFumbling || (HFumbling & ~FROMOUTSIDE)); 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, u.usteed ? upstart(x_monnam(u.usteed, ARTICLE_THE, (char *) 0,
SUPPRESS_SADDLE, FALSE)) SUPPRESS_SADDLE, FALSE))
: "You", : "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 /* sometimes slipping due to ice occurs during turn that hero
has just moved off the ice; phrase things differently then */ has just moved off the ice; phrase things differently then */
is_ice(u.ux, u.uy) ? "on" : "off"); is_ice(u.ux, u.uy) ? "on" : "off");
/* fumbling outside of ice while mounted always causes the hero to /* fumbling outside of ice while mounted always causes the hero to
fall from the saddle, so to avoid a counterintuitive effect where fall from the saddle (unless it is cursed), so to avoid a
ice makes riding _less_ hazardous, unconditionally dismount if counterintuitive effect where ice makes riding _less_ hazardous,
fumbling is from a non-ice source */ unconditionally dismount if fumbling is from a non-ice source */
if (!on_foot && (!ice_only || !rn2(3))) { if (!on_foot
&& ((saddle = which_armor(u.usteed, W_SADDLE)) == 0
|| !saddle->cursed)
&& (!ice_only || !rn2(3))) {
You("lose your balance."); You("lose your balance.");
dismount_steed(DISMOUNT_FELL); dismount_steed(DISMOUNT_FELL);
} }
@@ -1241,7 +1247,11 @@ slip_or_trip(void)
You("stumble."); You("stumble.");
break; 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)) { switch (rn2(4)) {
case 1: case 1:
Your("%s slip out of the stirrups.", Your("%s slip out of the stirrups.",