From ebd4ebf29836ce6d87bcf8af389cd65513426dc9 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 21 Apr 2024 10:07:14 +0200 Subject: [PATCH] StringTable cleanup and improvements cleaned up function interface to avoid referencing the file system in the worker functions. replaced StringTable's operators with functions.. The main reason is that these are far easier to look up when browsing the source. This also fixes a premature translation in SBARINFO that was done in the parsing stage, not the printing stage. --- src/am_map.cpp | 10 +- src/bbannouncer.cpp | 4 +- src/common/2d/v_drawtext.cpp | 4 +- src/common/console/c_enginecmds.cpp | 4 +- src/common/engine/stringtable.cpp | 55 +++++---- src/common/engine/stringtable.h | 21 ++-- src/common/fonts/v_text.cpp | 6 +- src/common/menu/savegamemanager.cpp | 2 +- .../scripting/interface/stringformat.cpp | 4 +- src/common/scripting/interface/vmnatives.cpp | 6 +- src/common/startscreen/endoom.cpp | 2 +- src/common/startscreen/startscreen.cpp | 2 +- src/common/textures/texturemanager.cpp | 2 +- src/console/c_cmds.cpp | 12 +- src/ct_chat.cpp | 2 +- src/d_main.cpp | 10 +- src/d_net.cpp | 2 +- src/d_netinfo.cpp | 6 +- src/g_game.cpp | 26 ++-- src/g_hub.cpp | 2 +- src/g_level.cpp | 2 +- src/g_statusbar/sbarinfo_commands.cpp | 9 +- src/g_statusbar/shared_sbar.cpp | 10 +- src/gamedata/a_keys.cpp | 2 +- src/gamedata/g_mapinfo.cpp | 2 +- src/gamedata/g_skill.cpp | 2 +- src/gamedata/statistics.cpp | 2 +- src/hu_scores.cpp | 8 +- src/intermission/intermission.cpp | 8 +- src/intermission/intermission_parse.cpp | 2 +- src/launcher/launcherbanner.cpp | 2 +- src/launcher/launcherbuttonbar.cpp | 4 +- src/launcher/launcherwindow.cpp | 4 +- src/launcher/playgamepage.cpp | 6 +- src/launcher/settingspage.cpp | 26 ++-- src/m_cheat.cpp | 116 +++++++++--------- src/m_misc.cpp | 2 +- src/menu/doommenu.cpp | 26 ++-- src/p_conversation.cpp | 4 +- src/playsim/a_pickups.cpp | 2 +- src/playsim/p_acs.cpp | 4 +- src/playsim/p_actionfunctions.cpp | 6 +- src/playsim/p_interaction.cpp | 36 +++--- src/playsim/p_lnspec.cpp | 2 +- src/playsim/p_mobj.cpp | 4 +- src/playsim/p_spec.cpp | 4 +- src/playsim/p_user.cpp | 6 +- src/scripting/vmthunks.cpp | 2 +- src/sound/s_doomsound.cpp | 2 +- src/st_stuff.cpp | 4 +- 50 files changed, 245 insertions(+), 246 deletions(-) diff --git a/src/am_map.cpp b/src/am_map.cpp index 61f8a3366..f08ce8909 100644 --- a/src/am_map.cpp +++ b/src/am_map.cpp @@ -216,19 +216,19 @@ CCMD(am_togglefollow) am_followplayer = !am_followplayer; if (primaryLevel && primaryLevel->automap) primaryLevel->automap->ResetFollowLocation(); - Printf("%s\n", GStrings(am_followplayer ? "AMSTR_FOLLOWON" : "AMSTR_FOLLOWOFF")); + Printf("%s\n", GStrings.GetString(am_followplayer ? "AMSTR_FOLLOWON" : "AMSTR_FOLLOWOFF")); } CCMD(am_togglegrid) { am_showgrid = !am_showgrid; - Printf("%s\n", GStrings(am_showgrid ? "AMSTR_GRIDON" : "AMSTR_GRIDOFF")); + Printf("%s\n", GStrings.GetString(am_showgrid ? "AMSTR_GRIDON" : "AMSTR_GRIDOFF")); } CCMD(am_toggletexture) { am_textured = !am_textured; - Printf("%s\n", GStrings(am_textured ? "AMSTR_TEXON" : "AMSTR_TEXOFF")); + Printf("%s\n", GStrings.GetString(am_textured ? "AMSTR_TEXON" : "AMSTR_TEXOFF")); } CCMD(am_setmark) @@ -238,7 +238,7 @@ CCMD(am_setmark) int m = primaryLevel->automap->addMark(); if (m >= 0) { - Printf("%s %d\n", GStrings("AMSTR_MARKEDSPOT"), m); + Printf("%s %d\n", GStrings.GetString("AMSTR_MARKEDSPOT"), m); } } } @@ -247,7 +247,7 @@ CCMD(am_clearmarks) { if (primaryLevel && primaryLevel->automap && primaryLevel->automap->clearMarks()) { - Printf("%s\n", GStrings("AMSTR_MARKSCLEARED")); + Printf("%s\n", GStrings.GetString("AMSTR_MARKSCLEARED")); } } diff --git a/src/bbannouncer.cpp b/src/bbannouncer.cpp index 18f85c14e..07bc2305e 100644 --- a/src/bbannouncer.cpp +++ b/src/bbannouncer.cpp @@ -261,7 +261,7 @@ bool AnnounceKill (AActor *killer, AActor *killee) playSound |= killer->CheckLocalView(); } - message = GStrings(choice->Message); + message = GStrings.GetString(choice->Message); if (message != NULL) { char assembled[1024]; @@ -293,7 +293,7 @@ bool AnnounceTelefrag (AActor *killer, AActor *killee) if (cl_bbannounce && multiplayer) { - const char *message = GStrings("OB_MPTELEFRAG"); + const char *message = GStrings.GetString("OB_MPTELEFRAG"); if (message != NULL) { char assembled[1024]; diff --git a/src/common/2d/v_drawtext.cpp b/src/common/2d/v_drawtext.cpp index 22cfb476e..56415a84f 100644 --- a/src/common/2d/v_drawtext.cpp +++ b/src/common/2d/v_drawtext.cpp @@ -380,7 +380,7 @@ void DrawText(F2DDrawer *drawer, FFont* font, int normalcolor, double x, double { return; } - const char *txt = (parms.localize && string[0] == '$') ? GStrings(&string[1]) : string; + const char *txt = (parms.localize && string[0] == '$') ? GStrings.GetString(&string[1]) : string; DrawTextCommon(drawer, font, normalcolor, x, y, (const uint8_t*)string, parms); } @@ -419,7 +419,7 @@ void DrawText(F2DDrawer *drawer, FFont *font, int normalcolor, double x, double { return; } - const char *txt = (parms.localize && string[0] == '$') ? GStrings(&string[1]) : string.GetChars(); + const char *txt = (parms.localize && string[0] == '$') ? GStrings.GetString(&string[1]) : string.GetChars(); DrawTextCommon(drawer, font, normalcolor, x, y, (uint8_t*)txt, parms); } diff --git a/src/common/console/c_enginecmds.cpp b/src/common/console/c_enginecmds.cpp index 38e64ab46..d6a2e027e 100644 --- a/src/common/console/c_enginecmds.cpp +++ b/src/common/console/c_enginecmds.cpp @@ -80,7 +80,7 @@ CCMD (print) Printf ("print : Print a string from the string table\n"); return; } - const char *str = GStrings[argv[1]]; + const char *str = GStrings.CheckString(argv[1]); if (str == NULL) { Printf ("%s unknown\n", argv[1]); @@ -304,7 +304,7 @@ CCMD(printlocalized) return; } } - Printf("%s\n", GStrings(argv[1])); + Printf("%s\n", GStrings.GetString(argv[1])); } } diff --git a/src/common/engine/stringtable.cpp b/src/common/engine/stringtable.cpp index 52d1f3543..c126049d4 100644 --- a/src/common/engine/stringtable.cpp +++ b/src/common/engine/stringtable.cpp @@ -47,29 +47,29 @@ // //========================================================================== -void FStringTable::LoadStrings (FileSys::FileSystem& fileSystem_, const char *language) +void FStringTable::LoadStrings (FileSys::FileSystem& fileSystem, const char *language) { int lastlump, lump; - fileSystem = &fileSystem_; allStrings.Clear(); lastlump = 0; - while ((lump = fileSystem->FindLump("LMACROS", &lastlump)) != -1) + while ((lump = fileSystem.FindLump("LMACROS", &lastlump)) != -1) { - readMacros(lump); + auto lumpdata = fileSystem.ReadFile(lump); + readMacros(lumpdata.string(), lumpdata.size()); } lastlump = 0; - while ((lump = fileSystem->FindLump ("LANGUAGE", &lastlump)) != -1) + while ((lump = fileSystem.FindLump ("LANGUAGE", &lastlump)) != -1) { - auto lumpdata = fileSystem->ReadFile(lump); + auto lumpdata = fileSystem.ReadFile(lump); + auto filenum = fileSystem.GetFileContainer(lump); - if (!ParseLanguageCSV(lump, lumpdata.string(), lumpdata.size())) - LoadLanguage (lump, lumpdata.string(), lumpdata.size()); + if (!ParseLanguageCSV(filenum, lumpdata.string(), lumpdata.size())) + LoadLanguage (filenum, lumpdata.string(), lumpdata.size()); } UpdateLanguage(language); allMacros.Clear(); - fileSystem = nullptr; } @@ -159,13 +159,12 @@ TArray> FStringTable::parseCSV(const char* buffer, size_t size) // //========================================================================== -bool FStringTable::readMacros(int lumpnum) +bool FStringTable::readMacros(const char* buffer, size_t size) { - auto lumpdata = fileSystem->ReadFile(lumpnum); - auto data = parseCSV(lumpdata.string(), lumpdata.size()); + auto data = parseCSV(buffer, size); allMacros.Clear(); - for (unsigned i = 1; i < data.Size(); i++) + for (unsigned i = 1; i < size; i++) { auto macroname = data[i][0]; FName name = macroname.GetChars(); @@ -187,7 +186,7 @@ bool FStringTable::readMacros(int lumpnum) // //========================================================================== -bool FStringTable::ParseLanguageCSV(int lumpnum, const char* buffer, size_t size) +bool FStringTable::ParseLanguageCSV(int filenum, const char* buffer, size_t size) { if (size < 11) return false; if (strnicmp(buffer, "default,", 8) && strnicmp(buffer, "identifier,", 11 )) return false; @@ -258,14 +257,14 @@ bool FStringTable::ParseLanguageCSV(int lumpnum, const char* buffer, size_t size FName strName = row[labelcol].GetChars(); if (hasDefaultEntry) { - DeleteForLabel(lumpnum, strName); + DeleteForLabel(filenum, strName); } for (auto &langentry : langrows) { auto str = row[langentry.first]; if (str.Len() > 0) { - InsertString(lumpnum, langentry.second, strName, str); + InsertString(filenum, langentry.second, strName, str); } else { @@ -409,11 +408,10 @@ void FStringTable::DeleteString(int langid, FName label) // //========================================================================== -void FStringTable::DeleteForLabel(int lumpnum, FName label) +void FStringTable::DeleteForLabel(int filenum, FName label) { decltype(allStrings)::Iterator it(allStrings); decltype(allStrings)::Pair *pair; - auto filenum = fileSystem->GetFileContainer(lumpnum); while (it.NextPair(pair)) { @@ -432,10 +430,10 @@ void FStringTable::DeleteForLabel(int lumpnum, FName label) // //========================================================================== -void FStringTable::InsertString(int lumpnum, int langid, FName label, const FString &string) +void FStringTable::InsertString(int filenum, int langid, FName label, const FString &string) { const char *strlangid = (const char *)&langid; - TableElement te = { fileSystem->GetFileContainer(lumpnum), { string, string, string, string } }; + TableElement te = { filenum, { string, string, string, string } }; ptrdiff_t index; while ((index = te.strings[0].IndexOf("@[")) >= 0) { @@ -579,7 +577,7 @@ bool FStringTable::exists(const char *name) // //========================================================================== -const char *FStringTable::GetString(const char *name, uint32_t *langtable, int gender) const +const char *FStringTable::CheckString(const char *name, uint32_t *langtable, int gender) const { if (name == nullptr || *name == 0) { @@ -590,15 +588,22 @@ const char *FStringTable::GetString(const char *name, uint32_t *langtable, int g FName nm(name, true); if (nm != NAME_None) { + TableElement* bestItem = nullptr; for (auto map : currentLanguageSet) { auto item = map.second->CheckKey(nm); if (item) { + if (bestItem && bestItem->filenum > item->filenum) + { + // prioritize content from later files, even if the language doesn't fully match. + // This is mainly for Dehacked content. + continue; + } if (langtable) *langtable = map.first; auto c = item->strings[gender].GetChars(); if (c && *c == '$' && c[1] == '$') - return GetString(c + 2, langtable, gender); + c = CheckString(c + 2, langtable, gender); return c; } } @@ -608,7 +613,7 @@ const char *FStringTable::GetString(const char *name, uint32_t *langtable, int g //========================================================================== // -// Finds a string by name in a given language +// Finds a string by name in a given language without attempting any substitution // //========================================================================== @@ -655,9 +660,9 @@ bool FStringTable::MatchDefaultString(const char *name, const char *content) con // //========================================================================== -const char *FStringTable::operator() (const char *name) const +const char *FStringTable::GetString(const char *name) const { - const char *str = operator[] (name); + const char *str = CheckString(name, nullptr); return str ? str : name; } diff --git a/src/common/engine/stringtable.h b/src/common/engine/stringtable.h index 0e0476353..73867ba39 100644 --- a/src/common/engine/stringtable.h +++ b/src/common/engine/stringtable.h @@ -95,20 +95,15 @@ public: const char *GetLanguageString(const char *name, uint32_t langtable, int gender = -1) const; bool MatchDefaultString(const char *name, const char *content) const; - const char *GetString(const char *name, uint32_t *langtable, int gender = -1) const; - const char *operator() (const char *name) const; // Never returns NULL - const char* operator() (const FString& name) const { return operator()(name.GetChars()); } - const char *operator[] (const char *name) const - { - return GetString(name, nullptr); - } + const char *CheckString(const char *name, uint32_t *langtable = nullptr, int gender = -1) const; + const char* GetString(const char* name) const; + const char* GetString(const FString& name) const { return GetString(name.GetChars()); } bool exists(const char *name); - void InsertString(int lumpnum, int langid, FName label, const FString& string); + void InsertString(int filenum, int langid, FName label, const FString& string); private: - FileSys::FileSystem* fileSystem; FString activeLanguage; StringMacroMap allMacros; LangMap allStrings; @@ -116,11 +111,11 @@ private: void LoadLanguage (int lumpnum, const char* buffer, size_t size); TArray> parseCSV(const char* buffer, size_t size); - bool ParseLanguageCSV(int lumpnum, const char* buffer, size_t size); + bool ParseLanguageCSV(int filenum, const char* buffer, size_t size); - bool readMacros(int lumpnum); + bool readMacros(const char* buffer, size_t size); void DeleteString(int langid, FName label); - void DeleteForLabel(int lumpnum, FName label); + void DeleteForLabel(int filenum, FName label); static size_t ProcessEscapes (char *str); public: @@ -138,7 +133,7 @@ public: const char* localize(const char* str) { - return *str == '$' ? operator()(str + 1) : str; + return *str == '$' ? GetString(str + 1) : str; } }; diff --git a/src/common/fonts/v_text.cpp b/src/common/fonts/v_text.cpp index 7fd9bfb53..267b412bd 100644 --- a/src/common/fonts/v_text.cpp +++ b/src/common/fonts/v_text.cpp @@ -271,12 +271,12 @@ bool CheckFontComplete(FFont* font) { // Also check if the SmallFont contains all characters this language needs. // If not, switch back to the original one. - return font->CanPrint(GStrings["REQUIRED_CHARACTERS"]); + return font->CanPrint(GStrings.CheckString("REQUIRED_CHARACTERS")); } void UpdateGenericUI(bool cvar) { - auto switchstr = GStrings["USE_GENERIC_FONT"]; + auto switchstr = GStrings.CheckString("USE_GENERIC_FONT"); generic_ui = (cvar || (switchstr && strtoll(switchstr, nullptr, 0))); if (!generic_ui) { @@ -311,7 +311,7 @@ void UpdateGenericUI(bool cvar) } } // Turkish i crap. What a mess, just to save two code points... :( - switchstr = GStrings["REQUIRED_CHARACTERS"]; + switchstr = GStrings.CheckString("REQUIRED_CHARACTERS"); special_i = switchstr && strstr(switchstr, "\xc4\xb0") != nullptr; // capital dotted i (İ). if (special_i) { diff --git a/src/common/menu/savegamemanager.cpp b/src/common/menu/savegamemanager.cpp index 3f2243a87..83865cd1d 100644 --- a/src/common/menu/savegamemanager.cpp +++ b/src/common/menu/savegamemanager.cpp @@ -470,7 +470,7 @@ DEFINE_ACTION_FUNCTION(FSavegameManager, GetSavegame) void FSavegameManagerBase::InsertNewSaveNode() { - NewSaveNode.SaveTitle = GStrings("NEWSAVE"); + NewSaveNode.SaveTitle = GStrings.GetString("NEWSAVE"); NewSaveNode.bNoDelete = true; SaveGames.Insert(0, &NewSaveNode); } diff --git a/src/common/scripting/interface/stringformat.cpp b/src/common/scripting/interface/stringformat.cpp index e43c1ae24..3d7a3c428 100644 --- a/src/common/scripting/interface/stringformat.cpp +++ b/src/common/scripting/interface/stringformat.cpp @@ -282,9 +282,9 @@ DEFINE_ACTION_FUNCTION(FStringStruct, DeleteLastCharacter) static void LocalizeString(const FString &label, bool prefixed, FString *result) { - if (!prefixed) *result = GStrings(label); + if (!prefixed) *result = GStrings.GetString(label); else if (label[0] != '$') *result = label; - else *result = GStrings(&label[1]); + else *result = GStrings.GetString(&label[1]); } DEFINE_ACTION_FUNCTION_NATIVE(FStringTable, Localize, LocalizeString) diff --git a/src/common/scripting/interface/vmnatives.cpp b/src/common/scripting/interface/vmnatives.cpp index 48425f64e..730465a34 100644 --- a/src/common/scripting/interface/vmnatives.cpp +++ b/src/common/scripting/interface/vmnatives.cpp @@ -670,7 +670,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(FFont, GetBottomAlignOffset, GetBottomAlignOffset) static int StringWidth(FFont *font, const FString &str, int localize) { - const char *txt = (localize && str[0] == '$') ? GStrings(&str[1]) : str.GetChars(); + const char *txt = (localize && str[0] == '$') ? GStrings.GetString(&str[1]) : str.GetChars(); return font->StringWidth(txt); } @@ -684,7 +684,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(FFont, StringWidth, StringWidth) static int GetMaxAscender(FFont* font, const FString& str, int localize) { - const char* txt = (localize && str[0] == '$') ? GStrings(&str[1]) : str.GetChars(); + const char* txt = (localize && str[0] == '$') ? GStrings.GetString(&str[1]) : str.GetChars(); return font->GetMaxAscender(txt); } @@ -698,7 +698,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(FFont, GetMaxAscender, GetMaxAscender) static int CanPrint(FFont *font, const FString &str, int localize) { - const char *txt = (localize && str[0] == '$') ? GStrings(&str[1]) : str.GetChars(); + const char *txt = (localize && str[0] == '$') ? GStrings.GetString(&str[1]) : str.GetChars(); return font->CanPrint(txt); } diff --git a/src/common/startscreen/endoom.cpp b/src/common/startscreen/endoom.cpp index 4a7565dbc..6e8e7af35 100644 --- a/src/common/startscreen/endoom.cpp +++ b/src/common/startscreen/endoom.cpp @@ -111,7 +111,7 @@ FEndoomScreen::FEndoomScreen(int loading_lump) StartupBitmap.Create(80 * 8, 26 * 16); // line 26 is for our own 'press any key to quit' message. DrawTextScreen(StartupBitmap, endoom_screen); ClearBlock(StartupBitmap, {0, 0, 0, 255}, 0, 25*16, 640, 16); - DrawString(StartupBitmap, 0, 25, GStrings("TXT_QUITENDOOM"), { 128, 128, 128 ,255}, { 0, 0, 0, 255}); + DrawString(StartupBitmap, 0, 25, GStrings.GetString("TXT_QUITENDOOM"), { 128, 128, 128 ,255}, { 0, 0, 0, 255}); lastUpdateTime = I_msTime(); // Does this screen need blinking? diff --git a/src/common/startscreen/startscreen.cpp b/src/common/startscreen/startscreen.cpp index 56afb59b4..b71949f46 100644 --- a/src/common/startscreen/startscreen.cpp +++ b/src/common/startscreen/startscreen.cpp @@ -607,7 +607,7 @@ bool FStartScreen::NetInit(const char* message, int numplayers) { NetMaxPos = numplayers; NetCurPos = 0; - NetMessageString.Format("%s %s", message, GStrings("TXT_NET_PRESSESC")); + NetMessageString.Format("%s %s", message, GStrings.GetString("TXT_NET_PRESSESC")); NetProgress(1); // You always know about yourself return true; } diff --git a/src/common/textures/texturemanager.cpp b/src/common/textures/texturemanager.cpp index 10a3d3367..1173f61be 100644 --- a/src/common/textures/texturemanager.cpp +++ b/src/common/textures/texturemanager.cpp @@ -378,7 +378,7 @@ FGameTexture *FTextureManager::FindGameTexture(const char *texname, ETextureType bool FTextureManager::OkForLocalization(FTextureID texnum, const char *substitute, int locmode) { uint32_t langtable = 0; - if (*substitute == '$') substitute = GStrings.GetString(substitute+1, &langtable); + if (*substitute == '$') substitute = GStrings.CheckString(substitute+1, &langtable); else return true; // String literals from the source data should never override graphics from the same definition. if (substitute == nullptr) return true; // The text does not exist. diff --git a/src/console/c_cmds.cpp b/src/console/c_cmds.cpp index 3871b47dd..b4e9b8810 100644 --- a/src/console/c_cmds.cpp +++ b/src/console/c_cmds.cpp @@ -313,7 +313,7 @@ CCMD (idclev) return; // So be it. - Printf ("%s\n", GStrings("STSTR_CLEV")); + Printf ("%s\n", GStrings.GetString("STSTR_CLEV")); G_DeferedInitNew (mapname.GetChars()); //players[0].health = 0; // Force reset } @@ -337,7 +337,7 @@ CCMD (hxvisit) if (P_CheckMapData(mapname.GetChars())) { // So be it. - Printf ("%s\n", GStrings("STSTR_CLEV")); + Printf ("%s\n", GStrings.GetString("STSTR_CLEV")); G_DeferedInitNew (mapname.GetChars()); return; } @@ -1067,7 +1067,7 @@ static void PrintSecretString(const char *string, bool thislevel) else colstr = TEXTCOLOR_GREEN; } } - auto brok = V_BreakLines(CurrentConsoleFont, twod->GetWidth()*95/100, *string == '$' ? GStrings(++string) : string); + auto brok = V_BreakLines(CurrentConsoleFont, twod->GetWidth()*95/100, *string == '$' ? GStrings.GetString(++string) : string); for (auto &line : brok) { @@ -1200,7 +1200,7 @@ CCMD(idmus) } else { - Printf("%s\n", GStrings("STSTR_NOMUS")); + Printf("%s\n", GStrings.GetString("STSTR_NOMUS")); return; } } @@ -1214,12 +1214,12 @@ CCMD(idmus) if (info->Music.IsNotEmpty()) { S_ChangeMusic(info->Music.GetChars(), info->musicorder); - Printf("%s\n", GStrings("STSTR_MUS")); + Printf("%s\n", GStrings.GetString("STSTR_MUS")); } } else { - Printf("%s\n", GStrings("STSTR_NOMUS")); + Printf("%s\n", GStrings.GetString("STSTR_NOMUS")); } } } diff --git a/src/ct_chat.cpp b/src/ct_chat.cpp index 4175c0652..e5368f83e 100644 --- a/src/ct_chat.cpp +++ b/src/ct_chat.cpp @@ -261,7 +261,7 @@ void CT_Drawer (void) if (!!rv) return; } - FStringf prompt("%s ", GStrings("TXT_SAY")); + FStringf prompt("%s ", GStrings.GetString("TXT_SAY")); int x, scalex, y, promptwidth; y = (viewactive || gamestate != GS_LEVEL) ? -displayfont->GetHeight()-2 : -displayfont->GetHeight() - 22; diff --git a/src/d_main.cpp b/src/d_main.cpp index c5e83cf58..3055d2751 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -260,7 +260,7 @@ CUSTOM_CVAR (Int, fraglimit, 0, CVAR_SERVERINFO) { if (playeringame[i] && self <= D_GetFragCount(&players[i])) { - Printf ("%s\n", GStrings("TXT_FRAGLIMIT")); + Printf ("%s\n", GStrings.GetString("TXT_FRAGLIMIT")); primaryLevel->ExitLevel (0, false); break; } @@ -1097,7 +1097,7 @@ void D_Display () if (paused && multiplayer) { FFont *font = generic_ui? NewSmallFont : SmallFont; - FString pstring = GStrings("TXT_BY"); + FString pstring = GStrings.GetString("TXT_BY"); pstring.Substitute("%s", players[paused - 1].userinfo.GetName()); DrawText(twod, font, CR_RED, (twod->GetWidth() - font->StringWidth(pstring)*CleanXfac) / 2, @@ -1295,7 +1295,7 @@ void D_PageDrawer (void) if (Subtitle != nullptr) { FFont* font = generic_ui ? NewSmallFont : SmallFont; - DrawFullscreenSubtitle(font, GStrings[Subtitle]); + DrawFullscreenSubtitle(font, GStrings.CheckString(Subtitle)); } if (Advisory.isValid()) { @@ -2162,7 +2162,7 @@ static void CheckCmdLine() if (devparm) { - Printf ("%s", GStrings("D_DEVSTR")); + Printf ("%s", GStrings.GetString("D_DEVSTR")); } // turbo option // [RH] (now a cvar) @@ -3456,7 +3456,7 @@ static int D_InitGame(const FIWADInfo* iwad_info, std::vector& allw for (int p = 0; p < 5; ++p) { // At this point we cannot use the player's gender info yet so force 'male' here. - const char *str = GStrings.GetString(startupString[p], nullptr, 0); + const char *str = GStrings.CheckString(startupString[p], nullptr, 0); if (str != NULL && str[0] != '\0') { Printf("%s\n", str); diff --git a/src/d_net.cpp b/src/d_net.cpp index ca45da4ef..656b07e0b 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -2260,7 +2260,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player) cht_Give (&players[player], s, ReadInt32 (stream)); if (player != consoleplayer) { - FString message = GStrings("TXT_X_CHEATS"); + FString message = GStrings.GetString("TXT_X_CHEATS"); message.Substitute("%s", players[player].userinfo.GetName()); Printf("%s: give %s\n", message.GetChars(), s); } diff --git a/src/d_netinfo.cpp b/src/d_netinfo.cpp index 5c2e4cfa8..ee004505e 100644 --- a/src/d_netinfo.cpp +++ b/src/d_netinfo.cpp @@ -321,7 +321,7 @@ static void UpdateTeam (int pnum, int team, bool update) if ((dmflags2 & DF2_NO_TEAM_SWITCH) && (alwaysapplydmflags || deathmatch) && TeamLibrary.IsValidTeam (info->GetTeam())) { - Printf ("%s\n", GStrings("TXT_NO_TEAM_CHANGE")); + Printf ("%s\n", GStrings.GetString("TXT_NO_TEAM_CHANGE")); return; } @@ -339,12 +339,12 @@ static void UpdateTeam (int pnum, int team, bool update) FString message; if (TeamLibrary.IsValidTeam (team)) { - message = GStrings("TXT_JOINED_TEAM"); + message = GStrings.GetString("TXT_JOINED_TEAM"); message.Substitute("%t", Teams[team].GetName()); } else { - message = GStrings("TXT_LONER"); + message = GStrings.GetString("TXT_LONER"); } message.Substitute("%s", info->GetName()); Printf("%s\n", message.GetChars()); diff --git a/src/g_game.cpp b/src/g_game.cpp index e56fb4375..ac09977d8 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -1825,7 +1825,7 @@ void G_DoPlayerPop(int playernum) { playeringame[playernum] = false; - FString message = GStrings(deathmatch? "TXT_LEFTWITHFRAGS" : "TXT_LEFTTHEGAME"); + FString message = GStrings.GetString(deathmatch? "TXT_LEFTWITHFRAGS" : "TXT_LEFTTHEGAME"); message.Substitute("%s", players[playernum].userinfo.GetName()); message.Substitute("%d", FStringf("%d", players[playernum].fragcount)); Printf("%s\n", message.GetChars()); @@ -1903,7 +1903,7 @@ static bool CheckSingleWad (const char *name, bool &printRequires, bool printwar { if (!printRequires) { - Printf ("%s:\n%s", GStrings("TXT_SAVEGAMENEEDS"), name); + Printf ("%s:\n%s", GStrings.GetString("TXT_SAVEGAMENEEDS"), name); } else { @@ -1941,7 +1941,7 @@ bool G_CheckSaveGameWads (FSerializer &arc, bool printwarn) static void LoadGameError(const char *label, const char *append = "") { - FString message = GStrings(label); + FString message = GStrings.GetString(label); message.Substitute("%s", savename); Printf ("%s %s\n", message.GetChars(), append); } @@ -2060,12 +2060,12 @@ void G_DoLoadGame () FString message; if (SaveVersion < MINSAVEVER) { - message = GStrings("TXT_TOOOLDSG"); + message = GStrings.GetString("TXT_TOOOLDSG"); message.Substitute("%e", FStringf("%d", MINSAVEVER)); } else { - message = GStrings("TXT_TOONEWSG"); + message = GStrings.GetString("TXT_TOONEWSG"); message.Substitute("%e", FStringf("%d", SAVEVER)); } message.Substitute("%d", FStringf("%d", SaveVersion)); @@ -2175,19 +2175,19 @@ void G_SaveGame (const char *filename, const char *description) { if (sendsave || gameaction == ga_savegame) { - Printf ("%s\n", GStrings("TXT_SAVEPENDING")); + Printf ("%s\n", GStrings.GetString("TXT_SAVEPENDING")); } else if (!usergame) { - Printf ("%s\n", GStrings("TXT_NOTSAVEABLE")); + Printf ("%s\n", GStrings.GetString("TXT_NOTSAVEABLE")); } else if (gamestate != GS_LEVEL) { - Printf ("%s\n", GStrings("TXT_NOTINLEVEL")); + Printf ("%s\n", GStrings.GetString("TXT_NOTINLEVEL")); } else if (players[consoleplayer].health <= 0 && !multiplayer) { - Printf ("%s\n", GStrings("TXT_SPPLAYERDEAD")); + Printf ("%s\n", GStrings.GetString("TXT_SPPLAYERDEAD")); } else { @@ -2311,7 +2311,7 @@ static void PutSaveComment (FSerializer &arc) comment.Format("%s - %s\n", primaryLevel->MapName.GetChars(), primaryLevel->LevelName.GetChars()); // Append elapsed time - const char *const time = GStrings("SAVECOMMENT_TIME"); + const char *const time = GStrings.GetString("SAVECOMMENT_TIME"); levelTime = primaryLevel->time / TICRATE; comment.AppendFormat("%s: %02d:%02d:%02d", time, levelTime/3600, (levelTime%3600)/60, levelTime%60); @@ -2463,12 +2463,12 @@ void G_DoSaveGame (bool okForQuicksave, bool forceQuicksave, FString filename, c savegameManager.NotifyNewSave(filename, description, okForQuicksave, forceQuicksave); BackupSaveName = filename; - if (longsavemessages) Printf("%s (%s)\n", GStrings("GGSAVED"), filename.GetChars()); - else Printf("%s\n", GStrings("GGSAVED")); + if (longsavemessages) Printf("%s (%s)\n", GStrings.GetString("GGSAVED"), filename.GetChars()); + else Printf("%s\n", GStrings.GetString("GGSAVED")); } else { - Printf(PRINT_HIGH, "%s\n", GStrings("TXT_SAVEFAILED")); + Printf(PRINT_HIGH, "%s\n", GStrings.GetString("TXT_SAVEFAILED")); } diff --git a/src/g_hub.cpp b/src/g_hub.cpp index 346ace173..250db2fd0 100644 --- a/src/g_hub.cpp +++ b/src/g_hub.cpp @@ -132,7 +132,7 @@ void G_LeavingHub(FLevelLocals *Level, int mode, cluster_info_t * cluster, wbsta { if (cluster->flags & CLUSTER_LOOKUPNAME) { - wbs->thisname = GStrings(cluster->ClusterName); + wbs->thisname = GStrings.GetString(cluster->ClusterName); } else { diff --git a/src/g_level.cpp b/src/g_level.cpp index 4fcef5f75..686057d64 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -2450,7 +2450,7 @@ DEFINE_ACTION_FUNCTION(FLevelLocals, GetClusterName) if (cluster) { if (cluster->flags & CLUSTER_LOOKUPNAME) - retval = GStrings(cluster->ClusterName); + retval = GStrings.GetString(cluster->ClusterName); else retval = cluster->ClusterName; } diff --git a/src/g_statusbar/sbarinfo_commands.cpp b/src/g_statusbar/sbarinfo_commands.cpp index fb54f7481..bbb3bc90f 100644 --- a/src/g_statusbar/sbarinfo_commands.cpp +++ b/src/g_statusbar/sbarinfo_commands.cpp @@ -824,10 +824,7 @@ class CommandDrawString : public SBarInfoCommand { strValue = CONSTANT; sc.MustGetToken(TK_StringConst); - if(sc.String[0] == '$') - str = GStrings[sc.String+1]; - else - str = sc.String; + label = sc.String; } } void Reset() @@ -923,9 +920,10 @@ class CommandDrawString : public SBarInfoCommand break; } case LOGTEXT: - str = GStrings(statusBar->CPlayer->LogText); + str = GStrings.GetString(statusBar->CPlayer->LogText); break; default: + str = GStrings.localize(label.GetChars()); break; } } @@ -993,6 +991,7 @@ class CommandDrawString : public SBarInfoCommand StringValueType strValue; int valueArgument; FString str; + FString label; StringAlignment alignment; private: diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index 1934e8642..bd75e4469 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -550,7 +550,7 @@ void DBaseStatusBar::DoDrawAutomapHUD(int crdefault, int highlight) if (!generic_ui) { // If the original font does not have accents this will strip them - but a fallback to the VGA font is not desirable here for such cases. - if (!font->CanPrint(GStrings("AM_MONSTERS")) || !font->CanPrint(GStrings("AM_SECRETS")) || !font->CanPrint(GStrings("AM_ITEMS"))) font2 = OriginalSmallFont; + if (!font->CanPrint(GStrings.GetString("AM_MONSTERS")) || !font->CanPrint(GStrings.GetString("AM_SECRETS")) || !font->CanPrint(GStrings.GetString("AM_ITEMS"))) font2 = OriginalSmallFont; } if (am_showtime) @@ -575,14 +575,14 @@ void DBaseStatusBar::DoDrawAutomapHUD(int crdefault, int highlight) y = 0; if (am_showmonsters) { - textbuffer.Format("%s\34%c %d/%d", GStrings("AM_MONSTERS"), crdefault + 65, primaryLevel->killed_monsters, primaryLevel->total_monsters); + textbuffer.Format("%s\34%c %d/%d", GStrings.GetString("AM_MONSTERS"), crdefault + 65, primaryLevel->killed_monsters, primaryLevel->total_monsters); DrawText(twod, font2, highlight, textdist, y, textbuffer.GetChars(), DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, TAG_DONE); y += fheight; } if (am_showsecrets) { - textbuffer.Format("%s\34%c %d/%d", GStrings("AM_SECRETS"), crdefault + 65, primaryLevel->found_secrets, primaryLevel->total_secrets); + textbuffer.Format("%s\34%c %d/%d", GStrings.GetString("AM_SECRETS"), crdefault + 65, primaryLevel->found_secrets, primaryLevel->total_secrets); DrawText(twod, font2, highlight, textdist, y, textbuffer.GetChars(), DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, TAG_DONE); y += fheight; } @@ -590,7 +590,7 @@ void DBaseStatusBar::DoDrawAutomapHUD(int crdefault, int highlight) // Draw item count if (am_showitems) { - textbuffer.Format("%s\34%c %d/%d", GStrings("AM_ITEMS"), crdefault + 65, primaryLevel->found_items, primaryLevel->total_items); + textbuffer.Format("%s\34%c %d/%d", GStrings.GetString("AM_ITEMS"), crdefault + 65, primaryLevel->found_items, primaryLevel->total_items); DrawText(twod, font2, highlight, textdist, y, textbuffer.GetChars(), DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, TAG_DONE); y += fheight; } @@ -1121,7 +1121,7 @@ void DBaseStatusBar::DrawLog () FFont *font = (generic_ui || log_vgafont)? NewSmallFont : SmallFont; int linelen = hudwidth<640? Scale(hudwidth,9,10)-40 : 560; - auto lines = V_BreakLines (font, linelen, text[0] == '$'? GStrings(text.GetChars()+1) : text.GetChars()); + auto lines = V_BreakLines (font, linelen, text[0] == '$'? GStrings.GetString(text.GetChars()+1) : text.GetChars()); int height = 20; for (unsigned i = 0; i < lines.Size(); i++) height += font->GetHeight (); diff --git a/src/gamedata/a_keys.cpp b/src/gamedata/a_keys.cpp index e61880dc2..32f680a42 100644 --- a/src/gamedata/a_keys.cpp +++ b/src/gamedata/a_keys.cpp @@ -218,7 +218,7 @@ static void PrintMessage (const char *str) { if (str[0]=='$') { - str = GStrings(str+1); + str = GStrings.GetString(str+1); } C_MidPrint (nullptr, str); } diff --git a/src/gamedata/g_mapinfo.cpp b/src/gamedata/g_mapinfo.cpp index dfe90b2c9..0e6a5fe6f 100644 --- a/src/gamedata/g_mapinfo.cpp +++ b/src/gamedata/g_mapinfo.cpp @@ -323,7 +323,7 @@ FString level_info_t::LookupLevelName(uint32_t *langtable) if (flags & LEVEL_LOOKUPLEVELNAME) { const char *thename; - const char *lookedup = GStrings.GetString(LevelName.GetChars(), langtable); + const char *lookedup = GStrings.CheckString(LevelName.GetChars(), langtable); if (lookedup == NULL) { thename = LevelName.GetChars(); diff --git a/src/gamedata/g_skill.cpp b/src/gamedata/g_skill.cpp index 53b685cd3..8a0f69fb3 100644 --- a/src/gamedata/g_skill.cpp +++ b/src/gamedata/g_skill.cpp @@ -499,7 +499,7 @@ const char * G_SkillName() if (pmnm != NULL) name = pmnm->GetChars(); } - if (*name == '$') name = GStrings(name+1); + if (*name == '$') name = GStrings.GetString(name+1); return name; } diff --git a/src/gamedata/statistics.cpp b/src/gamedata/statistics.cpp index 64c33567e..95d8165ae 100644 --- a/src/gamedata/statistics.cpp +++ b/src/gamedata/statistics.cpp @@ -469,7 +469,7 @@ void STAT_ChangeLevel(const char *newl, FLevelLocals *Level) section.ToUpper(); const char *ep_name = StartEpisode->mEpisodeName.GetChars(); - if (*ep_name == '$') ep_name = GStrings(ep_name+1); + if (*ep_name == '$') ep_name = GStrings.GetString(ep_name+1); FStatistics *sl = GetStatisticsList(EpisodeStatistics, section.GetChars(), ep_name); int statvals[6] = {0,0,0,0,0,0}; diff --git a/src/hu_scores.cpp b/src/hu_scores.cpp index d9c36f8b4..797e222ef 100644 --- a/src/hu_scores.cpp +++ b/src/hu_scores.cpp @@ -336,10 +336,10 @@ static void HU_DoDrawScores (player_t *player, player_t *sortedplayers[MAXPLAYER y += (BigFont->GetHeight() + 8) * CleanYfac; } - const char *text_color = GStrings("SCORE_COLOR"), - *text_frags = GStrings(deathmatch ? "SCORE_FRAGS" : "SCORE_KILLS"), - *text_name = GStrings("SCORE_NAME"), - *text_delay = GStrings("SCORE_DELAY"); + const char *text_color = GStrings.GetString("SCORE_COLOR"), + *text_frags = GStrings.GetString(deathmatch ? "SCORE_FRAGS" : "SCORE_KILLS"), + *text_name = GStrings.GetString("SCORE_NAME"), + *text_delay = GStrings.GetString("SCORE_DELAY"); col2 = (displayFont->StringWidth(text_color) + 16) * FontScale; col3 = col2 + (displayFont->StringWidth(text_frags) + 16) * FontScale; diff --git a/src/intermission/intermission.cpp b/src/intermission/intermission.cpp index 004f4cfd9..c32812ce2 100644 --- a/src/intermission/intermission.cpp +++ b/src/intermission/intermission.cpp @@ -95,7 +95,7 @@ DEFINE_ACTION_FUNCTION(_Screen, GetTextScreenSize) void DrawFullscreenSubtitle(FFont* font, const char *text) { if (!text || !*text || !inter_subtitles) return; - if (*text == '$') text = GStrings[text + 1]; + text = GStrings.localize(text); // This uses the same scaling as regular HUD messages auto scale = active_con_scaletext(twod, generic_ui); @@ -170,7 +170,7 @@ void DIntermissionScreen::Init(FIntermissionAction *desc, bool first) } else if (*texname == '$') { - texname = GStrings(texname+1); + texname = GStrings.GetString(texname+1); } if (texname[0] != 0) { @@ -330,7 +330,7 @@ void DIntermissionScreenText::Init(FIntermissionAction *desc, bool first) { Super::Init(desc, first); mText = static_cast(desc)->mText; - if (mText[0] == '$') mText = GStrings(&mText[1]); + if (mText[0] == '$') mText = GStrings.GetString(&mText[1]); auto lines = mText.Split("\n"); mText = ""; @@ -659,7 +659,7 @@ void DIntermissionScreenCast::Drawer () if (name != NULL) { auto font = generic_ui ? NewSmallFont : SmallFont; - if (*name == '$') name = GStrings(name+1); + if (*name == '$') name = GStrings.GetString(name+1); DrawText(twod, font, CR_UNTRANSLATED, (twod->GetWidth() - font->StringWidth (name) * CleanXfac)/2, (twod->GetHeight() * 180) / 200, diff --git a/src/intermission/intermission_parse.cpp b/src/intermission/intermission_parse.cpp index 4f75c3bcb..d1089526b 100644 --- a/src/intermission/intermission_parse.cpp +++ b/src/intermission/intermission_parse.cpp @@ -935,7 +935,7 @@ CCMD(testfinale) if (argv.argc() == 2) { - text = GStrings.GetString(argv[1], nullptr); + text = GStrings.CheckString(argv[1], nullptr); } else { diff --git a/src/launcher/launcherbanner.cpp b/src/launcher/launcherbanner.cpp index 69f7e7ee1..823b0021d 100644 --- a/src/launcher/launcherbanner.cpp +++ b/src/launcher/launcherbanner.cpp @@ -17,7 +17,7 @@ LauncherBanner::LauncherBanner(Widget* parent) : Widget(parent) void LauncherBanner::UpdateLanguage() { - FString versionText = GStrings("PICKER_VERSION"); + FString versionText = GStrings.GetString("PICKER_VERSION"); versionText.Substitute("%s", GetVersionString()); VersionLabel->SetText(versionText.GetChars()); } diff --git a/src/launcher/launcherbuttonbar.cpp b/src/launcher/launcherbuttonbar.cpp index d542ea51e..789881000 100644 --- a/src/launcher/launcherbuttonbar.cpp +++ b/src/launcher/launcherbuttonbar.cpp @@ -15,8 +15,8 @@ LauncherButtonbar::LauncherButtonbar(LauncherWindow* parent) : Widget(parent) void LauncherButtonbar::UpdateLanguage() { - PlayButton->SetText(GStrings("PICKER_PLAY")); - ExitButton->SetText(GStrings("PICKER_EXIT")); + PlayButton->SetText(GStrings.GetString("PICKER_PLAY")); + ExitButton->SetText(GStrings.GetString("PICKER_EXIT")); } double LauncherButtonbar::GetPreferredHeight() const diff --git a/src/launcher/launcherwindow.cpp b/src/launcher/launcherwindow.cpp index 96039ea08..37d0a236d 100644 --- a/src/launcher/launcherwindow.cpp +++ b/src/launcher/launcherwindow.cpp @@ -72,8 +72,8 @@ void LauncherWindow::Exit() void LauncherWindow::UpdateLanguage() { - Pages->SetTabText(PlayGame, GStrings("PICKER_TAB_PLAY")); - Pages->SetTabText(Settings, GStrings("OPTMNU_TITLE")); + Pages->SetTabText(PlayGame, GStrings.GetString("PICKER_TAB_PLAY")); + Pages->SetTabText(Settings, GStrings.GetString("OPTMNU_TITLE")); Banner->UpdateLanguage(); PlayGame->UpdateLanguage(); Settings->UpdateLanguage(); diff --git a/src/launcher/playgamepage.cpp b/src/launcher/playgamepage.cpp index 5c585c9e5..46bd16a92 100644 --- a/src/launcher/playgamepage.cpp +++ b/src/launcher/playgamepage.cpp @@ -52,9 +52,9 @@ int PlayGamePage::GetSelectedGame() void PlayGamePage::UpdateLanguage() { - SelectLabel->SetText(GStrings("PICKER_SELECT")); - ParametersLabel->SetText(GStrings("PICKER_ADDPARM")); - FString welcomeText = GStrings("PICKER_WELCOME"); + SelectLabel->SetText(GStrings.GetString("PICKER_SELECT")); + ParametersLabel->SetText(GStrings.GetString("PICKER_ADDPARM")); + FString welcomeText = GStrings.GetString("PICKER_WELCOME"); welcomeText.Substitute("%s", GAMENAME); WelcomeLabel->SetText(welcomeText.GetChars()); } diff --git a/src/launcher/settingspage.cpp b/src/launcher/settingspage.cpp index d1d21b45d..9cd89bcd0 100644 --- a/src/launcher/settingspage.cpp +++ b/src/launcher/settingspage.cpp @@ -132,21 +132,21 @@ void SettingsPage::Save() void SettingsPage::UpdateLanguage() { - LangLabel->SetText(GStrings("OPTMNU_LANGUAGE")); - GeneralLabel->SetText(GStrings("PICKER_GENERAL")); - ExtrasLabel->SetText(GStrings("PICKER_EXTRA")); - FullscreenCheckbox->SetText(GStrings("PICKER_FULLSCREEN")); - DisableAutoloadCheckbox->SetText(GStrings("PICKER_NOAUTOLOAD")); - DontAskAgainCheckbox->SetText(GStrings("PICKER_DONTASK")); - LightsCheckbox->SetText(GStrings("PICKER_LIGHTS")); - BrightmapsCheckbox->SetText(GStrings("PICKER_BRIGHTMAPS")); - WidescreenCheckbox->SetText(GStrings("PICKER_WIDESCREEN")); + LangLabel->SetText(GStrings.GetString("OPTMNU_LANGUAGE")); + GeneralLabel->SetText(GStrings.GetString("PICKER_GENERAL")); + ExtrasLabel->SetText(GStrings.GetString("PICKER_EXTRA")); + FullscreenCheckbox->SetText(GStrings.GetString("PICKER_FULLSCREEN")); + DisableAutoloadCheckbox->SetText(GStrings.GetString("PICKER_NOAUTOLOAD")); + DontAskAgainCheckbox->SetText(GStrings.GetString("PICKER_DONTASK")); + LightsCheckbox->SetText(GStrings.GetString("PICKER_LIGHTS")); + BrightmapsCheckbox->SetText(GStrings.GetString("PICKER_BRIGHTMAPS")); + WidescreenCheckbox->SetText(GStrings.GetString("PICKER_WIDESCREEN")); #ifdef RENDER_BACKENDS - BackendLabel->SetText(GStrings("PICKER_PREFERBACKEND")); - VulkanCheckbox->SetText(GStrings("OPTVAL_VULKAN")); - OpenGLCheckbox->SetText(GStrings("OPTVAL_OPENGL")); - GLESCheckbox->SetText(GStrings("OPTVAL_OPENGLES")); + BackendLabel->SetText(GStrings.GetString("PICKER_PREFERBACKEND")); + VulkanCheckbox->SetText(GStrings.GetString("OPTVAL_VULKAN")); + OpenGLCheckbox->SetText(GStrings.GetString("OPTVAL_OPENGL")); + GLESCheckbox->SetText(GStrings.GetString("OPTVAL_OPENGLES")); #endif } diff --git a/src/m_cheat.cpp b/src/m_cheat.cpp index 7834f92d4..e918c2408 100644 --- a/src/m_cheat.cpp +++ b/src/m_cheat.cpp @@ -66,7 +66,7 @@ void cht_DoMDK(player_t *player, const char *mod) { if (player->mo == NULL) { - Printf("%s\n", GStrings("TXT_WHAT_KILL")); + Printf("%s\n", GStrings.GetString("TXT_WHAT_KILL")); } else if (!deathmatch) { @@ -119,41 +119,41 @@ void cht_DoCheat (player_t *player, int cheat) case CHT_GOD: player->cheats ^= CF_GODMODE; if (player->cheats & CF_GODMODE) - msg = GStrings("STSTR_DQDON"); + msg = GStrings.GetString("STSTR_DQDON"); else - msg = GStrings("STSTR_DQDOFF"); + msg = GStrings.GetString("STSTR_DQDOFF"); break; case CHT_BUDDHA: player->cheats ^= CF_BUDDHA; if (player->cheats & CF_BUDDHA) - msg = GStrings("TXT_BUDDHAON"); + msg = GStrings.GetString("TXT_BUDDHAON"); else - msg = GStrings("TXT_BUDDHAOFF"); + msg = GStrings.GetString("TXT_BUDDHAOFF"); break; case CHT_GOD2: player->cheats ^= CF_GODMODE2; if (player->cheats & CF_GODMODE2) - msg = GStrings("STSTR_DQD2ON"); + msg = GStrings.GetString("STSTR_DQD2ON"); else - msg = GStrings("STSTR_DQD2OFF"); + msg = GStrings.GetString("STSTR_DQD2OFF"); break; case CHT_BUDDHA2: player->cheats ^= CF_BUDDHA2; if (player->cheats & CF_BUDDHA2) - msg = GStrings("TXT_BUDDHA2ON"); + msg = GStrings.GetString("TXT_BUDDHA2ON"); else - msg = GStrings("TXT_BUDDHA2OFF"); + msg = GStrings.GetString("TXT_BUDDHA2OFF"); break; case CHT_NOCLIP: player->cheats ^= CF_NOCLIP; if (player->cheats & CF_NOCLIP) - msg = GStrings("STSTR_NCON"); + msg = GStrings.GetString("STSTR_NCON"); else - msg = GStrings("STSTR_NCOFF"); + msg = GStrings.GetString("STSTR_NCOFF"); break; case CHT_NOCLIP2: @@ -161,12 +161,12 @@ void cht_DoCheat (player_t *player, int cheat) if (player->cheats & CF_NOCLIP2) { player->cheats |= CF_NOCLIP; - msg = GStrings("STSTR_NC2ON"); + msg = GStrings.GetString("STSTR_NC2ON"); } else { player->cheats &= ~CF_NOCLIP; - msg = GStrings("STSTR_NC2OFF"); + msg = GStrings.GetString("STSTR_NC2OFF"); } if (player->mo->Vel.X == 0) player->mo->Vel.X = MinVel; // force some lateral movement so that internal variables are up to date break; @@ -174,9 +174,9 @@ void cht_DoCheat (player_t *player, int cheat) case CHT_NOVELOCITY: player->cheats ^= CF_NOVELOCITY; if (player->cheats & CF_NOVELOCITY) - msg = GStrings("TXT_LEADBOOTSON"); + msg = GStrings.GetString("TXT_LEADBOOTSON"); else - msg = GStrings("TXT_LEADBOOTSOFF"); + msg = GStrings.GetString("TXT_LEADBOOTSOFF"); break; case CHT_FLY: @@ -187,13 +187,13 @@ void cht_DoCheat (player_t *player, int cheat) { player->mo->flags |= MF_NOGRAVITY; player->mo->flags2 |= MF2_FLY; - msg = GStrings("TXT_LIGHTER"); + msg = GStrings.GetString("TXT_LIGHTER"); } else { player->mo->flags &= ~MF_NOGRAVITY; player->mo->flags2 &= ~MF2_FLY; - msg = GStrings("TXT_GRAVITY"); + msg = GStrings.GetString("TXT_GRAVITY"); } } break; @@ -206,25 +206,25 @@ void cht_DoCheat (player_t *player, int cheat) case CHT_NOTARGET: player->cheats ^= CF_NOTARGET; if (player->cheats & CF_NOTARGET) - msg = GStrings("TXT_NOTARGET_ON"); + msg = GStrings.GetString("TXT_NOTARGET_ON"); else - msg = GStrings("TXT_NOTARGET_OFF"); + msg = GStrings.GetString("TXT_NOTARGET_OFF"); break; case CHT_ANUBIS: player->cheats ^= CF_FRIGHTENING; if (player->cheats & CF_FRIGHTENING) - msg = GStrings("TXT_ANUBIS_ON"); + msg = GStrings.GetString("TXT_ANUBIS_ON"); else - msg = GStrings("TXT_ANUBIS_OFF"); + msg = GStrings.GetString("TXT_ANUBIS_OFF"); break; case CHT_CHASECAM: player->cheats ^= CF_CHASECAM; if (player->cheats & CF_CHASECAM) - msg = GStrings("TXT_CHASECAM_ON"); + msg = GStrings.GetString("TXT_CHASECAM_ON"); else - msg = GStrings("TXT_CHASECAM_OFF"); + msg = GStrings.GetString("TXT_CHASECAM_OFF"); R_ResetViewInterpolation (); break; @@ -236,7 +236,7 @@ void cht_DoCheat (player_t *player, int cheat) { player->mo->GiveInventoryType (type); } - msg = GStrings("STSTR_CHOPPERS"); + msg = GStrings.GetString("STSTR_CHOPPERS"); } // [RH] The original cheat also set powers[pw_invulnerability] to true. // Since this is a timer and not a boolean, it effectively turned off @@ -251,12 +251,12 @@ void cht_DoCheat (player_t *player, int cheat) if (item != NULL) { item->Destroy (); - msg = GStrings("TXT_CHEATPOWEROFF"); + msg = GStrings.GetString("TXT_CHEATPOWEROFF"); } else { player->mo->GiveInventoryType (PClass::FindActor(NAME_PowerWeaponLevel2)); - msg = GStrings("TXT_CHEATPOWERON"); + msg = GStrings.GetString("TXT_CHEATPOWERON"); } } break; @@ -267,7 +267,7 @@ void cht_DoCheat (player_t *player, int cheat) cht_Give (player, "ammo"); cht_Give (player, "keys"); cht_Give (player, "armor"); - msg = GStrings("STSTR_KFAADDED"); + msg = GStrings.GetString("STSTR_KFAADDED"); break; case CHT_IDFA: @@ -275,7 +275,7 @@ void cht_DoCheat (player_t *player, int cheat) cht_Give (player, "weapons"); cht_Give (player, "ammo"); cht_Give (player, "armor"); - msg = GStrings("STSTR_FAADDED"); + msg = GStrings.GetString("STSTR_FAADDED"); break; case CHT_BEHOLDV: @@ -320,7 +320,7 @@ void cht_DoCheat (player_t *player, int cheat) item->Destroy (); } } - msg = GStrings("STSTR_BEHOLDX"); + msg = GStrings.GetString("STSTR_BEHOLDX"); break; case CHT_MASSACRE: @@ -330,12 +330,12 @@ void cht_DoCheat (player_t *player, int cheat) // killough 3/22/98: make more intelligent about plural if (killcount == 1) { - msg = GStrings(cheat == CHT_MASSACRE? "TXT_MONSTER_KILLED" : "TXT_BADDIE_KILLED"); + msg = GStrings.GetString(cheat == CHT_MASSACRE? "TXT_MONSTER_KILLED" : "TXT_BADDIE_KILLED"); } else { // Note: Do not use the language string directly as a format template! - smsg = GStrings(cheat == CHT_MASSACRE? "TXT_MONSTERS_KILLED" : "TXT_BADDIES_KILLED"); + smsg = GStrings.GetString(cheat == CHT_MASSACRE? "TXT_MONSTERS_KILLED" : "TXT_BADDIES_KILLED"); FStringf countstr("%d", killcount); smsg.Substitute("%d", countstr); msg = smsg.GetChars(); @@ -347,13 +347,13 @@ void cht_DoCheat (player_t *player, int cheat) if (player->mo != NULL && player->playerstate == PST_LIVE) { player->health = player->mo->health = player->mo->GetDefault()->health; - msg = GStrings("TXT_CHEATHEALTH"); + msg = GStrings.GetString("TXT_CHEATHEALTH"); } break; case CHT_KEYS: cht_Give (player, "keys"); - msg = GStrings("TXT_CHEATKEYS"); + msg = GStrings.GetString("TXT_CHEATKEYS"); break; // [GRB] @@ -362,7 +362,7 @@ void cht_DoCheat (player_t *player, int cheat) { if (player->mo->IsKindOf("PlayerChunk")) { - Printf("%s\n", GStrings("TXT_NO_RESURRECT")); + Printf("%s\n", GStrings.GetString("TXT_NO_RESURRECT")); return; } else @@ -374,52 +374,52 @@ void cht_DoCheat (player_t *player, int cheat) case CHT_GIMMIEA: cht_Give (player, "ArtiInvulnerability"); - msg = GStrings("TAG_ARTIINVULNERABILITY"); + msg = GStrings.GetString("TAG_ARTIINVULNERABILITY"); break; case CHT_GIMMIEB: cht_Give (player, "ArtiInvisibility"); - msg = GStrings("TAG_ARTIINVISIBILITY"); + msg = GStrings.GetString("TAG_ARTIINVISIBILITY"); break; case CHT_GIMMIEC: cht_Give (player, "ArtiHealth"); - msg = GStrings("TAG_ARTIHEALTH"); + msg = GStrings.GetString("TAG_ARTIHEALTH"); break; case CHT_GIMMIED: cht_Give (player, "ArtiSuperHealth"); - msg = GStrings("TAG_ARTISUPERHEALTH"); + msg = GStrings.GetString("TAG_ARTISUPERHEALTH"); break; case CHT_GIMMIEE: cht_Give (player, "ArtiTomeOfPower"); - msg = GStrings("TAG_ARTITOMEOFPOWER"); + msg = GStrings.GetString("TAG_ARTITOMEOFPOWER"); break; case CHT_GIMMIEF: cht_Give (player, "ArtiTorch"); - msg = GStrings("TAG_ARTITORCH"); + msg = GStrings.GetString("TAG_ARTITORCH"); break; case CHT_GIMMIEG: cht_Give (player, "ArtiTimeBomb"); - msg = GStrings("TAG_ARTIFIREBOMB"); + msg = GStrings.GetString("TAG_ARTIFIREBOMB"); break; case CHT_GIMMIEH: cht_Give (player, "ArtiEgg"); - msg = GStrings("TAG_ARTIEGG"); + msg = GStrings.GetString("TAG_ARTIEGG"); break; case CHT_GIMMIEI: cht_Give (player, "ArtiFly"); - msg = GStrings("TAG_ARTIFLY"); + msg = GStrings.GetString("TAG_ARTIFLY"); break; case CHT_GIMMIEJ: cht_Give (player, "ArtiTeleport"); - msg = GStrings("TAG_ARTITELEPORT"); + msg = GStrings.GetString("TAG_ARTITELEPORT"); break; case CHT_GIMMIEZ: @@ -427,17 +427,17 @@ void cht_DoCheat (player_t *player, int cheat) { cht_Give (player, "artifacts"); } - msg = GStrings("TAG_ALL_ARTIFACTS"); + msg = GStrings.GetString("TAG_ALL_ARTIFACTS"); break; case CHT_TAKEWEAPS: cht_Takeweaps(player); - msg = GStrings("TXT_CHEATIDKFA"); + msg = GStrings.GetString("TXT_CHEATIDKFA"); break; case CHT_NOWUDIE: cht_Suicide (player); - msg = GStrings("TXT_CHEATIDDQD"); + msg = GStrings.GetString("TXT_CHEATIDDQD"); break; case CHT_ALLARTI: @@ -445,18 +445,18 @@ void cht_DoCheat (player_t *player, int cheat) { cht_Give (player, "artifacts"); } - msg = GStrings("TXT_CHEATARTIFACTS3"); + msg = GStrings.GetString("TXT_CHEATARTIFACTS3"); break; case CHT_PUZZLE: cht_Give (player, "puzzlepieces"); - msg = GStrings("TXT_CHEATARTIFACTS3"); + msg = GStrings.GetString("TXT_CHEATARTIFACTS3"); break; case CHT_MDK: if (player->mo == nullptr) { - Printf ("%s\n", GStrings("TXT_WHAT_KILL")); + Printf ("%s\n", GStrings.GetString("TXT_WHAT_KILL")); return; } else if (!deathmatch) @@ -471,7 +471,7 @@ void cht_DoCheat (player_t *player, int cheat) case CHT_DONNYTRUMP: cht_Give (player, "HealthTraining"); - msg = GStrings("TXT_MIDASTOUCH"); + msg = GStrings.GetString("TXT_MIDASTOUCH"); break; case CHT_LEGO: @@ -507,34 +507,34 @@ void cht_DoCheat (player_t *player, int cheat) cht_Give (player, "MedPatch"); cht_Give (player, "MedicalKit"); cht_Give (player, "SurgeryKit"); - msg = GStrings("TXT_GOTSTUFF"); + msg = GStrings.GetString("TXT_GOTSTUFF"); break; case CHT_PUMPUPP: cht_Give (player, "AmmoSatchel"); - msg = GStrings("TXT_GOTSTUFF"); + msg = GStrings.GetString("TXT_GOTSTUFF"); break; case CHT_PUMPUPS: cht_Give (player, "UpgradeStamina", 10); cht_Give (player, "UpgradeAccuracy"); - msg = GStrings("TXT_GOTSTUFF"); + msg = GStrings.GetString("TXT_GOTSTUFF"); break; case CHT_CLEARFROZENPROPS: player->cheats &= ~(CF_FROZEN|CF_TOTALLYFROZEN); - msg = GStrings("TXT_NOT_FROZEN"); + msg = GStrings.GetString("TXT_NOT_FROZEN"); break; case CHT_FREEZE: globalchangefreeze ^= 1; if (globalfreeze ^ globalchangefreeze) { - msg = GStrings("TXT_FREEZEON"); + msg = GStrings.GetString("TXT_FREEZEON"); } else { - msg = GStrings("TXT_FREEZEOFF"); + msg = GStrings.GetString("TXT_FREEZEOFF"); } break; } @@ -546,7 +546,7 @@ void cht_DoCheat (player_t *player, int cheat) Printf ("%s\n", msg); else if (cheat != CHT_CHASECAM) { - FString message = GStrings("TXT_X_CHEATS"); + FString message = GStrings.GetString("TXT_X_CHEATS"); message.Substitute("%s", player->userinfo.GetName()); Printf("%s: %s\n", message.GetChars(), msg); } diff --git a/src/m_misc.cpp b/src/m_misc.cpp index d415d6c47..1b451486b 100644 --- a/src/m_misc.cpp +++ b/src/m_misc.cpp @@ -519,7 +519,7 @@ void WritePNGfile (FileWriter *file, const uint8_t *buffer, const PalEntry *pale !M_AppendPNGText (file, "Software", software) || !M_FinishPNG (file)) { - Printf ("%s\n", GStrings("TXT_SCREENSHOTERR")); + Printf ("%s\n", GStrings.GetString("TXT_SCREENSHOTERR")); } } diff --git a/src/menu/doommenu.cpp b/src/menu/doommenu.cpp index ac73a9b0a..5718bd6b0 100644 --- a/src/menu/doommenu.cpp +++ b/src/menu/doommenu.cpp @@ -207,7 +207,7 @@ bool M_SetSpecialMenu(FName& menu, int param) if ((gameinfo.flags & GI_SHAREWARE) && param > 0) { // Only Doom and Heretic have multi-episode shareware versions. - M_StartMessage(GStrings("SWSTRING"), 1); + M_StartMessage(GStrings.GetString("SWSTRING"), 1); return false; } @@ -222,7 +222,7 @@ bool M_SetSpecialMenu(FName& menu, int param) LastSkill = param; const char *msg = AllSkills[param].MustConfirmText.GetChars(); - if (*msg==0) msg = GStrings("NIGHTMARE"); + if (*msg==0) msg = GStrings.GetString("NIGHTMARE"); M_StartMessage (msg, 0, NAME_StartgameConfirmed); return false; } @@ -248,7 +248,7 @@ bool M_SetSpecialMenu(FName& menu, int param) if (!usergame || (players[consoleplayer].health <= 0 && !multiplayer) || gamestate != GS_LEVEL) { // cannot save outside the game. - M_StartMessage (GStrings("SAVEDEAD"), 1); + M_StartMessage (GStrings.GetString("SAVEDEAD"), 1); return false; } break; @@ -394,11 +394,11 @@ CCMD (menu_quit) { if (msg[1] == '*') { - EndString = GStrings(msg + 2); + EndString = GStrings.GetString(msg + 2); } else { - EndString.Format("%s\n\n%s", GStrings(msg + 1), GStrings("DOSY")); + EndString.Format("%s\n\n%s", GStrings.GetString(msg + 1), GStrings.GetString("DOSY")); } } else EndString = gameinfo.quitmessages[messageindex]; @@ -430,7 +430,7 @@ CCMD (menu_quit) void ActivateEndGameMenu() { - FString tempstring = GStrings(netgame ? "NETEND" : "ENDGAME"); + FString tempstring = GStrings.GetString(netgame ? "NETEND" : "ENDGAME"); DMenu *newmenu = CreateMessageBoxMenu(CurrentMenu, tempstring.GetChars(), 0, false, NAME_None, []() { M_ClearMenus(); @@ -500,7 +500,7 @@ CCMD (quicksave) S_Sound(CHAN_VOICE, CHANF_UI, "menu/activate", snd_menuvolume, ATTN_NONE); - FString tempstring = GStrings("QSPROMPT"); + FString tempstring = GStrings.GetString("QSPROMPT"); tempstring.Substitute("%s", savegameManager.quickSaveSlot->SaveTitle.GetChars()); DMenu *newmenu = CreateMessageBoxMenu(CurrentMenu, tempstring.GetChars(), 0, false, NAME_None, []() @@ -524,7 +524,7 @@ CCMD (quickload) if (netgame) { M_StartControlPanel(true); - M_StartMessage (GStrings("QLOADNET"), 1); + M_StartMessage (GStrings.GetString("QLOADNET"), 1); return; } @@ -543,7 +543,7 @@ CCMD (quickload) G_LoadGame(savegameManager.quickSaveSlot->Filename.GetChars()); return; } - FString tempstring = GStrings("QLPROMPT"); + FString tempstring = GStrings.GetString("QLPROMPT"); tempstring.Substitute("%s", savegameManager.quickSaveSlot->SaveTitle.GetChars()); M_StartControlPanel(true); @@ -567,13 +567,13 @@ CCMD (togglemessages) { if (show_messages) { - Printf(TEXTCOLOR_RED "%s\n", GStrings("MSGOFF")); + Printf(TEXTCOLOR_RED "%s\n", GStrings.GetString("MSGOFF")); show_messages = false; } else { show_messages = true; - Printf(TEXTCOLOR_RED "%s\n", GStrings("MSGON")); + Printf(TEXTCOLOR_RED "%s\n", GStrings.GetString("MSGON")); } } @@ -711,7 +711,7 @@ void M_StartupEpisodeMenu(FNewGameStartup *gs) continue; // We do not measure patch based entries. They are assumed to fit } const char *c = AllEpisodes[i].mEpisodeName.GetChars(); - if (*c == '$') c = GStrings(c + 1); + if (*c == '$') c = GStrings.GetString(c + 1); int textwidth = ld->mFont->StringWidth(c); int textright = posx + textwidth; if (posx + textright > 320) posx = max(0, 320 - textright); @@ -1261,7 +1261,7 @@ void M_StartupSkillMenu(FNewGameStartup *gs) continue; } const char *c = pItemText ? pItemText->GetChars() : skill.MenuName.GetChars(); - if (*c == '$') c = GStrings(c + 1); + if (*c == '$') c = GStrings.GetString(c + 1); int textwidth = ld->mFont->StringWidth(c); int textright = posx + textwidth; if (posx + textright > 320) posx = max(0, 320 - textright); diff --git a/src/p_conversation.cpp b/src/p_conversation.cpp index 20a873477..f8ee0a8e5 100644 --- a/src/p_conversation.cpp +++ b/src/p_conversation.cpp @@ -589,7 +589,7 @@ static void HandleReply(player_t *player, bool isconsole, int nodenum, int reply const char *log = reply->LogString.GetChars(); if (log[0] == '$') { - log = GStrings(log + 1); + log = GStrings.GetString(log + 1); } player->SetLogText(log); @@ -713,7 +713,7 @@ static void TerminalResponse (const char *str) // handle string table replacement if (str[0] == '$') { - str = GStrings(str + 1); + str = GStrings.GetString(str + 1); } if (StatusBar != NULL) diff --git a/src/playsim/a_pickups.cpp b/src/playsim/a_pickups.cpp index f4c72b5f9..d5a9a524f 100644 --- a/src/playsim/a_pickups.cpp +++ b/src/playsim/a_pickups.cpp @@ -63,7 +63,7 @@ void PrintPickupMessage(bool localview, const FString &str) StaticLastMessage = str; const char *pstr = str.GetChars(); - if (pstr[0] == '$') pstr = GStrings(pstr + 1); + if (pstr[0] == '$') pstr = GStrings.GetString(pstr + 1); if (pstr[0] != 0) Printf(PRINT_LOW, "%s\n", pstr); StatusBar->FlashCrosshair(); } diff --git a/src/playsim/p_acs.cpp b/src/playsim/p_acs.cpp index bc945a003..b464ed2a5 100644 --- a/src/playsim/p_acs.cpp +++ b/src/playsim/p_acs.cpp @@ -3248,7 +3248,7 @@ const char *FBehavior::LookupString (uint32_t index, bool forprint) const token.Truncate(5); FStringf label("TXT_ACS_%s_%d_%.5s", Level->MapName.GetChars(), index, token.GetChars()); - auto p = GStrings[label.GetChars()]; + auto p = GStrings.CheckString(label.GetChars()); if (p) return p; } @@ -8503,7 +8503,7 @@ scriptwait: lookup = Level->Behaviors.LookupString (STACK(1), true); if (pcd == PCD_PRINTLOCALIZED) { - lookup = GStrings(lookup); + lookup = GStrings.GetString(lookup); } if (lookup != NULL) { diff --git a/src/playsim/p_actionfunctions.cpp b/src/playsim/p_actionfunctions.cpp index f790cfb80..b6090213b 100644 --- a/src/playsim/p_actionfunctions.cpp +++ b/src/playsim/p_actionfunctions.cpp @@ -1292,7 +1292,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Print) PARAM_FLOAT (time); PARAM_NAME (fontname); - if (text[0] == '$') text = GStrings(&text[1]); + if (text[0] == '$') text = GStrings.GetString(&text[1]); if (self->CheckLocalView() || (self->target != NULL && self->target->CheckLocalView())) { @@ -1330,7 +1330,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_PrintBold) float saved = con_midtime; FFont *font = NULL; - if (text[0] == '$') text = GStrings(&text[1]); + if (text[0] == '$') text = GStrings.GetString(&text[1]); if (fontname != NAME_None) { font = V_GetFont(fontname.GetChars()); @@ -1359,7 +1359,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Log) if (local && !self->CheckLocalView()) return 0; - if (text[0] == '$') text = GStrings(&text[1]); + if (text[0] == '$') text = GStrings.GetString(&text[1]); FString formatted = strbin1(text.GetChars()); Printf("%s\n", formatted.GetChars()); return 0; diff --git a/src/playsim/p_interaction.cpp b/src/playsim/p_interaction.cpp index 86416f0c3..0ae77e914 100644 --- a/src/playsim/p_interaction.cpp +++ b/src/playsim/p_interaction.cpp @@ -249,11 +249,11 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgf else { lookup.Format("$Obituary_%s_%s", attacker->GetClass()->TypeName.GetChars(), mod.GetChars()); - if (GStrings[lookup.GetChars() + 1]) message = lookup.GetChars(); + if (GStrings.CheckString(lookup.GetChars() + 1)) message = lookup.GetChars(); else { lookup.Format("$Obituary_%s", attacker->GetClass()->TypeName.GetChars()); - if (GStrings[lookup.GetChars() + 1]) message = lookup.GetChars(); + if (GStrings.CheckString(lookup.GetChars() + 1)) message = lookup.GetChars(); else { IFVIRTUALPTR(attacker, AActor, GetObituary) @@ -273,7 +273,7 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgf if (message != NULL && message[0] == '$') { - message = GStrings.GetString(message+1, nullptr, self->player->userinfo.GetGender()); + message = GStrings.CheckString(message+1, nullptr, self->player->userinfo.GetGender()); } if (message == NULL) @@ -283,16 +283,16 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgf if (mod == NAME_Melee) { FStringf ob("DEFHITOB_%s", cls); - message = GStrings.GetString(ob.GetChars(), nullptr, self->player->userinfo.GetGender()); + message = GStrings.CheckString(ob.GetChars(), nullptr, self->player->userinfo.GetGender()); } if (message == nullptr) { FStringf ob("DEFOB_%s", cls); - message = GStrings.GetString(ob.GetChars(), nullptr, self->player->userinfo.GetGender()); + message = GStrings.CheckString(ob.GetChars(), nullptr, self->player->userinfo.GetGender()); } if (message == nullptr) { - message = GStrings.GetString("OB_DEFAULT", nullptr, self->player->userinfo.GetGender()); + message = GStrings.CheckString("OB_DEFAULT", nullptr, self->player->userinfo.GetGender()); } } @@ -454,7 +454,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf player->fragcount--; if (deathmatch && player->spreecount >= 5 && cl_showsprees) { - PronounMessage (GStrings("SPREEKILLSELF"), buff, + PronounMessage (GStrings.GetString("SPREEKILLSELF"), buff, player->userinfo.GetGender(), player->userinfo.GetName(), player->userinfo.GetName()); StatusBar->AttachMessage (Create(nullptr, buff, @@ -489,19 +489,19 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf switch (source->player->spreecount) { case 5: - spreemsg = GStrings("SPREE5"); + spreemsg = GStrings.GetString("SPREE5"); break; case 10: - spreemsg = GStrings("SPREE10"); + spreemsg = GStrings.GetString("SPREE10"); break; case 15: - spreemsg = GStrings("SPREE15"); + spreemsg = GStrings.GetString("SPREE15"); break; case 20: - spreemsg = GStrings("SPREE20"); + spreemsg = GStrings.GetString("SPREE20"); break; case 25: - spreemsg = GStrings("SPREE25"); + spreemsg = GStrings.GetString("SPREE25"); break; default: spreemsg = NULL; @@ -512,7 +512,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf { if (!AnnounceSpreeLoss (this)) { - PronounMessage (GStrings("SPREEOVER"), buff, player->userinfo.GetGender(), + PronounMessage (GStrings.GetString("SPREEOVER"), buff, player->userinfo.GetGender(), player->userinfo.GetName(), source->player->userinfo.GetName()); StatusBar->AttachMessage (Create (nullptr, buff, 1.5f, 0.2f, 0, 0, CR_WHITE, 3.f, 0.5f), MAKE_ID('K','S','P','R')); @@ -554,16 +554,16 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf multimsg = NULL; break; case 2: - multimsg = GStrings("MULTI2"); + multimsg = GStrings.GetString("MULTI2"); break; case 3: - multimsg = GStrings("MULTI3"); + multimsg = GStrings.GetString("MULTI3"); break; case 4: - multimsg = GStrings("MULTI4"); + multimsg = GStrings.GetString("MULTI4"); break; default: - multimsg = GStrings("MULTI5"); + multimsg = GStrings.GetString("MULTI5"); break; } if (multimsg != NULL) @@ -587,7 +587,7 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags, FName MeansOf if (deathmatch && fraglimit && fraglimit <= D_GetFragCount (source->player)) { - Printf ("%s\n", GStrings("TXT_FRAGLIMIT")); + Printf ("%s\n", GStrings.GetString("TXT_FRAGLIMIT")); Level->ExitLevel (0, false); } } diff --git a/src/playsim/p_lnspec.cpp b/src/playsim/p_lnspec.cpp index 5fb7c026d..73666d0c3 100644 --- a/src/playsim/p_lnspec.cpp +++ b/src/playsim/p_lnspec.cpp @@ -3258,7 +3258,7 @@ FUNC(LS_SendToCommunicator) // Get the message from the LANGUAGE lump. FString msg; msg.Format("TXT_COMM%d", arg2); - const char *str = GStrings[msg.GetChars()]; + const char *str = GStrings.CheckString(msg.GetChars()); if (str != NULL) { Printf (PRINT_CHAT, "%s\n", str); diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index e1a1fb6fb..5e7a19f0c 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -7700,7 +7700,7 @@ const char *AActor::GetTag(const char *def) const const char *tag = Tag->GetChars(); if (tag[0] == '$') { - return GStrings(tag + 1); + return GStrings.GetString(tag + 1); } else { @@ -7730,7 +7730,7 @@ const char *AActor::GetCharacterName() const const char *cname = Conversation->SpeakerName.GetChars(); if (cname[0] == '$') { - return GStrings(cname + 1); + return GStrings.GetString(cname + 1); } else return cname; } diff --git a/src/playsim/p_spec.cpp b/src/playsim/p_spec.cpp index 52760d935..c0bfca34a 100644 --- a/src/playsim/p_spec.cpp +++ b/src/playsim/p_spec.cpp @@ -619,7 +619,7 @@ void P_GiveSecret(FLevelLocals *Level, AActor *actor, bool printmessage, bool pl { if (printmessage) { - C_MidPrint(nullptr, GStrings["SECRETMESSAGE"]); + C_MidPrint(nullptr, GStrings.CheckString("SECRETMESSAGE")); if (showsecretsector && sectornum >= 0) { Printf(PRINT_HIGH | PRINT_NONOTIFY, "Secret found in sector %d\n", sectornum); @@ -696,7 +696,7 @@ void P_UpdateSpecials (FLevelLocals *Level) { if (Level->maptime >= (int)(timelimit * TICRATE * 60)) { - Printf ("%s\n", GStrings("TXT_TIMELIMIT")); + Printf ("%s\n", GStrings.GetString("TXT_TIMELIMIT")); Level->ExitLevel(0, false); } } diff --git a/src/playsim/p_user.cpp b/src/playsim/p_user.cpp index 6839b412a..9751fc268 100644 --- a/src/playsim/p_user.cpp +++ b/src/playsim/p_user.cpp @@ -376,7 +376,7 @@ void player_t::SetLogNumber (int num) // First look up TXT_LOGTEXT%d in the string table mysnprintf(lumpname, countof(lumpname), "$TXT_LOGTEXT%d", num); - auto text = GStrings[lumpname+1]; + auto text = GStrings.CheckString(lumpname+1); if (text) { SetLogText(lumpname); // set the label, not the content, so that a language change can be picked up. @@ -394,7 +394,7 @@ void player_t::SetLogNumber (int num) // If this is an original IWAD text, try looking up its lower priority string version first. mysnprintf(lumpname, countof(lumpname), "$TXT_ILOG%d", num); - auto text = GStrings[lumpname + 1]; + auto text = GStrings.CheckString(lumpname + 1); if (text) { SetLogText(lumpname); // set the label, not the content, so that a language change can be picked up. @@ -422,7 +422,7 @@ void player_t::SetLogText (const char *text) if (mo && mo->CheckLocalView()) { // Print log text to console - Printf(PRINT_HIGH | PRINT_NONOTIFY, TEXTCOLOR_GOLD "%s\n", LogText[0] == '$' ? GStrings(text + 1) : text); + Printf(PRINT_HIGH | PRINT_NONOTIFY, TEXTCOLOR_GOLD "%s\n", LogText[0] == '$' ? GStrings.GetString(text + 1) : text); } } diff --git a/src/scripting/vmthunks.cpp b/src/scripting/vmthunks.cpp index 450d4552a..4cc048843 100644 --- a/src/scripting/vmthunks.cpp +++ b/src/scripting/vmthunks.cpp @@ -2635,7 +2635,7 @@ DEFINE_ACTION_FUNCTION(_Console, MidPrint) PARAM_STRING(text); PARAM_BOOL(bold); - const char* txt = text[0] == '$' ? GStrings(&text[1]) : text.GetChars(); + const char* txt = text[0] == '$' ? GStrings.GetString(&text[1]) : text.GetChars(); C_MidPrint(fnt, txt, bold); return 0; } diff --git a/src/sound/s_doomsound.cpp b/src/sound/s_doomsound.cpp index d9bc9041e..33604ce61 100644 --- a/src/sound/s_doomsound.cpp +++ b/src/sound/s_doomsound.cpp @@ -154,7 +154,7 @@ static FString LookupMusic(const char* musicname, int& order) // handle dehacked replacement. // Any music name defined this way needs to be prefixed with 'D_' because // Doom.exe does not contain the prefix so these strings don't either. - const char* mus_string = GStrings[musicname + 1]; + const char* mus_string = GStrings.CheckString(musicname + 1); if (mus_string != nullptr) { DEH_Music << "D_" << mus_string; diff --git a/src/st_stuff.cpp b/src/st_stuff.cpp index 098adda4d..b56eb25e8 100644 --- a/src/st_stuff.cpp +++ b/src/st_stuff.cpp @@ -456,7 +456,7 @@ static bool Cht_Music (cheatseq_t *cheat) static bool Cht_BeholdMenu (cheatseq_t *cheat) { - Printf ("%s\n", GStrings("STSTR_BEHOLD")); + Printf ("%s\n", GStrings.GetString("STSTR_BEHOLD")); return false; } @@ -518,7 +518,7 @@ static bool Cht_MyPos (cheatseq_t *cheat) static bool Cht_Ticker (cheatseq_t *cheat) { ticker = !ticker; - Printf ("%s\n", GStrings(ticker ? "TXT_CHEATTICKERON" : "TXT_CHEATTICKEROFF")); + Printf ("%s\n", GStrings.GetString(ticker ? "TXT_CHEATTICKERON" : "TXT_CHEATTICKEROFF")); return true; }