Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions MarathonRecomp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ set(MARATHON_RECOMP_LOCALE_CXX_SOURCES

if (WIN32)
set(MARATHON_RECOMP_OS_CXX_SOURCES
"os/win32/locale_win32.cpp"
"os/win32/logger_win32.cpp"
"os/win32/media_win32.cpp"
"os/win32/process_win32.cpp"
Expand All @@ -97,6 +98,7 @@ if (WIN32)
)
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
set(MARATHON_RECOMP_OS_CXX_SOURCES
"os/linux/locale_linux.cpp"
"os/linux/logger_linux.cpp"
"os/linux/media_linux.cpp"
"os/linux/process_linux.cpp"
Expand All @@ -106,6 +108,7 @@ elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
)
elseif (APPLE)
set(MARATHON_RECOMP_OS_CXX_SOURCES
"os/macos/locale_macos.cpp"
"os/macos/logger_macos.cpp"
"os/macos/media_macos.cpp"
"os/macos/process_macos.cpp"
Expand Down Expand Up @@ -145,6 +148,7 @@ set(MARATHON_RECOMP_PATCHES_CXX_SOURCES
"patches/aspect_ratio_patches.cpp"
"patches/audio_patches.cpp"
"patches/camera_patches.cpp"
"patches/debug_patches.cpp"
"patches/fps_patches.cpp"
"patches/frontend_listener.cpp"
"patches/input_patches.cpp"
Expand Down Expand Up @@ -380,6 +384,8 @@ if (WIN32)
winmm
windowsapp
)
elseif(NOT APPLE)
target_link_libraries(MarathonRecomp PRIVATE iconv)
endif()

target_link_libraries(MarathonRecomp PRIVATE
Expand Down
4 changes: 3 additions & 1 deletion MarathonRecomp/api/Chao/CSD/Manager/csdmScene.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,8 @@ namespace Chao::CSD
be<float> m_MotionSpeed;
be<float> m_MotionStartFrame;
be<float> m_MotionEndFrame;
MARATHON_INSERT_PADDING(0x0C);
MARATHON_INSERT_PADDING(0x08);
be<uint32_t> m_Field90;
CSceneMotionRepeat m_MotionRepeat;
be<int> m_MotionIndex;
be<float> m_SortOrder;
Expand Down Expand Up @@ -184,6 +185,7 @@ namespace Chao::CSD
MARATHON_ASSERT_OFFSETOF(CScene, m_MotionSpeed, 0x7C);
MARATHON_ASSERT_OFFSETOF(CScene, m_MotionStartFrame, 0x80);
MARATHON_ASSERT_OFFSETOF(CScene, m_MotionEndFrame, 0x84);
MARATHON_ASSERT_OFFSETOF(CScene, m_Field90, 0x90);
MARATHON_ASSERT_OFFSETOF(CScene, m_MotionRepeat, 0x94);
MARATHON_ASSERT_OFFSETOF(CScene, m_MotionIndex, 0xB0);
MARATHON_ASSERT_OFFSETOF(CScene, m_SortOrder, 0xB4);
Expand Down
17 changes: 17 additions & 0 deletions MarathonRecomp/api/Marathon.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@
#include "Sonicteam/CsdManager.h"
#include "Sonicteam/CsdObject.h"
#include "Sonicteam/CsdResource.h"
#include "Sonicteam/DevTitleMode.h"
#include "Sonicteam/DocMarathon.h"
#include "Sonicteam/DocMarathonImp.h"
#include "Sonicteam/DocMarathonState.h"
#include "Sonicteam/DocState.h"
#include "Sonicteam/Enemy/EnemyShot.h"
#include "Sonicteam/Enemy/EnemyShotNormal.h"
#include "Sonicteam/Enemy/EnemyShotPoint.h"
Expand Down Expand Up @@ -64,11 +66,19 @@
#include "Sonicteam/HudTextParts.h"
#include "Sonicteam/ImageFilter.h"
#include "Sonicteam/LoadingTask.h"
#include "Sonicteam/LuaNode.h"
#include "Sonicteam/LuaNodeImp.h"
#include "Sonicteam/LuaSystem.h"
#include "Sonicteam/LuaSystemManager.h"
#include "Sonicteam/LuaTableAccess.h"
#include "Sonicteam/LuaTableAccessImp.h"
#include "Sonicteam/MainDisplayTask.h"
#include "Sonicteam/MainMenuExpositionTask.h"
#include "Sonicteam/MainMenuTask.h"
#include "Sonicteam/MainMode.h"
#include "Sonicteam/Message/Camera/Cameraman/MsgChangeMode.h"
#include "Sonicteam/Message/DevTitleMode/MsgMoveCursor.h"
#include "Sonicteam/Message/DevTitleMode/MsgSelectCursor.h"
#include "Sonicteam/Message/Game/MsgRegisterPlayer.h"
#include "Sonicteam/Message/Game/MsgTextCardAction.h"
#include "Sonicteam/Message/HUDButtonWindow/MsgChangeButtons.h"
Expand Down Expand Up @@ -104,6 +114,8 @@
#include "Sonicteam/ObjectVehicleBike.h"
#include "Sonicteam/PauseAdapter.h"
#include "Sonicteam/PauseTask.h"
#include "Sonicteam/PicBase.h"
#include "Sonicteam/PictureTitle.h"
#include "Sonicteam/Player/CommonContextIFFlags.h"
#include "Sonicteam/Player/GroundRayListener.h"
#include "Sonicteam/Player/ICollisionListener.h"
Expand Down Expand Up @@ -248,6 +260,7 @@
#include "Sonicteam/SoX/IResource.h"
#include "Sonicteam/SoX/IResource2.h"
#include "Sonicteam/SoX/IResourceMgr.h"
#include "Sonicteam/SoX/Input/Listener.h"
#include "Sonicteam/SoX/Input/Manager.h"
#include "Sonicteam/SoX/LinkNode.h"
#include "Sonicteam/SoX/LinkedList.h"
Expand Down Expand Up @@ -285,7 +298,11 @@
#include "Sonicteam/SoX/Scenery/CameraImp.h"
#include "Sonicteam/SoX/Scenery/Drawable.h"
#include "Sonicteam/SoX/Thread.h"
#include "Sonicteam/StageMap.h"
#include "Sonicteam/StageSelectMode.h"
#include "Sonicteam/StageTitleTask.h"
#include "Sonicteam/StateDevTitle.h"
#include "Sonicteam/StateMainMode.h"
#include "Sonicteam/StdImageFilters/BurnoutBlurFilter.h"
#include "Sonicteam/StdImageFilters/SingleTechniqueFilter.h"
#include "Sonicteam/System/CreateStatic.h"
Expand Down
8 changes: 4 additions & 4 deletions MarathonRecomp/api/Sonicteam/CsdLink.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ namespace Sonicteam
struct Vftable
{
be<uint32_t> fpDestroy;
MARATHON_INSERT_PADDING(4);
MARATHON_INSERT_PADDING(0x04);
be<uint32_t> fpUpdate;
};

xpointer<Vftable> m_pVftable;
xpointer<CsdLink> m_pNext;
xpointer<CsdLink> m_pPrevious;
xpointer<CsdLink> m_pPrev;
be<float> m_Priority;
MARATHON_INSERT_PADDING(8);
MARATHON_INSERT_PADDING(0x08);

void* Destroy(uint32_t flags = 1)
{
Expand All @@ -33,7 +33,7 @@ namespace Sonicteam

MARATHON_ASSERT_OFFSETOF(CsdLink, m_pVftable, 0x00);
MARATHON_ASSERT_OFFSETOF(CsdLink, m_pNext, 0x04);
MARATHON_ASSERT_OFFSETOF(CsdLink, m_pPrevious, 0x08);
MARATHON_ASSERT_OFFSETOF(CsdLink, m_pPrev, 0x08);
MARATHON_ASSERT_OFFSETOF(CsdLink, m_Priority, 0x0C);
MARATHON_ASSERT_SIZEOF(CsdLink, 0x18);
}
31 changes: 31 additions & 0 deletions MarathonRecomp/api/Sonicteam/DevTitleMode.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#pragma once

#include <Marathon.inl>
#include <Sonicteam/SoX/Engine/DocMode.h>
#include <stdx/vector.h>

namespace Sonicteam
{
class DevTitleMode : public SoX::Engine::DocMode
{
public:
struct Mode
{
xpointer<const char> pName;
xpointer<DocState> pState;
};

be<int> m_SelectedIndex;
MARATHON_INSERT_PADDING(0x04);
stdx::vector<Mode> m_Modes;
MARATHON_INSERT_PADDING(0x2C);
};

MARATHON_ASSERT_OFFSETOF(DevTitleMode::Mode, pName, 0x00);
MARATHON_ASSERT_OFFSETOF(DevTitleMode::Mode, pState, 0x04);
MARATHON_ASSERT_SIZEOF(DevTitleMode::Mode, 0x08);

MARATHON_ASSERT_OFFSETOF(DevTitleMode, m_SelectedIndex, 0x50);
MARATHON_ASSERT_OFFSETOF(DevTitleMode, m_Modes, 0x58);
MARATHON_ASSERT_SIZEOF(DevTitleMode, 0x94);
}
21 changes: 20 additions & 1 deletion MarathonRecomp/api/Sonicteam/DocMarathon.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

#include <Marathon.inl>
#include <Sonicteam/SoX/Engine/Doc.h>
#include <Sonicteam/SoX/Engine/DocMode.h>
#include <Sonicteam/DocState.h>
#include <Sonicteam/StateMainMode.h>
#include <Sonicteam/TextBook.h>

namespace Sonicteam
Expand All @@ -11,14 +14,23 @@ namespace Sonicteam
public:
struct Vftable : public Doc::Vftable
{
MARATHON_INSERT_PADDING(0x58);
MARATHON_INSERT_PADDING(0x48);
be<uint32_t> fpSetDocState;
MARATHON_INSERT_PADDING(0x0C);
be<uint32_t> fpGetTextBookContext;
MARATHON_INSERT_PADDING(0x60);
be<uint32_t> fpSetLoading;
MARATHON_INSERT_PADDING(0x44);
be<uint32_t> fpGetLanguage;
MARATHON_INSERT_PADDING(0x4C);
be<uint32_t> fpStartMainMode;
};

DocMarathon* SetDocState(DocState* in_pDocState)
{
return GuestToHostFunction<DocMarathon*>(static_cast<Vftable*>(m_pVftable.get())->fpSetDocState, this, in_pDocState);
}

TextBook::TextBookContext* GetTextBookContext()
{
return GuestToHostFunction<TextBook::TextBookContext*>(static_cast<Vftable*>(m_pVftable.get())->fpGetTextBookContext, this);
Expand All @@ -33,11 +45,18 @@ namespace Sonicteam
{
return GuestToHostFunction<const char*>(static_cast<Vftable*>(m_pVftable.get())->fpGetLanguage, this);
}

DocMarathon* StartMainMode()
{
return GuestToHostFunction<DocMarathon*>(static_cast<Vftable*>(m_pVftable.get())->fpStartMainMode, this);
}
};

MARATHON_ASSERT_OFFSETOF(DocMarathon::Vftable, fpSetDocState, 0x54);
MARATHON_ASSERT_OFFSETOF(DocMarathon::Vftable, fpGetTextBookContext, 0x64);
MARATHON_ASSERT_OFFSETOF(DocMarathon::Vftable, fpSetLoading, 0xC8);
MARATHON_ASSERT_OFFSETOF(DocMarathon::Vftable, fpGetLanguage, 0x110);
MARATHON_ASSERT_OFFSETOF(DocMarathon::Vftable, fpStartMainMode, 0x160);

MARATHON_ASSERT_SIZEOF(DocMarathon, 0x5C);
}
4 changes: 3 additions & 1 deletion MarathonRecomp/api/Sonicteam/DocMarathonImp.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <Sonicteam/SoX/LinkNode.h>
#include <Sonicteam/SoX/Thread.h>
#include <Sonicteam/DocMarathon.h>
#include <Sonicteam/DocState.h>
#include <Sonicteam/MyGraphicsDevice.h>
#include <Sonicteam/RaderMapManager.h>
#include <Sonicteam/RenderTargetContainer.h>
Expand All @@ -21,7 +22,7 @@ namespace Sonicteam
class DocMarathonImp : public DocMarathon
{
public:
MARATHON_INSERT_PADDING(0x04);
xpointer<DocState> m_pDocState;
xpointer<MyGraphicsDevice> m_pMyGraphicsDevice;
xpointer<SceneParamManager> m_pSceneParamManager;
MARATHON_INSERT_PADDING(0x34);
Expand All @@ -48,6 +49,7 @@ namespace Sonicteam
MARATHON_INSERT_PADDING(0x2C);
};

MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_pDocState, 0x5C);
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_pMyGraphicsDevice, 0x60);
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_pSceneParamManager, 0x64);
MARATHON_ASSERT_OFFSETOF(DocMarathonImp, m_InputManagers, 0x9C);
Expand Down
12 changes: 12 additions & 0 deletions MarathonRecomp/api/Sonicteam/DocState.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once

#include <Marathon.inl>

namespace Sonicteam
{
class DocState
{
public:
xpointer<void> m_pVftable;
};
}
4 changes: 2 additions & 2 deletions MarathonRecomp/api/Sonicteam/Globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ namespace Sonicteam
{
static inline stdx::string* ms_pCurrentRenderScript{};

static inline be<float>* ms_apMainDisplayColours[9]{};
static inline be<float>* ms_MainDisplayColours[9]{};

static void Init()
{
ms_pCurrentRenderScript = reinterpret_cast<stdx::string*>(MmGetHostAddress(0x82B814F8));

for (int i = 0; i < 9; i++)
ms_apMainDisplayColours[i] = reinterpret_cast<be<float>*>(MmGetHostAddress(0x82036BE4 + (i * 4)));
ms_MainDisplayColours[i] = reinterpret_cast<be<float>*>(MmGetHostAddress(0x82036BE4 + (i * 4)));
}
};
}
39 changes: 39 additions & 0 deletions MarathonRecomp/api/Sonicteam/LuaNode.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#pragma once

#include <Marathon.inl>
#include <boost/smart_ptr/shared_ptr.hpp>
#include <lua50/lua.h>
#include <Sonicteam/LuaTableAccess.h>

namespace Sonicteam
{
class LuaNode
{
public:
struct Vftable
{
MARATHON_INSERT_PADDING(0x60);
be<uint32_t> fpGetTable;
};

xpointer<Vftable> m_pVftable;
xpointer<lua50::lua_State> m_pLuaState;

boost::shared_ptr<LuaTableAccess> GetTable(const char* in_pName)
{
const auto result = guest_stack_var<boost::shared_ptr<LuaTableAccess>>();
const auto name = guest_stack_var<stdx::string>(in_pName);

GuestToHostFunction<LuaTableAccess*>(m_pVftable->fpGetTable.get(), result.get(), this, name->c_str());

return *result;
}
};

MARATHON_ASSERT_OFFSETOF(LuaNode::Vftable, fpGetTable, 0x60);
MARATHON_ASSERT_SIZEOF(LuaNode::Vftable, 0x64);

MARATHON_ASSERT_OFFSETOF(LuaNode, m_pVftable, 0x00);
MARATHON_ASSERT_OFFSETOF(LuaNode, m_pLuaState, 0x04);
MARATHON_ASSERT_SIZEOF(LuaNode, 0x08);
}
17 changes: 17 additions & 0 deletions MarathonRecomp/api/Sonicteam/LuaNodeImp.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include <Marathon.inl>
#include <Sonicteam/LuaNode.h>
#include <stdx/string.h>

namespace Sonicteam
{
class LuaNodeImp : public LuaNode
{
public:
stdx::string m_Name;
};

MARATHON_ASSERT_OFFSETOF(LuaNodeImp, m_Name, 0x08);
MARATHON_ASSERT_SIZEOF(LuaNodeImp, 0x24);
}
13 changes: 13 additions & 0 deletions MarathonRecomp/api/Sonicteam/LuaSystem.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#pragma once

#include <Marathon.inl>
#include <Sonicteam/SoX/IResource2.h>
#include <Sonicteam/LuaNodeImp.h>
#include <Sonicteam/LuaSystemManager.h>

namespace Sonicteam
{
class LuaSystem : public LuaNodeImp, public SoX::IResource2<LuaSystem, LuaSystemManager> {};

MARATHON_ASSERT_SIZEOF(LuaSystem, 0x88);
}
13 changes: 13 additions & 0 deletions MarathonRecomp/api/Sonicteam/LuaSystemManager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#pragma once

#include <Marathon.inl>
#include <Sonicteam/SoX/IResourceMgr.h>
#include <Sonicteam/System/CreateStatic.h>
#include <Sonicteam/System/Singleton.h>

namespace Sonicteam
{
class LuaSystemManager : public SoX::IResourceMgr, public System::Singleton<LuaSystemManager, 0x82D35EDC, System::CreateStatic<LuaSystemManager, 0x82162DF8>> {};

MARATHON_ASSERT_SIZEOF(LuaSystemManager, 0x10);
}
Loading
Loading