diff --git a/doc/fixes35.0 b/doc/fixes35.0 index 7004ad92a..d582c805d 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -246,6 +246,8 @@ applying an unpaid stack of potions of oil forced hero to buy all of them instead of just the one which got split off and lit sometimes when hero is forced to buy an unpaid shop item its price changed monster could attack with a polearm even after attempt to wield that failed +sometimes got "you trip over it" after intervening messages following the + once which described "it" Platform- and/or Interface-Specific Fixes diff --git a/include/flag.h b/include/flag.h index c4acdad4e..02ad13ab9 100644 --- a/include/flag.h +++ b/include/flag.h @@ -159,6 +159,7 @@ struct instance_flags { * a structure of their own elsewhere some day. */ int in_lava_effects; /* hack for Boots_off() */ + int last_msg; /* indicator of last message player saw */ int purge_monsters; /* # of dead monsters still on fmon list */ int override_ID; /* true to force full identification of objects */ int suppress_price; /* controls doname() for unpaid objects */ @@ -320,6 +321,10 @@ extern NEARDATA struct sysflag sysflags; #endif extern NEARDATA struct instance_flags iflags; +/* last_msg values */ +#define PLNMSG_UNKNOWN 0 /* arbitrary */ +#define PLNMSG_ONE_ITEM_HERE 1 /* "you see here" */ + /* runmode options */ #define RUN_TPORT 0 /* don't update display until movement stops */ #define RUN_LEAP 1 /* update display every 7 steps */ diff --git a/src/cmd.c b/src/cmd.c index 295acdbc7..82045b8f5 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -3044,6 +3044,8 @@ char def; { char qbuf[QBUFSZ]; + iflags.last_msg = PLNMSG_UNKNOWN; /* most recent pline is clobbered */ + /* maximum acceptable length is QBUFSZ-1 */ if (strlen(query) < QBUFSZ) return (*windowprocs.win_yn_function)(query, resp, def); diff --git a/src/invent.c b/src/invent.c index 2eb120f26..c2a579cb4 100644 --- a/src/invent.c +++ b/src/invent.c @@ -2450,6 +2450,7 @@ boolean picked_some; if (otmp->oinvis && !See_invisible) verb = "feel"; #endif You("%s here %s.", verb, doname(otmp)); + iflags.last_msg = PLNMSG_ONE_ITEM_HERE; if (otmp->otyp == CORPSE) feel_cockatrice(otmp, FALSE); } else { char buf[BUFSZ]; diff --git a/src/pline.c b/src/pline.c index df8920ae2..a4e3e0b6b 100644 --- a/src/pline.c +++ b/src/pline.c @@ -73,6 +73,7 @@ pline VA_DECL(const char *, line) } if (!iflags.window_inited) { raw_print(line); + iflags.last_msg = PLNMSG_UNKNOWN; return; } #ifndef MAC @@ -86,6 +87,8 @@ pline VA_DECL(const char *, line) if (vision_full_recalc) vision_recalc(0); if (u.ux) flush_screen(1); /* %% */ putstr(WIN_MESSAGE, 0, line); + /* this gets cleared after every pline message */ + iflags.last_msg = PLNMSG_UNKNOWN; } /*VARARGS1*/ diff --git a/src/timeout.c b/src/timeout.c index b0f7793bc..0d71b516e 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -656,7 +656,7 @@ STATIC_OVL void slip_or_trip() { struct obj *otmp = vobj_at(u.ux, u.uy); - const char *what, *pronoun; + const char *what; char buf[BUFSZ]; boolean on_foot = TRUE; #ifdef STEED @@ -673,8 +673,8 @@ slip_or_trip() name; if not, look for rocks to trip over; trip over anonymous "something" if there aren't any rocks. */ - pronoun = otmp->quan == 1L ? "it" : Hallucination ? "they" : "them"; - what = !otmp->nexthere ? pronoun : + what = (iflags.last_msg == PLNMSG_ONE_ITEM_HERE) ? + ((otmp->quan == 1L) ? "it" : Hallucination ? "they" : "them") : (otmp->dknown || !Blind) ? doname(otmp) : ((otmp = sobj_at(ROCK, u.ux, u.uy)) == 0 ? something : (otmp->quan == 1L ? "a rock" : "some rocks"));