Skip to content

Commit 81dde47

Browse files
author
ReimousTH
committed
Patch
1 parent b3fe6a3 commit 81dde47

4 files changed

Lines changed: 57 additions & 1 deletion

File tree

MarathonRecomp/api/Sonicteam/Player/Object.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,25 @@
88
#include <Sonicteam/SoX/RefCountObject.h>
99
#include <Sonicteam/SoX/RefSharedPointer.h>
1010
#include <Sonicteam/Player/RootFrame.h>
11+
#include <Sonicteam/SoX/Math/Vector.h>
1112

1213
namespace Sonicteam::Player
1314
{
15+
template <const uint32_t ID>
16+
struct ObjectMessage_Base:Sonicteam::SoX::Message
17+
{
18+
be<uint32_t> m_ID = ID;
19+
static uint32_t GetID()
20+
{
21+
return ID;
22+
}
23+
};
24+
25+
struct ObjectMessage_SuckPlayerToPoint:ObjectMessage_Base<0x11034A>
26+
{
27+
Sonicteam::SoX::Math::Vector m_Point;
28+
};
29+
1430
class Object : public Actor
1531
{
1632
public:

MarathonRecomp/api/Sonicteam/SoX/MessageReceiver.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
namespace Sonicteam::SoX
44
{
5-
struct Message;
5+
struct Message
6+
{
7+
8+
};
69

710
class MessageReceiver
811
{
912
public:
1013
struct Vftable
1114
{
15+
be<uint32_t> Destroy;
1216
be<uint32_t> OnMessageRecieved;
1317
};
1418

MarathonRecomp/patches/fps_patches.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,27 @@ void ObjEspSwing_DecayRateFix(PPCRegister& f0, PPCRegister& f13, PPCRegister& de
8686
{
8787
f0.f64 = float(f13.f64 * pow(pow(f0.f64, 60.0), deltaTime.f64));
8888
}
89+
90+
struct ObjectMessage_SuckPlayerToPointEX :public Sonicteam::Player::ObjectMessage_SuckPlayerToPoint
91+
{
92+
public:
93+
be<float> m_delta;
94+
};
95+
96+
void ObjectInputWarp_MessageToPlayerExtraDelta(PPCRegister& Phantom, PPCRegister& Message, PPCRegister& delta)
97+
{
98+
auto pPhantom = (Sonicteam::SoX::Physics::Phantom*)(g_memory.Translate(Phantom.u32));
99+
auto pMessage = (Sonicteam::Player::ObjectMessage_SuckPlayerToPoint*)(g_memory.Translate(Message.u32));
100+
auto pNewMessage = (ObjectMessage_SuckPlayerToPointEX*)g_userHeap.Alloc(sizeof(ObjectMessage_SuckPlayerToPointEX));
101+
pNewMessage->m_ID = pMessage->m_ID;
102+
pNewMessage->m_Point = pMessage->m_Point;
103+
pNewMessage->m_delta = delta.f64;
104+
pPhantom->OnMessageRecieved(pNewMessage);
105+
g_userHeap.Free(pNewMessage);
106+
}
107+
108+
void ObjectPlayer_Message0x1104AExtraDelta(PPCRegister& delta, PPCRegister& Message)
109+
{
110+
auto pMessage = (ObjectMessage_SuckPlayerToPointEX*)(g_memory.Translate(Message.u32));
111+
delta.f64 = pMessage->m_delta;
112+
}

MarathonRecompLib/config/Marathon.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,15 @@ name = "ObjEspSwing_DecayRateFix"
439439
address = 0x8232A4D0
440440
registers = ["f0", "f13", "f28"]
441441
jump_address = 0x8232A4D4
442+
443+
[[midasm_hook]]
444+
name = "ObjectInputWarp_MessageToPlayerExtraDelta"
445+
address = 0x82389E48
446+
registers = ["r3","r4","f25"]
447+
jump_address = 0x82389E4C
448+
449+
[[midasm_hook]]
450+
name = "ObjectPlayer_Message0x1104AExtraDelta"
451+
address = 0x8219B65C
452+
registers = ["f31","r28"]
453+
after_instruction = true

0 commit comments

Comments
 (0)