Some more cleanup!

This commit is contained in:
Louvenarde 2024-01-28 17:54:19 +01:00
parent 4a61617e88
commit a603dbea52
6 changed files with 54 additions and 84 deletions

View File

@ -386,7 +386,7 @@ namespace Components
{ {
if (Components::Weapon::GModelIndexHasBeenReallocated) if (Components::Weapon::GModelIndexHasBeenReallocated)
{ {
model = Components::Weapon::G_ModelIndexReallocated[ent->model]; model = Components::Weapon::cached_models_reallocated[ent->model];
} }
else else
{ {

View File

@ -298,20 +298,6 @@ namespace Components
return Game::Dvar_RegisterBool(dvarName, value_, flags, description); return Game::Dvar_RegisterBool(dvarName, value_, flags, description);
} }
void DObjCalcAnim(Game::DObj *a1, int *partBits, Game::XAnimCalcAnimInfo *a3)
{
printf("");
if (a1->models[0]->name == "body_urban_civ_female_a"s)
{
printf("");
}
Utils::Hook::Call<void(Game::DObj*, int*, Game::XAnimCalcAnimInfo*)>(0x49E230)(a1, partBits, a3);
printf("");
}
QuickPatch::QuickPatch() QuickPatch::QuickPatch()
{ {
// Filtering any mapents that is intended for Spec:Ops gamemode (CODO) and prevent them from spawning // Filtering any mapents that is intended for Spec:Ops gamemode (CODO) and prevent them from spawning

View File

@ -713,32 +713,6 @@ namespace Components
return result; return result;
} }
void DebugTest()
{
//auto clientNum = Game::CG_GetClientNum();
//auto* clientEntity = &Game::g_entities[clientNum];
//// Ingame only & player only
//if (!Game::CL_IsCgameInitialized() || clientEntity->client == nullptr)
//{
// return;
//}
//static std::string str = "";
//str += std::format("\n{} => {} {} {} {} {} {}", "s.partBits", clientEntity->s.partBits[0], clientEntity->s.partBits[1], clientEntity->s.partBits[2], clientEntity->s.partBits[3], clientEntity->s.partBits[4], clientEntity->s.partBits[5]);
//
//const auto clientNumber = clientEntity->r.ownerNum.number;
//Game::scene->sceneDObj[clientNumber].obj->hidePartBits;
//str += std::format("\n{} => {} {} {} {} {} {}", "DOBJ hidePartBits", clientEntity->s.partBits[0], clientEntity->s.partBits[1], clientEntity->s.partBits[2], clientEntity->s.partBits[3], clientEntity->s.partBits[4], clientEntity->s.partBits[5]);
//Game::R_AddCmdDrawText();
}
Renderer::Renderer() Renderer::Renderer()
{ {
if (Dedicated::IsEnabled()) return; if (Dedicated::IsEnabled()) return;
@ -757,7 +731,6 @@ namespace Components
ListSamplers(); ListSamplers();
DrawPrimaryLights(); DrawPrimaryLights();
DebugDrawClipmap(); DebugDrawClipmap();
DebugTest();
} }
}, Scheduler::Pipeline::RENDERER); }, Scheduler::Pipeline::RENDERER);

View File

@ -6,9 +6,18 @@
namespace Components namespace Components
{ {
const Game::dvar_t* Weapon::BGWeaponOffHandFix; const Game::dvar_t* Weapon::BGWeaponOffHandFix;
Game::XModel* Weapon::G_ModelIndexReallocated[G_MODELINDEX_LIMIT]; Game::XModel* Weapon::cached_models_reallocated[G_MODELINDEX_LIMIT];
bool Weapon::GModelIndexHasBeenReallocated; bool Weapon::GModelIndexHasBeenReallocated;
// Config strings mapping
// 0-1067 unknown
// 1125-1580 cached models (512 long range)
// 1581-1637 also reserved for models?
// 1637-4082 unknown
// 4082-above = bad index?
// 4137 : timescale
// 4138-above = reserved for weapons?
Game::WeaponCompleteDef* Weapon::LoadWeaponCompleteDef(const char* name) Game::WeaponCompleteDef* Weapon::LoadWeaponCompleteDef(const char* name)
{ {
if (auto* rawWeaponFile = Game::BG_LoadWeaponCompleteDefInternal("mp", name)) if (auto* rawWeaponFile = Game::BG_LoadWeaponCompleteDefInternal("mp", name))
@ -22,7 +31,7 @@ namespace Components
const char* Weapon::GetWeaponConfigString(int index) const char* Weapon::GetWeaponConfigString(int index)
{ {
if (index >= (1200 + 2804)) index += (2939 - 2804); if (index >= (BASEGAME_WEAPON_LIMIT + 2804)) index += (2939 - 2804);
return Game::CL_GetConfigString(index); return Game::CL_GetConfigString(index);
} }
@ -34,7 +43,7 @@ namespace Components
{ {
for (unsigned int i = 1; i < Game::BG_GetNumWeapons(); ++i) for (unsigned int i = 1; i < Game::BG_GetNumWeapons(); ++i)
{ {
Game::SV_SetConfigstring(i + (i >= 1200 ? 2939 : 2804), Game::BG_GetWeaponName(i)); Game::SV_SetConfigstring(i + (i >= BASEGAME_WEAPON_LIMIT ? 2939 : 2804), Game::BG_GetWeaponName(i));
} }
} }
} }
@ -57,12 +66,14 @@ namespace Components
return 0; return 0;
} }
if (index >= 4139) if (index >= BASEGAME_MAX_CONFIGSTRINGS)
{ {
// if above 4139, remap to 1200<>?
index -= 2939; index -= 2939;
} }
else if (index > 2804 && index <= 2804 + 1200) else if (index > 2804 && index <= 2804 + BASEGAME_WEAPON_LIMIT)
{ {
// from 2804 to 4004, remap to 0<>1200
index -= 2804; index -= 2804;
} }
else else
@ -283,8 +294,8 @@ namespace Components
// And http://reverseengineering.stackexchange.com/questions/1397/how-can-i-reverse-optimized-integer-division-modulo-by-constant-operations // And http://reverseengineering.stackexchange.com/questions/1397/how-can-i-reverse-optimized-integer-division-modulo-by-constant-operations
// The game's magic number is computed using this formula: (1 / 1200) * (2 ^ (32 + 7) // The game's magic number is computed using this formula: (1 / 1200) * (2 ^ (32 + 7)
// I'm too lazy to generate the new magic number, so we can make use of the fact that using powers of 2 as scales allows to change the compensating shift // I'm too lazy to generate the new magic number, so we can make use of the fact that using powers of 2 as scales allows to change the compensating shift
static_assert(((WEAPON_LIMIT / 1200) * 1200) == WEAPON_LIMIT && (WEAPON_LIMIT / 1200) != 0 && !((WEAPON_LIMIT / 1200) & ((WEAPON_LIMIT / 1200) - 1)), "WEAPON_LIMIT / 1200 is not a power of 2!"); static_assert(((WEAPON_LIMIT / BASEGAME_WEAPON_LIMIT) * BASEGAME_WEAPON_LIMIT) == WEAPON_LIMIT && (WEAPON_LIMIT / BASEGAME_WEAPON_LIMIT) != 0 && !((WEAPON_LIMIT / BASEGAME_WEAPON_LIMIT) & ((WEAPON_LIMIT / BASEGAME_WEAPON_LIMIT) - 1)), "WEAPON_LIMIT / 1200 is not a power of 2!");
const unsigned char compensation = 7 + static_cast<unsigned char>(log2(WEAPON_LIMIT / 1200)); // 7 is the compensation the game uses const unsigned char compensation = 7 + static_cast<unsigned char>(log2(WEAPON_LIMIT / BASEGAME_WEAPON_LIMIT)); // 7 is the compensation the game uses
Utils::Hook::Set<BYTE>(0x49263D, compensation); Utils::Hook::Set<BYTE>(0x49263D, compensation);
Utils::Hook::Set<BYTE>(0x5E250C, compensation); Utils::Hook::Set<BYTE>(0x5E250C, compensation);
Utils::Hook::Set<BYTE>(0x5E2B43, compensation); Utils::Hook::Set<BYTE>(0x5E2B43, compensation);
@ -407,46 +418,46 @@ namespace Components
// Patch bg_weaponDefs on the stack // Patch bg_weaponDefs on the stack
Utils::Hook::Set<DWORD>(0x40C31D, sizeof(bg_weaponDefs)); Utils::Hook::Set<DWORD>(0x40C31D, sizeof(bg_weaponDefs));
Utils::Hook::Set<DWORD>(0x40C32F, sizeof(bg_weaponDefs)); Utils::Hook::Set<DWORD>(0x40C32F, sizeof(bg_weaponDefs));
Utils::Hook::Set<DWORD>(0x40C311, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C311, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
Utils::Hook::Set<DWORD>(0x40C45F, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C45F, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
Utils::Hook::Set<DWORD>(0x40C478, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C478, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
Utils::Hook::Set<DWORD>(0x40C434, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C434, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
Utils::Hook::Set<DWORD>(0x40C434, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C434, 0x258C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
// Move second buffer pointers // Move second buffer pointers
Utils::Hook::Set<DWORD>(0x40C336, 0x12E4 + ((sizeof(bg_weaponDefs)) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x40C336, 0x12E4 + ((sizeof(bg_weaponDefs)) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x40C3C6, 0x12DC + ((sizeof(bg_weaponDefs)) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x40C3C6, 0x12DC + ((sizeof(bg_weaponDefs)) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x40C3CE, 0x12DC + ((sizeof(bg_weaponDefs)) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x40C3CE, 0x12DC + ((sizeof(bg_weaponDefs)) - (BASEGAME_WEAPON_LIMIT * 4)));
// Move arg0 pointers // Move arg0 pointers
Utils::Hook::Set<DWORD>(0x40C365, 0x259C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C365, 0x259C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
Utils::Hook::Set<DWORD>(0x40C44E, 0x259C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C44E, 0x259C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
Utils::Hook::Set<DWORD>(0x40C467, 0x259C + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C467, 0x259C + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
// Move arg4 pointers // Move arg4 pointers
Utils::Hook::Set<DWORD>(0x40C344, 0x25B4 + ((sizeof(bg_weaponDefs) * 2) - (1200 * 4 * 2))); Utils::Hook::Set<DWORD>(0x40C344, 0x25B4 + ((sizeof(bg_weaponDefs) * 2) - (BASEGAME_WEAPON_LIMIT * 4 * 2)));
// Patch bg_sharedAmmoCaps on the stack // Patch bg_sharedAmmoCaps on the stack
Utils::Hook::Set<DWORD>(0x4F76E6, sizeof(bg_sharedAmmoCaps)); Utils::Hook::Set<DWORD>(0x4F76E6, sizeof(bg_sharedAmmoCaps));
Utils::Hook::Set<DWORD>(0x4F7621, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F7621, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x4F76AF, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F76AF, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x4F76DA, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F76DA, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x4F77C5, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F77C5, 0x12C8 + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
// Move arg0 pointers // Move arg0 pointers
Utils::Hook::Set<DWORD>(0x4F766D, 0x12DC + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F766D, 0x12DC + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x4F76B7, 0x12DC + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F76B7, 0x12DC + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
Utils::Hook::Set<DWORD>(0x4F76FB, 0x12EC + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F76FB, 0x12EC + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
// Move arg4 pointers // Move arg4 pointers
Utils::Hook::Set<DWORD>(0x4F7630, 0x12DC + (sizeof(bg_sharedAmmoCaps) - (1200 * 4))); Utils::Hook::Set<DWORD>(0x4F7630, 0x12DC + (sizeof(bg_sharedAmmoCaps) - (BASEGAME_WEAPON_LIMIT * 4)));
// Reallocate G_ModelIndex // Reallocate G_ModelIndex
Utils::Hook::Set(0x420654 + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x420654 + 3, cached_models_reallocated);
Utils::Hook::Set(0x43BCE4 + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x43BCE4 + 3, cached_models_reallocated);
Utils::Hook::Set(0x44F27B + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x44F27B + 3, cached_models_reallocated);
Utils::Hook::Set(0x479087 + 1, G_ModelIndexReallocated); Utils::Hook::Set(0x479087 + 1, cached_models_reallocated);
Utils::Hook::Set(0x48069D + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x48069D + 3, cached_models_reallocated);
Utils::Hook::Set(0x48F088 + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x48F088 + 3, cached_models_reallocated);
Utils::Hook::Set(0x4F457C + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x4F457C + 3, cached_models_reallocated);
Utils::Hook::Set(0x5FC762 + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x5FC762 + 3, cached_models_reallocated);
Utils::Hook::Set(0x5FC7BE + 3, G_ModelIndexReallocated); Utils::Hook::Set(0x5FC7BE + 3, cached_models_reallocated);
Utils::Hook::Set<DWORD>(0x44F256 + 2, G_MODELINDEX_LIMIT); Utils::Hook::Set<DWORD>(0x44F256 + 2, G_MODELINDEX_LIMIT);
GModelIndexHasBeenReallocated = true; GModelIndexHasBeenReallocated = true;

View File

@ -1,14 +1,16 @@
#pragma once #pragma once
#define BASEGAME_WEAPON_LIMIT 1200
#define BASEGAME_MAX_CONFIGSTRINGS 4139
// Increase the weapon limit // Increase the weapon limit
// Was 1200 before
#define WEAPON_LIMIT 2400 #define WEAPON_LIMIT 2400
#define MAX_CONFIGSTRINGS (4139 - 1200 + WEAPON_LIMIT) #define MAX_CONFIGSTRINGS (BASEGAME_MAX_CONFIGSTRINGS - BASEGAME_WEAPON_LIMIT + WEAPON_LIMIT)
// Double the limit to allow loading of some heavy-duty MW3 maps // Double the limit to allow loading of some heavy-duty MW3 maps
#define ADDITIONAL_GMODELS 512 #define ADDITIONAL_GMODELS 512
#define G_MODELINDEX_LIMIT (512 + WEAPON_LIMIT - 1200 + ADDITIONAL_GMODELS) #define G_MODELINDEX_LIMIT (512 + WEAPON_LIMIT - BASEGAME_WEAPON_LIMIT + ADDITIONAL_GMODELS)
namespace Components namespace Components
{ {
@ -16,7 +18,7 @@ namespace Components
{ {
public: public:
Weapon(); Weapon();
static Game::XModel* G_ModelIndexReallocated[G_MODELINDEX_LIMIT]; static Game::XModel* cached_models_reallocated[G_MODELINDEX_LIMIT];
static bool GModelIndexHasBeenReallocated; static bool GModelIndexHasBeenReallocated;

View File

@ -276,8 +276,6 @@ namespace Steam
void Proxy::RunFrame() void Proxy::RunFrame()
{ {
return;
std::lock_guard<std::recursive_mutex> _(Proxy::CallMutex); std::lock_guard<std::recursive_mutex> _(Proxy::CallMutex);
if (Proxy::SteamUtils) if (Proxy::SteamUtils)