long descriptions of features. For example, "An ice covered rock wall" instead of "A rock wall". See dat/icecave.des function ice_cave_feat_descs() for examples.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7992 c06c8d41-db1a-0410-9941-cceddc491573
LJPUO3NNFABVOQOBA5LUDNT2R5H4LMP6TPJBNVJ7VJBERCBYZIXQC
J7VTRSN2BLWL7QJMHG73LBUOUL6WNNT2ZAVEDMGYB6SDX3L5GGYQC
55PFDYPVE6JVGDYPCFUE4XS2523PVSV4CSIFRW6A2GGX4I6VWRWQC
K2GMFKXUWN5R3KCW6OYVXHN47MIQZKEEIOSAU6LFFKBNKF6JBVWAC
ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC
QEEJFAETO6B2J4IWDIDCJ5UNIFNNHHG22IWF2CUJRTJJBNE47CWQC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
O7S3ILRELHICJXXTDGMF7KPPZWYHPYCNDPV2I77FZXXH4I454B4QC
AYYQVALBAAKFK5U52WGHWE2N7LCVZM3BGRADPVJQWOFLS2TXK6QAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
23I5KJ245D43B6QYWS4TDQYJO2W2PKTDCLFBWPVAFDWS6L7NMGKQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
CK7CT5TUFUL2AQY7FUHB5JI3FC2KSPWUWHXC6VEUJJ7G4OWUQFTAC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
CRX4RG35C3DH57NIXCW4CG4X7SBMSX7TAJR2BAFQ4LQKCLYUNANQC
4RFKVDJKTCRBZU6WPJ2E5OVI5IRPY3UTRPOBLC5QHY4CQJJTLZKQC
YFIVTYI7PMVAXV23DUPXPAQNEY3YSFIXQGSN32I3WVHMMD5XS5DQC
DI5OZPCY3TZSSYQSVB54IIES42RYAHMCW2S7CEXRN6WGAJ32IZUQC
}
static int dgn_set_feature_desc_short(lua_State *ls)
{
const std::string base_name = luaL_checkstring(ls, 1);
const std::string desc = luaL_checkstring(ls, 2);
if (base_name.empty())
{
luaL_argerror(ls, 1, "Base name can't be empty");
return (0);
}
set_feature_desc_short(base_name, desc);
return (0);
static int dgn_set_feature_desc_long(lua_State *ls)
{
const std::string raw_name = luaL_checkstring(ls, 1);
const std::string desc = luaL_checkstring(ls, 2);
if (raw_name.empty())
{
luaL_argerror(ls, 1, "Raw name can't be empty");
return (0);
}
set_feature_desc_long(raw_name, desc);
return (0);
}
std::string raw_feature_description(dungeon_feature_type grid,
trap_type trap, bool base_desc)
{
std::string base_str = _base_feature_desc(grid, trap);
if (base_desc)
return (base_str);
desc_map::iterator i = base_desc_to_short.find(base_str);
if (i != base_desc_to_short.end())
return (i->second);
return (base_str);
}
void set_feature_desc_short(dungeon_feature_type grid,
const std::string &desc)
{
set_feature_desc_short(_base_feature_desc(grid, NUM_TRAPS), desc);
}
void set_feature_desc_short(const std::string &base_name,
const std::string &_desc)
{
ASSERT(!base_name.empty());
CrawlHashTable &props = env.properties;
if (!props.exists(SHORT_DESC_KEY))
props[SHORT_DESC_KEY].new_table(SV_STR);
CrawlHashTable &desc_table = props[SHORT_DESC_KEY];
if (_desc.empty())
{
base_desc_to_short.erase(base_name);
desc_table.erase(base_name);
}
else
{
std::string desc = replace_all(_desc, "$BASE", base_name);
base_desc_to_short[base_name] = desc;
desc_table[base_name] = desc;
}
}
void setup_feature_descs_short()
{
base_desc_to_short.clear();
const CrawlHashTable &props = env.properties;
if (!props.exists(SHORT_DESC_KEY))
return;
const CrawlHashTable &desc_table = props[SHORT_DESC_KEY].get_table();
CrawlHashTable::const_iterator i;
for (i = desc_table.begin(); i != desc_table.end(); ++i)
base_desc_to_short[i->first] = i->second.get_string();
}
grd[x][y] == DNGN_ENTER_SHOP ? "A shop"
: desc.substr(0, desc.length() - 3);
grd[x][y] == DNGN_ENTER_SHOP ? "A shop" : desc;
std::string long_desc = getLongDescription(db_name);
desc += ".$$";
// If we couldn't find a description in the database then see if
// the feature's base name is different.
if (long_desc.empty())
{
db_name = feature_description(pos, false, DESC_CAP_A, false, true);
long_desc = getLongDescription(db_name);
}
bool custom_desc = false;
const CrawlHashTable &props = env.properties;
if (props.exists(LONG_DESC_KEY))
{
const CrawlHashTable &desc_table = props[LONG_DESC_KEY].get_table();
// First try the modified name, then the base name.
std::string key = raw_feature_description(feat);
if (!desc_table.exists(key))
key = raw_feature_description(feat, NUM_TRAPS, true);
if (desc_table.exists(key))
{
long_desc = desc_table[key].get_string();
custom_desc = true;
}
std::string quote = getQuoteString(key);
if (!quote.empty())
db_name = key;
}
desc += long_desc;
}
void set_feature_desc_long(const std::string &raw_name,
const std::string &desc)
{
ASSERT(!raw_name.empty());
CrawlHashTable &props = env.properties;
if (!props.exists(LONG_DESC_KEY))
props[LONG_DESC_KEY].new_table(SV_STR);
CrawlHashTable &desc_table = props[LONG_DESC_KEY];
if (desc.empty())
desc_table.erase(raw_name);
else
desc_table[raw_name] = desc;
end
}}
{{
-- Alter short feature descriptions for all ice cave destination vaults.
function ice_cave_feat_descs()
dgn.set_feature_desc_short("rock wall", "ice covered $BASE")
dgn.set_feature_desc_short("gate leading back to the Dungeon",
"ice covered $BASE")
dgn.set_feature_desc_short("empty arch of ancient stone",
"ice choked $BASE")
dgn.set_feature_desc_short("Some shallow water",
"Some ice crusted shallow water")
dgn.set_feature_desc_short("Some deep water",
"Some ice crusted deep water")
dgn.set_feature_desc_long("Some deep water",
"It looks freezing!");