diff --git a/UnleashedRecomp/patches/fps_patches.cpp b/UnleashedRecomp/patches/fps_patches.cpp index afd07267..322073cf 100644 --- a/UnleashedRecomp/patches/fps_patches.cpp +++ b/UnleashedRecomp/patches/fps_patches.cpp @@ -195,3 +195,11 @@ bool SparkleLocusMidAsmHook() // This has the side effect of the locus particle eventually snapping to the rest position during pause, but it's better than vertices exploding. return App::s_deltaTime < (1.0 / 60.0); } + +void CEvilSonicContext_CStateWall_LeaveRotationMidAsmHook(PPCRegister& f1) +{ + // The code in the Werehog's "wall" state for leaving walls adds a constant + // value of 0.05 to his transform every frame. This makes the value respect + // delta time whilst maintaining the original behaviour at 30 FPS. + f1.f64 = f1.f64 * (std::min(App::s_deltaTime, 1.0 / 15.0) / (1.0 / 30.0)); +} diff --git a/UnleashedRecompLib/config/SWA.toml b/UnleashedRecompLib/config/SWA.toml index eb871b8a..5063e712 100644 --- a/UnleashedRecompLib/config/SWA.toml +++ b/UnleashedRecompLib/config/SWA.toml @@ -1141,3 +1141,15 @@ registers = ["r3"] name = "EndingTextPositionMidAsmHook" address = 0x82580168 registers = ["r31", "f13"] + +# Wall Leave - Left +[[midasm_hook]] +name = "CEvilSonicContext_CStateWall_LeaveRotationMidAsmHook" +address = 0x824067BC +registers = ["f1"] + +# Wall Leave - Right +[[midasm_hook]] +name = "CEvilSonicContext_CStateWall_LeaveRotationMidAsmHook" +address = 0x82406774 +registers = ["f1"]