Skip to content

Commit a35545c

Browse files
ReimousTHReimousTH
authored andcommitted
More API
PostureCommon(Recreation), 100.0% *Testing *Cleanup 1 *Attempt to fix Shadow KDV Glider Bug *Vehicle Enter on Spawn Fixed (Adjusted m_radius for Zock a little, depends on fps) *Deque class (not tested) *Entity & EntityRef & EntityWrapper (all of them fixed) *Config::DisableEdgeGrabLeftover -> Edge Oscallation experimental fix *BodyHavok Experimental Delta Fix *Silver Psycho Fix(Removed due BodyHavok Fix) *Aqa Mercury API *Cleanup 2 closes issue #96 closes issue #33 *New Code Config::AlwaysResetSpringState *classes have been updated : Object2, CommonObject, *Fixed SoX::AI::StateMachine, new class SoX::AI::State,Player::State::CommonSprintTemplate closes issue #26 *New Codes : AllowSpinDashJump, DisableMachStateLockInput(Blue Gem), AlwaysBlueGem(allow to using blue for states like spindash, kick ...) RTTI API Graphics API Particle API
1 parent 3e2ad7c commit a35545c

File tree

352 files changed

+13987
-383
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

352 files changed

+13987
-383
lines changed

MarathonRecomp/api/Marathon.h

Lines changed: 262 additions & 0 deletions
Large diffs are not rendered by default.

MarathonRecomp/api/Marathon.inl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <cpu/guest_stack_var.h>
4+
#include <cpu/guest_heap_var.h>
45
#include <kernel/function.h>
56

67
constexpr float RAD2DEGf = 57.2958f;
@@ -24,6 +25,9 @@ constexpr double DEG2RAD = 0.01745329238474369;
2425
#define MARATHON_VIRTUAL_FUNCTION(returnType, virtualIndex, ...) \
2526
GuestToHostFunction<returnType>(*(be<uint32_t>*)(g_memory.Translate(*(be<uint32_t>*)(this) + (4 * virtualIndex))), __VA_ARGS__)
2627

28+
#define MARATHON_CALL_VIRTUAL_FUNCTION(base, returnType, func, ...) \
29+
GuestToHostFunction<returnType>((Vftable*)(static_cast<base*>(this)->m_pVftable.get())->*func, ##__VA_ARGS__)
30+
2731
struct marathon_null_ctor {};
2832

2933
inline std::vector<std::string_view> ParseTextVariables(const char* pVariables)
@@ -138,3 +142,13 @@ inline void printU16(const uint16_t* str, bool endianSwap = false)
138142

139143
printf("\n");
140144
}
145+
146+
struct MARATHON_NULL_CTOR {};
147+
148+
struct MARATHON_STD_MAP_CONST_CHAR_COMPARE
149+
{
150+
bool operator()(xpointer<const char> lhs, xpointer<const char> rhs) const
151+
{
152+
return std::strcmp(lhs.get(), rhs.get()) < 0;
153+
}
154+
};

MarathonRecomp/api/Sonicteam/ActorManager.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,13 @@ namespace Sonicteam
88
class ActorManager
99
{
1010
public:
11-
be<uint32_t> m_aActorIDs[0xFFFF];
12-
xpointer<Actor> m_aActors[0xFFFF];
13-
be<uint32_t> m_LastActorID;
14-
be<uint32_t> m_LastActorIndex;
15-
MARATHON_INSERT_PADDING(4);
16-
};
11+
be<uint32_t> m_ActorID[0xFFFF];
12+
xpointer<Actor> m_Actor[0xFFFF];
13+
be<uint32_t> m_LastActorID;
14+
be<uint32_t> m_LastActorIndex;
1715

18-
MARATHON_ASSERT_OFFSETOF(ActorManager, m_aActorIDs, 0x00);
19-
MARATHON_ASSERT_OFFSETOF(ActorManager, m_aActors, 0x3FFFC);
20-
MARATHON_ASSERT_OFFSETOF(ActorManager, m_LastActorID, 0x7FFF8);
21-
MARATHON_ASSERT_OFFSETOF(ActorManager, m_LastActorIndex, 0x7FFFC);
22-
MARATHON_ASSERT_SIZEOF(ActorManager, 0x80004);
16+
Sonicteam::Actor* FindActor(uint32_t ActorID);
17+
};
2318
}
19+
20+
#include "ActorManager.inl"
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#pragma once
2+
3+
namespace Sonicteam
4+
{
5+
inline Actor* ActorManager::FindActor(uint32_t ActorID)
6+
{
7+
unsigned int left = 0;
8+
unsigned int right = this->m_LastActorIndex - 1;
9+
int Index = 0;
10+
11+
while (left <= right) {
12+
unsigned int mid = left + (right - left) / 2;
13+
if (this->m_ActorID[mid] == ActorID) {
14+
Index = mid;
15+
break;
16+
}
17+
if (this->m_ActorID[mid] < ActorID) {
18+
left = mid + 1;
19+
}
20+
else {
21+
right = mid - 1;
22+
}
23+
}
24+
if (!this->m_Actor[Index]) return 0;
25+
return this->m_Actor[Index];
26+
}
27+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/Engine/Task.h>
5+
6+
namespace Sonicteam
7+
{
8+
class BasicIScriptParamsDesc
9+
{
10+
xpointer<void> m_pDefaultDesc; //points to static, (0x82..., NOT VFT )
11+
};
12+
//static 0x8202AC38 (??????)
13+
}

MarathonRecomp/api/Sonicteam/DocMarathonImp.h

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,50 @@
11
#pragma once
22

33
#include <Marathon.inl>
4+
#include <boost/smart_ptr/shared_ptr.h>
45
#include <Sonicteam/SoX/Engine/Doc.h>
56
#include <Sonicteam/SoX/Input/Manager.h>
6-
#include <boost/smart_ptr/shared_ptr.h>
7-
#include <api/stdx/vector.h>
7+
#include <Sonicteam/SoX/LinkNode.h>
8+
#include <Sonicteam/SoX/Thread.h>
9+
#include <Sonicteam/MyGraphicsDevice.h>
10+
#include <Sonicteam/RaderMapManager.h>
11+
#include <Sonicteam/Particles/ParticleManager.h>
12+
#include <stdx/vector.h>
813

914
namespace Sonicteam
1015
{
16+
class RenderTargetContainer;
17+
class SFXAgent;
18+
1119
class DocMarathonImp : public SoX::Engine::Doc
1220
{
1321
public:
14-
MARATHON_INSERT_PADDING(0x40);
15-
stdx::vector<boost::shared_ptr<SoX::Input::Manager>> m_vspInputManager;
22+
MARATHON_INSERT_PADDING(4);
23+
xpointer<MyGraphicsDevice> m_pMyGraphicsDevice;
24+
MARATHON_INSERT_PADDING(0x38);
25+
stdx::vector<boost::shared_ptr<SoX::Input::Manager>> m_vspInputManagers;
1626
MARATHON_INSERT_PADDING(0x24);
1727
bool m_VFrame;
18-
MARATHON_INSERT_PADDING(0x55B58);
28+
MARATHON_INSERT_PADDING(4);
29+
xpointer<RenderTargetContainer> m_pRenderTargetContainer;
30+
xpointer<SFXAgent> m_pSFXAgent;
31+
MARATHON_INSERT_PADDING(0x8);
32+
be<float> m_DocSpeed;
33+
be<uint32_t> m_PauseFlags;
34+
MARATHON_INSERT_PADDING(0x8);
35+
xpointer<SoX::LinkedList<SoX::Thread>> m_lnThread;
36+
MARATHON_INSERT_PADDING(0x288);
37+
xpointer<Particles::ParticleManager> m_pParticleManager;
38+
MARATHON_INSERT_PADDING(0x15D0);
39+
xpointer<RaderMapManager> m_pRaderMapManager;
40+
MARATHON_INSERT_PADDING(0x542D0);
1941
be<uint32_t> m_aPadIDs[4];
2042
MARATHON_INSERT_PADDING(0x2C);
2143
};
2244

23-
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_vspInputManager, 0x9C);
45+
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_DocSpeed, 0xE8);
46+
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_PauseFlags, 0xEC);
47+
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_vspInputManagers, 0x9C);
2448
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_VFrame, 0xD0);
2549
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_aPadIDs, 0x55C2C);
2650
MARATHON_ASSERT_SIZEOF(DocMarathonImp, 0x55C68);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/ObjectPsi.h>
5+
#include <Sonicteam/SoX/Math/Vector.h>
6+
7+
namespace Sonicteam
8+
{
9+
class EnemyPsiCommon : public ObjectPsi
10+
{
11+
public:
12+
xpointer<void> m_pFigure;
13+
be<float> m_Field2C;
14+
SoX::Math::Vector m_Velocity;
15+
SoX::Math::Vector m_Rotation;
16+
};
17+
18+
MARATHON_ASSERT_SIZEOF(EnemyPsiCommon, 0x50);
19+
MARATHON_ASSERT_OFFSETOF(EnemyPsiCommon, m_pFigure, 0x28);
20+
MARATHON_ASSERT_OFFSETOF(EnemyPsiCommon, m_Field2C, 0x2C);
21+
MARATHON_ASSERT_OFFSETOF(EnemyPsiCommon, m_Velocity, 0x30);
22+
MARATHON_ASSERT_OFFSETOF(EnemyPsiCommon, m_Rotation, 0x40);
23+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/GE1PE/RefCountObject.h>
5+
#include <stdx/map.h>
6+
#include <stdx/string.h>
7+
8+
namespace Sonicteam::GE1PE
9+
{
10+
class ParticleEngine;
11+
12+
struct EffectBankData
13+
{
14+
be<uint32_t> Field00;
15+
stdx::string Name;
16+
xpointer<void> pData1;
17+
xpointer<void> pData2;
18+
xpointer<void> pData3;
19+
stdx::map<stdx::string, be<uint32_t>> mEffectDataIndices;
20+
};
21+
22+
class EffectBank : public RefCountObject
23+
{
24+
public:
25+
xpointer<ParticleEngine> m_pParticleEngine;
26+
be<uint32_t> m_Field0C; // Index?
27+
xpointer<EffectBankData> m_pEffectBankA;
28+
};
29+
30+
MARATHON_ASSERT_OFFSETOF(EffectBankData, Field00, 0x00);
31+
MARATHON_ASSERT_OFFSETOF(EffectBankData, Name, 0x04);
32+
MARATHON_ASSERT_OFFSETOF(EffectBankData, pData1, 0x20);
33+
MARATHON_ASSERT_OFFSETOF(EffectBankData, pData2, 0x24);
34+
MARATHON_ASSERT_OFFSETOF(EffectBankData, pData3, 0x28);
35+
MARATHON_ASSERT_OFFSETOF(EffectBankData, mEffectDataIndices, 0x2C);
36+
MARATHON_ASSERT_SIZEOF(EffectBankData, 0x38);
37+
38+
MARATHON_ASSERT_OFFSETOF(EffectBank, m_pParticleEngine, 0x08);
39+
MARATHON_ASSERT_OFFSETOF(EffectBank, m_Field0C, 0x0C);
40+
MARATHON_ASSERT_OFFSETOF(EffectBank, m_pEffectBankA, 0x10);
41+
MARATHON_ASSERT_SIZEOF(EffectBank, 0x14);
42+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace Sonicteam::GE1PE
6+
{
7+
class EmitterListener
8+
{
9+
public:
10+
xpointer<void> m_pVftable;
11+
};
12+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/LinkNode.h>
5+
6+
namespace Sonicteam::GE1PE
7+
{
8+
class Effect;
9+
class Emitter;
10+
class Particle;
11+
class ParticleEngine;
12+
13+
class Manager
14+
{
15+
public:
16+
struct Vftable
17+
{
18+
be<uint32_t> fpDestroy;
19+
};
20+
21+
xpointer<Vftable> m_pVftable;
22+
xpointer<ParticleEngine> m_pParticleEngine;
23+
SoX::LinkNode<Manager> m_lnManager;
24+
SoX::LinkNode<void> m_lnField14;
25+
SoX::LinkNode<Particle> m_lnParticle;
26+
SoX::LinkNode<void> m_lnField2C;
27+
SoX::LinkNode<void> m_lnField38;
28+
SoX::LinkNode<Emitter> m_lnEmitter;
29+
SoX::LinkNode<Effect> m_lnEffect;
30+
SoX::LinkNode<Effect> m_lnField5C;
31+
MARATHON_INSERT_PADDING(0x24);
32+
};
33+
34+
MARATHON_ASSERT_OFFSETOF(Manager, m_pParticleEngine, 0x04);
35+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnManager, 0x08);
36+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnField14, 0x14);
37+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnParticle, 0x20);
38+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnField2C, 0x2C);
39+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnField38, 0x38);
40+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnEmitter, 0x44);
41+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnEffect, 0x50);
42+
MARATHON_ASSERT_OFFSETOF(Manager, m_lnField5C, 0x5C);
43+
}

0 commit comments

Comments
 (0)