git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1916 c06c8d41-db1a-0410-9941-cceddc491573
K2MLPJIAXXZRWEWZCNSGICCBNIU2WAAPT7SPIMOH7FLLTOB4QFRAC
7EI4HMXZ7TAWZKFZG2SXHDAX3FWFBCZLUAKOALPRFF72FS7NKVBQC
USOQ63RA4KJNPRKVNDTW2MXBEY7JMDJWFG2HVX7YWLKQ6DBC5H5QC
XNYPQTF74HLRSKTEVLTNCDB43YHWOFTQL5TVSNO6WWPAJGZSCYKQC
KZKTA7OVWQEZIR27FWMJQ7PJMPP2PQG7SN2WESDIC6SLU7Z6XFOAC
PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC
4GFCF6N3MZSCHUB77Z3SQYJ3FYR5N3VBW2CGWANLJ74O5FEQH3CQC
KS4WBDOLZ45T5Q742JZQIRN3H7XZTYDPM4TCIAILIRO3OV7ANR2AC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
E5DMZFW6WCFAKTKKOQPYTQXZ2CGLWMVH64LRXDUI2UIG4VYUHIVQC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
HH3HFWVXABJ4IRMN22PPJCREMULZSN6DA7VYKOGECGMNUQTZ5QNQC
5SLFWZQ2S5XZUTUSEHPHACETQ6EXUZXSUYKJHHVXN77PTJSE36LAC
QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
CDKRLJIGVWQE2PMHCSLJBLYQEK7JYC4LQM7H2X3O6NMJMCCDRVIAC
FUEEIUKGHHFPIRZCN3N753GONWAZTWQ2ZWR53IBJAAZ6FZUNGOMAC
5RK245FAGZFCDDYG4AZAXSC7JPVIJG4DSAVAKHWWVBUNGICHYNJQC
IPXXB4VRVZWOU5DKQ5ZTD37LS3QNK2R6APNZUO672YEEJT6OFAYQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
YATODO2EN3AW7IXW5PL25HHK34YHF6Y32QBMOUZXEATZZ4YQQWZQC
43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC
PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC
V4WGXVERZ34B7CEINV4D3ZYEKKT2TUIUYTOX5FSOX6B26U3DPVLQC
BWAQ3FHBBM6G3K3KYP75CRTR343RDQZJRYX5ZGYUEXYBAC3APDLAC
UEAJDUSNR7OHYBVHEE2ZSKGKHA6EL4OKU3QYLXLVHXX7BUH3A3KQC
SIKFXNXSAMU6IYRGDG6SWP3LOX6SEE7PDFA7RVQAGG2SLWQ72D2QC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
EHSY6DVGUMI6C67WKET3GDJVLWJWGYBYQONNDK5JVT7BCTHBEZVAC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
XPCGZBHHSL6MB3ORMUJI64BAERU6AZTIY6RK56BBW7SNB3IK24IAC
D77K7ISUWRLGNSQGYH5P2KEJZCNYQHDZC5AMLSKTXVBIRNG6F5KQC
void init_monster_symbols()
{
for (int i = 0; i < NUM_MONSTERS; ++i)
{
mon_display &md = monster_symbols[i];
const monsterentry *me = get_monster_data(i);
if (me)
{
md.glyph = me->showchar;
md.colour = me->colour;
}
}
for (int i = 0, size = Options.mon_glyph_overrides.size();
i < size; ++i)
{
const mon_display &md = Options.mon_glyph_overrides[i];
if (md.type == MONS_PROGRAM_BUG)
continue;
if (md.glyph)
monster_symbols[md.type].glyph = md.glyph;
if (md.colour)
monster_symbols[md.type].colour = md.colour;
}
}
int mons_class_colour(int mc)
{
const monsterentry *m = smc;
if (!m)
return (BLACK);
const int class_colour = m->colour;
return (class_colour);
} // end mons_colour()
}
void game_options::add_mon_glyph_override(monster_type mtype,
mon_display &mdisp)
{
mdisp.type = mtype;
mon_glyph_overrides.push_back(mdisp);
}
void game_options::add_mon_glyph_overrides(const std::string &mons,
mon_display &mdisp)
{
// If one character, this is a monster letter.
int letter = -1;
if (mons.length() == 1)
letter = mons[0] == '_' ? ' ' : mons[0];
for (int i = 0; i < NUM_MONSTERS; ++i)
{
const monsterentry *me = get_monster_data(i);
if (!me || me->mc == MONS_PROGRAM_BUG)
continue;
if (me->showchar == letter || me->name == mons)
add_mon_glyph_override(static_cast<monster_type>(i), mdisp);
}
}
mon_display game_options::parse_mon_glyph(const std::string &s) const
{
mon_display md;
std::vector<std::string> phrases = split_string(" ", s);
for (int i = 0, size = phrases.size(); i < size; ++i)
{
const std::string &p = phrases[i];
const int col = str_to_colour(p, -1, false);
if (col != -1 && colour)
md.colour = col;
else
md.glyph = p == "_"? ' ' : read_symbol(p);
}
return (md);
}
void game_options::add_mon_glyph_override(const std::string &text)
{
std::vector<std::string> override = split_string(":", text);
if (override.size() != 2u)
return;
mon_display mdisp = parse_mon_glyph(override[1]);
if (mdisp.glyph || mdisp.colour)
add_mon_glyph_overrides(override[0], mdisp);
void add_all(const std::string &s, const std::string &separator,
void (game_options::*add)(const std::string &));
void add_mon_glyph_override(monster_type mtype, mon_display &mdisp);
void add_mon_glyph_overrides(const std::string &mons, mon_display &mdisp);
void add_mon_glyph_override(const std::string &);
mon_display parse_mon_glyph(const std::string &s) const;
You can customise symbols based on monster names or their existing
symbols. For instance, if you want to put elves on E and efreeti
on e, you can do this:
mon_glyph = e : E
mon_glyph = E : e
If you want to change the symbol for a monster that uses a
space as a symbol, specify an underscore on the left:
mon_glyph = _ : #
(That changes shades to use #.)
You can specify a different symbol, or a colour, or both, in
any order. Here are more examples:
mon_glyph = deep elf annihilator : E lightmagenta
mon_glyph = Xtahua : lightmagenta D
mon_glyph = large zombie : darkgrey
mon_glyph = small simulacrum : x
(The left hand side of the : is case-sensitive.)
You can specify symbols using their code points using the
syntax as shown in feature. If you're using char_set=unicode,
you can use unicode code points:
mon_glyph = draconian scorcher : x6e9
A single _ is treated as a space; if you want a real underscore,
put a \ in front of it like this:
mon_glyph = player ghost : \_