Skip to content

Commit 7fc2a23

Browse files
authored
Implement autosaving and remove select storage device option (#123)
* Implement autosaving and remove select storage device option * Implement autosaving for town missions during episodes * Change autosave config default * Remove forced autosave after results * Fix naming convention
1 parent 27e1519 commit 7fc2a23

19 files changed

Lines changed: 310 additions & 4 deletions

MarathonRecomp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ set(MARATHON_RECOMP_PATCHES_CXX_SOURCES
142142
"patches/frontend_listener.cpp"
143143
"patches/misc_patches.cpp"
144144
"patches/player_patches.cpp"
145+
"patches/SaveDataTask_patches.cpp"
145146
"patches/TitleTask_patches.cpp"
146147
"patches/video_patches.cpp"
147148
)

MarathonRecomp/api/Marathon.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "CSD/Manager/csdmSubjectBase.h"
1717
#include "CSD/Platform/csdTexList.h"
1818
#include "Sonicteam/Actor.h"
19+
#include "Sonicteam/AlertWindowTask.h"
1920
#include "Sonicteam/AppMarathon.h"
2021
#include "Sonicteam/AudioEngineXenon.h"
2122
#include "Sonicteam/Camera/CameraMode.h"
@@ -26,6 +27,9 @@
2627
#include "Sonicteam/DocMarathonState.h"
2728
#include "Sonicteam/GameImp.h"
2829
#include "Sonicteam/GameMode.h"
30+
#include "Sonicteam/HUDCALLBACK.h"
31+
#include "Sonicteam/HUDLoading.h"
32+
#include "Sonicteam/ImageFilter.h"
2933
#include "Sonicteam/MovieObject.h"
3034
#include "Sonicteam/MovieObjectWmv.h"
3135
#include "Sonicteam/MovieTask.h"
@@ -54,12 +58,17 @@
5458
#include "Sonicteam/Player/State/Machine2.h"
5559
#include "Sonicteam/Player/State/Object2.h"
5660
#include "Sonicteam/Player/State/TailsContext.h"
61+
#include "Sonicteam/SaveDataTask.h"
62+
#include "Sonicteam/SaveDataTaskXENON.h"
63+
#include "Sonicteam/SelectWindowTask.h"
5764
#include "Sonicteam/SoX/AI/StateMachine.h"
5865
#include "Sonicteam/SoX/Audio/IAudioEngine.h"
5966
#include "Sonicteam/SoX/Component.h"
6067
#include "Sonicteam/SoX/Engine/Doc.h"
6168
#include "Sonicteam/SoX/Engine/DocMode.h"
6269
#include "Sonicteam/SoX/Engine/Task.h"
70+
#include "Sonicteam/SoX/Graphics/Technique.h"
71+
#include "Sonicteam/SoX/Graphics/TechniqueFXL.h"
6372
#include "Sonicteam/SoX/Graphics/Device.h"
6473
#include "Sonicteam/SoX/Graphics/Xenon/DeviceXenon.h"
6574
#include "Sonicteam/SoX/Graphics/Xenon/TextureXenon.h"
@@ -71,6 +80,8 @@
7180
#include "Sonicteam/SoX/Physics/Havok/WorldHavok.h"
7281
#include "Sonicteam/SoX/Physics/World.h"
7382
#include "Sonicteam/SoX/RefCountObject.h"
83+
#include "Sonicteam/StdImageFilters/BurnoutBlurFilter.h"
84+
#include "Sonicteam/StdImageFilters/SingleTechniqueFilter.h"
7485
#include "Sonicteam/System/CreateStatic.h"
7586
#include "Sonicteam/System/Singleton.h"
7687
#include "Sonicteam/TitleTask.h"
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 <boost/smart_ptr/shared_ptr.h>
5+
#include <Sonicteam/SelectWindowTask.h>
6+
7+
namespace Sonicteam
8+
{
9+
class AlertWindowTask : public SoX::Engine::Task
10+
{
11+
public:
12+
be<uint32_t> m_HasSelectWindow;
13+
MARATHON_INSERT_PADDING(0x2C);
14+
be<uint32_t> m_Operation;
15+
MARATHON_INSERT_PADDING(0x14);
16+
boost::anonymous_shared_ptr m_spOptions[3];
17+
MARATHON_INSERT_PADDING(4);
18+
be<uint32_t> m_OptionCount;
19+
xpointer<SelectWindowTask> m_pSelectWindowTask;
20+
};
21+
}

MarathonRecomp/api/Sonicteam/GameImp.h

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@ namespace Sonicteam
88
class GameImp : public SoX::MessageReceiver
99
{
1010
public:
11+
enum GameState : uint32_t
12+
{
13+
GameState_MainMenu,
14+
GameState_Stage,
15+
GameState_Event,
16+
GameState_Movie,
17+
GameState_Result,
18+
GameState_Message,
19+
GameState_6,
20+
GameState_Save,
21+
GameState_ReturnToMainMenu
22+
};
23+
1124
struct PlayerData
1225
{
1326
be<uint32_t> ActorID;
@@ -28,9 +41,17 @@ namespace Sonicteam
2841
MARATHON_INSERT_PADDING(0x10);
2942
};
3043

31-
MARATHON_INSERT_PADDING(0xE3C);
44+
MARATHON_INSERT_PADDING(4);
45+
be<GameState> m_GameState;
46+
xpointer<DocMarathonState> m_pDoc;
47+
be<uint32_t> m_Flags;
48+
MARATHON_INSERT_PADDING(0xE2C);
3249
PlayerData m_PlayerData[4];
33-
MARATHON_INSERT_PADDING(0xA4C);
50+
MARATHON_INSERT_PADDING(0x200);
51+
bool m_IsStage;
52+
MARATHON_INSERT_PADDING(0x0C);
53+
be<uint32_t> m_Field1180;
54+
MARATHON_INSERT_PADDING(0x838);
3455
xpointer<SoX::Physics::World> m_pPhysicsWorld;
3556
xpointer<void> m_pMyCollisionFilter;
3657

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
namespace Sonicteam
4+
{
5+
class HUDCALLBACK
6+
{
7+
public:
8+
xpointer<void> m_pVftable;
9+
};
10+
}
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+
5+
namespace Sonicteam
6+
{
7+
class HUDLoading : public SoX::RefCountObject, public SoX::Engine::Task
8+
{
9+
public:
10+
MARATHON_INSERT_PADDING(0x5C);
11+
be<uint32_t> m_Flags;
12+
};
13+
}
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+
5+
namespace Sonicteam
6+
{
7+
class ImageFilter
8+
{
9+
public:
10+
xpointer<void> m_pVftable;
11+
MARATHON_INSERT_PADDING(4);
12+
};
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace Sonicteam
6+
{
7+
class SaveDataTask : public SoX::Engine::Task
8+
{
9+
public:
10+
xpointer<const char> m_pFileName;
11+
MARATHON_INSERT_PADDING(0x24);
12+
be<uint32_t> m_Flags;
13+
MARATHON_INSERT_PADDING(4);
14+
};
15+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace Sonicteam
6+
{
7+
class SaveDataTaskXENON : public SaveDataTask
8+
{
9+
public:
10+
enum SaveDataOperation : uint32_t
11+
{
12+
SaveDataOperation_AlertOverwrite,
13+
SaveDataOperation_AlertNoSaveData,
14+
SaveDataOperation_AlertSelectDevice,
15+
SaveDataOperation_SelectStorageDevice,
16+
SaveDataOperation_WriteSaveData,
17+
SaveDataOperation_ReadSaveData,
18+
SaveDataOperation_AlertSaveFailed,
19+
SaveDataOperation_AlertLoadFailed,
20+
SaveDataOperation_8,
21+
SaveDataOperation_9
22+
};
23+
24+
xpointer<AlertWindowTask> m_pAlertWindowTask;
25+
MARATHON_INSERT_PADDING(8);
26+
bool m_IsAccessSuccess;
27+
xpointer<void> m_pTextBook;
28+
be<SaveDataOperation> m_Operation;
29+
};
30+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/HUDCALLBACK.h>
5+
6+
namespace Sonicteam
7+
{
8+
class SelectWindowTask : public SoX::Engine::Task, public HUDCALLBACK
9+
{
10+
public:
11+
MARATHON_INSERT_PADDING(0x40);
12+
be<uint32_t> m_ChosenIndex;
13+
MARATHON_INSERT_PADDING(0x28);
14+
be<uint32_t> m_SelectedIndex;
15+
};
16+
}

0 commit comments

Comments
 (0)