From f41ab591d9161322400e9f6757f0cea4d5fe2596 Mon Sep 17 00:00:00 2001 From: fed <58637860+fedddddd@users.noreply.github.com> Date: Sun, 9 Oct 2022 20:51:19 +0200 Subject: [PATCH] Dont load localized zone on custom maps --- src/client/component/discord.cpp | 13 +++++++++++-- src/client/component/fastfiles.cpp | 26 ++++++++++++++++++++++++++ src/client/game/structs.hpp | 7 +++++++ src/client/game/symbols.hpp | 6 +++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/client/component/discord.cpp b/src/client/component/discord.cpp index 2495b7bd..0274e0ce 100644 --- a/src/client/component/discord.cpp +++ b/src/client/component/discord.cpp @@ -57,8 +57,17 @@ namespace discord { static char details[0x80] = {0}; const auto map = game::Dvar_FindVar("mapname")->current.string; - const auto mapname = game::UI_SafeTranslateString( - utils::string::va("PRESENCE_%s%s", SELECT_VALUE("SP_", ""), map)); + const auto key = utils::string::va("PRESENCE_%s%s", SELECT_VALUE("SP_", ""), map); + const char* mapname = nullptr; + + if (game::DB_XAssetExists(game::ASSET_TYPE_LOCALIZE, key) && !game::DB_IsXAssetDefault(game::ASSET_TYPE_LOCALIZE, key)) + { + mapname = game::UI_SafeTranslateString(key); + } + else + { + mapname = map; + } if (game::environment::is_mp()) { diff --git a/src/client/component/fastfiles.cpp b/src/client/component/fastfiles.cpp index 222b04ac..e1389e46 100644 --- a/src/client/component/fastfiles.cpp +++ b/src/client/component/fastfiles.cpp @@ -313,6 +313,29 @@ namespace fastfiles utils::hook::invoke(0x39CA90_b, a1); } + + void db_level_load_add_zone_stub(void* load, const char* name, const unsigned int alloc_flags, + const size_t size_est) + { + auto is_builtin_map = false; + for (auto map = &game::maps[0]; map->unk; ++map) + { + if (!std::strcmp(map->name, name)) + { + is_builtin_map = true; + break; + } + } + + if (is_builtin_map) + { + game::DB_LevelLoadAddZone(load, name, alloc_flags, size_est); + } + else + { + game::DB_LevelLoadAddZone(load, name, alloc_flags | game::DB_ZONE_CUSTOM, size_est); + } + } } bool exists(const std::string& zone) @@ -402,6 +425,9 @@ namespace fastfiles { utils::hook::nop(0x398061_b, 15); utils::hook::jump(0x398061_b, utils::hook::assemble(mp::skip_extra_zones_stub), true); + + // dont load localized zone for custom maps + utils::hook::call(0x394A99_b, db_level_load_add_zone_stub); } // prevent mod.ff from loading lua files diff --git a/src/client/game/structs.hpp b/src/client/game/structs.hpp index f47aeeb8..36e19dc6 100644 --- a/src/client/game/structs.hpp +++ b/src/client/game/structs.hpp @@ -1536,6 +1536,13 @@ namespace game unsigned int data; }; + struct map_t + { + const char* name; + int id; + int unk; + }; + namespace mp { struct cachedSnapshot_t diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index c4a40c37..44ee6ff2 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -182,6 +182,8 @@ namespace game WEAK symbol DB_GetXAssetTypeSize{0x0, 0x0}; WEAK symbol DB_FindXAssetHeader{0x1F1120, 0x3950C0}; + WEAK symbol DB_LevelLoadAddZone{0x0, 0x396B50}; WEAK symbol DB_IsXAssetDefault{0x1F25A0, 0x3968C0}; WEAK symbol DB_XAssetExists{0x1F6290, 0x39B7B0}; @@ -277,7 +279,7 @@ namespace game // TODO: move to dvars.cpp when done WEAK symbol fs_gameDirVal{0x0, 0x2EC86B8}; - WEAK symbol g_poolSize{0x0, 0x0}; + WEAK symbol g_poolSize{0x0, 0x10B3C80}; WEAK symbol g_compressor{0x2574804, 0x3962804}; WEAK symbol scr_VarGlob{0xBD80E00, 0xB138180}; @@ -301,6 +303,8 @@ namespace game WEAK symbol level_time{0x56DBAA0, 0x7361F9C}; + WEAK symbol maps{0x7CE5A0, 0x926C80}; + namespace mp { WEAK symbol g_entities{0x0, 0x71F19E0};