@@ -16,6 +16,7 @@ PPC_FUNC(sub_82587AA8)
1616void PostureControl_RotationSpeedFix (PPCRegister& c_rotation_speed, PPCRegister& stack)
1717{
1818 auto deltaTime = *(be<double >*)g_memory.Translate (stack.u32 + 0x200 );
19+
1920 c_rotation_speed.f64 = (c_rotation_speed.f64 * (60.0 * deltaTime));
2021}
2122
@@ -86,3 +87,37 @@ void ObjEspSwing_DecayRateFix(PPCRegister& f0, PPCRegister& f13, PPCRegister& de
8687{
8788 f0.f64 = float (f13.f64 * pow (pow (f0.f64 , 60.0 ), deltaTime.f64 ));
8889}
90+
91+ struct MsgSuckPlayerEx : public Sonicteam ::Message::MsgSuckPlayer
92+ {
93+ be<float > DeltaTime;
94+ };
95+
96+ void ObjectInputWarp_ExtendMsgSuckPlayer (PPCRegister& phantom, PPCRegister& message, PPCRegister& deltaTime)
97+ {
98+ auto pPhantom = (Sonicteam::SoX::Physics::Phantom*)g_memory.Translate (phantom.u32 );
99+ auto pMessage = (Sonicteam::Message::MsgSuckPlayer*)g_memory.Translate (message.u32 );
100+
101+ auto pNewMessage = (MsgSuckPlayerEx*)g_userHeap.Alloc (sizeof (MsgSuckPlayerEx));
102+ pNewMessage->ID = pMessage->ID ;
103+ pNewMessage->Point = pMessage->Point ;
104+ pNewMessage->DeltaTime = deltaTime.f64 ;
105+
106+ pPhantom->OnMessageReceived (pNewMessage);
107+
108+ g_userHeap.Free (pNewMessage);
109+ }
110+
111+ void PlayerObject_ProcessMsgSuckPlayer_FixForce (PPCRegister& message, PPCRegister& force)
112+ {
113+ auto pMessage = (MsgSuckPlayerEx*)g_memory.Translate (message.u32 );
114+
115+ force.f64 = pow (force.f64 , pMessage->DeltaTime * 60.0 );
116+ }
117+
118+ void PlayerObject_ProcessMsgSuckPlayer_FixDeltaTime (PPCRegister& message, PPCRegister& deltaTime)
119+ {
120+ auto pMessage = (MsgSuckPlayerEx*)g_memory.Translate (message.u32 );
121+
122+ deltaTime.f64 = pMessage->DeltaTime ;
123+ }
0 commit comments