More progress for CMain

This commit is contained in:
Henrique Gemignani Passos Lima
2023-08-08 15:31:12 +03:00
parent 429de14736
commit 6828656292
15 changed files with 418 additions and 82 deletions
+29 -29
View File
@@ -52,7 +52,7 @@ fn_80003858 = .text:0x80003858; // type:function size:0x24
fn_8000387C = .text:0x8000387C; // type:function size:0x148 align:0x4
fn_800039C4 = .text:0x800039C4; // type:function size:0x54 align:0x4
fn_80003A18 = .text:0x80003A18; // type:function size:0x30
fn_80003A48 = .text:0x80003A48; // type:function size:0x1A0
ResetGameState__5CMainFv = .text:0x80003A48; // type:function size:0x1A0
fn_80003BE8 = .text:0x80003BE8; // type:function size:0x5C
fn_80003C44 = .text:0x80003C44; // type:function size:0xBC
fn_80003D00 = .text:0x80003D00; // type:function size:0xA0
@@ -160,14 +160,14 @@ __ct__18CGameGlobalObjectsFR10COsContextR10CMemorySys = .text:0x8000848C; // typ
ShutdownSubsystems__5CMainFv = .text:0x80008570; // type:function size:0x110
InitializeSubsystems__5CMainFv = .text:0x80008680; // type:function size:0x15C
__dt__5CMainFv = .text:0x800087DC; // type:function size:0x3C
main = .text:0x80008818; // type:function size:0x80
InvokeCMain = .text:0x80008818; // type:function size:0x80
__ct__5CMainFv = .text:0x80008898; // type:function size:0x114
fn_800089AC = .text:0x800089AC; // type:function size:0x10 align:0x4
fn_800089BC = .text:0x800089BC; // type:function size:0x60
SetMaxSpeed__5CMainFb = .text:0x800089BC; // type:function size:0x60
fn_80008A1C__5CMainFv = .text:0x80008A1C; // type:function size:0xC
fn_80008A28 = .text:0x80008A28; // type:function size:0x20
fn_80008A48 = .text:0x80008A48; // type:function size:0x30
fn_80008A78 = .text:0x80008A78; // type:function size:0x2C
__dl__38TOneStatic<24CGameArchitectureSupport>FPv = .text:0x80008A78; // type:function size:0x2C
fn_80008AA4 = .text:0x80008AA4; // type:function size:0xC
fn_80008AB0 = .text:0x80008AB0; // type:function size:0x24
fn_80008AD4 = .text:0x80008AD4; // type:function size:0x30
@@ -199,7 +199,7 @@ fn_800094B4 = .text:0x800094B4; // type:function size:0x54
fn_80009508 = .text:0x80009508; // type:function size:0x58
fn_80009560 = .text:0x80009560; // type:function size:0x84
fn_800095E4 = .text:0x800095E4; // type:function size:0x50
fn_80009634 = .text:0x80009634; // type:function size:0x98
__dt__Q24rstl55list<20CArchitectureMessage,Q24rstl17rmemory_allocator>Fv = .text:0x80009634; // type:function size:0x98
fn_800096CC = .text:0x800096CC; // type:function size:0x50
fn_8000971C = .text:0x8000971C; // type:function size:0xA4
fn_800097C0 = .text:0x800097C0; // type:function size:0x50
@@ -546,14 +546,14 @@ fn_8001D7D8 = .text:0x8001D7D8; // type:function size:0x8 align:0x4
fn_8001D7E0 = .text:0x8001D7E0; // type:function size:0x5C
fn_8001D83C = .text:0x8001D83C; // type:function size:0x4C
fn_8001D888 = .text:0x8001D888; // type:function size:0x1FC
fn_8001DA84 = .text:0x8001DA84; // type:function size:0x70
__ct__15CInputGeneratorFP10COsContextff = .text:0x8001DA84; // type:function size:0x70
fn_8001DAF4 = .text:0x8001DAF4; // type:function size:0x60 align:0x4
fn_8001DB54 = .text:0x8001DB54; // type:function size:0x314 align:0x4
fn_8001DE68 = .text:0x8001DE68; // type:function size:0xE0 align:0x4
fn_8001DF48 = .text:0x8001DF48; // type:function size:0x4 align:0x4
fn_8001DF4C = .text:0x8001DF4C; // type:function size:0x8 align:0x4
fn_8001DF54 = .text:0x8001DF54; // type:function size:0xB4 align:0x4
fn_8001E008 = .text:0x8001E008; // type:function size:0x68
__ct__9CMainFlowFv = .text:0x8001E008; // type:function size:0x68
fn_8001E070 = .text:0x8001E070; // type:function size:0xC align:0x4
fn_8001E07C = .text:0x8001E07C; // type:function size:0x2EC align:0x4
fn_8001E368 = .text:0x8001E368; // type:function size:0x48
@@ -1392,12 +1392,12 @@ fn_800496A0 = .text:0x800496A0; // type:function size:0xC4
fn_80049764 = .text:0x80049764; // type:function size:0xF8
fn_8004985C = .text:0x8004985C; // type:function size:0x28
fn_80049884 = .text:0x80049884; // type:function size:0x194
fn_80049A18 = .text:0x80049A18; // type:function size:0x80
RemoveAllIOWins__13CIOWinManagerFv = .text:0x80049A18; // type:function size:0x80 scope:global
fn_80049A98 = .text:0x80049A98; // type:function size:0x144
fn_80049BDC = .text:0x80049BDC; // type:function size:0x17C
fn_80049D58 = .text:0x80049D58; // type:function size:0x2C
fn_80049D84 = .text:0x80049D84; // type:function size:0x64
fn_80049DE8 = .text:0x80049DE8; // type:function size:0x28
__dt__13CIOWinManagerFv = .text:0x80049D84; // type:function size:0x64
__ct__13CIOWinManagerFv = .text:0x80049DE8; // type:function size:0x28
fn_80049E10 = .text:0x80049E10; // type:function size:0x4 align:0x4
fn_80049E14 = .text:0x80049E14; // type:function size:0x4 align:0x4
fn_80049E18 = .text:0x80049E18; // type:function size:0x8 align:0x4
@@ -5882,7 +5882,7 @@ fn_80161148 = .text:0x80161148; // type:function size:0x74
fn_801611BC = .text:0x801611BC; // type:function size:0x74
fn_80161230 = .text:0x80161230; // type:function size:0x44
fn_80161274 = .text:0x80161274; // type:function size:0x50
fn_801612C4 = .text:0x801612C4; // type:function size:0x10C
EnsureOptions__12CGameOptionsFv = .text:0x801612C4; // type:function size:0x10C scope:global
fn_801613D0 = .text:0x801613D0; // type:function size:0x6C align:0x4
fn_8016143C = .text:0x8016143C; // type:function size:0x4C align:0x4
fn_80161488 = .text:0x80161488; // type:function size:0x4C align:0x4
@@ -9415,8 +9415,8 @@ fn_80218434 = .text:0x80218434; // type:function size:0x40
fn_80218474 = .text:0x80218474; // type:function size:0x40
fn_802184B4 = .text:0x802184B4; // type:function size:0xC
fn_802184C0 = .text:0x802184C0; // type:function size:0xC
fn_802184CC = .text:0x802184CC; // type:function size:0xC
fn_802184D8 = .text:0x802184D8; // type:function size:0xC
GetRightAnalogMax__12CTweakPlayerFv = .text:0x802184CC; // type:function size:0xC
GetLeftAnalogMax__12CTweakPlayerFv = .text:0x802184D8; // type:function size:0xC
fn_802184E4 = .text:0x802184E4; // type:function size:0xC align:0x4
fn_802184F0 = .text:0x802184F0; // type:function size:0xC align:0x4
fn_802184FC = .text:0x802184FC; // type:function size:0xC align:0x4
@@ -12985,7 +12985,7 @@ fn_802CE104 = .text:0x802CE104; // type:function size:0xB4
fn_802CE1B8 = .text:0x802CE1B8; // type:function size:0x30
fn_802CE1E8 = .text:0x802CE1E8; // type:function size:0x3C
fn_802CE224 = .text:0x802CE224; // type:function size:0x54
fn_802CE278 = .text:0x802CE278; // type:function size:0x54
__nw__FUlPCcPCc = .text:0x802CE278; // type:function size:0x54
fn_802CE2CC = .text:0x802CE2CC; // type:function size:0x34
fn_802CE300 = .text:0x802CE300; // type:function size:0x4C
fn_802CE34C = .text:0x802CE34C; // type:function size:0x3C align:0x4
@@ -14042,9 +14042,9 @@ fn_80307724 = .text:0x80307724; // type:function size:0x9C
fn_803077C0 = .text:0x803077C0; // type:function size:0x4C align:0x4
fn_8030780C = .text:0x8030780C; // type:function size:0x8
fn_80307814 = .text:0x80307814; // type:function size:0x50
fn_80307864 = .text:0x80307864; // type:function size:0x8
fn_8030786C = .text:0x8030786C; // type:function size:0x8
fn_80307874 = .text:0x80307874; // type:function size:0x8
GetDefaultVolumeScale__9CAudioSysFv = .text:0x80307864; // type:function size:0x8
SetDefaultVolumeScale__9CAudioSysFs = .text:0x8030786C; // type:function size:0x8
SetVolumeScale__9CAudioSysFs = .text:0x80307874; // type:function size:0x8
fn_8030787C = .text:0x8030787C; // type:function size:0x78
fn_803078F4 = .text:0x803078F4; // type:function size:0x8 align:0x4
fn_803078FC = .text:0x803078FC; // type:function size:0x48
@@ -14071,7 +14071,7 @@ fn_80308320 = .text:0x80308320; // type:function size:0x28
fn_80308348 = .text:0x80308348; // type:function size:0x20
fn_80308368 = .text:0x80308368; // type:function size:0x20
fn_80308388 = .text:0x80308388; // type:function size:0x20
fn_803083A8 = .text:0x803083A8; // type:function size:0x20
TrkSetSampleRate__9CAudioSysF14ETRKSampleRate = .text:0x803083A8; // type:function size:0x20
fn_803083C8 = .text:0x803083C8; // type:function size:0x68
fn_80308430 = .text:0x80308430; // type:function size:0x3C
fn_8030846C = .text:0x8030846C; // type:function size:0x78
@@ -14086,11 +14086,11 @@ fn_80308798 = .text:0x80308798; // type:function size:0x20 align:0x4
fn_803087B8 = .text:0x803087B8; // type:function size:0x20 align:0x4
fn_803087D8 = .text:0x803087D8; // type:function size:0x68 align:0x4
fn_80308840 = .text:0x80308840; // type:function size:0x30
fn_80308870 = .text:0x80308870; // type:function size:0x2C
fn_8030889C = .text:0x8030889C; // type:function size:0x94
SysSetVolume__9CAudioSysFUcUiUc = .text:0x80308870; // type:function size:0x2C
__dt__9CAudioSysFv = .text:0x8030889C; // type:function size:0x94 scope:global
fn_80308930 = .text:0x80308930; // type:function size:0x84
fn_803089B4 = .text:0x803089B4; // type:function size:0x74
fn_80308A28 = .text:0x80308A28; // type:function size:0x200
__ct__9CAudioSysFccccUi = .text:0x80308A28; // type:function size:0x200
fn_80308C28 = .text:0x80308C28; // type:function size:0xBC
fn_80308CE4 = .text:0x80308CE4; // type:function size:0x28 align:0x4
fn_80308D0C = .text:0x80308D0C; // type:function size:0x2C align:0x4
@@ -14667,7 +14667,7 @@ fn_803215EC = .text:0x803215EC; // type:function size:0x44
fn_80321630 = .text:0x80321630; // type:function size:0xE0 align:0x4
fn_80321710 = .text:0x80321710; // type:function size:0x30
fn_80321740 = .text:0x80321740; // type:function size:0x18
fn_80321758 = .text:0x80321758; // type:function size:0x38
SetMusicVolume__19CStreamAudioManagerFUi = .text:0x80321758; // type:function size:0x38
fn_80321790 = .text:0x80321790; // type:function size:0x14C align:0x4
fn_803218DC = .text:0x803218DC; // type:function size:0x70 align:0x4
fn_8032194C = .text:0x8032194C; // type:function size:0x1D0
@@ -15559,8 +15559,8 @@ fn_80345938 = .text:0x80345938; // type:function size:0x10C align:0x4
fn_80345A44 = .text:0x80345A44; // type:function size:0x24
fn_80345A68 = .text:0x80345A68; // type:function size:0x24
fn_80345A8C = .text:0x80345A8C; // type:function size:0x28
fn_80345AB4 = .text:0x80345AB4; // type:function size:0xB4
fn_80345B68 = .text:0x80345B68; // type:function size:0xCC
__cvt_sll_flt = .text:0x80345AB4; // type:function size:0xB4
__cvt_dbl_usll = .text:0x80345B68; // type:function size:0xCC
__fini_cpp_exceptions = .text:0x80345C34; // type:function size:0x34 scope:global
__init_cpp_exceptions = .text:0x80345C68; // type:function size:0x3C scope:global
ExPPC_LongJump__FP12ThrowContextPvPv = .text:0x80345CA4; // type:function size:0x104 scope:local
@@ -16190,8 +16190,8 @@ OSInitAlarm = .text:0x8036E3E4; // type:function size:0x58 scope:global
OSCreateAlarm = .text:0x8036E43C; // type:function size:0x10 scope:global
InsertAlarm = .text:0x8036E44C; // type:function size:0x250 scope:local
OSSetAlarm = .text:0x8036E69C; // type:function size:0x68 scope:global
fn_8036E704 = .text:0x8036E704; // type:function size:0x7C
fn_8036E780 = .text:0x8036E780; // type:function size:0x11C
OSSetPeriodicAlarm = .text:0x8036E704; // type:function size:0x7C scope:global
OSCancelAlarm = .text:0x8036E780; // type:function size:0x11C
DecrementerExceptionCallback = .text:0x8036E89C; // type:function size:0x230 scope:local
DecrementerExceptionHandler = .text:0x8036EACC; // type:function size:0x50 scope:local
fn_8036EB1C = .text:0x8036EB1C; // type:function size:0xA0 align:0x4
@@ -20154,7 +20154,7 @@ gpMemoryCard = .sbss:0x80418EBC; // type:object size:0x4 data:4byte
gpTweakManager = .sbss:0x80418EC0; // type:object size:0x4 data:4byte
lbl_80418EC4 = .sbss:0x80418EC4; // type:object size:0x4 data:4byte
lbl_80418EC8 = .sbss:0x80418EC8; // type:object size:0x4 data:4byte
lbl_80418ECC = .sbss:0x80418ECC; // type:object size:0x4 data:float
sInfiniteLoopTime = .sbss:0x80418ECC; // type:object size:0x4 data:float
lbl_80418ED0 = .sbss:0x80418ED0; // type:object size:0x4 data:4byte
lbl_80418ED4 = .sbss:0x80418ED4; // type:object size:0x1 data:byte
lbl_80418ED8 = .sbss:0x80418ED8; // type:object size:0x4 data:4byte
@@ -20188,8 +20188,8 @@ lbl_80418F30 = .sbss:0x80418F30; // type:object size:0x4 data:4byte
lbl_80418F34 = .sbss:0x80418F34; // type:object size:0x4 data:4byte
lbl_80418F38 = .sbss:0x80418F38; // type:object size:0x4 data:4byte
lbl_80418F3C = .sbss:0x80418F3C; // type:object size:0x4 data:4byte
lbl_80418F40 = .sbss:0x80418F40; // type:object size:0x4 data:4byte
lbl_80418F44 = .sbss:0x80418F44; // type:object size:0x4 data:4byte
gpTweakPlayerB = .sbss:0x80418F40; // type:object size:0x4 data:4byte
gpTweakPlayerA = .sbss:0x80418F44; // type:object size:0x4 data:4byte
lbl_80418F48 = .sbss:0x80418F48; // type:object size:0x4 data:4byte
lbl_80418F4C = .sbss:0x80418F4C; // type:object size:0x4 data:4byte
lbl_80418F50 = .sbss:0x80418F50; // type:object size:0x4 data:4byte
+16
View File
@@ -0,0 +1,16 @@
#ifndef _CAUDIOSTATEWIN
#define _CAUDIOSTATEWIN
#include "types.h"
#include "MetroidPrime/CIOWin.hpp"
class CAudioStateWin : public CIOWin {
public:
CAudioStateWin();
~CAudioStateWin() override;
EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&) override;
};
#endif // _CAUDIOSTATEWIN
@@ -0,0 +1,29 @@
#ifndef _CCONSOLEOUTPUTWINDOW
#define _CCONSOLEOUTPUTWINDOW
#include "MetroidPrime/CIOWin.hpp"
#include "Kyoto/Text/CFont.hpp"
#include <rstl/vector.hpp>
class CConsoleOutputWindow : public CIOWin {
static CConsoleOutputWindow* mInstance;
public:
CConsoleOutputWindow(int, float, float);
~CConsoleOutputWindow() override;
EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&) override;
void Update(float);
void Draw() const;
private:
CFont mFont;
float mUnk;
rstl::vector<rstl::string> mText;
rstl::vector<float> mUnkFloats;
int x40_;
int x44_;
int x48_;
};
#endif // _CCONSOLEOUTPUTWINDOW
@@ -0,0 +1,32 @@
#ifndef _CERROROUTPUTWINDOW
#define _CERROROUTPUTWINDOW
#include "types.h"
#include "MetroidPrime/CIOWin.hpp"
class CErrorOutputWindow : public CIOWin {
public:
CErrorOutputWindow(bool);
~CErrorOutputWindow() override;
EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&) override;
bool GetIsContinueDraw() const override;
void Draw() const override;
void UpdateWindow();
void sub_802694c4(int);
void sub_802695f8() const;
private:
int x14_state;
bool x18_24_ : 1;
bool x18_25_ : 1;
bool x18_26_ : 1;
bool x18_27_ : 1;
bool x18_28_ : 1;
const wchar_t* x1c_msg;
};
#endif // _CERROROUTPUTWINDOW
@@ -7,10 +7,11 @@
#include "Kyoto/Basics/COsContext.hpp"
#include "Kyoto/Basics/CStopwatch.hpp"
#include "Kyoto/TOneStatic.hpp"
#include "CGuiSys/CGuiSys.hpp"
#include "MetroidPrime/CArchitectureQueue.hpp"
#include "MetroidPrime/CIOWinManager.hpp"
// #include "MetroidPrime/CInputGenerator.hpp"
#include "MetroidPrime/CInputGenerator.hpp"
#include "rstl/vector.hpp"
@@ -26,27 +27,27 @@ public:
void Update();
void UnloadAudio();
inline CStopwatch& GetStopwatch1() { return x20_stopwatch1; }
inline CStopwatch& GetStopwatch2() { return x28_stopwatch2; }
inline CIOWinManager& GetIOWinManager() { return x58_ioWinMgr; }
inline int& GetFramesDrawn() { return x78_gameFrameCount; }
inline CStopwatch& GetStopwatch1() { return stopwatch1; }
inline CStopwatch& GetStopwatch2() { return stopwatch2; }
inline CIOWinManager& GetIOWinManager() { return ioWinMgr; }
inline int& GetFramesDrawn() { return gameFrameCount; }
private:
CAudioSys x0_audioSys;
CArchitectureQueue x4_archQueue;
CStopwatch x20_stopwatch1;
CStopwatch x28_stopwatch2;
// CInputGenerator x30_inputGenerator;
// CGuiSys x44_guiSys;
CIOWinManager x58_ioWinMgr;
int x78_gameFrameCount;
float x7c_;
float x80_;
float x84_;
uint x88_;
rstl::vector< CToken > x90_;
OSAlarm xa0_infiniteLoopAlarm;
bool xc8_infiniteLoopAlarmSet;
CAudioSys audioSys;
CArchitectureQueue archQueue;
CStopwatch stopwatch1;
CStopwatch stopwatch2;
CInputGenerator inputGenerator;
CIOWinManager ioWinMgr;
// CGuiSys guiSys;
int gameFrameCount;
float x68_;
float x6c_;
float x70_;
uint x74_;
// rstl::vector< CToken > x90_;
OSAlarm infiniteLoopAlarm;
bool infiniteLoopAlarmSet;
};
// CHECK_SIZEOF(CGameArchitectureSupport, 0xd0)
+51
View File
@@ -0,0 +1,51 @@
#ifndef _CGUISYS
#define _CGUISYS
#include "types.h"
#include "rstl/rc_ptr.hpp"
#include "rstl/single_ptr.hpp"
// #include "GuiSys/CGuiTextSupport.hpp"
class IFactory;
class CSimplePool;
class CTextExecuteBuffer;
class CTextParser;
class CGuiWidget;
class CGuiSys;
extern CGuiSys* gGuiSystem;
class CGuiSys {
public:
enum EUsageMode {
kUM_Zero,
kUM_One,
kUM_Two,
};
CGuiSys(IFactory*, CSimplePool*, EUsageMode);
~CGuiSys();
static void SetGlobalGuiSys(CGuiSys* ptr) {
gGuiSystem = ptr;
// spGuiSys = ptr;
}
// static CGuiWidget* CreateWidgetInGame(uint type, CInputStream& in, CGuiFrame* parent);
void AddFactories(EUsageMode mode);
private:
// IFactory* x0_resFactory;
// CSimplePool* x4_resStore;
// EUsageMode x8_mode;
// rstl::single_ptr< CTextExecuteBuffer > xc_textExecuteBuffer;
// rstl::single_ptr< CTextParser > x10_textParser;
// static CGuiSys* spGuiSys;
};
// CHECK_SIZEOF(CGuiSys, 0x14);
#endif // _CGUISYS
+45
View File
@@ -0,0 +1,45 @@
#ifndef _CIOWIN
#define _CIOWIN
#include "types.h"
#include "rstl/string.hpp"
class CArchitectureMessage;
class CArchitectureQueue;
class CIOWin {
public:
enum EMessageReturn {
kMR_Normal = 0,
kMR_Exit = 1,
kMR_RemoveIOWinAndExit = 2,
kMR_RemoveIOWin = 3,
};
CIOWin(const rstl::string& name);
virtual ~CIOWin();
const rstl::string& GetName() const;
virtual EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&) = 0;
virtual bool GetIsContinueDraw() const;
virtual void Draw() const;
virtual void PreDraw() const;
private:
rstl::string name;
};
#define kFrontEndUIMsgPriority 12
#define kFrontEndUIDrawPriority 11
#define kMFGameMsgPriority 10
#define kMFGameDrawPriority 1000
// namespace IOWinPriorities {
// static int kFrontEndUIMsgPriority = 12;
// static int kFrontEndUIDrawPriority = 11;
// static int kMFGameMsgPriority = 10;
// static int kMFGameDrawPriority = 1000;
// } // namespace IOWinPriorities
#endif // _CIOWIN
+29
View File
@@ -0,0 +1,29 @@
#ifndef _CINPUTGENERATOR
#define _CINPUTGENERATOR
#include "types.h"
#include "rstl/single_ptr.hpp"
#include "Kyoto/Input/IController.hpp"
class COsContext;
class IController;
class CArchitectureQueue;
class CInputGenerator {
public:
CInputGenerator(COsContext*, float leftDiv, float rightDiv);
bool Update(float dt, CArchitectureQueue& queue);
IController* GetController() const { return x4_controller.get(); }
private:
COsContext* x0_context;
rstl::single_ptr< IController > x4_controller;
bool x8_connectedControllers[4];
float xc_leftDiv;
float x10_rightDiv;
};
CHECK_SIZEOF(CInputGenerator, 0x14)
#endif // _CINPUTGENERATOR
+1 -4
View File
@@ -51,10 +51,7 @@ public:
ERestartMode GetRestartMode() const { return restartMode; }
// void SetCardBusy(bool v) { x160_31_cardBusy = v; }
void SetMaxSpeed(bool v) {
// ?
x160_26_screenFading = v;
}
void SetMaxSpeed(bool v); // {x160_26_screenFading = v; }
bool fn_80008A1C();
+40
View File
@@ -0,0 +1,40 @@
#ifndef _CMAINFLOW
#define _CMAINFLOW
#include "types.h"
#include "MetroidPrime/CIOWin.hpp"
enum EClientFlowStates {
kCFS_Unspecified = -1,
kCFS_None = 0,
kCFS_WinBad = 1,
kCFS_WinGood = 2,
kCFS_WinBest = 3,
kCFS_LoseGame = 4,
kCFS_Default = 5,
kCFS_StateSetter = 6,
kCFS_PreFrontEnd = 7,
kCFS_FrontEnd = 8,
kCFS_Game = 14,
kCFS_GameExit = 15
};
class CMainFlow : public CIOWin {
public:
CMainFlow();
~CMainFlow() override;
EMessageReturn OnMessage(const CArchitectureMessage&, CArchitectureQueue&) override;
bool GetIsContinueDraw() const override;
void Draw() const override;
void AdvanceGameState(CArchitectureQueue& queue);
void SetGameState(EClientFlowStates state, CArchitectureQueue& queue);
private:
EClientFlowStates x14_gameState;
};
CHECK_SIZEOF(CMainFlow, 0x18)
#endif // _CMAINFLOW
@@ -0,0 +1,70 @@
#ifndef _CGAMEOPTIONS_HPP
#define _CGAMEOPTIONS_HPP
#include "types.h"
#include "rstl/pair.hpp"
#include "rstl/reserved_vector.hpp"
#include "rstl/vector.hpp"
#include "Kyoto/Audio/CAudioSys.hpp"
#include "Kyoto/SObjectTag.hpp"
#include "MetroidPrime/TGameTypes.hpp"
class CInputStream;
class CMemoryStreamOut;
class CGameOptions {
public:
CGameOptions();
CGameOptions(CInputStream& in);
~CGameOptions();
void PutTo(CMemoryStreamOut&);
void InitSoundMode();
void ResetToDefaults();
void EnsureOptions();
void SetScreenBrightness(int, bool);
float TuneScreenBrightness();
void SetScreenPositionX(int, bool);
void SetScreenPositionY(int, bool);
void SetScreenStretch(int, bool);
void SetSfxVolume(int, bool);
void SetMusicVolume(int, bool);
void SetSurroundMode(CAudioSys::ESurroundModes, bool);
float GetHudAlpha() const;
float GetHelmetAlpha() const;
void SetHelmetAlpha(int);
void SetHUDLag(bool);
void SetIsHintSystemEnabled(bool);
void SetInvertYAxis(bool);
void ToggleControls(bool);
void ResetControllerAssets(int);
void SetControls(int);
void SetIsRumbleEnabled(bool rumble);
bool GetIsRumbleEnabled() const { return rumble; }
private:
int soundMode;
int screenBrightness;
int screenXOffset;
int screenYOffset;
int screenStretch;
uint sfxVol;
uint musicVol;
int hudAlpha;
int helmetAlpha;
bool hudLag : 1;
bool invertY : 1;
bool rumble : 1;
bool swapBeamsControls : 1;
bool hintSystem : 1;
char pad[28];
};
CHECK_SIZEOF(CGameOptions, 0x44)
#endif // _CGAMEOPTIONS_HPP
+7 -1
View File
@@ -5,6 +5,8 @@
#include "MetroidPrime/TGameTypes.hpp"
#include "MetroidPrime/Player/CGameOptions.hpp"
class CGameState {
public:
CGameState();
@@ -14,8 +16,12 @@ public:
void PutTo(COutputStream& out) const;
void WriteSystemOptions(COutputStream& out);
CGameOptions& GameOptions() { return gameOptions; }
private:
char pad[0x2f0];
char pad1[0x80];
CGameOptions gameOptions;
char pad2[0x22c];
};
CHECK_SIZEOF(CGameState, 0x2f0)
@@ -6,6 +6,7 @@
class CTweakGame {
public:
const rstl::string& GetPakFile();
bool GetSplashScreensDisabled();
};
extern CTweakGame* gpTweakGame;
@@ -0,0 +1,13 @@
#ifndef _CTWEAKPLAYER
#define _CTWEAKPLAYER
class CTweakPlayer {
public:
float GetLeftAnalogMax();
float GetRightAnalogMax();
};
extern CTweakPlayer* gpTweakPlayerA;
extern CTweakPlayer* gpTweakPlayerB;
#endif // _CTWEAKPLAYER
+34 -28
View File
@@ -6,11 +6,14 @@
#include "Kyoto/CResFactory.hpp"
#include "Kyoto/CSimplePool.hpp"
#include "Kyoto/Text/CStringTable.hpp"
#include "Kyoto/Audio/CStreamAudioManager.hpp"
#include "MetroidPrime/CGameArchitectureSupport.hpp"
#include "MetroidPrime/CGameGlobalObjects.hpp"
#include "MetroidPrime/Player/CGameState.hpp"
#include "MetroidPrime/Tweaks/CTweakGame.hpp"
#include "MetroidPrime/Tweaks/CTweakPlayer.hpp"
#include "MetroidPrime/CMainFlow.hpp"
class CCharacterFactoryBuilder;
class CGameState;
@@ -84,52 +87,55 @@ void CGameGlobalObjects::LoadStringTable() {
void InfiniteLoopAlarm(OSAlarm* alarm, OSContext* context) {
if (sInfiniteLoopTime >= 10.f) {
OSCancelAlarm(alarm);
rs_debugger_printf("INFINITE LOOP");
}
sInfiniteLoopTime += alarm->period / OS_TIMER_CLOCK;
}
extern "C" void fn_8029EFCC();
extern "C" void fn_8033CEE8();
CGameArchitectureSupport::CGameArchitectureSupport(COsContext& osContext)
: x0_audioSys(0x30, 0x30, 0x30, 0x30, 0x5fc000)
// , x30_inputGenerator(&osContext, gpTweakPlayer->GetLeftAnalogMax(),
// gpTweakPlayer->GetRightAnalogMax())
// , x44_guiSys(gpResourceFactory, gpSimplePool, CGuiSys::kUM_Zero)
, x78_gameFrameCount(0)
, x7c_(0.f)
, x80_(0.f)
, x84_(0.f)
, x88_(2)
, xc8_infiniteLoopAlarmSet(false) {
: audioSys(0x30, 0x30, 0x30, 0x30, 0x5fc000)
, inputGenerator(&osContext, gpTweakPlayerA->GetLeftAnalogMax(),
gpTweakPlayerA->GetRightAnalogMax())
// , guiSys(gpResourceFactory, gpSimplePool, CGuiSys::kUM_Zero)
, gameFrameCount(0)
, x68_(0.f)
, x6c_(0.f)
, x70_(0.f)
// , x74_(2)
, infiniteLoopAlarmSet(false) {
CAudioSys::SysSetVolume(0x7F, 0, 0xFF);
CAudioSys::SetDefaultVolumeScale(0x75);
CAudioSys::SetVolumeScale(CAudioSys::GetDefaultVolumeScale());
// CDSPStreamManager::Initialize();
// CStreamAudioManager::SetMusicVolume(0x7F);
fn_8029EFCC();
fn_8033CEE8();
CStreamAudioManager::SetMusicVolume(0x7F);
CAudioSys::TrkSetSampleRate(kTSR_One);
gpMain->SetMaxSpeed(false);
gpMain->ResetGameState();
// if (!gpTweakGame->GetSplashScreensDisabled()) {
// x58_ioWinMgr.AddIOWin(new CSplashScreen(CSplashScreen::Nintendo), 1000, 10000);
// }
// x58_ioWinMgr.AddIOWin(new CMainFlow(), 0, 0);
// x58_ioWinMgr.AddIOWin(new CConsoleOutputWindow(8, 5.f, 0.75f), 100, 0);
// x58_ioWinMgr.AddIOWin(new CAudioStateWin(), 100, -1);
// x58_ioWinMgr.AddIOWin(new CErrorOutputWindow(false), 10000, 100000);
// InitializeApplicationUI(x44_guiSys);
// CGuiSys::SetGlobalGuiSys(&x44_guiSys);
// gpController = x30_inputGenerator.GetController();
// gpGameState->GameOptions().EnsureOptions();
ioWinMgr.AddIOWin(new CMainFlow(), 0, 0);
// ioWinMgr.AddIOWin(new CConsoleOutputWindow(8, 5.f, 0.75f), 100, 0);
// ioWinMgr.AddIOWin(new CAudioStateWin(), 100, -1);
// ioWinMgr.AddIOWin(new CErrorOutputWindow(false), 10000, 100000);
// InitializeApplicationUI(guiSys);
// CGuiSys::SetGlobalGuiSys(&guiSys);
gpController = inputGenerator.GetController();
gpGameState->GameOptions().EnsureOptions();
sInfiniteLoopTime = 0.f;
OSSetPeriodicAlarm(&xa0_infiniteLoopAlarm, OSGetTime(), (float)OS_TIMER_CLOCK, InfiniteLoopAlarm);
xc8_infiniteLoopAlarmSet = true;
OSSetPeriodicAlarm(&infiniteLoopAlarm, OSGetTime(), (float)OS_TIMER_CLOCK, InfiniteLoopAlarm);
infiniteLoopAlarmSet = true;
}
CGameArchitectureSupport::~CGameArchitectureSupport() {
if (xc8_infiniteLoopAlarmSet) {
OSCancelAlarm(&xa0_infiniteLoopAlarm);
xc8_infiniteLoopAlarmSet = false;
if (infiniteLoopAlarmSet) {
OSCancelAlarm(&infiniteLoopAlarm);
infiniteLoopAlarmSet = false;
}
x58_ioWinMgr.RemoveAllIOWins();
ioWinMgr.RemoveAllIOWins();
UnloadAudio();
// CSfxManager::Shutdown();
// CDSPStreamManager::Shutdown();