12
12
#include " StdInc.h"
13
13
#include " CWeatherSA.h"
14
14
15
+ static float WEATHER_FAKE_ACCUMULATOR;
16
+
15
17
unsigned char CWeatherSA::Get ()
16
18
{
17
19
return *(unsigned char *)0xC81318 ; // CWeather::ForcedWeatherType
@@ -36,15 +38,8 @@ float CWeatherSA::GetAmountOfRain()
36
38
void CWeatherSA::SetAmountOfRain (float fAmount )
37
39
{
38
40
// 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);
48
43
49
44
MemSet ((void *)0x72BC72 , 0x90 , 5 );
50
45
@@ -55,12 +50,11 @@ void CWeatherSA::SetAmountOfRain(float fAmount)
55
50
void CWeatherSA::ResetAmountOfRain ()
56
51
{
57
52
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
-
61
53
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);
64
58
}
65
59
66
60
float CWeatherSA::GetWetRoads () const
@@ -70,22 +64,22 @@ float CWeatherSA::GetWetRoads() const
70
64
71
65
bool CWeatherSA::SetWetRoads (float fAmount )
72
66
{
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 );
77
71
78
72
MemPutFast<float >(0xC81308 , fAmount );
79
73
return true ;
80
74
}
81
75
82
76
bool CWeatherSA::ResetWetRoads ()
83
77
{
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 );
89
83
return true ;
90
84
}
91
85
@@ -96,20 +90,20 @@ float CWeatherSA::GetFoggyness() const
96
90
97
91
bool CWeatherSA::SetFoggyness (float fAmount )
98
92
{
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 );
102
96
103
97
MemPutFast<float >(0xC81300 , fAmount );
104
98
return true ;
105
99
}
106
100
107
101
bool CWeatherSA::ResetFoggyness ()
108
102
{
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 );
113
107
return true ;
114
108
}
115
109
@@ -120,20 +114,20 @@ float CWeatherSA::GetFog() const
120
114
121
115
bool CWeatherSA::SetFog (float fAmount )
122
116
{
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 );
126
120
127
121
MemPutFast<float >(0xC812FC , fAmount );
128
122
return true ;
129
123
}
130
124
131
125
bool CWeatherSA::ResetFog ()
132
126
{
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 );
137
131
return true ;
138
132
}
139
133
@@ -144,18 +138,18 @@ float CWeatherSA::GetRainFog() const
144
138
145
139
bool CWeatherSA::SetRainFog (float fAmount )
146
140
{
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 );
149
143
150
144
MemPutFast<float >(0xC81410 , fAmount );
151
145
return true ;
152
146
}
153
147
154
148
bool CWeatherSA::ResetRainFog ()
155
149
{
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 );
159
153
return true ;
160
154
}
161
155
@@ -166,20 +160,20 @@ float CWeatherSA::GetWaterFog() const
166
160
167
161
bool CWeatherSA::SetWaterFog (float fAmount )
168
162
{
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 );
172
166
173
167
MemPutFast<float >(0xC81338 , fAmount );
174
168
return true ;
175
169
}
176
170
177
171
bool CWeatherSA::ResetWaterFog ()
178
172
{
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 );
183
177
return true ;
184
178
}
185
179
@@ -190,20 +184,20 @@ float CWeatherSA::GetSandstorm() const
190
184
191
185
bool CWeatherSA::SetSandstorm (float fAmount )
192
186
{
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 );
196
190
197
191
MemPutFast<float >(0xC812F4 , fAmount );
198
192
return true ;
199
193
}
200
194
201
195
bool CWeatherSA::ResetSandstorm ()
202
196
{
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 );
207
201
return true ;
208
202
}
209
203
@@ -214,17 +208,17 @@ float CWeatherSA::GetRainbow() const
214
208
215
209
bool CWeatherSA::SetRainbow (float fAmount )
216
210
{
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 );
219
213
220
214
MemPutFast<float >(0xC812E4 , fAmount );
221
215
return true ;
222
216
}
223
217
224
218
bool CWeatherSA::ResetRainbow ()
225
219
{
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 );
229
223
return true ;
230
224
}
0 commit comments