From c07cecdcb44df1931f1c221d5cfd509615e3e21e Mon Sep 17 00:00:00 2001 From: NetsuNegi39 Date: Tue, 25 Feb 2025 21:48:48 +0800 Subject: [PATCH] fix grounded jumpjet's bug --- src/Misc/Hooks.BugFixes.cpp | 40 +++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/Misc/Hooks.BugFixes.cpp b/src/Misc/Hooks.BugFixes.cpp index b4a7d9c6da..01e972f2ef 100644 --- a/src/Misc/Hooks.BugFixes.cpp +++ b/src/Misc/Hooks.BugFixes.cpp @@ -1225,21 +1225,27 @@ size_t __fastcall HexStr2Int_replacement(const char* str) DEFINE_JUMP(CALL, 0x6E8305, GET_OFFSET(HexStr2Int_replacement)); // TaskForce DEFINE_JUMP(CALL, 0x6E5FA6, GET_OFFSET(HexStr2Int_replacement)); // TagType -DEFINE_HOOK(0x4DB36C, FootClass_Limbo_RemoveSensorsAt, 0x5) +DEFINE_HOOK(0x54BA1A, JumpjetLocomotionClass_ProcessGrounded_AddSensors, 0x5) { - enum { SkipGameCode = 0x4DB37C }; + GET(FootClass*, pLinkedTo, EAX); - GET(FootClass*, pThis, EDI); + if (pLinkedTo->GetTechnoType()->SensorsSight) + pLinkedTo->AddSensorsAt(pLinkedTo->GetMapCoords()); - if (pThis->LastFlightMapCoords != CellStruct::Empty) - pThis->RemoveSensorsAt(pThis->LastFlightMapCoords); - else - pThis->RemoveSensorsAt(pThis->LastMapCoords); + return 0; +} - return SkipGameCode; +DEFINE_HOOK(0x54C9D7, JumpjetLocomotionClass_ProcessDescending_RemoveSensors, 0x5) +{ + GET(FootClass*, pLinkedTo, ECX); + + if (pLinkedTo->GetTechnoType()->SensorsSight) + pLinkedTo->RemoveSensorsAt(pLinkedTo->LastFlightMapCoords); + + return 0; } -DEFINE_HOOK(0x54D06F, JumpjetLocomotionClass_ProcessCrashing_RemoveSensorsAt, 0x5) +DEFINE_HOOK(0x54D06F, JumpjetLocomotionClass_ProcessCrashing_RemoveSensors, 0x5) { GET(FootClass*, pLinkedTo, EAX); @@ -1249,7 +1255,21 @@ DEFINE_HOOK(0x54D06F, JumpjetLocomotionClass_ProcessCrashing_RemoveSensorsAt, 0x return 0; } -DEFINE_HOOK(0x4DBEE7, FootClass_SetOwningHouse_RemoveSensorsAt, 0x6) +DEFINE_HOOK(0x4DB36C, FootClass_Limbo_RemoveSensors, 0x5) +{ + enum { SkipGameCode = 0x4DB37C }; + + GET(FootClass*, pThis, EDI); + + if (pThis->LastFlightMapCoords != CellStruct::Empty) + pThis->RemoveSensorsAt(pThis->LastFlightMapCoords); + else + pThis->RemoveSensorsAt(pThis->LastMapCoords); + + return SkipGameCode; +} + +DEFINE_HOOK(0x4DBEE7, FootClass_SetOwningHouse_RemoveSensors, 0x6) { enum { SkipGameCode = 0x4DBF01 };