@@ -240,6 +240,68 @@ namespace phMaterialGta
240240 }
241241}
242242
243+ namespace ShockingEvents
244+ {
245+ enum eShockingEvents
246+ {
247+ SexyCar,
248+ RunningPed,
249+ VisibleWeapon,
250+ VisibleWeaponMELEE,
251+ VisibleWeaponTHROWN,
252+ VisibleWeaponHANDGUN,
253+ VisibleWeaponSHOTGUN,
254+ VisibleWeaponSMG,
255+ VisibleWeaponSNIPER,
256+ VisibleWeaponRIFLE,
257+ VisibleWeaponHEAVY,
258+ HornSounded,
259+ PlaneFlyby,
260+ SeenCarStolen,
261+ HelicopterOverhead,
262+ SeenMeleeAction,
263+ SeenGangFight,
264+ PedRunOver,
265+ PanickedPed,
266+ InjuredPed,
267+ DeadBody,
268+ DrivingOnPavement,
269+ MadDriver,
270+ CarCrash,
271+ CarPileUp,
272+ Fire,
273+ GunshotFired,
274+ PedShot,
275+ GunFight,
276+ Explosion,
277+ };
278+
279+ constexpr auto ShockingEventIndexSize = 4 ;
280+ constexpr auto ShockingEventDataFullSize = 52 ;
281+ constexpr auto ShockingEventSize = ShockingEventDataFullSize - ShockingEventIndexSize;
282+
283+ void ** pShockingEvents = nullptr ;
284+ static std::array<uint8_t , ShockingEventSize> originalDrivingOnPavement;
285+ static std::array<uint8_t , ShockingEventSize> originalMadDriver;
286+
287+ static void SetShockingEventsParams ()
288+ {
289+ if (bEnableSnow)
290+ {
291+ memcpy (originalDrivingOnPavement.data (), pShockingEvents + ((ShockingEventDataFullSize * DrivingOnPavement) / sizeof (void *)) + (ShockingEventIndexSize / sizeof (void *)), ShockingEventSize);
292+ memcpy (originalMadDriver.data (), pShockingEvents + ((ShockingEventDataFullSize * MadDriver) / sizeof (void *)) + (ShockingEventIndexSize / sizeof (void *)), ShockingEventSize);
293+
294+ memset (pShockingEvents + ((ShockingEventDataFullSize * DrivingOnPavement) / sizeof (void *)) + (ShockingEventIndexSize / sizeof (void *)), 0 , ShockingEventSize);
295+ memset (pShockingEvents + ((ShockingEventDataFullSize * MadDriver) / sizeof (void *)) + (ShockingEventIndexSize / sizeof (void *)), 0 , ShockingEventSize);
296+ }
297+ else
298+ {
299+ memcpy (pShockingEvents + ((ShockingEventDataFullSize * DrivingOnPavement) / sizeof (void *)) + (ShockingEventIndexSize / sizeof (void *)), originalDrivingOnPavement.data (), ShockingEventSize);
300+ memcpy (pShockingEvents + ((ShockingEventDataFullSize * MadDriver) / sizeof (void *)) + (ShockingEventIndexSize / sizeof (void *)), originalMadDriver.data (), ShockingEventSize);
301+ }
302+ }
303+ }
304+
243305class Snow
244306{
245307private:
@@ -692,6 +754,7 @@ public:
692754 CTimeCycle::Initialise ();
693755 SetRainRenderParams ();
694756 phMaterialGta::SetMaterialsDatParams ();
757+ ShockingEvents::SetShockingEventsParams ();
695758 }
696759
697760 Snow ()
@@ -890,6 +953,9 @@ public:
890953
891954 pattern = find_pattern (" 81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 56 8B F1 8D 4C 24" , " 81 EC ? ? ? ? A1 ? ? ? ? 33 C4 89 84 24 ? ? ? ? 56 F3 0F 10 84 24" );
892955 phMaterialGta::shparse = safetyhook::create_inline (pattern.get_first (), phMaterialGta::parse);
956+
957+ pattern = find_pattern (" 34 05 ? ? ? ? 56 8B C8 E8 ? ? ? ? 6A" , " 81 C1 ? ? ? ? E8 ? ? ? ? 6A ? 55" );
958+ ShockingEvents::pShockingEvents = *pattern.get_first <void **>(2 );
893959
894960 // LCS Snow test
895961 // CRenderPhaseDrawScene::onBeforePostFX() += []()
0 commit comments