From 26a5d3299c0c7140848ed379cac777e054ad2285 Mon Sep 17 00:00:00 2001 From: Pirulax Date: Sat, 19 Jun 2021 01:43:54 +0200 Subject: [PATCH 1/3] Add engineStreamingFreeUpMemory --- Client/game_sa/CStreamingSA.cpp | 5 +++++ Client/game_sa/CStreamingSA.h | 1 + Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp | 7 +++++++ Client/sdk/game/CStreaming.h | 1 + 4 files changed, 14 insertions(+) diff --git a/Client/game_sa/CStreamingSA.cpp b/Client/game_sa/CStreamingSA.cpp index 9cfb6dc7b1..c2fae4af6b 100644 --- a/Client/game_sa/CStreamingSA.cpp +++ b/Client/game_sa/CStreamingSA.cpp @@ -152,3 +152,8 @@ void CStreamingSA::ReinitStreaming() reinitStreaming(); } + +void CStreamingSA::MakeSpaceFor(std::uint32_t memoryToCleanInBytes) +{ + ((int(__cdecl*)(std::uint32_t))0x40E560)(memoryToCleanInBytes); +} diff --git a/Client/game_sa/CStreamingSA.h b/Client/game_sa/CStreamingSA.h index 1172aa3f99..2c84173aba 100644 --- a/Client/game_sa/CStreamingSA.h +++ b/Client/game_sa/CStreamingSA.h @@ -29,6 +29,7 @@ class CStreamingSA : public CStreaming void RequestSpecialModel(DWORD model, const char* szTexture, DWORD channel); void ReinitStreaming(); CStreamingInfo* GetStreamingInfoFromModelId(uint32 id); + void MakeSpaceFor(std::uint32_t memoryToCleanInBytes) override; private: static CStreamingInfo* ms_aInfoForModel; // count: 26316 in unmodified game diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index cfca7d5beb..a2a2c587b8 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -12,6 +12,11 @@ #include "StdInc.h" #include +void EngineStreamingFreeUpMemory(std::uint32_t bytes) +{ + g_pGame->GetStreaming()->MakeSpaceFor(bytes); +} + void CLuaEngineDefs::LoadFunctions() { constexpr static const std::pair functions[]{ @@ -52,6 +57,8 @@ void CLuaEngineDefs::LoadFunctions() {"engineRestoreObjectGroupPhysicalProperties", EngineRestoreObjectGroupPhysicalProperties}, {"engineRestreamWorld", ArgumentParser}, + {"engineStreamingFreeUpMemory", ArgumentParser}, + // CLuaCFunctions::AddFunction ( "engineReplaceMatchingAtomics", EngineReplaceMatchingAtomics ); // CLuaCFunctions::AddFunction ( "engineReplaceWheelAtomics", EngineReplaceWheelAtomics ); // CLuaCFunctions::AddFunction ( "enginePositionAtomic", EnginePositionAtomic ); diff --git a/Client/sdk/game/CStreaming.h b/Client/sdk/game/CStreaming.h index 5d32211405..16ddd6035c 100644 --- a/Client/sdk/game/CStreaming.h +++ b/Client/sdk/game/CStreaming.h @@ -48,4 +48,5 @@ class CStreaming virtual void RequestSpecialModel(DWORD model, const char* szTexture, DWORD channel) = 0; virtual CStreamingInfo* GetStreamingInfoFromModelId(uint32 id) = 0; virtual void ReinitStreaming() = 0; + virtual void MakeSpaceFor(std::uint32_t memoryToCleanInBytes) = 0; }; From 469e499e9ca7f9c4a3463f934b3befcdac1f55f3 Mon Sep 17 00:00:00 2001 From: Pirulax Date: Tue, 3 Aug 2021 00:45:40 +0200 Subject: [PATCH 2/3] Fix wrong call address --- Client/game_sa/CStreamingSA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/game_sa/CStreamingSA.cpp b/Client/game_sa/CStreamingSA.cpp index c2fae4af6b..0dfef8376f 100644 --- a/Client/game_sa/CStreamingSA.cpp +++ b/Client/game_sa/CStreamingSA.cpp @@ -155,5 +155,5 @@ void CStreamingSA::ReinitStreaming() void CStreamingSA::MakeSpaceFor(std::uint32_t memoryToCleanInBytes) { - ((int(__cdecl*)(std::uint32_t))0x40E560)(memoryToCleanInBytes); + ((int(__cdecl*)(std::uint32_t))0x40E120)(memoryToCleanInBytes); } From cd9eed3955dbb6da4442dee8dcd6b97e217de9ba Mon Sep 17 00:00:00 2001 From: Marek Kulik Date: Tue, 3 Aug 2021 00:27:32 +0000 Subject: [PATCH 3/3] Update Client/game_sa/CStreamingSA.cpp --- Client/game_sa/CStreamingSA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/game_sa/CStreamingSA.cpp b/Client/game_sa/CStreamingSA.cpp index 0dfef8376f..ec520d511a 100644 --- a/Client/game_sa/CStreamingSA.cpp +++ b/Client/game_sa/CStreamingSA.cpp @@ -155,5 +155,5 @@ void CStreamingSA::ReinitStreaming() void CStreamingSA::MakeSpaceFor(std::uint32_t memoryToCleanInBytes) { - ((int(__cdecl*)(std::uint32_t))0x40E120)(memoryToCleanInBytes); + (reinterpret_cast(0x40E120))(memoryToCleanInBytes); }