Browse Source

Clean up item name generation

pull/3573/head
Anders Jenbo 4 years ago
parent
commit
9d4a5f4890
  1. 84
      Source/items.cpp

84
Source/items.cpp

@ -1171,27 +1171,61 @@ void GetStaffPower(Item &item, int lvl, int bs, bool onlygood)
}
if (nl != 0) {
preidx = l[GenerateRnd(nl)];
strncpy(item._iIName, fmt::format(/* TRANSLATORS: Constructs item names. Format: {Prefix} {Item}. Example: King's Long Sword */ _("{0} {1}"), _(ItemPrefixes[preidx].PLName), item._iIName).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
item._iMagical = ITEM_QUALITY_MAGIC;
SaveItemAffix(item, ItemPrefixes[preidx]);
item._iPrePower = ItemPrefixes[preidx].power.type;
}
}
if (!StringInPanel(item._iIName)) {
strcpy(item._iIName, _(AllItemsList[item.IDidx].iSName));
if (preidx != -1) {
strncpy(item._iIName, fmt::format(/* TRANSLATORS: Constructs item names. Format: {Prefix} {Item}. Example: King's Sword */ _("{0} {1}"), _(ItemPrefixes[preidx].PLName), item._iIName).c_str(), sizeof(item._iIName) - 1);
const char *baseName = _(AllItemsList[item.IDidx].iName);
const char *shortName = _(AllItemsList[item.IDidx].iSName);
const char *spellName = pgettext("spell", spelldata[bs].sNameText);
const char *normalFmt = pgettext("spell", /* TRANSLATORS: Constructs item names. Format: {Item} of {Spell}. Example: War Staff of Firewall */ "{0} of {1}");
strncpy(item._iName, fmt::format(normalFmt, baseName, spellName).c_str(), sizeof(item._iName) - 1);
item._iName[sizeof(item._iName) - 1] = '\0';
if (!StringInPanel(item._iName)) {
strncpy(item._iName, fmt::format(normalFmt, shortName, spellName).c_str(), sizeof(item._iName) - 1);
item._iName[sizeof(item._iName) - 1] = '\0';
}
if (preidx != -1) {
const char *magicFmt = pgettext("spell", /* TRANSLATORS: Constructs item names. Format: {Prefix} {Item} of {Spell}. Example: King's War Staff of Firewall */ "{0} {1} of {2}");
const char *prefixName = _(ItemPrefixes[preidx].PLName);
strncpy(item._iIName, fmt::format(magicFmt, prefixName, baseName, spellName).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
if (!StringInPanel(item._iIName)) {
strncpy(item._iIName, fmt::format(magicFmt, prefixName, shortName, spellName).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
}
strncpy(item._iIName, fmt::format(_(/* TRANSLATORS: Constructs item names. Format: {Prefix Item} of {Spell}. Example: King's Staff of Firewall */ "{0} of {1}"), item._iIName, pgettext("spell", spelldata[bs].sNameText)).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
if (item._iMagical == ITEM_QUALITY_NORMAL)
strcpy(item._iName, item._iIName);
} else {
strncpy(item._iIName, item._iName, sizeof(item._iIName) - 1);
item._iName[sizeof(item._iName) - 1] = '\0';
}
CalcItemValue(item);
}
namespace {
std::string GenerateMagicItemName(const string_view &baseNamel, int preidx, int sufidx)
{
if (preidx != -1 && sufidx != -1) {
const char *fmt = _(/* TRANSLATORS: Constructs item names. Format: {Prefix} {Item} of {Suffix}. Example: King's Long Sword of the Whale */ "{0} {1} of {2}");
return fmt::format(fmt, _(ItemPrefixes[preidx].PLName), baseNamel, _(ItemSuffixes[sufidx].PLName));
} else if (preidx != -1) {
const char *fmt = _(/* TRANSLATORS: Constructs item names. Format: {Prefix} {Item}. Example: King's Long Sword */ "{0} {1}");
return fmt::format(fmt, _(ItemPrefixes[preidx].PLName), baseNamel);
} else if (sufidx != -1) {
const char *fmt = _(/* TRANSLATORS: Constructs item names. Format: {Item} of {Suffix}. Example: Long Sword of the Whale */ "{0} of {1}");
return fmt::format(fmt, baseNamel, _(ItemSuffixes[sufidx].PLName));
}
return std::string(baseNamel);
}
} // namespace
void GetItemPower(Item &item, int minlvl, int maxlvl, affix_item_type flgs, bool onlygood)
{
int l[256];
@ -1230,8 +1264,6 @@ void GetItemPower(Item &item, int minlvl, int maxlvl, affix_item_type flgs, bool
}
if (nt != 0) {
preidx = l[GenerateRnd(nt)];
strncpy(item._iIName, fmt::format(/* TRANSLATORS: Constructs item names. Format: {Prefix} {Item}. Example: King's Long Sword */ _("{0} {1}"), _(ItemPrefixes[preidx].PLName), item._iIName).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
item._iMagical = ITEM_QUALITY_MAGIC;
SaveItemAffix(item, ItemPrefixes[preidx]);
item._iPrePower = ItemPrefixes[preidx].power.type;
@ -1251,28 +1283,17 @@ void GetItemPower(Item &item, int minlvl, int maxlvl, affix_item_type flgs, bool
}
if (nl != 0) {
sufidx = l[GenerateRnd(nl)];
strncpy(item._iIName, fmt::format(_(/* TRANSLATORS: Constructs item names. Format: {Prefix Item} of {Suffix}. Example: King's Long Sword of the Whale */ "{0} of {1}"), item._iIName, _(ItemSuffixes[sufidx].PLName)).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
item._iMagical = ITEM_QUALITY_MAGIC;
SaveItemAffix(item, ItemSuffixes[sufidx]);
item._iSufPower = ItemSuffixes[sufidx].power.type;
}
}
if (!StringInPanel(item._iIName)) {
int aii = item.IDidx;
if (AllItemsList[aii].iSName != nullptr)
strcpy(item._iIName, _(AllItemsList[aii].iSName));
else
item._iName[0] = 0;
if (preidx != -1) {
strncpy(item._iIName, fmt::format(/* TRANSLATORS: Constructs item names. Format: {Prefix} {Item}. Example: King's Sword */ _("{0} {1}"), _(ItemPrefixes[preidx].PLName), item._iIName).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
}
if (sufidx != -1) {
strncpy(item._iIName, fmt::format(_(/* TRANSLATORS: Constructs item names. Format: {Prefix Item} of {Suffix}. Example: King's Sword of the Whale */ "{0} of {1}"), item._iIName, _(ItemSuffixes[sufidx].PLName)).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
}
strncpy(item._iIName, GenerateMagicItemName(item._iName, preidx, sufidx).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
if (!StringInPanel(item._iIName)) {
strncpy(item._iIName, GenerateMagicItemName(_(AllItemsList[item.IDidx].iSName), preidx, sufidx).c_str(), sizeof(item._iIName) - 1);
item._iIName[sizeof(item._iIName) - 1] = '\0';
}
if (preidx != -1 || sufidx != -1)
CalcItemValue(item);
@ -1311,13 +1332,6 @@ void GetStaffSpell(Item &item, int lvl, bool onlygood)
s = SPL_FIREBOLT;
}
char istr[68] = {};
strncpy(istr, fmt::format(_(/* TRANSLATORS: Constructs item names. Format: {Prefix Item} of {Spell}. Example: King's War Staff of Firewall */ "{0} of {1}"), item._iName, pgettext("spell", spelldata[bs].sNameText)).c_str(), sizeof(istr) - 1);
if (!StringInPanel(istr))
strncpy(istr, fmt::format(_("Staff of {:s}"), pgettext("spell", spelldata[bs].sNameText)).c_str(), sizeof(istr) - 1);
strncpy(item._iName, istr, sizeof(item._iName) - 1);
strncpy(item._iIName, istr, sizeof(item._iIName) - 1);
int minc = spelldata[bs].sStaffMin;
int maxc = spelldata[bs].sStaffMax - minc + 1;
item._iSpell = bs;

Loading…
Cancel
Save