diff --git a/src/openrct2/Game.cpp b/src/openrct2/Game.cpp index b9b0b402eb..361d54a6d5 100644 --- a/src/openrct2/Game.cpp +++ b/src/openrct2/Game.cpp @@ -366,7 +366,7 @@ void rct2_to_utf8_self(char* buffer, size_t length) { if (length > 0) { - auto temp = rct2_to_utf8(buffer, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto temp = rct2_to_utf8(buffer, RCT2LanguageId::EnglishUK); safe_strcpy(buffer, temp.data(), length); } } @@ -377,9 +377,9 @@ void rct2_to_utf8_self(char* buffer, size_t length) void game_convert_strings_to_utf8() { // Scenario details - gScenarioCompletedBy = rct2_to_utf8(gScenarioCompletedBy, RCT2_LANGUAGE_ID_ENGLISH_UK); - gScenarioName = rct2_to_utf8(gScenarioName, RCT2_LANGUAGE_ID_ENGLISH_UK); - gScenarioDetails = rct2_to_utf8(gScenarioDetails, RCT2_LANGUAGE_ID_ENGLISH_UK); + gScenarioCompletedBy = rct2_to_utf8(gScenarioCompletedBy, RCT2LanguageId::EnglishUK); + gScenarioName = rct2_to_utf8(gScenarioName, RCT2LanguageId::EnglishUK); + gScenarioDetails = rct2_to_utf8(gScenarioDetails, RCT2LanguageId::EnglishUK); // News items game_convert_news_items_to_utf8(); diff --git a/src/openrct2/localisation/Convert.cpp b/src/openrct2/localisation/Convert.cpp index 6642113845..0a3d568a0f 100644 --- a/src/openrct2/localisation/Convert.cpp +++ b/src/openrct2/localisation/Convert.cpp @@ -116,13 +116,13 @@ static int32_t GetCodePageForRCT2Language(RCT2LanguageId languageId) { switch (languageId) { - case RCT2_LANGUAGE_ID_JAPANESE: + case RCT2LanguageId::Japanese: return CODE_PAGE::CP_932; - case RCT2_LANGUAGE_ID_CHINESE_SIMPLIFIED: + case RCT2LanguageId::ChineseSimplified: return CODE_PAGE::CP_936; - case RCT2_LANGUAGE_ID_KOREAN: + case RCT2LanguageId::Korean: return CODE_PAGE::CP_949; - case RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL: + case RCT2LanguageId::ChineseTraditional: return CODE_PAGE::CP_950; default: return CODE_PAGE::CP_1252; diff --git a/src/openrct2/localisation/Language.h b/src/openrct2/localisation/Language.h index b9114c92de..09d46b1325 100644 --- a/src/openrct2/localisation/Language.h +++ b/src/openrct2/localisation/Language.h @@ -46,24 +46,24 @@ enum LANGUAGE_COUNT }; -enum RCT2LanguageId +enum class RCT2LanguageId { - RCT2_LANGUAGE_ID_ENGLISH_UK, - RCT2_LANGUAGE_ID_ENGLISH_US, - RCT2_LANGUAGE_ID_FRENCH, - RCT2_LANGUAGE_ID_GERMAN, - RCT2_LANGUAGE_ID_SPANISH, - RCT2_LANGUAGE_ID_ITALIAN, - RCT2_LANGUAGE_ID_DUTCH, - RCT2_LANGUAGE_ID_SWEDISH, - RCT2_LANGUAGE_ID_JAPANESE, - RCT2_LANGUAGE_ID_KOREAN, - RCT2_LANGUAGE_ID_CHINESE_SIMPLIFIED, - RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL, - RCT2_LANGUAGE_ID_12, - RCT2_LANGUAGE_ID_PORTUGUESE, - RCT2_LANGUAGE_ID_BLANK = 254, - RCT2_LANGUAGE_ID_END = 255 + EnglishUK, + EnglishUS, + French, + German, + Spanish, + Italian, + Dutch, + Swedish, + Japanese, + Korean, + ChineseSimplified, + ChineseTraditional, + Undefined, + Portuguese, + Blank = 254, + End = 255 }; #define FONT_OPENRCT2_SPRITE NULL diff --git a/src/openrct2/object/StringTable.cpp b/src/openrct2/object/StringTable.cpp index f800719ce4..82dd2a75bd 100644 --- a/src/openrct2/object/StringTable.cpp +++ b/src/openrct2/object/StringTable.cpp @@ -53,10 +53,11 @@ void StringTable::Read(IReadObjectContext* context, OpenRCT2::IStream* stream, O try { RCT2LanguageId rct2LanguageId; - while ((rct2LanguageId = static_cast(stream->ReadValue())) != RCT2_LANGUAGE_ID_END) + while ((rct2LanguageId = static_cast(stream->ReadValue())) != RCT2LanguageId::End) { - uint8_t languageId = (rct2LanguageId <= RCT2_LANGUAGE_ID_PORTUGUESE) ? RCT2ToOpenRCT2LanguageId[rct2LanguageId] - : static_cast(LANGUAGE_UNDEFINED); + uint8_t languageId = (EnumValue(rct2LanguageId) <= EnumValue(RCT2LanguageId::Portuguese)) + ? RCT2ToOpenRCT2LanguageId[EnumValue(rct2LanguageId)] + : static_cast(LANGUAGE_UNDEFINED); std::string stringAsWin1252 = stream->ReadStdString(); auto stringAsUtf8 = rct2_to_utf8(stringAsWin1252, rct2LanguageId); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index e6db719ef3..26cf2ec4c2 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -240,7 +240,7 @@ public: dst->objective_arg_3 = GetBuildTheBestRideId(); } - auto name = rct2_to_utf8(_s4.scenario_name, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto name = rct2_to_utf8(_s4.scenario_name, RCT2LanguageId::EnglishUK); std::string details; // TryGetById won't set this property if the scenario is not recognised, @@ -3006,7 +3006,7 @@ private: const auto originalString = _s4.string_table[(stringId - USER_STRING_START) % 1024]; auto originalStringView = std::string_view( originalString, GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH)); - auto asUtf8 = rct2_to_utf8(originalStringView, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto asUtf8 = rct2_to_utf8(originalStringView, RCT2LanguageId::EnglishUK); auto justText = RCT12RemoveFormattingUTF8(asUtf8); return justText.data(); } diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 13e33efd4e..60c8104451 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -198,9 +198,9 @@ public: // Some scenarios have their scenario details in UTF-8, due to earlier bugs in OpenRCT2. if (!IsLikelyUTF8(_s6.info.name) && !IsLikelyUTF8(_s6.info.details)) { - auto temp = rct2_to_utf8(_s6.info.name, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto temp = rct2_to_utf8(_s6.info.name, RCT2LanguageId::EnglishUK); safe_strcpy(gS6Info.name, temp.data(), sizeof(gS6Info.name)); - auto temp2 = rct2_to_utf8(_s6.info.details, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto temp2 = rct2_to_utf8(_s6.info.details, RCT2LanguageId::EnglishUK); safe_strcpy(gS6Info.details, temp2.data(), sizeof(gS6Info.details)); } else @@ -1660,7 +1660,7 @@ public: const auto originalString = _s6.custom_strings[(stringId - USER_STRING_START) % 1024]; auto originalStringView = std::string_view( originalString, GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH)); - auto asUtf8 = rct2_to_utf8(originalStringView, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto asUtf8 = rct2_to_utf8(originalStringView, RCT2LanguageId::EnglishUK); auto justText = RCT12RemoveFormattingUTF8(asUtf8); return justText.data(); } diff --git a/src/openrct2/scenario/ScenarioRepository.cpp b/src/openrct2/scenario/ScenarioRepository.cpp index 3c1d38c447..e16234003f 100644 --- a/src/openrct2/scenario/ScenarioRepository.cpp +++ b/src/openrct2/scenario/ScenarioRepository.cpp @@ -653,7 +653,7 @@ private: if (scBasic.CompanyValue > highscore->company_value) { SafeFree(highscore->name); - std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2_LANGUAGE_ID_ENGLISH_UK); + std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2LanguageId::EnglishUK); highscore->name = String::Duplicate(name.c_str()); highscore->company_value = scBasic.CompanyValue; highscore->timestamp = DATETIME64_MIN; @@ -665,7 +665,7 @@ private: { scenario_highscore_entry* highscore = InsertHighscore(); highscore->fileName = String::Duplicate(scBasic.Path); - std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2_LANGUAGE_ID_ENGLISH_UK); + std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2LanguageId::EnglishUK); highscore->name = String::Duplicate(name.c_str()); highscore->company_value = scBasic.CompanyValue; highscore->timestamp = DATETIME64_MIN; diff --git a/test/tests/Localisation.cpp b/test/tests/Localisation.cpp index 74e1adea67..cd32a44e93 100644 --- a/test/tests/Localisation.cpp +++ b/test/tests/Localisation.cpp @@ -25,7 +25,7 @@ TEST_F(Localisation, RCT2_to_UTF8_UK) { auto input = "The quick brown fox"; auto expected = u8"The quick brown fox"; - auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto actual = rct2_to_utf8(input, RCT2LanguageId::EnglishUK); ASSERT_EQ(expected, actual); } @@ -33,7 +33,7 @@ TEST_F(Localisation, RCT2_to_UTF8_JP) { auto input = StringFromHex("ff8374ff8340ff8358ff8367ff8375ff8389ff8345ff8393ff8374ff8348ff8362ff834eff8358"); auto expected = u8"ファストブラウンフォックス"; - auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_JAPANESE); + auto actual = rct2_to_utf8(input, RCT2LanguageId::Japanese); ASSERT_EQ(expected, actual); } @@ -41,7 +41,7 @@ TEST_F(Localisation, RCT2_to_UTF8_ZH_TW) { auto input = StringFromHex("ffa7d6ffb374ffaabaffb4c4ffa6e2ffaab0ffaf57"); auto expected = u8"快速的棕色狐狸"; - auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL); + auto actual = rct2_to_utf8(input, RCT2LanguageId::ChineseTraditional); ASSERT_EQ(expected, actual); } @@ -49,7 +49,7 @@ TEST_F(Localisation, RCT2_to_UTF8_PL) { auto input = StringFromHex("47F372736b6120446ff76b692054e6637a6f7779"); auto expected = u8"Górska Dołki Tęczowy"; - auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_ENGLISH_UK); + auto actual = rct2_to_utf8(input, RCT2LanguageId::EnglishUK); ASSERT_EQ(expected, actual); } @@ -58,7 +58,7 @@ TEST_F(Localisation, RCT2_to_UTF8_ZH_TW_PREMATURE_END) // This string can be found in BATFL.DAT, the last double byte character is missing its second byte. auto input = StringFromHex("ffa470ffabacffa8aeffbdf8ffa662ffc54bffb944ffa457ffaeb6ffb0caffb76effc2"); auto expected = u8"小型車輛在鐵道上振動搖"; - auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL); + auto actual = rct2_to_utf8(input, RCT2LanguageId::ChineseTraditional); ASSERT_EQ(expected, actual); }