TTY: Hilight piles of objects
Add MG_OBJPILE flag, which windowports can use to check if a location has more than one object stack. If use_inverse is on, TTY will use inverse to show such piles. If a boulder is the topmost item on a pile, then the object pile flag is not used; mainly because boulders are "solid", boulders dropped by monsters are nearly always over other objects, and so that special levels such a Sokoban can "hide" items under the boulders. TODO: a "pilemark", analogous to "petmark", perhaps a green plus sign, which can be used by windowports with tiles.
This commit is contained in:
@@ -60,6 +60,7 @@
|
|||||||
#define MG_PET 0x08
|
#define MG_PET 0x08
|
||||||
#define MG_RIDDEN 0x10
|
#define MG_RIDDEN 0x10
|
||||||
#define MG_STATUE 0x20
|
#define MG_STATUE 0x20
|
||||||
|
#define MG_OBJPILE 0x40 /* more than one stack of objects */
|
||||||
|
|
||||||
/* sellobj_state() states */
|
/* sellobj_state() states */
|
||||||
#define SELL_NORMAL (0)
|
#define SELL_NORMAL (0)
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ unsigned *ospecial;
|
|||||||
else
|
else
|
||||||
obj_color(STATUE);
|
obj_color(STATUE);
|
||||||
special |= MG_STATUE;
|
special |= MG_STATUE;
|
||||||
|
if (level.objects[x][y] && level.objects[x][y]->nexthere)
|
||||||
|
special |= MG_OBJPILE;
|
||||||
} else if ((offset = (glyph - GLYPH_WARNING_OFF))
|
} else if ((offset = (glyph - GLYPH_WARNING_OFF))
|
||||||
>= 0) { /* a warning flash */
|
>= 0) { /* a warning flash */
|
||||||
idx = offset + SYM_OFF_W;
|
idx = offset + SYM_OFF_W;
|
||||||
@@ -149,6 +151,8 @@ unsigned *ospecial;
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
obj_color(offset);
|
obj_color(offset);
|
||||||
|
if (offset != BOULDER && level.objects[x][y] && level.objects[x][y]->nexthere)
|
||||||
|
special |= MG_OBJPILE;
|
||||||
} else if ((offset = (glyph - GLYPH_RIDDEN_OFF)) >= 0) { /* mon ridden */
|
} else if ((offset = (glyph - GLYPH_RIDDEN_OFF)) >= 0) { /* mon ridden */
|
||||||
idx = mons[offset].mlet + SYM_OFF_M;
|
idx = mons[offset].mlet + SYM_OFF_M;
|
||||||
if (has_rogue_color)
|
if (has_rogue_color)
|
||||||
@@ -166,6 +170,8 @@ unsigned *ospecial;
|
|||||||
else
|
else
|
||||||
mon_color(offset);
|
mon_color(offset);
|
||||||
special |= MG_CORPSE;
|
special |= MG_CORPSE;
|
||||||
|
if (level.objects[x][y] && level.objects[x][y]->nexthere)
|
||||||
|
special |= MG_OBJPILE;
|
||||||
} else if ((offset = (glyph - GLYPH_DETECT_OFF)) >= 0) { /* mon detect */
|
} else if ((offset = (glyph - GLYPH_DETECT_OFF)) >= 0) { /* mon detect */
|
||||||
idx = mons[offset].mlet + SYM_OFF_M;
|
idx = mons[offset].mlet + SYM_OFF_M;
|
||||||
if (has_rogue_color)
|
if (has_rogue_color)
|
||||||
|
|||||||
@@ -3040,7 +3040,7 @@ int glyph, bkglyph;
|
|||||||
|
|
||||||
/* must be after color check; term_end_color may turn off inverse too */
|
/* must be after color check; term_end_color may turn off inverse too */
|
||||||
if (((special & MG_PET) && iflags.hilite_pet)
|
if (((special & MG_PET) && iflags.hilite_pet)
|
||||||
|| ((special & MG_DETECT) && iflags.use_inverse)) {
|
|| ((special & (MG_DETECT|MG_OBJPILE)) && iflags.use_inverse)) {
|
||||||
term_start_attr(ATR_INVERSE);
|
term_start_attr(ATR_INVERSE);
|
||||||
reverse_on = TRUE;
|
reverse_on = TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user