Skip to content

Commit ad49ce0

Browse files
ReimousTHReimousTH
authored andcommitted
MyPE & Particles & Spanverse API
1 parent 900a838 commit ad49ce0

22 files changed

+774
-1
lines changed

MarathonRecomp/api/Marathon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
#include "Sonicteam/ObjectVehicle.h"
8787
#include "Sonicteam/ObjectVehicleBike.h"
8888
#include "Sonicteam/Particles/Particle.h"
89+
#include "Sonicteam/Particles/ParticleManager.h"
8990
#include "Sonicteam/Particles/ParticleRef.h"
9091
#include "Sonicteam/PauseAdapter.h"
9192
#include "Sonicteam/PauseTask.h"

MarathonRecomp/api/Sonicteam/DocMarathonImp.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <Sonicteam/MyGraphicsDevice.h>
88
#include <Sonicteam/RaderMapManager.h>
99
#include <Sonicteam/RenderTargetContainer.h>
10+
#include <Sonicteam/Particles/ParticleManager.h>
1011
#include <stdx/vector.h>
1112

1213
namespace Sonicteam
@@ -22,7 +23,9 @@ namespace Sonicteam
2223
bool m_VFrame;
2324
MARATHON_INSERT_PADDING(4);
2425
xpointer<RenderTargetContainer> m_pRenderTargetContainer;
25-
MARATHON_INSERT_PADDING(0x187C);
26+
MARATHON_INSERT_PADDING(0x2A8);
27+
xpointer<Particles::ParticleManager> m_pParticleManager;
28+
MARATHON_INSERT_PADDING(0x15D0);
2629
xpointer<RaderMapManager> m_pRaderMapManager;
2730
MARATHON_INSERT_PADDING(0x542D0);
2831
be<uint32_t> m_PlayerControllerID[4];
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+
//.peb
11+
12+
class ParticleEngine;
13+
14+
//no name left for type
15+
class EffectBankData
16+
{
17+
public:
18+
be<uint32_t> m_Field0; // 0x3E - no idea
19+
stdx::string m_DataName; // player_sonic
20+
//from .peb (raw converted since they released after)
21+
xpointer<void> m_Data1;
22+
xpointer<void> m_Data2;
23+
xpointer<void> m_Data3;
24+
stdx::map<stdx::string, be<uint32_t>> m_EffectDataIndices; //barrier_g = 0x23
25+
};
26+
MARATHON_ASSERT_OFFSETOF(EffectBankData, m_EffectDataIndices, 0x2C);
27+
MARATHON_ASSERT_SIZEOF(EffectBankData, 0x38);
28+
29+
class EffectBank : public RefCountObject
30+
{
31+
public:
32+
xpointer<ParticleEngine> m_pParticleEngine;
33+
be<uint32_t> m_FieldC; //index ?
34+
xpointer<EffectBankData> m_pEffectBankA;
35+
};
36+
MARATHON_ASSERT_SIZEOF(EffectBank, 0x14);
37+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace Sonicteam::GE1PE
6+
{
7+
class EmitterListener
8+
{
9+
xpointer<void> m_pVftable;
10+
};
11+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/System/Singleton.h>
5+
#include <Sonicteam/System/CreateStatic.h>
6+
#include <Sonicteam/GE1PE/Plugin.h>
7+
#include <boost/smart_ptr/shared_ptr.h>
8+
#include <stdx/map.h>
9+
#include <stdx/string.h>
10+
#include <stdx/vector.h>
11+
#include <Sonicteam/SoX/LinkNode.h>
12+
13+
namespace Sonicteam::GE1PE
14+
{
15+
class EffectBank;
16+
class TextureBank;
17+
class Material;
18+
class Manager;
19+
20+
class ParticleEngine : public System::Singleton<ParticleEngine,0x82D3C4F4, System::CreateStatic<ParticleEngine,0x82642090>>
21+
{
22+
public:
23+
xpointer<void> m_pVftable;
24+
boost::shared_ptr<Plugin> m_spPlugin;
25+
stdx::map<stdx::string, be<uint32_t>> m_mEffectIndicies; // ev001 = index
26+
stdx::map<stdx::string, be<uint32_t>> m_mTextureIndicies; //vehicle_jet_grid = 0x9F;
27+
stdx::map<stdx::string, be<uint32_t>> m_MaterialIndicies; //addBN = 3; MeshTestShader ...
28+
stdx::vector<xpointer<EffectBank>> m_vpEffectBank;
29+
stdx::vector<xpointer<TextureBank>> m_vpTextureBank;
30+
stdx::vector<xpointer<TextureBank>> m_vpMaterialBank;
31+
SoX::LinkNode<Manager> m_lnManager;
32+
stdx::vector<void> m_vField6C;
33+
};
34+
MARATHON_ASSERT_OFFSETOF(ParticleEngine, m_vpEffectBank, 0x30);
35+
MARATHON_ASSERT_OFFSETOF(ParticleEngine, m_vpTextureBank, 0x40);
36+
MARATHON_ASSERT_OFFSETOF(ParticleEngine, m_vpMaterialBank, 0x50);
37+
MARATHON_ASSERT_OFFSETOF(ParticleEngine, m_lnManager, 0x60);
38+
MARATHON_ASSERT_OFFSETOF(ParticleEngine, m_vField6C, 0x6C);
39+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/Engine/Doc.h>
5+
6+
namespace Sonicteam::GE1PE
7+
{
8+
class Plugin
9+
{
10+
public:
11+
struct Vftable
12+
{
13+
be<uint32_t> fpDestroy;
14+
//....
15+
};
16+
17+
xpointer<Vftable> m_pVftable;
18+
xpointer<SoX::Engine::Doc> m_pDoc;
19+
};
20+
//size == 0x34 (but PE::MyPlugin no idea about this)
21+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace Sonicteam::GE1PE
6+
{
7+
class RefCountObject
8+
{
9+
public:
10+
struct Vftable
11+
{
12+
be<uint32_t> fpDestroy;
13+
};
14+
15+
xpointer<Vftable> m_pVftable;
16+
be<uint32_t> m_ReferenceCount;
17+
18+
void* Destroy(uint32_t flag = 1)
19+
{
20+
return GuestToHostFunction<void*>(m_pVftable->fpDestroy, this, flag);
21+
}
22+
23+
void Release(uint32_t flag = 1)
24+
{
25+
m_ReferenceCount = m_ReferenceCount - 1;
26+
27+
if (!m_ReferenceCount.get())
28+
Destroy(flag);
29+
}
30+
31+
inline void AddReference()
32+
{
33+
m_ReferenceCount = m_ReferenceCount + 1;
34+
}
35+
};
36+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/Particles/ParticleManagerUnit.h>
5+
#include <Sonicteam/Particles/Particle.h>
6+
#include <Sonicteam/MyPE/MyEmitterListener.h>
7+
#include <Sonicteam/SoX/LinkNode.h>
8+
#include <boost/smart_ptr/shared_ptr.h>
9+
10+
namespace Sonicteam::MyPE
11+
{
12+
class ManageParticleTask;
13+
class Manager;
14+
class MyPlugin;
15+
16+
17+
class CManageParticle : public Particles::ParticleManagerUnit
18+
{
19+
xpointer<SoX::Engine::Doc> m_pDoc;
20+
XRTL_CRITICAL_SECTION m_CriticalSection;
21+
//....
22+
MARATHON_INSERT_PADDING(4);
23+
MARATHON_INSERT_PADDING(0xC);
24+
SoX::LinkNode<Particles::Particle> m_lnParticle;
25+
xpointer<ManageParticleTask> m_pManagerParticleTask;
26+
MARATHON_INSERT_PADDING(4);
27+
boost::shared_ptr<Manager> m_spManager;
28+
boost::shared_ptr<MyPlugin> m_spMyPlugin;
29+
MyEmitterListener m_MyEmitterListener;
30+
MARATHON_INSERT_PADDING(0x2C);
31+
32+
static CManageParticle* GetInstance()
33+
{
34+
return *(xpointer<CManageParticle>*)MmGetHostAddress(0x82D3C54C);
35+
}
36+
37+
MARATHON_ASSERT_OFFSETOF(CManageParticle, m_pManagerParticleTask,0x3C);
38+
};
39+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/IResource2.h>
5+
#include <Sonicteam/SoX/RefSharedPointer.h>
6+
#include <Sonicteam/MyPE/MyEffectBank.h>
7+
8+
namespace Sonicteam::MyPE
9+
{
10+
class EffectBankLoadManager;
11+
12+
class TextureBankLoad; //implement later
13+
14+
class EffectBankLoad : public SoX::IResource2<EffectBankLoad, EffectBankLoadManager>
15+
{
16+
public:
17+
SoX::RefSharedPointer<MyEffectBank> m_spMyEffectBank;
18+
};
19+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/IResourceMgr.h>
5+
#include <Sonicteam/System/Singleton.h>
6+
#include <Sonicteam/System/CreateStatic.h>
7+
8+
namespace Sonicteam::MyPE
9+
{
10+
class EffectBankLoadManager : public SoX::IResourceMgr, System::Singleton<EffectBankLoadManager,0x82D3C53C,System::CreateStatic<EffectBankLoadManager,0>> {}
11+
}

0 commit comments

Comments
 (0)