Add player name placeholder and improve dialog text substitution

Adds $n placeholder for player character names in quest and gossip dialog. Enhances documentation for three-option gender placeholders to clarify support for neutral terms like friend/champion/sibling. Player name defaults to 'Adventurer' when character not loaded.
This commit is contained in:
Kelsi 2026-02-09 17:46:45 -08:00
parent 0071c24713
commit e7f8fb557c
2 changed files with 16 additions and 5 deletions

View file

@ -4649,11 +4649,15 @@ std::string GameScreen::getSettingsPath() {
}
std::string GameScreen::replaceGenderPlaceholders(const std::string& text, game::GameHandler& gameHandler) {
// Get player gender and pronouns
// Get player gender, pronouns, and name
game::Gender gender = game::Gender::NONBINARY;
std::string playerName = "Adventurer";
const auto* character = gameHandler.getActiveCharacter();
if (character) {
gender = character->gender;
if (!character->name.empty()) {
playerName = character->name;
}
}
game::Pronouns pronouns = game::Pronouns::forGender(gender);
@ -4665,7 +4669,8 @@ std::string GameScreen::replaceGenderPlaceholders(const std::string& text, game:
s.erase(s.find_last_not_of(" \t\n\r") + 1);
};
// Replace pronoun placeholders first (simpler, no complex parsing)
// Replace simple placeholders first
// $n = player name
// $p = subject pronoun (he/she/they)
// $o = object pronoun (him/her/them)
// $s = possessive adjective (his/her/their)
@ -4678,6 +4683,7 @@ std::string GameScreen::replaceGenderPlaceholders(const std::string& text, game:
std::string replacement;
switch (code) {
case 'n': replacement = playerName; break;
case 'p': replacement = pronouns.subject; break;
case 'o': replacement = pronouns.object; break;
case 's': replacement = pronouns.possessive; break;
@ -4691,7 +4697,7 @@ std::string GameScreen::replaceGenderPlaceholders(const std::string& text, game:
continue;
}
// Replace the pronoun placeholder
// Replace the placeholder
result.replace(pos, 2, replacement);
pos += replacement.length();
}

View file

@ -6,12 +6,16 @@
namespace wowee { namespace ui {
namespace {
// Helper function to replace gender placeholders and pronouns
// Helper function to replace gender placeholders, pronouns, and name
std::string replaceGenderPlaceholders(const std::string& text, game::GameHandler& gameHandler) {
game::Gender gender = game::Gender::NONBINARY;
std::string playerName = "Adventurer";
const auto* character = gameHandler.getActiveCharacter();
if (character) {
gender = character->gender;
if (!character->name.empty()) {
playerName = character->name;
}
}
game::Pronouns pronouns = game::Pronouns::forGender(gender);
@ -22,7 +26,7 @@ std::string replaceGenderPlaceholders(const std::string& text, game::GameHandler
s.erase(s.find_last_not_of(" \t\n\r") + 1);
};
// Replace pronoun placeholders
// Replace simple placeholders
size_t pos = 0;
while ((pos = result.find('$', pos)) != std::string::npos) {
if (pos + 1 >= result.length()) break;
@ -31,6 +35,7 @@ std::string replaceGenderPlaceholders(const std::string& text, game::GameHandler
std::string replacement;
switch (code) {
case 'n': replacement = playerName; break;
case 'p': replacement = pronouns.subject; break;
case 'o': replacement = pronouns.object; break;
case 's': replacement = pronouns.possessive; break;