@@ -36,6 +36,7 @@ void Hooks::init() {
3636
3737 ADD_GD_HOOK (0x1f4ff0 , PlayerObject_ringJump);
3838 ADD_GD_HOOK (0xef0e0 , GameObject_activateObject);
39+ ADD_GD_HOOK (0x10ed50 , GJBaseGameLayer_bumpPlayer);
3940}
4041
4142void __fastcall Hooks::CCScheduler_update_H (CCScheduler* self, int , float dt) {
@@ -180,20 +181,34 @@ bool __fastcall Hooks::PauseLayer_init_H(gd::PauseLayer* self, int) {
180181 return false ;
181182}
182183
183- void __fastcall Hooks::PlayerObject_ringJump_H (gd::PlayerObject* self, int , gd::GameObject* ring) {
184- PlayerObject_ringJump (self, ring);
185- auto & rs = ReplaySystem::get_instance ();
184+ void _handle_activated_object (bool a, bool b, gd::GameObject* object) {
186185 auto play_layer = gd::GameManager::sharedState ()->getPlayLayer ();
187- if (play_layer && play_layer->is_practice_mode && rs.is_recording () && ring->m_hasBeenActivated ) {
188- rs.get_practice_fixes ().add_activated_object (ring);
186+ auto & rs = ReplaySystem::get_instance ();
187+ if (play_layer && play_layer->is_practice_mode && rs.is_recording ()) {
188+ if (object->m_hasBeenActivated && !a)
189+ rs.get_practice_fixes ().add_activated_object (object);
190+ if (object->m_hasBeenActivatedP2 && !b)
191+ rs.get_practice_fixes ().add_activated_object_p2 (object);
189192 }
190193}
191194
195+ void __fastcall Hooks::PlayerObject_ringJump_H (gd::PlayerObject* self, int , gd::GameObject* ring) {
196+ bool a = ring->m_hasBeenActivated ;
197+ bool b = ring->m_hasBeenActivatedP2 ;
198+ PlayerObject_ringJump (self, ring);
199+ _handle_activated_object (a, b, ring);
200+ }
201+
192202void __fastcall Hooks::GameObject_activateObject_H (gd::GameObject* self, int , gd::PlayerObject* player) {
203+ bool a = self->m_hasBeenActivated ;
204+ bool b = self->m_hasBeenActivatedP2 ;
193205 GameObject_activateObject (self, player);
194- auto & rs = ReplaySystem::get_instance ();
195- auto play_layer = gd::GameManager::sharedState ()->getPlayLayer ();
196- if (play_layer && play_layer->is_practice_mode && rs.is_recording () && self->m_hasBeenActivated ) {
197- rs.get_practice_fixes ().add_activated_object (self);
198- }
206+ _handle_activated_object (a, b, self);
207+ }
208+
209+ void __fastcall Hooks::GJBaseGameLayer_bumpPlayer_H (gd::GJBaseGameLayer* self, int , gd::PlayerObject* player, gd::GameObject* object) {
210+ bool a = object->m_hasBeenActivated ;
211+ bool b = object->m_hasBeenActivatedP2 ;
212+ GJBaseGameLayer_bumpPlayer (self, player, object);
213+ _handle_activated_object (a, b, object);
199214}
0 commit comments