From e7f8fb557ca190a01d2ec440b58c36034c6bac05 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 9 Feb 2026 17:46:45 -0800 Subject: [PATCH] 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. --- src/ui/game_screen.cpp | 12 +++++++++--- src/ui/quest_log_screen.cpp | 9 +++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index 5d3a9e46..d2c381c8 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -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(); } diff --git a/src/ui/quest_log_screen.cpp b/src/ui/quest_log_screen.cpp index 26282895..c00bdd12 100644 --- a/src/ui/quest_log_screen.cpp +++ b/src/ui/quest_log_screen.cpp @@ -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;