1212#include " StdInc.h"
1313#include " CWeatherSA.h"
1414
15+ static float WEATHER_FAKE_ACCUMULATOR;
16+
1517unsigned char CWeatherSA::Get ()
1618{
1719 return *(unsigned char *)0xC81318 ; // CWeather::ForcedWeatherType
@@ -36,15 +38,8 @@ float CWeatherSA::GetAmountOfRain()
3638void CWeatherSA::SetAmountOfRain (float fAmount )
3739{
3840 // Patch all the places inside of CWeather::Update that would overwrite CWeather::Rain
39- MemPut<BYTE>(0x72C686 , 0xDD );
40- MemPut<BYTE>(0x72C687 , 0xD8 );
41-
42- MemSet ((void *)0x72C688 , 0x90 , 4 );
43-
44- MemPut<BYTE>(0x72BC92 , 0xDD );
45- MemPut<BYTE>(0x72BC93 , 0xD8 );
46-
47- MemSet ((void *)0x72BC94 , 0x90 , 4 );
41+ MemPut<DWORD>((LPVOID)(0x72C686 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR);
42+ MemPut<DWORD>((LPVOID)(0x72BC92 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR);
4843
4944 MemSet ((void *)0x72BC72 , 0x90 , 5 );
5045
@@ -55,12 +50,11 @@ void CWeatherSA::SetAmountOfRain(float fAmount)
5550void CWeatherSA::ResetAmountOfRain ()
5651{
5752 BYTE originalMov[5 ] = {0xA3 , 0x24 , 0x13 , 0xC8 , 0x00 }; // 0x72BC72
58- BYTE originalFstp1[6 ] = {0xD9 , 0x1D , 0x24 , 0x13 , 0xC8 , 0x00 }; // 0x72BC92
59- BYTE originalFstp2[6 ] = {0xD9 , 0x1D , 0x24 , 0x13 , 0xC8 , 0x00 }; // 0x72C686
60-
6153 MemCpy ((LPVOID)0x72BC72 , &originalMov, 5 );
62- MemCpy ((LPVOID)0x72BC92 , &originalFstp1, 6 );
63- MemCpy ((LPVOID)0x72C686 , &originalFstp2, 6 );
54+
55+ static constexpr DWORD originalAddr = 0x00C81324 ;
56+ MemPut<DWORD>((LPVOID)(0x72C686 + 2 ), originalAddr);
57+ MemPut<DWORD>((LPVOID)(0x72BC92 + 2 ), originalAddr);
6458}
6559
6660float CWeatherSA::GetWetRoads () const
@@ -70,22 +64,22 @@ float CWeatherSA::GetWetRoads() const
7064
7165bool CWeatherSA::SetWetRoads (float fAmount )
7266{
73- MemSet ((LPVOID)(0x72BB9F + 2 ), 0x90 , 3 );
74- MemSet ((LPVOID)(0x72BBB7 + 2 ), 0x90 , 3 );
75- MemSet ((LPVOID)(0x72BBD0 + 1 ), 0x90 , 3 );
76- MemSet ((LPVOID)(0x72BBD7 + 2 ), 0x90 , 3 );
67+ MemPut<DWORD> ((LPVOID)(0x72BB9F + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
68+ MemPut<DWORD> ((LPVOID)(0x72BBB7 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
69+ MemPut<DWORD> ((LPVOID)(0x72BBD0 + 1 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
70+ MemPut<DWORD> ((LPVOID)(0x72BBD7 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
7771
7872 MemPutFast<float >(0xC81308 , fAmount );
7973 return true ;
8074}
8175
8276bool CWeatherSA::ResetWetRoads ()
8377{
84- BYTE originalCodes[ 3 ] = { 0x08 , 0x13 , 0xC8 } ;
85- MemCpy ((LPVOID)(0x72BB9F + 2 ), &originalCodes, 3 );
86- MemCpy ((LPVOID)(0x72BBB7 + 2 ), &originalCodes, 3 );
87- MemCpy ((LPVOID)(0x72BBD0 + 1 ), &originalCodes, 3 );
88- MemCpy ((LPVOID)(0x72BBD7 + 2 ), &originalCodes, 3 );
78+ static constexpr DWORD originalAddr = 0x00C81308 ;
79+ MemPut<DWORD> ((LPVOID)(0x72BB9F + 2 ), originalAddr );
80+ MemPut<DWORD> ((LPVOID)(0x72BBB7 + 2 ), originalAddr );
81+ MemPut<DWORD> ((LPVOID)(0x72BBD0 + 1 ), originalAddr );
82+ MemPut<DWORD> ((LPVOID)(0x72BBD7 + 2 ), originalAddr );
8983 return true ;
9084}
9185
@@ -96,20 +90,20 @@ float CWeatherSA::GetFoggyness() const
9690
9791bool CWeatherSA::SetFoggyness (float fAmount )
9892{
99- MemSet ((LPVOID)(0x72BDF5 + 2 ), 0x90 , 3 );
100- MemSet ((LPVOID)(0x72BDDD + 2 ), 0x90 , 3 );
101- MemSet ((LPVOID)(0x72BE13 + 2 ), 0x90 , 3 );
93+ MemPut<DWORD> ((LPVOID)(0x72BDF5 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
94+ MemPut<DWORD> ((LPVOID)(0x72BDDD + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
95+ MemPut<DWORD> ((LPVOID)(0x72BE13 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
10296
10397 MemPutFast<float >(0xC81300 , fAmount );
10498 return true ;
10599}
106100
107101bool CWeatherSA::ResetFoggyness ()
108102{
109- BYTE originalCodes[ 3 ] = { 0x00 , 0x13 , 0xC8 } ;
110- MemCpy ((LPVOID)(0x72BDF5 + 2 ), &originalCodes, 3 );
111- MemCpy ((LPVOID)(0x72BDDD + 2 ), &originalCodes, 3 );
112- MemCpy ((LPVOID)(0x72BE13 + 2 ), &originalCodes, 3 );
103+ static constexpr DWORD originalAddr = 0x00C81300 ;
104+ MemPut<DWORD> ((LPVOID)(0x72BDF5 + 2 ), originalAddr );
105+ MemPut<DWORD> ((LPVOID)(0x72BDDD + 2 ), originalAddr );
106+ MemPut<DWORD> ((LPVOID)(0x72BE13 + 2 ), originalAddr );
113107 return true ;
114108}
115109
@@ -120,20 +114,20 @@ float CWeatherSA::GetFog() const
120114
121115bool CWeatherSA::SetFog (float fAmount )
122116{
123- MemSet ((LPVOID)(0x72BE37 + 2 ), 0x90 , 3 );
124- MemSet ((LPVOID)(0x72BE1F + 2 ), 0x90 , 3 );
125- MemSet ((LPVOID)(0x72BE4F + 2 ), 0x90 , 3 );
117+ MemPut<DWORD> ((LPVOID)(0x72BE37 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
118+ MemPut<DWORD> ((LPVOID)(0x72BE1F + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
119+ MemPut<DWORD> ((LPVOID)(0x72BE4F + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
126120
127121 MemPutFast<float >(0xC812FC , fAmount );
128122 return true ;
129123}
130124
131125bool CWeatherSA::ResetFog ()
132126{
133- BYTE originalCodes[ 3 ] = { 0xFC , 0x12 , 0xC8 } ;
134- MemCpy ((LPVOID)(0x72BE37 + 2 ), &originalCodes, 3 );
135- MemCpy ((LPVOID)(0x72BE1F + 2 ), &originalCodes, 3 );
136- MemCpy ((LPVOID)(0x72BE4F + 2 ), &originalCodes, 3 );
127+ static constexpr DWORD originalAddr = 0x00C812FC ;
128+ MemPut<DWORD> ((LPVOID)(0x72BE37 + 2 ), originalAddr );
129+ MemPut<DWORD> ((LPVOID)(0x72BE1F + 2 ), originalAddr );
130+ MemPut<DWORD> ((LPVOID)(0x72BE4F + 2 ), originalAddr );
137131 return true ;
138132}
139133
@@ -144,18 +138,18 @@ float CWeatherSA::GetRainFog() const
144138
145139bool CWeatherSA::SetRainFog (float fAmount )
146140{
147- MemSet ((LPVOID)(0x72ADD8 + 2 ), 0x90 , 3 );
148- MemSet ((LPVOID)(0x72ADE4 + 2 ), 0x90 , 3 );
141+ MemPut<DWORD> ((LPVOID)(0x72ADD8 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
142+ MemPut<DWORD> ((LPVOID)(0x72ADE4 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
149143
150144 MemPutFast<float >(0xC81410 , fAmount );
151145 return true ;
152146}
153147
154148bool CWeatherSA::ResetRainFog ()
155149{
156- BYTE originalCodes[ 3 ] = { 0x10 , 0x14 , 0xC8 } ;
157- MemCpy ((LPVOID)(0x72ADD8 + 2 ), &originalCodes, 3 );
158- MemCpy ((LPVOID)(0x72ADE4 + 2 ), &originalCodes, 3 );
150+ static constexpr DWORD originalAddr = 0x00C81410 ;
151+ MemPut<DWORD> ((LPVOID)(0x72ADD8 + 2 ), originalAddr );
152+ MemPut<DWORD> ((LPVOID)(0x72ADE4 + 2 ), originalAddr );
159153 return true ;
160154}
161155
@@ -166,20 +160,20 @@ float CWeatherSA::GetWaterFog() const
166160
167161bool CWeatherSA::SetWaterFog (float fAmount )
168162{
169- MemSet ((LPVOID)(0x72C35C + 2 ), 0x90 , 3 );
170- MemSet ((LPVOID)(0x72C38E + 2 ), 0x90 , 3 );
171- MemSet ((LPVOID)(0x72C36F + 2 ), 0x90 , 3 );
163+ MemPut<DWORD> ((LPVOID)(0x72C35C + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
164+ MemPut<DWORD> ((LPVOID)(0x72C38E + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
165+ MemPut<DWORD> ((LPVOID)(0x72C36F + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
172166
173167 MemPutFast<float >(0xC81338 , fAmount );
174168 return true ;
175169}
176170
177171bool CWeatherSA::ResetWaterFog ()
178172{
179- BYTE originalCodes[ 3 ] = { 0x38 , 0x13 , 0xC8 } ;
180- MemCpy ((LPVOID)(0x72C35C + 2 ), &originalCodes, 3 );
181- MemCpy ((LPVOID)(0x72C38E + 2 ), &originalCodes, 3 );
182- MemCpy ((LPVOID)(0x72C36F + 2 ), &originalCodes, 3 );
173+ static constexpr DWORD originalAddr = 0x00C81338 ;
174+ MemPut<DWORD> ((LPVOID)(0x72C35C + 2 ), originalAddr );
175+ MemPut<DWORD> ((LPVOID)(0x72C38E + 2 ), originalAddr );
176+ MemPut<DWORD> ((LPVOID)(0x72C36F + 2 ), originalAddr );
183177 return true ;
184178}
185179
@@ -190,20 +184,20 @@ float CWeatherSA::GetSandstorm() const
190184
191185bool CWeatherSA::SetSandstorm (float fAmount )
192186{
193- MemSet ((LPVOID)(0x72A4B6 + 1 ), 0x90 , 3 );
194- MemSet ((LPVOID)(0x72BCEB + 1 ), 0x90 , 3 );
195- MemSet ((LPVOID)(0x72BD0B + 2 ), 0x90 , 3 );
187+ MemPut<DWORD> ((LPVOID)(0x72A4B6 + 1 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
188+ MemPut<DWORD> ((LPVOID)(0x72BCEB + 1 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
189+ MemPut<DWORD> ((LPVOID)(0x72BD0B + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
196190
197191 MemPutFast<float >(0xC812F4 , fAmount );
198192 return true ;
199193}
200194
201195bool CWeatherSA::ResetSandstorm ()
202196{
203- BYTE originalCodes[ 3 ] = { 0xF4 , 0x12 , 0xC8 } ;
204- MemCpy ((LPVOID)(0x72A4B6 + 1 ), &originalCodes, 3 );
205- MemCpy ((LPVOID)(0x72BCEB + 1 ), &originalCodes, 3 );
206- MemCpy ((LPVOID)(0x72BD0B + 2 ), &originalCodes, 3 );
197+ static constexpr DWORD originalAddr = 0x00C812F4 ;
198+ MemPut<DWORD> ((LPVOID)(0x72A4B6 + 1 ), originalAddr );
199+ MemPut<DWORD> ((LPVOID)(0x72BCEB + 1 ), originalAddr );
200+ MemPut<DWORD> ((LPVOID)(0x72BD0B + 2 ), originalAddr );
207201 return true ;
208202}
209203
@@ -214,17 +208,17 @@ float CWeatherSA::GetRainbow() const
214208
215209bool CWeatherSA::SetRainbow (float fAmount )
216210{
217- MemSet ((LPVOID)(0x72BF51 + 2 ), 0x90 , 3 );
218- MemSet ((LPVOID)(0x72BF59 + 2 ), 0x90 , 3 );
211+ MemPut<DWORD> ((LPVOID)(0x72BF51 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
212+ MemPut<DWORD> ((LPVOID)(0x72BF59 + 2 ), (DWORD)&WEATHER_FAKE_ACCUMULATOR );
219213
220214 MemPutFast<float >(0xC812E4 , fAmount );
221215 return true ;
222216}
223217
224218bool CWeatherSA::ResetRainbow ()
225219{
226- BYTE originalCodes[ 3 ] = { 0xE4 , 0x12 , 0xC8 } ;
227- MemCpy ((LPVOID)(0x72BF51 + 2 ), &originalCodes, 3 );
228- MemCpy ((LPVOID)(0x72BF59 + 2 ), &originalCodes, 3 );
220+ static constexpr DWORD originalAddr = 0x00C812E4 ;
221+ MemPut<DWORD> ((LPVOID)(0x72BF51 + 2 ), originalAddr );
222+ MemPut<DWORD> ((LPVOID)(0x72BF59 + 2 ), originalAddr );
229223 return true ;
230224}
0 commit comments