fix #H4028 - ':' sometimes doesn't work
User had MSGTTYPE=norep "You see here" and complained that once the message had been given while walking over an object, using ':' to intentionally look at something would end up doing nothing if its feedback was a repeat of "You see here". Trying to classify which actions should deliberately override no-repeat (or no-show) will be an ordeal. This fixes the case for the ':' command where the user obviously expects feedback. I think it could be done better but am settling for something quick and easy.
This commit is contained in:
@@ -119,6 +119,7 @@ make hurtling out of water bubble on the Plane of Water handle entering water
|
|||||||
fix floor descriptions on the Planes when levitating
|
fix floor descriptions on the Planes when levitating
|
||||||
fix warning glyph description when monster symbol coincided the warning symbol
|
fix warning glyph description when monster symbol coincided the warning symbol
|
||||||
allow the same color names for status hilites and menucolors
|
allow the same color names for status hilites and menucolors
|
||||||
|
override MSGTYPE=norep while executing the ':' command
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
+6
-4
@@ -363,11 +363,13 @@ extern NEARDATA struct sysflag sysflags;
|
|||||||
extern NEARDATA struct instance_flags iflags;
|
extern NEARDATA struct instance_flags iflags;
|
||||||
|
|
||||||
/* last_msg values */
|
/* last_msg values */
|
||||||
#define PLNMSG_UNKNOWN 0 /* arbitrary */
|
#define PLNMSG_NOSHO_OVERRIDE (-2)
|
||||||
#define PLNMSG_ONE_ITEM_HERE 1 /* "you see <single item> here" */
|
#define PLNMSG_NOREP_OVERRIDE (-1)
|
||||||
#define PLNMSG_TOWER_OF_FLAME 2 /* scroll of fire */
|
#define PLNMSG_UNKNOWN 0 /* arbitrary */
|
||||||
|
#define PLNMSG_ONE_ITEM_HERE 1 /* "you see <single item> here" */
|
||||||
|
#define PLNMSG_TOWER_OF_FLAME 2 /* scroll of fire */
|
||||||
#define PLNMSG_CAUGHT_IN_EXPLOSION 3 /* explode() feedback */
|
#define PLNMSG_CAUGHT_IN_EXPLOSION 3 /* explode() feedback */
|
||||||
#define PLNMSG_OBJ_GLOWS 4 /* "the <obj> glows <color>" */
|
#define PLNMSG_OBJ_GLOWS 4 /* "the <obj> glows <color>" */
|
||||||
|
|
||||||
/* runmode options */
|
/* runmode options */
|
||||||
#define RUN_TPORT 0 /* don't update display until movement stops */
|
#define RUN_TPORT 0 /* don't update display until movement stops */
|
||||||
|
|||||||
@@ -2686,6 +2686,7 @@ boolean picked_some;
|
|||||||
skip_objects = (flags.pile_limit > 0 && obj_cnt >= flags.pile_limit);
|
skip_objects = (flags.pile_limit > 0 && obj_cnt >= flags.pile_limit);
|
||||||
if (u.uswallow && u.ustuck) {
|
if (u.uswallow && u.ustuck) {
|
||||||
struct monst *mtmp = u.ustuck;
|
struct monst *mtmp = u.ustuck;
|
||||||
|
|
||||||
Sprintf(fbuf, "Contents of %s %s", s_suffix(mon_nam(mtmp)),
|
Sprintf(fbuf, "Contents of %s %s", s_suffix(mon_nam(mtmp)),
|
||||||
mbodypart(mtmp, STOMACH));
|
mbodypart(mtmp, STOMACH));
|
||||||
/* Skip "Contents of " by using fbuf index 12 */
|
/* Skip "Contents of " by using fbuf index 12 */
|
||||||
@@ -2829,6 +2830,7 @@ boolean picked_some;
|
|||||||
int
|
int
|
||||||
dolook()
|
dolook()
|
||||||
{
|
{
|
||||||
|
iflags.last_msg = PLNMSG_NOREP_OVERRIDE;
|
||||||
return look_here(0, FALSE);
|
return look_here(0, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-2
@@ -87,9 +87,26 @@ VA_DECL(const char *, line)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Normally the sequence is
|
||||||
|
* caller: pline("some message");
|
||||||
|
* pline: vsprintf + putstr + iflags.last_msg = PLNMSG_UNKNOWN;
|
||||||
|
* caller: iflags.last_msg = PLNMSG_some_message;
|
||||||
|
* and subsequent code can adjust the next message if it is
|
||||||
|
* affected by some_message.
|
||||||
|
*
|
||||||
|
* But some callers can use last_msg to control handling of next
|
||||||
|
* message
|
||||||
|
* caller: iflags.last_msg = PLNMSG_NOREP_OVERRIDE;
|
||||||
|
* caller: pline("another message");
|
||||||
|
* to force another_message to be delivered even if is a repeat
|
||||||
|
* and user's MSGTYPE settings have classified it as don't-repeat.
|
||||||
|
*/
|
||||||
|
|
||||||
msgtyp = msgtype_type(line, no_repeat);
|
msgtyp = msgtype_type(line, no_repeat);
|
||||||
if (msgtyp == MSGTYP_NOSHOW
|
if ((msgtyp == MSGTYP_NOSHOW && iflags.last_msg != PLNMSG_NOSHO_OVERRIDE)
|
||||||
|| (msgtyp == MSGTYP_NOREP && !strcmp(line, prevmsg)))
|
|| (msgtyp == MSGTYP_NOREP && iflags.last_msg != PLNMSG_NOREP_OVERRIDE
|
||||||
|
&& !strcmp(line, prevmsg)))
|
||||||
return;
|
return;
|
||||||
if (vision_full_recalc)
|
if (vision_full_recalc)
|
||||||
vision_recalc(0);
|
vision_recalc(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user