diff --git a/Client/game_sa/CWeatherSA.cpp b/Client/game_sa/CWeatherSA.cpp index b6999e177f9..7ebc51469f9 100644 --- a/Client/game_sa/CWeatherSA.cpp +++ b/Client/game_sa/CWeatherSA.cpp @@ -12,6 +12,8 @@ #include "StdInc.h" #include "CWeatherSA.h" +static float WEATHER_FAKE_ACCUMULATOR; + unsigned char CWeatherSA::Get() { return *(unsigned char*)0xC81318; // CWeather::ForcedWeatherType @@ -36,15 +38,8 @@ float CWeatherSA::GetAmountOfRain() void CWeatherSA::SetAmountOfRain(float fAmount) { // Patch all the places inside of CWeather::Update that would overwrite CWeather::Rain - MemPut(0x72C686, 0xDD); - MemPut(0x72C687, 0xD8); - - MemSet((void*)0x72C688, 0x90, 4); - - MemPut(0x72BC92, 0xDD); - MemPut(0x72BC93, 0xD8); - - MemSet((void*)0x72BC94, 0x90, 4); + MemPut((LPVOID)(0x72C686 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BC92 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemSet((void*)0x72BC72, 0x90, 5); @@ -55,12 +50,11 @@ void CWeatherSA::SetAmountOfRain(float fAmount) void CWeatherSA::ResetAmountOfRain() { BYTE originalMov[5] = {0xA3, 0x24, 0x13, 0xC8, 0x00}; // 0x72BC72 - BYTE originalFstp1[6] = {0xD9, 0x1D, 0x24, 0x13, 0xC8, 0x00}; // 0x72BC92 - BYTE originalFstp2[6] = {0xD9, 0x1D, 0x24, 0x13, 0xC8, 0x00}; // 0x72C686 - MemCpy((LPVOID)0x72BC72, &originalMov, 5); - MemCpy((LPVOID)0x72BC92, &originalFstp1, 6); - MemCpy((LPVOID)0x72C686, &originalFstp2, 6); + + static constexpr DWORD originalAddr = 0x00C81324; + MemPut((LPVOID)(0x72C686 + 2), originalAddr); + MemPut((LPVOID)(0x72BC92 + 2), originalAddr); } float CWeatherSA::GetWetRoads() const @@ -70,10 +64,10 @@ float CWeatherSA::GetWetRoads() const bool CWeatherSA::SetWetRoads(float fAmount) { - MemSet((LPVOID)(0x72BB9F + 2), 0x90, 3); - MemSet((LPVOID)(0x72BBB7 + 2), 0x90, 3); - MemSet((LPVOID)(0x72BBD0 + 1), 0x90, 3); - MemSet((LPVOID)(0x72BBD7 + 2), 0x90, 3); + MemPut((LPVOID)(0x72BB9F + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BBB7 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BBD0 + 1), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BBD7 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC81308, fAmount); return true; @@ -81,11 +75,11 @@ bool CWeatherSA::SetWetRoads(float fAmount) bool CWeatherSA::ResetWetRoads() { - BYTE originalCodes[3] = {0x08, 0x13, 0xC8}; - MemCpy((LPVOID)(0x72BB9F + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BBB7 + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BBD0 + 1), &originalCodes, 3); - MemCpy((LPVOID)(0x72BBD7 + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C81308; + MemPut((LPVOID)(0x72BB9F + 2), originalAddr); + MemPut((LPVOID)(0x72BBB7 + 2), originalAddr); + MemPut((LPVOID)(0x72BBD0 + 1), originalAddr); + MemPut((LPVOID)(0x72BBD7 + 2), originalAddr); return true; } @@ -96,9 +90,9 @@ float CWeatherSA::GetFoggyness() const bool CWeatherSA::SetFoggyness(float fAmount) { - MemSet((LPVOID)(0x72BDF5 + 2), 0x90, 3); - MemSet((LPVOID)(0x72BDDD + 2), 0x90, 3); - MemSet((LPVOID)(0x72BE13 + 2), 0x90, 3); + MemPut((LPVOID)(0x72BDF5 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BDDD + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BE13 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC81300, fAmount); return true; @@ -106,10 +100,10 @@ bool CWeatherSA::SetFoggyness(float fAmount) bool CWeatherSA::ResetFoggyness() { - BYTE originalCodes[3] = {0x00, 0x13, 0xC8}; - MemCpy((LPVOID)(0x72BDF5 + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BDDD + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BE13 + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C81300; + MemPut((LPVOID)(0x72BDF5 + 2), originalAddr); + MemPut((LPVOID)(0x72BDDD + 2), originalAddr); + MemPut((LPVOID)(0x72BE13 + 2), originalAddr); return true; } @@ -120,9 +114,9 @@ float CWeatherSA::GetFog() const bool CWeatherSA::SetFog(float fAmount) { - MemSet((LPVOID)(0x72BE37 + 2), 0x90, 3); - MemSet((LPVOID)(0x72BE1F + 2), 0x90, 3); - MemSet((LPVOID)(0x72BE4F + 2), 0x90, 3); + MemPut((LPVOID)(0x72BE37 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BE1F + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BE4F + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC812FC, fAmount); return true; @@ -130,10 +124,10 @@ bool CWeatherSA::SetFog(float fAmount) bool CWeatherSA::ResetFog() { - BYTE originalCodes[3] = {0xFC, 0x12, 0xC8}; - MemCpy((LPVOID)(0x72BE37 + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BE1F + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BE4F + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C812FC; + MemPut((LPVOID)(0x72BE37 + 2), originalAddr); + MemPut((LPVOID)(0x72BE1F + 2), originalAddr); + MemPut((LPVOID)(0x72BE4F + 2), originalAddr); return true; } @@ -144,8 +138,8 @@ float CWeatherSA::GetRainFog() const bool CWeatherSA::SetRainFog(float fAmount) { - MemSet((LPVOID)(0x72ADD8 + 2), 0x90, 3); - MemSet((LPVOID)(0x72ADE4 + 2), 0x90, 3); + MemPut((LPVOID)(0x72ADD8 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72ADE4 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC81410, fAmount); return true; @@ -153,9 +147,9 @@ bool CWeatherSA::SetRainFog(float fAmount) bool CWeatherSA::ResetRainFog() { - BYTE originalCodes[3] = {0x10, 0x14, 0xC8}; - MemCpy((LPVOID)(0x72ADD8 + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72ADE4 + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C81410; + MemPut((LPVOID)(0x72ADD8 + 2), originalAddr); + MemPut((LPVOID)(0x72ADE4 + 2), originalAddr); return true; } @@ -166,9 +160,9 @@ float CWeatherSA::GetWaterFog() const bool CWeatherSA::SetWaterFog(float fAmount) { - MemSet((LPVOID)(0x72C35C + 2), 0x90, 3); - MemSet((LPVOID)(0x72C38E + 2), 0x90, 3); - MemSet((LPVOID)(0x72C36F + 2), 0x90, 3); + MemPut((LPVOID)(0x72C35C + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72C38E + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72C36F + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC81338, fAmount); return true; @@ -176,10 +170,10 @@ bool CWeatherSA::SetWaterFog(float fAmount) bool CWeatherSA::ResetWaterFog() { - BYTE originalCodes[3] = {0x38, 0x13, 0xC8}; - MemCpy((LPVOID)(0x72C35C + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72C38E + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72C36F + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C81338; + MemPut((LPVOID)(0x72C35C + 2), originalAddr); + MemPut((LPVOID)(0x72C38E + 2), originalAddr); + MemPut((LPVOID)(0x72C36F + 2), originalAddr); return true; } @@ -190,9 +184,9 @@ float CWeatherSA::GetSandstorm() const bool CWeatherSA::SetSandstorm(float fAmount) { - MemSet((LPVOID)(0x72A4B6 + 1), 0x90, 3); - MemSet((LPVOID)(0x72BCEB + 1), 0x90, 3); - MemSet((LPVOID)(0x72BD0B + 2), 0x90, 3); + MemPut((LPVOID)(0x72A4B6 + 1), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BCEB + 1), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BD0B + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC812F4, fAmount); return true; @@ -200,10 +194,10 @@ bool CWeatherSA::SetSandstorm(float fAmount) bool CWeatherSA::ResetSandstorm() { - BYTE originalCodes[3] = {0xF4, 0x12, 0xC8}; - MemCpy((LPVOID)(0x72A4B6 + 1), &originalCodes, 3); - MemCpy((LPVOID)(0x72BCEB + 1), &originalCodes, 3); - MemCpy((LPVOID)(0x72BD0B + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C812F4; + MemPut((LPVOID)(0x72A4B6 + 1), originalAddr); + MemPut((LPVOID)(0x72BCEB + 1), originalAddr); + MemPut((LPVOID)(0x72BD0B + 2), originalAddr); return true; } @@ -214,8 +208,8 @@ float CWeatherSA::GetRainbow() const bool CWeatherSA::SetRainbow(float fAmount) { - MemSet((LPVOID)(0x72BF51 + 2), 0x90, 3); - MemSet((LPVOID)(0x72BF59 + 2), 0x90, 3); + MemPut((LPVOID)(0x72BF51 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); + MemPut((LPVOID)(0x72BF59 + 2), (DWORD)&WEATHER_FAKE_ACCUMULATOR); MemPutFast(0xC812E4, fAmount); return true; @@ -223,8 +217,8 @@ bool CWeatherSA::SetRainbow(float fAmount) bool CWeatherSA::ResetRainbow() { - BYTE originalCodes[3] = {0xE4, 0x12, 0xC8}; - MemCpy((LPVOID)(0x72BF51 + 2), &originalCodes, 3); - MemCpy((LPVOID)(0x72BF59 + 2), &originalCodes, 3); + static constexpr DWORD originalAddr = 0x00C812E4; + MemPut((LPVOID)(0x72BF51 + 2), originalAddr); + MemPut((LPVOID)(0x72BF59 + 2), originalAddr); return true; }