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; }