diff --git a/src/Common/Game/IGame.h b/src/Common/Game/IGame.h index a53ed7b6..71c27528 100644 --- a/src/Common/Game/IGame.h +++ b/src/Common/Game/IGame.h @@ -1,8 +1,10 @@ #pragma once #include "GameLanguage.h" +#include "Zone/ZoneTypes.h" #include +#include #include #include @@ -64,5 +66,8 @@ public: [[nodiscard]] virtual const std::string& GetShortName() const = 0; [[nodiscard]] virtual const std::vector& GetLanguagePrefixes() const = 0; + [[nodiscard]] virtual asset_type_t GetAssetTypeCount() const = 0; + [[nodiscard]] virtual std::optional GetAssetTypeName(asset_type_t assetType) const = 0; + static IGame* GetGameById(GameId gameId); }; diff --git a/src/Common/Game/IW3/GameIW3.cpp b/src/Common/Game/IW3/GameIW3.cpp index e95cdf5a..63d4944b 100644 --- a/src/Common/Game/IW3/GameIW3.cpp +++ b/src/Common/Game/IW3/GameIW3.cpp @@ -1,28 +1,56 @@ #include "GameIW3.h" +#include "IW3.h" + #include using namespace IW3; -GameId Game::GetId() const +namespace { - return GameId::IW3; -} + constexpr const char* ASSET_TYPE_NAMES[ASSET_TYPE_COUNT]{ + "xmodelpieces", "physpreset", "xanim", "xmodel", "material", "techniqueset", "image", "sound", "soundcurve", "loadedsound", + "clipmap_unused", "clipmap", "comworld", "gameworldsp", "gameworldmp", "mapents", "gfxworld", "lightdef", "uimap", "font", + "menulist", "menu", "localize", "weapon", "snddriverglobals", "fx", "impactfx", "aitype", "mptype", "character", + "xmodelalias", "rawfile", "stringtable", + }; +} // namespace -const std::string& Game::GetFullName() const +namespace IW3 { - static std::string fullName = "Call Of Duty 4: Modern Warfare"; - return fullName; -} + GameId Game::GetId() const + { + return GameId::IW3; + } -const std::string& Game::GetShortName() const -{ - static std::string shortName = "IW3"; - return shortName; -} + const std::string& Game::GetFullName() const + { + static std::string fullName = "Call Of Duty 4: Modern Warfare"; + return fullName; + } -const std::vector& Game::GetLanguagePrefixes() const -{ - static std::vector prefixes; - return prefixes; -} + const std::string& Game::GetShortName() const + { + static std::string shortName = "IW3"; + return shortName; + } + + const std::vector& Game::GetLanguagePrefixes() const + { + static std::vector prefixes; + return prefixes; + } + + asset_type_t Game::GetAssetTypeCount() const + { + return ASSET_TYPE_COUNT; + } + + std::optional Game::GetAssetTypeName(const asset_type_t assetType) const + { + if (assetType < std::extent_v) + return ASSET_TYPE_NAMES[assetType]; + + return std::nullopt; + } +} // namespace IW3 diff --git a/src/Common/Game/IW3/GameIW3.h b/src/Common/Game/IW3/GameIW3.h index 07dfdb43..852e2049 100644 --- a/src/Common/Game/IW3/GameIW3.h +++ b/src/Common/Game/IW3/GameIW3.h @@ -1,4 +1,5 @@ #pragma once + #include "Game/IGame.h" namespace IW3 @@ -10,5 +11,8 @@ namespace IW3 [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; + + [[nodiscard]] asset_type_t GetAssetTypeCount() const override; + [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; }; } // namespace IW3 diff --git a/src/Common/Game/IW4/GameIW4.cpp b/src/Common/Game/IW4/GameIW4.cpp index 1a26117e..ec81db3d 100644 --- a/src/Common/Game/IW4/GameIW4.cpp +++ b/src/Common/Game/IW4/GameIW4.cpp @@ -1,28 +1,61 @@ #include "GameIW4.h" +#include "IW4.h" + #include using namespace IW4; -GameId Game::GetId() const +namespace { - return GameId::IW4; -} + constexpr const char* ASSET_TYPE_NAMES[ASSET_TYPE_COUNT]{ + "physpreset", "physcollmap", "xanim", "xmodelsurfs", "xmodel", + "material", "pixelshader", "vertexshader", "vertexdecl", "techniqueset", + "image", "sound", "soundcurve", "loadedsound", "clipmap_unused", + "clipmap", "comworld", "gameworldsp", "gameworldmp", "mapents", + "fxworld", "gfxworld", "lightdef", "uimap", "font", + "menulist", "menu", "localize", "weapon", "snddriverglobals", + "fx", "impactfx", "aitype", "mptype", "character", + "xmodelalias", "rawfile", "stringtable", "leaderboard", "structureddatadef", + "tracer", "vehicle", "addonmapents", + }; +} // namespace -const std::string& Game::GetFullName() const +namespace IW4 { - static std::string fullName = "Call Of Duty: Modern Warfare 2"; - return fullName; -} + GameId Game::GetId() const + { + return GameId::IW4; + } -const std::string& Game::GetShortName() const -{ - static std::string shortName = "IW4"; - return shortName; -} + const std::string& Game::GetFullName() const + { + static std::string fullName = "Call Of Duty: Modern Warfare 2"; + return fullName; + } -const std::vector& Game::GetLanguagePrefixes() const -{ - static std::vector prefixes; - return prefixes; -} + const std::string& Game::GetShortName() const + { + static std::string shortName = "IW4"; + return shortName; + } + + const std::vector& Game::GetLanguagePrefixes() const + { + static std::vector prefixes; + return prefixes; + } + + asset_type_t Game::GetAssetTypeCount() const + { + return ASSET_TYPE_COUNT; + } + + std::optional Game::GetAssetTypeName(const asset_type_t assetType) const + { + if (assetType < std::extent_v) + return ASSET_TYPE_NAMES[assetType]; + + return std::nullopt; + } +} // namespace IW4 diff --git a/src/Common/Game/IW4/GameIW4.h b/src/Common/Game/IW4/GameIW4.h index 54967067..bd63bd67 100644 --- a/src/Common/Game/IW4/GameIW4.h +++ b/src/Common/Game/IW4/GameIW4.h @@ -10,5 +10,8 @@ namespace IW4 [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; + + [[nodiscard]] asset_type_t GetAssetTypeCount() const override; + [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; }; } // namespace IW4 diff --git a/src/Common/Game/IW5/GameIW5.cpp b/src/Common/Game/IW5/GameIW5.cpp index 7cddaa87..1a863bb1 100644 --- a/src/Common/Game/IW5/GameIW5.cpp +++ b/src/Common/Game/IW5/GameIW5.cpp @@ -1,28 +1,98 @@ #include "GameIW5.h" +#include "IW5.h" + #include using namespace IW5; -GameId Game::GetId() const +namespace { - return GameId::IW5; -} + constexpr const char* ASSET_TYPE_NAMES[ASSET_TYPE_COUNT]{ + "physpreset", + "physcollmap", + "xanim", + "xmodelsurfs", + "xmodel", + "material", + "pixelshader", + "vertexshader", + "vertexdecl", + "techniqueset", + "image", + "sound", + "soundcurve", + "loadedsound", + "clipmap", + "comworld", + "glassworld", + "pathdata", + "vehicletrack", + "mapents", + "fxworld", + "gfxworld", + "lightdef", + "uimap", + "font", + "menulist", + "menu", + "localize", + "attachment", + "weapon", + "snddriverglobals", + "fx", + "impactfx", + "surfacefx", + "aitype", + "mptype", + "character", + "xmodelalias", + "rawfile", + "scriptfile", + "stringtable", + "leaderboard", + "structureddatadef", + "tracer", + "vehicle", + "addonmapents", + }; +} // namespace -const std::string& Game::GetFullName() const +namespace IW5 { - static std::string fullName = "Call Of Duty: Modern Warfare 3"; - return fullName; -} + GameId Game::GetId() const + { + return GameId::IW5; + } -const std::string& Game::GetShortName() const -{ - static std::string shortName = "IW5"; - return shortName; -} + const std::string& Game::GetFullName() const + { + static std::string fullName = "Call Of Duty: Modern Warfare 3"; + return fullName; + } -const std::vector& Game::GetLanguagePrefixes() const -{ - static std::vector prefixes; - return prefixes; -} + const std::string& Game::GetShortName() const + { + static std::string shortName = "IW5"; + return shortName; + } + + const std::vector& Game::GetLanguagePrefixes() const + { + static std::vector prefixes; + return prefixes; + } + + asset_type_t Game::GetAssetTypeCount() const + { + return ASSET_TYPE_COUNT; + } + + std::optional Game::GetAssetTypeName(const asset_type_t assetType) const + { + if (assetType < std::extent_v) + return ASSET_TYPE_NAMES[assetType]; + + return std::nullopt; + } +} // namespace IW5 diff --git a/src/Common/Game/IW5/GameIW5.h b/src/Common/Game/IW5/GameIW5.h index a0ca6309..bec5019e 100644 --- a/src/Common/Game/IW5/GameIW5.h +++ b/src/Common/Game/IW5/GameIW5.h @@ -10,5 +10,8 @@ namespace IW5 [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; + + [[nodiscard]] asset_type_t GetAssetTypeCount() const override; + [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; }; } // namespace IW5 diff --git a/src/Common/Game/T5/GameT5.cpp b/src/Common/Game/T5/GameT5.cpp index 2609df85..cf41a117 100644 --- a/src/Common/Game/T5/GameT5.cpp +++ b/src/Common/Game/T5/GameT5.cpp @@ -1,43 +1,74 @@ #include "GameT5.h" +#include "T5.h" + #include using namespace T5; -GameId Game::GetId() const +namespace { - return GameId::T5; -} - -const std::string& Game::GetFullName() const -{ - static std::string fullName = "Call Of Duty: Black Ops"; - return fullName; -} - -const std::string& Game::GetShortName() const -{ - static std::string shortName = "T5"; - return shortName; -} - -const std::vector& Game::GetLanguagePrefixes() const -{ - static std::vector prefixes{ - {GameLanguage::LANGUAGE_ENGLISH, "en_"}, - {GameLanguage::LANGUAGE_FRENCH, "fr_"}, - {GameLanguage::LANGUAGE_FRENCH_CAN, "fc_"}, - {GameLanguage::LANGUAGE_GERMAN, "ge_"}, - {GameLanguage::LANGUAGE_AUSTRIAN, "ge_"}, - {GameLanguage::LANGUAGE_ITALIAN, "it_"}, - {GameLanguage::LANGUAGE_SPANISH, "sp_"}, - {GameLanguage::LANGUAGE_BRITISH, "br_"}, - {GameLanguage::LANGUAGE_RUSSIAN, "ru_"}, - {GameLanguage::LANGUAGE_POLISH, "po_"}, - {GameLanguage::LANGUAGE_KOREAN, "ko_"}, - {GameLanguage::LANGUAGE_JAPANESE, "ja_"}, - {GameLanguage::LANGUAGE_CZECH, "cz_"}, + constexpr const char* ASSET_TYPE_NAMES[ASSET_TYPE_COUNT]{ + "xmodelpieces", "physpreset", "physconstraints", "destructibledef", "xanim", "xmodel", "material", + "techniqueset", "image", "soundbank", "soundpatch", "clipmap_unused", "clipmap", "comworld", + "gameworldsp", "gameworldmp", "mapents", "gfxworld", "gfxlightdef", "uimap", "font", + "menulist", "menu", "localize", "weapon", "weapondef", "weaponvariant", "snddriverglobals", + "fx", "fximpacttable", "aitype", "mptype", "mpbody", "mphead", "character", + "xmodelalias", "rawfile", "stringtable", "packindex", "xglobals", "ddl", "glasses", + "emblemset", }; +} // namespace - return prefixes; -} +namespace T5 +{ + GameId Game::GetId() const + { + return GameId::T5; + } + + const std::string& Game::GetFullName() const + { + static std::string fullName = "Call Of Duty: Black Ops"; + return fullName; + } + + const std::string& Game::GetShortName() const + { + static std::string shortName = "T5"; + return shortName; + } + + const std::vector& Game::GetLanguagePrefixes() const + { + static std::vector prefixes{ + {GameLanguage::LANGUAGE_ENGLISH, "en_"}, + {GameLanguage::LANGUAGE_FRENCH, "fr_"}, + {GameLanguage::LANGUAGE_FRENCH_CAN, "fc_"}, + {GameLanguage::LANGUAGE_GERMAN, "ge_"}, + {GameLanguage::LANGUAGE_AUSTRIAN, "ge_"}, + {GameLanguage::LANGUAGE_ITALIAN, "it_"}, + {GameLanguage::LANGUAGE_SPANISH, "sp_"}, + {GameLanguage::LANGUAGE_BRITISH, "br_"}, + {GameLanguage::LANGUAGE_RUSSIAN, "ru_"}, + {GameLanguage::LANGUAGE_POLISH, "po_"}, + {GameLanguage::LANGUAGE_KOREAN, "ko_"}, + {GameLanguage::LANGUAGE_JAPANESE, "ja_"}, + {GameLanguage::LANGUAGE_CZECH, "cz_"}, + }; + + return prefixes; + } + + asset_type_t Game::GetAssetTypeCount() const + { + return ASSET_TYPE_COUNT; + } + + std::optional Game::GetAssetTypeName(const asset_type_t assetType) const + { + if (assetType < std::extent_v) + return ASSET_TYPE_NAMES[assetType]; + + return std::nullopt; + } +} // namespace T5 diff --git a/src/Common/Game/T5/GameT5.h b/src/Common/Game/T5/GameT5.h index 213037ba..fdc8334b 100644 --- a/src/Common/Game/T5/GameT5.h +++ b/src/Common/Game/T5/GameT5.h @@ -10,5 +10,8 @@ namespace T5 [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; + + [[nodiscard]] asset_type_t GetAssetTypeCount() const override; + [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; }; } // namespace T5 diff --git a/src/Common/Game/T6/GameT6.cpp b/src/Common/Game/T6/GameT6.cpp index c2ba1c4e..3a38a387 100644 --- a/src/Common/Game/T6/GameT6.cpp +++ b/src/Common/Game/T6/GameT6.cpp @@ -1,46 +1,130 @@ #include "GameT6.h" +#include "T6.h" + #include using namespace T6; -GameId Game::GetId() const +namespace { - return GameId::T6; -} - -const std::string& Game::GetFullName() const -{ - static std::string fullName = "Call Of Duty: Black Ops II"; - return fullName; -} - -const std::string& Game::GetShortName() const -{ - static std::string shortName = "T6"; - return shortName; -} - -const std::vector& Game::GetLanguagePrefixes() const -{ - static std::vector prefixes{ - {GameLanguage::LANGUAGE_ENGLISH, "en_"}, - {GameLanguage::LANGUAGE_FRENCH, "fr_"}, - {GameLanguage::LANGUAGE_FRENCH_CAN, "fc_"}, - {GameLanguage::LANGUAGE_GERMAN, "ge_"}, - {GameLanguage::LANGUAGE_AUSTRIAN, "as_"}, - {GameLanguage::LANGUAGE_ITALIAN, "it_"}, - {GameLanguage::LANGUAGE_SPANISH, "sp_"}, - {GameLanguage::LANGUAGE_BRITISH, "br_"}, - {GameLanguage::LANGUAGE_RUSSIAN, "ru_"}, - {GameLanguage::LANGUAGE_POLISH, "po_"}, - {GameLanguage::LANGUAGE_KOREAN, "ko_"}, - {GameLanguage::LANGUAGE_JAPANESE, "ja_"}, - {GameLanguage::LANGUAGE_CZECH, "cz_"}, - {GameLanguage::LANGUAGE_FULL_JAPANESE, "fj_"}, - {GameLanguage::LANGUAGE_PORTUGUESE, "bp_"}, - {GameLanguage::LANGUAGE_MEXICAN_SPANISH, "ms_"}, + constexpr const char* ASSET_TYPE_NAMES[ASSET_TYPE_COUNT]{ + "xmodelpieces", + "physpreset", + "physconstraints", + "destructibledef", + "xanim", + "xmodel", + "material", + "techniqueset", + "image", + "soundbank", + "soundpatch", + "clipmap_unused", + "clipmap", + "comworld", + "gameworldsp", + "gameworldmp", + "mapents", + "gfxworld", + "gfxlightdef", + "uimap", + "font", + "fonticon", + "menulist", + "menu", + "localize", + "weapon", + "weapondef", + "weaponvariant", + "weaponfull", + "attachment", + "attachmentunique", + "camo", + "snddriverglobals", + "fx", + "fximpacttable", + "aitype", + "mptype", + "mpbody", + "mphead", + "character", + "xmodelalias", + "rawfile", + "stringtable", + "leaderboard", + "xglobals", + "ddl", + "glasses", + "emblemset", + "script", + "keyvaluepairs", + "vehicle", + "memoryblock", + "addonmapents", + "tracer", + "skinnedverts", + "qdb", + "slug", + "footsteptable", + "footstepfxtable", + "zbarrier", }; +} // namespace - return prefixes; -} +namespace T6 +{ + GameId Game::GetId() const + { + return GameId::T6; + } + + const std::string& Game::GetFullName() const + { + static std::string fullName = "Call Of Duty: Black Ops II"; + return fullName; + } + + const std::string& Game::GetShortName() const + { + static std::string shortName = "T6"; + return shortName; + } + + const std::vector& Game::GetLanguagePrefixes() const + { + static std::vector prefixes{ + {GameLanguage::LANGUAGE_ENGLISH, "en_"}, + {GameLanguage::LANGUAGE_FRENCH, "fr_"}, + {GameLanguage::LANGUAGE_FRENCH_CAN, "fc_"}, + {GameLanguage::LANGUAGE_GERMAN, "ge_"}, + {GameLanguage::LANGUAGE_AUSTRIAN, "as_"}, + {GameLanguage::LANGUAGE_ITALIAN, "it_"}, + {GameLanguage::LANGUAGE_SPANISH, "sp_"}, + {GameLanguage::LANGUAGE_BRITISH, "br_"}, + {GameLanguage::LANGUAGE_RUSSIAN, "ru_"}, + {GameLanguage::LANGUAGE_POLISH, "po_"}, + {GameLanguage::LANGUAGE_KOREAN, "ko_"}, + {GameLanguage::LANGUAGE_JAPANESE, "ja_"}, + {GameLanguage::LANGUAGE_CZECH, "cz_"}, + {GameLanguage::LANGUAGE_FULL_JAPANESE, "fj_"}, + {GameLanguage::LANGUAGE_PORTUGUESE, "bp_"}, + {GameLanguage::LANGUAGE_MEXICAN_SPANISH, "ms_"}, + }; + + return prefixes; + } + + asset_type_t Game::GetAssetTypeCount() const + { + return ASSET_TYPE_COUNT; + } + + std::optional Game::GetAssetTypeName(const asset_type_t assetType) const + { + if (assetType < std::extent_v) + return ASSET_TYPE_NAMES[assetType]; + + return std::nullopt; + } +} // namespace T6 diff --git a/src/Common/Game/T6/GameT6.h b/src/Common/Game/T6/GameT6.h index 0fbd4b7a..060b50be 100644 --- a/src/Common/Game/T6/GameT6.h +++ b/src/Common/Game/T6/GameT6.h @@ -10,5 +10,8 @@ namespace T6 [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; + + [[nodiscard]] asset_type_t GetAssetTypeCount() const override; + [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; }; } // namespace T6