Skip to content

Commit 29a28ad

Browse files
committed
Unpause stage BGM upon entering options menu
1 parent 457214a commit 29a28ad

18 files changed

Lines changed: 181 additions & 13 deletions

MarathonRecomp/api/Marathon.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "Sonicteam/Enemy/EnemyShotNormal.h"
3636
#include "Sonicteam/Enemy/EnemyShotPoint.h"
3737
#include "Sonicteam/Fixture.h"
38+
#include "Sonicteam/Game.h"
3839
#include "Sonicteam/GameImp.h"
3940
#include "Sonicteam/GameMode.h"
4041
#include "Sonicteam/Globals.h"
@@ -63,6 +64,9 @@
6364
#include "Sonicteam/MovieObject.h"
6465
#include "Sonicteam/MovieObjectWmv.h"
6566
#include "Sonicteam/MovieTask.h"
67+
#include "Sonicteam/MyCue.h"
68+
#include "Sonicteam/MyCueAdx.h"
69+
#include "Sonicteam/MyCueAttenuate.h"
6670
#include "Sonicteam/MyGraphicsDevice.h"
6771
#include "Sonicteam/MyPhantom.h"
6872
#include "Sonicteam/MyTexture.h"
@@ -124,7 +128,10 @@
124128
#include "Sonicteam/SelectWindowTask.h"
125129
#include "Sonicteam/SoX/AI/StateMachine.h"
126130
#include "Sonicteam/SoX/ApplicationXenon.h"
131+
#include "Sonicteam/SoX/Audio/Cue.h"
127132
#include "Sonicteam/SoX/Audio/IAudioEngine.h"
133+
#include "Sonicteam/SoX/Audio/Player.h"
134+
#include "Sonicteam/SoX/Audio/PlayerImpl.h"
128135
#include "Sonicteam/SoX/Component.h"
129136
#include "Sonicteam/SoX/Engine/Application.h"
130137
#include "Sonicteam/SoX/Engine/Doc.h"
@@ -185,6 +192,7 @@
185192
#include "Sonicteam/VehicleMissileCtrl.h"
186193
#include "Sonicteam/VehicleMissileCtrlAutomatic.h"
187194
#include "Sonicteam/VehicleMissileCtrlSingle.h"
195+
#include "Sonicteam/sonicXmaPlayer.h"
188196
#include "boost/smart_ptr/make_shared_object.h"
189197
#include "boost/smart_ptr/shared_ptr.h"
190198
#include "hk330/hkArray.h"

MarathonRecomp/api/Sonicteam/AppMarathon.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <Marathon.inl>
44
#include <Sonicteam/SoX/ApplicationXenon.h>
55
#include <Sonicteam/DocMarathonState.h>
6+
#include <Sonicteam/GameMode.h>
67

78
namespace Sonicteam
89
{
@@ -12,6 +13,14 @@ namespace Sonicteam
1213
xpointer<DocMarathonState> m_pDoc;
1314

1415
static AppMarathon* GetInstance();
16+
17+
GameImp* GetGame() const
18+
{
19+
if (auto pGameMode = m_pDoc->GetDocMode<Sonicteam::GameMode>())
20+
return pGameMode->GetGame();
21+
22+
return nullptr;
23+
}
1524
};
1625
}
1726

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace Sonicteam
6+
{
7+
class Game : public SoX::MessageReceiver {};
8+
}

MarathonRecomp/api/Sonicteam/GameImp.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
#include <Marathon.inl>
44
#include <boost/smart_ptr/shared_ptr.h>
5+
#include <Sonicteam/SoX/Audio/Cue.h>
56
#include <Sonicteam/SoX/Physics/World.h>
67
#include <Sonicteam/SoX/Scenery/Camera.h>
78
#include <Sonicteam/SoX/Scenery/CameraImp.h>
89
#include <Sonicteam/SoX/RefSharedPointer.h>
10+
#include <Sonicteam/Game.h>
911
#include <Sonicteam/TextBook.h>
1012
#include <stdx/vector.h>
1113

@@ -14,7 +16,7 @@ namespace Sonicteam
1416
class ActorManager;
1517
class GameScript;
1618

17-
class GameImp : public SoX::MessageReceiver
19+
class GameImp : public Game
1820
{
1921
public:
2022
enum GameState : uint32_t
@@ -75,7 +77,9 @@ namespace Sonicteam
7577
xpointer<TextBook> m_pSystemTextBook;
7678
MARATHON_INSERT_PADDING(8);
7779
stdx::vector<stdx::vector<boost::shared_ptr<SoX::Scenery::Camera>>> m_vvspCameras;
78-
MARATHON_INSERT_PADDING(0x7D4);
80+
MARATHON_INSERT_PADDING(0x1B4);
81+
xpointer<SoX::Audio::Cue> m_pBgmCue;
82+
MARATHON_INSERT_PADDING(0x61C);
7983
SoX::RefSharedPointer<SoX::Physics::World> m_spPhysicsWorld;
8084
xpointer<void> m_pMyCollisionFilter;
8185

@@ -90,7 +94,7 @@ namespace Sonicteam
9094
return -1;
9195
}
9296

93-
SoX::Scenery::CameraImp* GetCameraImp(const char* pName, int which = 0)
97+
SoX::Scenery::CameraImp* GetCamera(const char* pName, int which = 0)
9498
{
9599
if (m_vvspCameras.empty())
96100
return nullptr;
@@ -106,6 +110,12 @@ namespace Sonicteam
106110
return nullptr;
107111
}
108112

113+
template <typename T = SoX::Audio::Cue>
114+
T* GetBgmCue() const
115+
{
116+
return (T*)m_pBgmCue.get();
117+
}
118+
109119
template <typename T = SoX::Physics::World>
110120
T* GetPhysicsWorld() const
111121
{
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
#pragma once
22

33
#include <Marathon.inl>
4+
#include <Sonicteam/GameImp.h>
45

56
namespace Sonicteam
67
{
78
class GameMode : public SoX::Engine::DocMode
89
{
910
public:
1011
MARATHON_INSERT_PADDING(0x1C);
11-
xpointer<GameImp> m_pGameImp;
12+
xpointer<Game> m_pGame;
1213
MARATHON_INSERT_PADDING(0x1C);
14+
15+
GameImp* GetGame() const
16+
{
17+
return (GameImp*)m_pGame.get();
18+
}
1319
};
1420
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
5+
namespace
6+
{
7+
class MyCue : public Sonicteam::SoX::Audio::Cue {};
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/MyCue.h>
5+
#include <Sonicteam/MyCueAttenuate.h>
6+
#include <Sonicteam/sonicXmaPlayer.h>
7+
8+
namespace
9+
{
10+
class MyCueAdx : public MyCue, public MyCueAttenuate
11+
{
12+
public:
13+
MARATHON_INSERT_PADDING(0x2C);
14+
xpointer<Sonicteam::sonicXmaPlayer> m_pXmaPlayer;
15+
bool m_IsPaused;
16+
MARATHON_INSERT_PADDING(3);
17+
};
18+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#pragma once
2+
3+
namespace
4+
{
5+
class MyCueAttenuate {};
6+
}

MarathonRecomp/api/Sonicteam/PauseAdapter.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ namespace Sonicteam
77
class PauseAdapter : public SoX::Engine::Task
88
{
99
public:
10-
xpointer<GameImp> m_pGameImp;
10+
xpointer<Game> m_pGame;
1111
be<uint32_t> m_SelectedID;
1212
be<uint32_t> m_Field54;
13+
14+
GameImp* GetGame() const
15+
{
16+
return (GameImp*)m_pGame.get();
17+
}
1318
};
1419
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#pragma once
2+
3+
#include <Marathon.inl>
4+
#include <Sonicteam/SoX/Audio/Player.h>
5+
#include <Sonicteam/SoX/RefCountObject.h>
6+
7+
namespace Sonicteam::SoX::Audio
8+
{
9+
class Cue : public RefCountObject
10+
{
11+
public:
12+
struct Vftable : RefCountObject::Vftable
13+
{
14+
MARATHON_INSERT_PADDING(0x18);
15+
be<uint32_t> fpSetPause;
16+
};
17+
18+
MARATHON_INSERT_PADDING(0x0C);
19+
LinkNode<Cue> m_Field14;
20+
MARATHON_INSERT_PADDING(8);
21+
xpointer<Player> m_pPlayer;
22+
23+
template <typename T = Player>
24+
T* GetPlayer()
25+
{
26+
return (T*)m_pPlayer.get();
27+
}
28+
29+
void SetPause(bool isPaused)
30+
{
31+
GuestToHostFunction<int>(((Vftable*)m_pVftable.get())->fpSetPause.get(), this, isPaused);
32+
}
33+
};
34+
}

0 commit comments

Comments
 (0)