From 2f108d533ca5d44e5e9a855261099e8abb5a55dd Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 19 Nov 2019 00:43:46 +0100 Subject: [PATCH] ZoneLoading: Save which language a zone has when loading --- src/ZoneCommon/Zone/Zone.cpp | 1 + src/ZoneCommon/Zone/Zone.h | 26 +++++++ .../Game/T6/ZoneLoaderFactoryT6.cpp | 71 +++++++++++++++++++ 3 files changed, 98 insertions(+) diff --git a/src/ZoneCommon/Zone/Zone.cpp b/src/ZoneCommon/Zone/Zone.cpp index 478d28a0..e0e900ac 100644 --- a/src/ZoneCommon/Zone/Zone.cpp +++ b/src/ZoneCommon/Zone/Zone.cpp @@ -6,6 +6,7 @@ Zone::Zone(std::string name, const zone_priority_t priority, IZoneAssetPools* po m_priority = priority; m_pools = pools; m_game = game; + m_language = ZoneLanguage::LANGUAGE_NONE; } IZoneAssetPools* Zone::GetPools() const diff --git a/src/ZoneCommon/Zone/Zone.h b/src/ZoneCommon/Zone/Zone.h index 909f1ac5..b7b5fd5f 100644 --- a/src/ZoneCommon/Zone/Zone.h +++ b/src/ZoneCommon/Zone/Zone.h @@ -6,6 +6,31 @@ class IGame; +enum class ZoneLanguage +{ + LANGUAGE_NONE, + LANGUAGE_ENGLISH, + LANGUAGE_FRENCH, + LANGUAGE_GERMAN, + LANGUAGE_ITALIAN, + LANGUAGE_SPANISH, + LANGUAGE_BRITISH, + LANGUAGE_RUSSIAN, + LANGUAGE_POLISH, + LANGUAGE_KOREAN, + LANGUAGE_TAIWANESE, + LANGUAGE_JAPANESE, + LANGUAGE_CHINESE, + LANGUAGE_THAI, + LANGUAGE_LEET, + LANGUAGE_CZECH, + LANGUAGE_FRENCH_CAN, + LANGUAGE_AUSTRIAN, + LANGUAGE_PORTUGUESE, + LANGUAGE_MEXICAN_SPANISH, + LANGUAGE_FULL_JAPANESE +}; + class Zone { IZoneAssetPools* m_pools; @@ -13,6 +38,7 @@ class Zone public: std::string m_name; zone_priority_t m_priority; + ZoneLanguage m_language; IGame* m_game; Zone(std::string name, zone_priority_t priority, IZoneAssetPools* pools, IGame* game); diff --git a/src/ZoneLoading/Game/T6/ZoneLoaderFactoryT6.cpp b/src/ZoneLoading/Game/T6/ZoneLoaderFactoryT6.cpp index 53296a0b..b3ccbc9c 100644 --- a/src/ZoneLoading/Game/T6/ZoneLoaderFactoryT6.cpp +++ b/src/ZoneLoading/Game/T6/ZoneLoaderFactoryT6.cpp @@ -84,6 +84,76 @@ const uint8_t ZoneLoaderFactoryT6::RSA_PUBLIC_KEY_TREYARCH[] class ZoneLoaderFactoryT6::ZoneLoaderFactoryT6Impl { + static ZoneLanguage GetZoneLanguage(std::string& zoneName) + { + if(zoneName.compare(0, 3, "en_") == 0) + { + return ZoneLanguage::LANGUAGE_ENGLISH; + } + if(zoneName.compare(0, 3, "fr_") == 0) + { + return ZoneLanguage::LANGUAGE_FRENCH; + } + if(zoneName.compare(0, 3, "fc_") == 0) + { + return ZoneLanguage::LANGUAGE_FRENCH_CAN; + } + if(zoneName.compare(0, 3, "ge_") == 0) + { + return ZoneLanguage::LANGUAGE_GERMAN; + } + if(zoneName.compare(0, 3, "as_") == 0) + { + return ZoneLanguage::LANGUAGE_AUSTRIAN; + } + if(zoneName.compare(0, 3, "it_") == 0) + { + return ZoneLanguage::LANGUAGE_ITALIAN; + } + if(zoneName.compare(0, 3, "sp_") == 0) + { + return ZoneLanguage::LANGUAGE_SPANISH; + } + if(zoneName.compare(0, 3, "br_") == 0) + { + return ZoneLanguage::LANGUAGE_BRITISH; + } + if(zoneName.compare(0, 3, "ru_") == 0) + { + return ZoneLanguage::LANGUAGE_RUSSIAN; + } + if(zoneName.compare(0, 3, "po_") == 0) + { + return ZoneLanguage::LANGUAGE_POLISH; + } + if(zoneName.compare(0, 3, "ko_") == 0) + { + return ZoneLanguage::LANGUAGE_KOREAN; + } + if(zoneName.compare(0, 3, "ja_") == 0) + { + return ZoneLanguage::LANGUAGE_JAPANESE; + } + if(zoneName.compare(0, 3, "cz_") == 0) + { + return ZoneLanguage::LANGUAGE_CZECH; + } + if(zoneName.compare(0, 3, "fj_") == 0) + { + return ZoneLanguage::LANGUAGE_FULL_JAPANESE; + } + if(zoneName.compare(0, 3, "bp_") == 0) + { + return ZoneLanguage::LANGUAGE_PORTUGUESE; + } + if(zoneName.compare(0, 3, "ms_") == 0) + { + return ZoneLanguage::LANGUAGE_MEXICAN_SPANISH; + } + + return ZoneLanguage::LANGUAGE_NONE; + } + static bool CanLoad(ZoneHeader& header, bool* isSecure, bool* isOfficial, bool* isEncrypted) { assert(isSecure != nullptr); @@ -220,6 +290,7 @@ public: // Create new zone auto* zone = new Zone(fileName, 0, new GameAssetPoolT6(0), &game_t6); + zone->m_language = GetZoneLanguage(fileName); // File is supported. Now setup all required steps for loading this file. auto* zoneLoader = new ZoneLoader(zone);