The replacement is str_monam() and mons_type_name(). str_monam() should probably be folded into actor::name. I think. Deaths from zombies, skeletons and simulacra will not handle the name correctly; needs a further hack.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1484 c06c8d41-db1a-0410-9941-cceddc491573
E5DMZFW6WCFAKTKKOQPYTQXZ2CGLWMVH64LRXDUI2UIG4VYUHIVQC
MZXKH5NHXRMX5Y5FG4XXNHZQ7HTQZFX3ARQU55DO4RM5NR3GIAIQC
UNDSTX5P3ROLROGVQQVSMTQ5RHZI6G2MST4XLL3AJTHPJSGLCP6QC
2XG4UYEUFFZV4ARZJXQ36KQBK3XEAY77KEJOJ4X27NP5IBSF27YQC
YSIROVP23L7IDSVTBG7OQFQWLORVWWYINH7WPWTZO2I5BH4S7YPQC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
X2FMEN4E345XD26Z2X7JMJ7VGHOGCGIELMHQRE2ITLVNQACP3NOQC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
Y2VKZYSQXLYYQNB6OSQP44IYLT2M56SE2ZW2MHOAZUODKCVDHEAQC
ZPE6VZEG2HBMBTIFQAE5OT4JHVUIIKLP767TD6ADPCLHI6G2KA5AC
V2OQTNDCAEYXJRGSU7BG4TMLIQLT7X32ILOXW7KEWVL2R33B6XJQC
MX2KOWAIE37VLSQJWXVEDVQVB3DL325Q7YFUSSHYMAIH53Y74IJQC
YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC
LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC
TXFN7TLLKYEM2W5HVB2UXKXUH7MTXOU77PXBPMP7NJKXSLVX5PMQC
74LQ7JXVLAFSHLI7LCBKFX47CNTYSKGUQSXNX5FCIUIGCC2JTR3QC
YZXHBEKWQPY4BTKG5FFGLP3AIRBQSTKQVLJJHWKQEA3HTN4UHDYQC
33ZMPQC6OXTESW7SRW765GRNJUEJRSYONRVZVIEUDAUEJ2PPMB4AC
AY7Z23L4WPEFEL2HMF3KX3IM6OYMLB2QWY3AIHHQ37CMRVCXRCMAC
ZCPJIAG7SEY2TUBAGOFWCEJYXSBT36CZU5VO7BWEGSLJ4K24B4TAC
VUCSN63AVSEOMC6O4BFGDHTO6I2GOLUXODTSGVZ37NTJ72Z3HIOQC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC
R325RPUV26YH65VIJKYEFZ2XCVXQHO5N3ELPX6RNQ5TSI3JJNQGQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
TAVHZJPVNJBZR7CUURAOYNDZPNVQ3AGHTXDEP5K4JGYETBLQJDRQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC
QDWDUURSNLMT6AXNNJ3DEQCWAKCAIHV6MP5F7QGIBGXOG2BI2NPQC
ODNAIEJW732NG7USKQKCIP4R4DAEYXXJQX6LY7TIN32NKE75454QC
X3RDT655FEYO6XEVPIUAPEPJZAFE55KZBH2AZOLK3NGHINMVIGFQC
QNKMXCJSGRBEPE6ZNPEXU5EQIOME6EI4DECVC56GLOBCMGWWE6MQC
AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC
RIMJO42HB75SAZH44KZ2UH2QULOPIJLMEN4CR2CYNR2EKEKLFHSQC
EWYQBSLHJPWW2HWOPSPK7BYJ4Q62IYCM5SI4YK6QQS6TTDWOM7BQC
{
char namebuf[ITEMNAME_SIZE];
moname(monster->type, true, DESC_NOCAP_A, namebuf);
std::string iname = namebuf;
for (unsigned i = 0; i < Options.note_monsters.size(); ++i) {
if (Options.note_monsters[i].matches(iname)) {
{
const std::string iname = mons_type_name(monster->type, DESC_NOCAP_A);
for (unsigned i = 0; i < Options.note_monsters.size(); ++i)
{
if (Options.note_monsters[i].matches(iname))
{
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: bang - beam - debug - direct - effects - fight - item_use -
* monstuff - mstuff2 - ouch - spells1 - spells2 - spells3 -
* spells4
* *********************************************************************** */
// mons_wpn only important for dancing weapons -- bwr
const char *monam(const monsters *mon,
int mons_num, int mons, bool vis,
description_level_type desc, int mons_wpn = NON_ITEM);
// these front for monam
const char *ptr_monam(const monsters *mon, description_level_type desc,
bool force_seen = false);
std::string str_monam(const monsters *mon, description_level_type desc,
// this is the old monam(), ptr_monam()
std::string str_monam(const monsters& mon, description_level_type desc,
// last updated 12may2000 {dlb}
/* ***********************************************************************
* called from: debug - itemname - mon-util
* *********************************************************************** */
const char *moname(int mcl, bool vis, description_level_type descrip,
char glog[ ITEMNAME_SIZE ]);
return (ptr_monam(mon, desc, force_seen));
}
// Handle non-visible case first
if ( !force_seen && !player_monster_visible(&mon) )
{
switch (desc)
{
case DESC_CAP_THE: case DESC_CAP_A:
return "It";
case DESC_NOCAP_THE: case DESC_NOCAP_A: case DESC_PLAIN:
return "it";
default:
mpr("XXX OOPS!", MSGCH_DIAGNOSTICS);
return "it (buggy)";
}
}
// Assumed visible from now on
/* ------------------------- monam/moname ------------------------- */
const char *ptr_monam( const monsters *mon, description_level_type desc,
bool force_seen )
{
// We give an item type description for mimics now, note that
// since gold mimics only have one description (to match the
// examine code in direct.cc), we won't bother going through
// this for them. -- bwr
if (mons_is_mimic( mon->type ) && mon->type != MONS_GOLD_MIMIC)
// Various special cases:
// non-gold mimics, dancing weapons, ghosts, Pan demons
if ( mons_is_mimic(mon.type) && mon.type != MONS_GOLD_MIMIC )
return (mimic_name_buff);
if (mon.type == MONS_DANCING_WEAPON && mon.inv[MSLOT_WEAPON] != NON_ITEM)
{
item_def item = mitm[mon.inv[MSLOT_WEAPON]];
unset_ident_flags( item, ISFLAG_KNOW_CURSE | ISFLAG_KNOW_PLUSES );
return item.name(desc);
return (monam( mon, mon->number, mon->type,
force_seen || player_monster_visible( mon ),
desc, mon->inv[MSLOT_WEAPON] ));
}
if (mon.type == MONS_PLAYER_GHOST)
return mon.ghost->name + "'s ghost";
const char *monam( const monsters *mon,
int mons_num, int mons, bool vis,
description_level_type desc, int mons_wpn )
{
static char gmo_n[ ITEMNAME_SIZE ];
char gmo_n2[ ITEMNAME_SIZE ] = "";
if (mon.type == MONS_PANDEMONIUM_DEMON)
return mon.ghost->name;
// These need their description level handled here instead of
// in monam().
if (mons == MONS_SPECTRAL_THING || mons_genus(mons) == MONS_DRACONIAN)
// Start with the prefix.
// (Uniques don't get this, because their names are proper nouns.)
if ( !mons_is_unique(mon.type) )
case DESC_CAP_THE:
strcpy(gmo_n, "The");
break;
case DESC_NOCAP_THE:
strcpy(gmo_n, "the");
break;
case DESC_CAP_A:
strcpy(gmo_n, "A");
break;
case DESC_NOCAP_A:
strcpy(gmo_n, "a");
break;
case DESC_PLAIN: /* do nothing */ ;
default:
break;
//default: DEBUGSTR("bad desc flag");
case DESC_CAP_THE: result = "The "; break;
case DESC_NOCAP_THE: result = "the "; break;
case DESC_CAP_A: result = "A "; break;
case DESC_NOCAP_A: result = "a "; break;
case DESC_PLAIN: default: break;
case MONS_SKELETON_SMALL:
case MONS_SKELETON_LARGE:
moname(mons_num, vis, desc, gmo_n);
strcat(gmo_n, " skeleton");
case MONS_ZOMBIE_SMALL: case MONS_ZOMBIE_LARGE:
case MONS_SKELETON_SMALL: case MONS_SKELETON_LARGE:
case MONS_SIMULACRUM_SMALL: case MONS_SIMULACRUM_LARGE:
nametype = mon.number;
case MONS_SIMULACRUM_SMALL:
case MONS_SIMULACRUM_LARGE:
moname(mons_num, vis, desc, gmo_n);
strcat(gmo_n, " simulacrum");
break;
case MONS_SPECTRAL_THING:
strcat(gmo_n, " spectral ");
moname(mons_num, vis, DESC_PLAIN, gmo_n2);
strcat(gmo_n, gmo_n2);
break;
case MONS_BLACK_DRACONIAN: strcat(gmo_n, "black "); break;
case MONS_MOTTLED_DRACONIAN: strcat(gmo_n, "mottled "); break;
case MONS_YELLOW_DRACONIAN: strcat(gmo_n, "yellow "); break;
case MONS_GREEN_DRACONIAN: strcat(gmo_n, "green "); break;
case MONS_PURPLE_DRACONIAN: strcat(gmo_n, "purple "); break;
case MONS_RED_DRACONIAN: strcat(gmo_n, "red "); break;
case MONS_WHITE_DRACONIAN: strcat(gmo_n, "white "); break;
case MONS_PALE_DRACONIAN: strcat(gmo_n, "pale "); break;
}
moname( mons, vis, DESC_PLAIN, gmo_n2 );
strcat( gmo_n, gmo_n2 );
break;
case MONS_DANCING_WEAPON:
// safety check -- if we don't have/know the weapon use default name
if (mons_wpn == NON_ITEM)
moname( mons, vis, desc, gmo_n );
else
{
item_def item = mitm[mons_wpn];
unset_ident_flags( item, ISFLAG_KNOW_CURSE | ISFLAG_KNOW_PLUSES );
strncpy( gmo_n, item.name(desc).c_str(), sizeof gmo_n );
case MONS_BLACK_DRACONIAN: result += "black "; break;
case MONS_MOTTLED_DRACONIAN: result += "mottled "; break;
case MONS_YELLOW_DRACONIAN: result += "yellow "; break;
case MONS_GREEN_DRACONIAN: result += "green "; break;
case MONS_PURPLE_DRACONIAN: result += "purple "; break;
case MONS_RED_DRACONIAN: result += "red "; break;
case MONS_WHITE_DRACONIAN: result += "white "; break;
case MONS_PALE_DRACONIAN: result += "pale "; break;
case MONS_PLAYER_GHOST:
strcpy(gmo_n, mon->ghost->name.c_str());
strcat(gmo_n, "'s ghost");
break;
case MONS_PANDEMONIUM_DEMON:
strcpy(gmo_n, mon->ghost->name.c_str());
break;
default:
moname(mons, vis, desc, gmo_n);
break;
const char *moname(int mons_num, bool vis, description_level_type descrip,
char glog[ ITEMNAME_SIZE ])
{
glog[0] = 0;
char gmon_name[ ITEMNAME_SIZE ] = "";
strcpy( gmon_name, seekmonster( mons_num )->name );
if (!vis)
// Add suffixes.
switch (mon.type)
switch (descrip)
{
case DESC_CAP_THE:
case DESC_CAP_A:
strcpy(glog, "It");
break;
case DESC_NOCAP_THE:
case DESC_NOCAP_A:
case DESC_PLAIN:
strcpy(glog, "it");
break;
case DESC_NOCAP_YOUR:
strcpy(glog, "its");
break;
case DESC_CAP_YOUR:
strcpy(glog, "Its");
break;
default:
strcpy(glog, "Its buggy");
}
strcpy(gmon_name, glog);
return (glog);
case MONS_ZOMBIE_SMALL: case MONS_ZOMBIE_LARGE:
result += " zombie"; break;
case MONS_SKELETON_SMALL: case MONS_SKELETON_LARGE:
result += " skeleton"; break;
case MONS_SIMULACRUM_SMALL: case MONS_SIMULACRUM_LARGE:
result += " simulacrum"; break;
switch (descrip)
{
case DESC_CAP_THE:
case DESC_CAP_YOUR:
strcpy(glog, "The ");
break;
case DESC_NOCAP_THE:
case DESC_NOCAP_YOUR:
strcpy(glog, "the ");
break;
case DESC_CAP_A:
strcpy(glog, "A");
break;
case DESC_NOCAP_A:
strcpy(glog, "a");
break;
case DESC_PLAIN:
default:
break;
// default: DEBUGSTR("bad monster descrip flag");
}
result.insert(1, "n");
}
// All done.
return result;
}
switch (toupper(gmon_name[0]))
{
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
strcat(glog, "n ");
break;
default:
strcat(glog, " ");
break;
}
case DESC_CAP_THE: result = "The "; break;
case DESC_NOCAP_THE: result = "the "; break;
case DESC_CAP_A: result = "A "; break;
case DESC_NOCAP_A: result = "a "; break;
case DESC_PLAIN: default: break;
"yells in some weird language." };
mprf("The Singing Sword %s", suffixes[random2(32)]);
"yells in some weird language."
};
const int num_suffixes = sizeof(suffixes) / sizeof(suffixes[0]);
msg::stream << "The Singing Sword "
<< suffixes[random2(num_suffixes)] << std::endl;
mprf("You %s %s%s%s%s",
attack_verb.c_str(),
ptr_monam(def, DESC_NOCAP_THE),
verb_degree.c_str(),
debug_damage_number().c_str(),
attack_strength_punctuation().c_str());
msg::stream << "You " << attack_verb << ' '
<< str_monam(*def, DESC_NOCAP_THE)
<< verb_degree << debug_damage_number()
<< attack_strength_punctuation()
<< std::endl;
mprf("You %s %s.", attack_verb.c_str(),
ptr_monam(def, DESC_NOCAP_THE));
msg::stream << "You " << attack_verb << ' '
<< str_monam(*def, DESC_NOCAP_THE) << '.' << std::endl;
beam.name.c_str(),
engulfs? "engulfs" : "hits",
player_monster_visible(&menv[tid])?
ptr_monam(mon, DESC_NOCAP_THE)
: "something");
beam.name.c_str(),
engulfs? "engulfs" : "hits",
player_monster_visible(&menv[tid])?
str_monam(*mon, DESC_NOCAP_THE).c_str()
: "something");