diff --git a/include/MetroidPrime/CFrontEndUI.hpp b/include/MetroidPrime/CFrontEndUI.hpp index ccbdce5d..970f5b67 100644 --- a/include/MetroidPrime/CFrontEndUI.hpp +++ b/include/MetroidPrime/CFrontEndUI.hpp @@ -8,7 +8,9 @@ public: CFrontEndUI(); EMessageReturn OnMessage(const CArchitectureMessage& message, CArchitectureQueue& queue); + private: + uchar pad[0xe4]; }; #endif // _CFRONTENDUI diff --git a/include/MetroidPrime/CIOWin.hpp b/include/MetroidPrime/CIOWin.hpp index ba9813ac..61974633 100644 --- a/include/MetroidPrime/CIOWin.hpp +++ b/include/MetroidPrime/CIOWin.hpp @@ -30,4 +30,16 @@ private: rstl::string x4_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 diff --git a/include/MetroidPrime/CMain.hpp b/include/MetroidPrime/CMain.hpp index fcc853b8..97594d60 100644 --- a/include/MetroidPrime/CMain.hpp +++ b/include/MetroidPrime/CMain.hpp @@ -5,9 +5,9 @@ #include "rstl/reserved_vector.hpp" +#include "Kyoto/Alloc/CMemorySys.hpp" #include "Kyoto/Basics/COsContext.hpp" #include "Kyoto/Basics/CStopwatch.hpp" -#include "Kyoto/Alloc/CMemorySys.hpp" #include "Kyoto/Streams/CInputStream.hpp" #include "Kyoto/TReservedAverage.hpp" #include "MetroidPrime/CGameArchitectureSupport.hpp" @@ -87,9 +87,7 @@ public: x160_26_screenFading = v; } - void SetX30(bool v) { - x160_30_ = v; - } + void SetX30(bool v) { x160_30_ = v; } static void EnsureWorldPaksReady(); static void EnsureWorldPakReady(CAssetId id); diff --git a/src/MetroidPrime/CMainFlow.cpp b/src/MetroidPrime/CMainFlow.cpp index 29620bd1..4549f2da 100644 --- a/src/MetroidPrime/CMainFlow.cpp +++ b/src/MetroidPrime/CMainFlow.cpp @@ -23,7 +23,7 @@ CIOWin::EMessageReturn CMainFlow::OnMessage(const CArchitectureMessage& msg, break; case kAM_SetGameState: CArchMsgParmInt32 state = MakeMsg::GetParmNewGameflowState(msg); - SetGameState((EClientFlowStates)state.GetInt32(), queue); + SetGameState(static_cast< EClientFlowStates >(state.GetInt32()), queue); return CIOWin::kMR_Exit; } @@ -60,20 +60,30 @@ void CMainFlow::AdvanceGameState(CArchitectureQueue& queue) { } } +static inline bool IsCreditsMode(CMain::ERestartMode m) { + return m >= CMain::kRM_WinBad && m <= CMain::kRM_LoseGame; +} + void CMainFlow::SetGameState(EClientFlowStates state, CArchitectureQueue& queue) { x14_gameState = state; switch (x14_gameState) { case kCFS_GameExit: { - switch (gpMain->GetRestartMode()) { - case CMain::kRM_WinBad: - case CMain::kRM_WinGood: - case CMain::kRM_WinBest: - queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, 12, 11, new CCredits())); - break; - case CMain::kRM_LoseGame: - queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, 12, 11, - new CPlayMovie(CPlayMovie::kWM_LoseGame))); + CMain::ERestartMode m = gpMain->GetRestartMode(); + if (IsCreditsMode(m)) { + switch (m) { + case CMain::kRM_WinBad: + case CMain::kRM_WinGood: + case CMain::kRM_WinBest: + queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, kFrontEndUIMsgPriority, + kFrontEndUIDrawPriority, new CCredits())); + break; + default: + queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, kFrontEndUIMsgPriority, + kFrontEndUIDrawPriority, + new CPlayMovie(CPlayMovie::kWM_LoseGame))); + break; + } break; default: break; @@ -85,23 +95,29 @@ void CMainFlow::SetGameState(EClientFlowStates state, CArchitectureQueue& queue) break; } - queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, 12, 11, new CPreFrontEnd())); + queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, kFrontEndUIMsgPriority, + kFrontEndUIDrawPriority, new CPreFrontEnd())); break; } case kCFS_FrontEnd: if (gpMain->GetRestartMode() == CMain::kRM_None) { break; } - queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, 12, 11, - gpMain->GetRestartMode() == CMain::kRM_StateSetter - ? (CIOWin*)new CStateSetterFlow() - : (CIOWin*)new CFrontEndUI())); + CIOWin* ioWin; + if (gpMain->GetRestartMode() == CMain::kRM_StateSetter) { + ioWin = new CStateSetterFlow(); + } else { + ioWin = new CFrontEndUI(); + } + queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, kFrontEndUIMsgPriority, + kFrontEndUIDrawPriority, ioWin)); break; case kCFS_Game: gpGameState->GameOptions().EnsureOptions(); - CMFGameLoader* gameFlow = new CMFGameLoader(); + CIOWin* gameFlow = new CMFGameLoader(); gpMain->SetRestartMode(CMain::kRM_Default); - queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, 10, 1000, gameFlow)); + queue.Push(MakeMsg::CreateCreateIOWin(kAMT_IOWinManager, kMFGameMsgPriority, + kMFGameDrawPriority, gameFlow)); break; } }