mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 03:07:41 +00:00
Ensure directories are created late in extract
This commit is contained in:
@@ -7,6 +7,12 @@
|
||||
#include "CFrontEndUI.hpp"
|
||||
#include "GameGlobalObjects.hpp"
|
||||
#include "Character/CCharLayoutInfo.hpp"
|
||||
#include "CSaveUI.hpp"
|
||||
#include "CCredits.hpp"
|
||||
#include "CPreFrontEnd.hpp"
|
||||
#include "CStateSetterFlow.hpp"
|
||||
#include "CNESEmulator.hpp"
|
||||
#include "CQuitScreen.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
@@ -17,61 +23,90 @@ void CMainFlow::AdvanceGameState(CArchitectureQueue& queue)
|
||||
{
|
||||
switch (x14_gameState)
|
||||
{
|
||||
case EClientFlowStates::Unspecified:
|
||||
case EClientFlowStates::Game:
|
||||
CMainFlow::SetGameState(EClientFlowStates::GameExit, queue);
|
||||
break;
|
||||
case EClientFlowStates::PreFrontEnd:
|
||||
CMainFlow::SetGameState(EClientFlowStates::FrontEnd, queue);
|
||||
break;
|
||||
case EClientFlowStates::FrontEnd:
|
||||
CMainFlow::SetGameState(EClientFlowStates::GameLoad, queue);
|
||||
CMainFlow::SetGameState(EClientFlowStates::Game, queue);
|
||||
break;
|
||||
case EClientFlowStates::GameLoad:
|
||||
CMainFlow::SetGameState(EClientFlowStates::MoviePlay, queue);
|
||||
break;
|
||||
case EClientFlowStates::MoviePlay:
|
||||
CMainFlow::SetGameState(EClientFlowStates::FrontEnd, queue);
|
||||
case EClientFlowStates::GameExit:
|
||||
{
|
||||
MP1::CMain* main = static_cast<MP1::CMain*>(g_Main);
|
||||
if (main->GetFlowState() != EFlowState::Zero &&
|
||||
main->GetFlowState() != EFlowState::Six)
|
||||
main->SetX30(true);
|
||||
}
|
||||
case EClientFlowStates::Unspecified:
|
||||
CMainFlow::SetGameState(EClientFlowStates::PreFrontEnd, queue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CMainFlow::SetGameState(EClientFlowStates state, CArchitectureQueue& queue)
|
||||
{
|
||||
x14_gameState = state;
|
||||
MP1::CMain* main = static_cast<MP1::CMain*>(g_Main);
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case EClientFlowStates::FrontEnd:
|
||||
case EClientFlowStates::GameExit:
|
||||
{
|
||||
if (g_Main->GetGameplayResult() == EGameplayResult::None)
|
||||
switch (main->GetFlowState())
|
||||
{
|
||||
g_Main->SetGameplayResult(EGameplayResult::Playing);
|
||||
case EFlowState::One:
|
||||
case EFlowState::Two:
|
||||
case EFlowState::Three:
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11,
|
||||
std::make_shared<CCredits>()));
|
||||
break;
|
||||
}
|
||||
/* TODO: URDE handling
|
||||
CResLoader& loader = g_ResFactory->GetLoader();
|
||||
while (!loader.AreAllPaksLoaded())
|
||||
loader.AsyncIdlePakLoading();
|
||||
*/
|
||||
g_Main->LoadAudio();
|
||||
g_Main->RegisterResourceTweaks();
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11, new CFrontEndUI(queue)));
|
||||
break;
|
||||
}
|
||||
case EClientFlowStates::GameLoad:
|
||||
{
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 10, 1000, new CMFGameLoader()));
|
||||
break;
|
||||
}
|
||||
case EClientFlowStates::MoviePlay:
|
||||
{
|
||||
switch (g_Main->GetGameplayResult())
|
||||
{
|
||||
case EGameplayResult::Win:
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11, new CPlayMovie(CPlayMovie::EWhichMovie::WinGame)));
|
||||
break;
|
||||
case EGameplayResult::Lose:
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11, new CPlayMovie(CPlayMovie::EWhichMovie::LoseGame)));
|
||||
case EFlowState::Four:
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11,
|
||||
std::make_shared<CPlayMovie>(CPlayMovie::EWhichMovie::AfterCredits)));
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EClientFlowStates::PreFrontEnd:
|
||||
{
|
||||
if (main->GetFlowState() == EFlowState::Zero)
|
||||
return;
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11,
|
||||
std::make_shared<CPreFrontEnd>()));
|
||||
break;
|
||||
}
|
||||
case EClientFlowStates::FrontEnd:
|
||||
{
|
||||
std::shared_ptr<CIOWin> nextIOWin;
|
||||
switch (main->GetFlowState())
|
||||
{
|
||||
case EFlowState::Six:
|
||||
nextIOWin = std::make_shared<CStateSetterFlow>();
|
||||
break;
|
||||
case EFlowState::One:
|
||||
case EFlowState::Two:
|
||||
case EFlowState::Three:
|
||||
case EFlowState::Four:
|
||||
case EFlowState::Five:
|
||||
nextIOWin = std::make_shared<CFrontEndUI>();
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 12, 11, std::move(nextIOWin)));
|
||||
break;
|
||||
}
|
||||
case EClientFlowStates::Game:
|
||||
{
|
||||
g_GameState->GameOptions().EnsureSettings();
|
||||
main->SetFlowState(EFlowState::Five);
|
||||
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 10, 1000,
|
||||
std::make_shared<CMFGameLoader>()));
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user