fix #K4063 - "back on ground" given at odd time

Moving over at item that's resting on ice gives a message about there
being ice present and then about the item, whether mention_decor is On
or Off.  With it On, you'll get a message about being back on solid
ground as soon as you leave the ice.  With it Off you wouldn't get
that at all if not levitating; that's the basic no-mention_decor
behavior for ice.  However, if you were levitating, you would get a
delayed "back on solid ground" message when moving over some other
object, which might occur quite a bit later.  Autopickup handling is
calling describe_decor() when the hero is levitating and some of that
wasn't appropriate for no-mention_decor.

This issue has been present since I first implemented mention_decor,
not introduced by recent back_on_ground() changes.
This commit is contained in:
PatR
2023-12-13 13:15:18 -08:00
parent d4c0f6bb75
commit 9d3710163e
5 changed files with 36 additions and 19 deletions

View File

@@ -1138,9 +1138,7 @@ slip_or_trip(void)
struct obj *otmp = vobj_at(u.ux, u.uy), *otmp2;
const char *what;
char buf[BUFSZ];
boolean on_foot = TRUE;
if (u.usteed)
on_foot = FALSE;
boolean on_foot = !u.usteed;
if (otmp && on_foot && !u.uinwater && is_pool(u.ux, u.uy))
otmp = 0;
@@ -1179,11 +1177,14 @@ slip_or_trip(void)
/* is fumbling from ice alone? */
boolean ice_only = !(EFumbling || (HFumbling & ~FROMOUTSIDE));
pline("%s %s%s on the ice.",
pline("%s %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");
rn2(2) ? "slip" : "slide", on_foot ? "" : "s",
/* 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