From b7668a6d859f47892f09a80be9ed1d2f21482235 Mon Sep 17 00:00:00 2001 From: JerryALT Date: Tue, 18 Jun 2024 14:55:27 +0300 Subject: [PATCH] [AssetHandler]: Added commands with flag 'debug' --- src/Components/Modules/AssetHandler.cpp | 113 ++++++++++++++++++------ src/Components/Modules/AssetHandler.hpp | 2 + 2 files changed, 90 insertions(+), 25 deletions(-) diff --git a/src/Components/Modules/AssetHandler.cpp b/src/Components/Modules/AssetHandler.cpp index 10f8135..a6645d4 100644 --- a/src/Components/Modules/AssetHandler.cpp +++ b/src/Components/Modules/AssetHandler.cpp @@ -193,35 +193,13 @@ namespace Components Utils::Hook::Set(0x45A6E2, entryPool + 1); } - - AssetHandler::AssetHandler() + void AssetHandler::AddDebugAssetCommands() { - this->reallocateEntryPool(); - - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_IMAGE, 7168); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_SOUND, 24000); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_LOADED_SOUND, 2700); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_FX, 1200); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_LOCALIZE_ENTRY, 14000); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_XANIMPARTS, 8192); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_XMODEL, 5125); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_PHYSPRESET, 128); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_MENU, 1280); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_MENULIST, 256); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_MATERIAL, 8192); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_WEAPON, ASSET_TYPE_WEAPON_LIMIT); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_STRINGTABLE, 800); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_GAMEWORLD_MP, 1); - Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_FONT, 32); - - //AssetHandler::ClearTemporaryAssets(); - //Utils::Hook(Game::DB_FindXAssetHeader, AssetHandler::FindAssetStub).install()->quick(); - - Command::Add("listassetpool", [](Command::Params* params) + Command::Add("listAssetPool", [](Command::Params* params) { if (params->size() < 2) { - Game::Com_Printf(0, "listassetpool [filter]: list all the assets in the specified pool\n"); + Game::Com_Printf(0, "listAssetPool [filter]: list all the assets in the specified pool\n"); for (auto i = 0; i < Game::XAssetType::ASSET_TYPE_COUNT; i++) { @@ -254,6 +232,91 @@ namespace Components }, true); } }); + + Command::Add("poolUsages", []() + { + for (auto i = 0; i < Game::ASSET_TYPE_COUNT; i++) + { + auto count = 0; + FastFiles::EnumAssets(static_cast(i), [&](Game::XAssetHeader header) + { + count++; + }, true); + + Game::Com_Printf(0, Utils::String::VA("%i %s: %i / %i\n", i, Game::g_assetNames[i], count, Game::g_poolSize[i])); + } + }); + + Command::Add("poolUsage", [](Command::Params* params) + { + if (params->size() < 2) + { + Game::Com_Printf(0, "poolUsage : list all the assets in the specified pool\n"); + + for (auto i = 0; i < Game::XAssetType::ASSET_TYPE_COUNT; i++) + { + Game::Com_Printf(0, "%d %s\n", i, Game::g_assetNames[i]); + } + } + else + { + const auto type = static_cast(std::atoi(params->get(1))); + + auto count = 0; + FastFiles::EnumAssets(type, [&](Game::XAssetHeader header) + { + count++; + }, true); + + Game::Com_Printf(0, Utils::String::VA("%i %s: %i / %i\n", type, Game::g_assetNames[type], count, Game::g_poolSize[type])); + } + }); + + Command::Add("assetCount", [](const Command::Params* params) + { + auto count = 0; + auto totalCount = 0; + for (auto i = 0; i < Game::ASSET_TYPE_COUNT; i++) + { + FastFiles::EnumAssets(static_cast(i), [&](Game::XAssetHeader header) + { + count++; + }, true); + + totalCount += Game::g_poolSize[i]; + } + + Game::Com_Printf(0, Utils::String::VA("total assets: %i / %i\n", count, totalCount)); + }); + } + + AssetHandler::AssetHandler() + { + this->reallocateEntryPool(); + + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_IMAGE, 7168); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_SOUND, 24000); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_LOADED_SOUND, 2700); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_FX, 1200); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_LOCALIZE_ENTRY, 14000); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_XANIMPARTS, 8192); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_XMODEL, 5125); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_PHYSPRESET, 128); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_MENU, 1280); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_MENULIST, 256); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_MATERIAL, 8192); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_WEAPON, ASSET_TYPE_WEAPON_LIMIT); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_STRINGTABLE, 800); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_GAMEWORLD_MP, 1); + Game::DB_ReallocXAssetPool(Game::ASSET_TYPE_FONT, 32); + + //AssetHandler::ClearTemporaryAssets(); + //Utils::Hook(Game::DB_FindXAssetHeader, AssetHandler::FindAssetStub).install()->quick(); + + if (Game::DebugModeEnabled()) + { + AddDebugAssetCommands(); + } } AssetHandler::~AssetHandler() diff --git a/src/Components/Modules/AssetHandler.hpp b/src/Components/Modules/AssetHandler.hpp index cc2226b..29663e2 100644 --- a/src/Components/Modules/AssetHandler.hpp +++ b/src/Components/Modules/AssetHandler.hpp @@ -50,5 +50,7 @@ namespace Components static void SetBypassState(bool value); void reallocateEntryPool(); + + static void AddDebugAssetCommands(); }; } \ No newline at end of file