git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8383 c06c8d41-db1a-0410-9941-cceddc491573
IXWJ54CASZWYHSTDOU3TRQS2DSF4MKBRPO4VZYLE72JL5RD22O2AC
NROTGB26G7CER2PUMZWEQTW6OCAAQBHEVVESKY7XBGFBTIZKFS3AC
XZTGZ7MOPX7ZOHQ4IQPXOHGUH5WPRNOYAQ6IQOMZDZYNVSAYFTNAC
PHZTAI6CW7JHKFW77MKDK75UCNWBXFK7VDD3D5ORVXUFWV3C3EVQC
4HLF6Q3OBOOHCCJ76L2BXVIYI6EMJ2G7O4XXZPFTLFP6BQGSUZNAC
LS5XCCGKQHSJQGWLWLGTP2F5OYWK4ND5AQQAGRN6H2HVBSXNCCZAC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
PEZFWKRHDHV4UJTPK5XJZ3CGTZ3LPTDYSPTYBENLQ7VRSP7YFSIQC
ZGWMTQ4GG7W5HDVHPQCWJIUK4LK4PS3CDOOIQSFANTU33D45DCPAC
3SQQ4MM6YO4I37CQ6GIBIX6BXAEVHNVNHPVMR3PPBBNO454D6XWQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
MFONX2CQ4V7HA5NSD6P5NDDBXYDSKIOCYUKRZXJ4ZER2OKJWT2HQC
DGB7DKTR6OEQEMOOF3MAHDT4PAPKZ54Y33MWYVD7XIOESPFAXHQQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
X6ULJWV7HNNP7XTRF4LT5OVBE4RARGQZARKJUSU6DR3PTQTR4JOQC
WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
WF2DSJGR6PKLGQSXEFF4ZW4EZZFGMHXPXWUYAKYBPFJH6KJKAANQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
XKNRIFG2ULQLAAQ5GC4RBZPOERV73DLCNILEA5EP37JLIX5EP3OQC
PBTLQZHBQK5TAIO7SNSCKSHOQQ65CFFI55OTTETV7FG2FCJOXKHQC
UVO3NT3VC5KVZVJXMAHJLEIL2IRHQO6JVBPFKVENXPU3YMACCQFAC
X4TW2JIQ6VTX5J7MXOUTJ7JK3765SE5OH54I6QYJSFFQACPCIEYAC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
EHSY6DVGUMI6C67WKET3GDJVLWJWGYBYQONNDK5JVT7BCTHBEZVAC
MCBXXIV6GICTZB56APSXMJEI63FVQWVZR3H2DRNMMFDH2XCGK4JAC
WL5WZXFJ6TONUQRSHUY4GQ5USU47ILWNN5X2JDQZO4CRJJZSRQIAC
IYKF7624NNMXQET3NQ5RVEB6DXXCZX4GQOPUGWF2DWBOIMUAB2QAC
// Draw text labels
// TODO enne - add an option for this
// TODO enne - be more intelligent about not covering stuff up
for (unsigned int t = 0; t < TAG_MAX; t++)
FixedArray<tag_def, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER> tag_show;
int total_tags = 0;
for (int t = TAG_MAX - 1; t >= 0; t--)
if (!on_screen(m_tags[t][i].gc))
if (!crawl_view.in_grid_los(m_tags[t][i].gc))
continue;
const coord_def ep = grid2show(m_tags[t][i].gc);
if (tag_show(ep).text)
continue;
const char *str = m_tags[t][i].tag.c_str();
int width = m_tag_font->string_width(str);
tag_def &def = tag_show(ep);
const int buffer = 2;
def.left = -width / 2 - buffer;
def.right = width / 2 + buffer;
def.text = str;
def.type = t;
total_tags++;
}
if (total_tags)
break;
}
if (!total_tags)
return;
// Draw text tags.
// TODO enne - be more intelligent about not covering stuff up
for (int y = 0; y < ENV_SHOW_DIAMETER; y++)
{
for (int x = 0; x < ENV_SHOW_DIAMETER; x++)
{
coord_def ep(x, y);
tag_def &def = tag_show(ep);
if (!def.text)
if (menv[idx].is_named() && !mons_friendly_real(&menv[idx])
&& menv[idx].type != MONS_PANDEMONIUM_DEMON)
const monsters *mon = &menv[idx];
if (!player_monster_visible(mon)
|| mons_is_lurking(mon)
|| (mons_is_mimic(mon->type) && !mons_is_known_mimic(mon))
|| mons_class_flag(mon->type, M_NO_EXP_GAIN))
if (menv[idx].type == MONS_PLAYER_GHOST)
{
// Beautification hack. "Foo's ghost" is a little bit
// verbose as a tag. "Foo" on its own should be sufficient.
tiles.add_text_tag(TAG_NAMED_MONSTER, menv[idx].mname, gc);
}
else
{
tiles.add_text_tag(TAG_NAMED_MONSTER,
menv[idx].name(DESC_CAP_A), gc);
}
return;
}
const tag_pref pref = Options.tile_tag_pref;
if (pref == TAGPREF_NONE)
return;
else if (pref == TAGPREF_TUTORIAL)
{
const long kills = you.kills->num_kills(mon);
const int limit = 3;
if (!mon->is_named() && kills > limit)
return;
}
else if (!mon->is_named())
return;
if (pref != TAGPREF_NAMED && mons_friendly_real(mon))
return;
// HACK. Names cover up pan demons in a weird way.
if (mon->type == MONS_PANDEMONIUM_DEMON)
return;
if (mon->type == MONS_PLAYER_GHOST)
{
// Beautification hack. "Foo's ghost" is a little bit
// verbose as a tag. "Foo" on its own should be sufficient.
tiles.add_text_tag(TAG_NAMED_MONSTER, mon->mname, gc);
enum cursor_type
{
CURSOR_MOUSE,
CURSOR_TUTORIAL,
CURSOR_MAX
};
// Ordering of tags is important: higher values cover up lower ones.
enum text_tag_type
{
TAG_NAMED_MONSTER = 0,
TAG_TUTORIAL = 1,
TAG_CELL_DESC = 2,
TAG_MAX
};
enum tag_pref
{
TAGPREF_NONE, // never display text tags
TAGPREF_TUTORIAL, // display text tags on "new" monsters
TAGPREF_NAMED, // display text tags on named monsters (incl. friendlies)
TAGPREF_ENEMY, // display text tags on enemy named monsters
TAGPREF_MAX
};
}
int Kills::num_kills(const monsters *mon) const
{
kill_monster_desc desc(mon);
kill_map::const_iterator iter = kills.find(desc);
int total = (iter == kills.end() ? 0 : iter->second.kills);
if (desc.modifier == kill_monster_desc::M_SHAPESHIFTER)
{
desc.modifier = kill_monster_desc::M_NORMAL;
iter = kills.find(desc);
total += (iter == kills.end() ? 0 : iter->second.kills);
}
return total;
tile_tag_pref = (none | tutorial | named | enemy)
This option defaults to "enemy" normally and "tutorial" in tutorial
modes. This settings determines which monsters receive text tag
labels above them, describing what kind of monster they are.
The "none" option turns off all tags. The "tutorial" option
shows the name of all monsters that the player has only killed
a few times. The "named" options shows the names for all monsters
with names, friendly and enemy. The "enemy" option only shows the
name of enemy monsters with names (such as uniques and ghosts.)