Skip to content

Commit 5ad26b0

Browse files
committed
tweak(gta-core-five): move increase patch & refactor
Moved to the PedAlternateVariationCache.cpp Refactor the AlternatesVariationsPatternPair
1 parent 5698ebd commit 5ad26b0

File tree

2 files changed

+32
-33
lines changed

2 files changed

+32
-33
lines changed

code/components/gta-core-five/src/PatchPedAlternateVariations.cpp

-33
This file was deleted.

code/components/gta-core-five/src/PedAlternateVariationCache.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
// We're fixing it by caching results beforehand, when the game loads variation data files.
2323
//
2424

25+
const static int8_t kAlternatesSizeof = 8;
26+
const static int16_t kMaxNumAlternates = 160;
27+
2528
struct AlternateVariationsSwitchAsset // 0x1BC82D17
2629
{
2730
uint8_t component;
@@ -57,6 +60,12 @@ struct CAlternateVariations
5760
atArray<AlternateVariationsPed> peds;
5861
};
5962

63+
struct AlternatesVariationsPatternPair
64+
{
65+
std::string_view pattern;
66+
int arrayCapacityoffset;
67+
};
68+
6069
using TAlternateVariationsSwitchSet = std::set<AlternateVariationsSwitch*>;
6170
using TAlternateVariationsCache = std::map<std::tuple<uint32_t, uint32_t, char, char>, TAlternateVariationsSwitchSet>;
6271

@@ -192,6 +201,12 @@ static void UnloadAlternateVariationsFile(void* data)
192201
}
193202
}
194203

204+
static size_t GetExpectedAlternatesAtArrayCapacityForBuild()
205+
{
206+
if (xbr::IsGameBuildOrGreater<2189>()) return 160;
207+
return 128;
208+
}
209+
195210
static HookFunction initFunction([]()
196211
{
197212
g_alternateVariations = hook::get_address<decltype(g_alternateVariations)>(hook::get_pattern("85 C0 7E 28 4C 8B 0D", 7));
@@ -212,4 +227,21 @@ static HookFunction initFunction([]()
212227
{
213228
ClearAlternateVariationsCache();
214229
});
230+
231+
std::initializer_list<AlternatesVariationsPatternPair> alternateVariationsLocations = {
232+
{ "B8 ? ? ? ? 48 2B E0 48 8D 4C 24 ? 8B 01 48 8B B6", 0x25 },
233+
{ "B8 ? ? ? ? 48 2B E0 48 8D 4C 24 ? 8B 01 44 8B 4D", 0x22 },
234+
{ "B8 ? ? ? ? 48 2B E0 48 8D 4C 24 ? 8B 01 4C 8B BB", 0x27 },
235+
{ "B8 ? ? ? ? 48 2B E0 48 8D 44 24 ? 48 89 45 ? 8B 00 44 88 5D", 0x65 },
236+
{ "B8 ? ? ? ? 48 2B E0 48 8D 4C 24 ? 8B 01 8B 9C B7", 0x28 }
237+
};
238+
239+
for(auto& entry : alternateVariationsLocations)
240+
{
241+
auto location = hook::get_pattern<char>(entry.pattern);
242+
auto prevAlternatesAtArrayCapacity = *(int16_t*)(location + entry.arrayCapacityoffset);
243+
assert(prevAlternatesAtArrayCapacity == GetExpectedAlternatesAtArrayCapacityForBuild());
244+
hook::put<uint32_t>(location + 0x1, kMaxNumAlternates * kAlternatesSizeof);
245+
hook::put<int16_t>(location + entry.arrayCapacityoffset, kMaxNumAlternates);
246+
}
215247
});

0 commit comments

Comments
 (0)