mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-10 04:27:42 +00:00
Memory card bug fixes
This commit is contained in:
@@ -184,6 +184,8 @@ void CFrontEndUI::SNewFileSelectFrame::Update(float dt)
|
||||
CFrontEndUI::SNewFileSelectFrame::EAction
|
||||
CFrontEndUI::SNewFileSelectFrame::ProcessUserInput(const CFinalInput& input)
|
||||
{
|
||||
xc_action = EAction::None;
|
||||
|
||||
if (x8_subMenu != ESubMenu::ExistingGamePopup)
|
||||
x4_saveUI->ProcessUserInput(input);
|
||||
|
||||
@@ -957,6 +959,7 @@ void CFrontEndUI::SFusionBonusFrame::Update(float dt, CSaveUI* saveUI)
|
||||
x24_loadedFrame->FindWidget("textpane_proceed")->SetIsVisible(showFusionSuitProceed);
|
||||
|
||||
std::u16string instructionStr;
|
||||
x30_textpane_instructions.x0_panes[0]->TextSupport()->SetFontColor(zeus::CColor::skWhite);
|
||||
if (x28_tablegroup_options->GetUserSelection() == 1)
|
||||
{
|
||||
/* Fusion Suit */
|
||||
@@ -972,12 +975,10 @@ void CFrontEndUI::SFusionBonusFrame::Update(float dt, CSaveUI* saveUI)
|
||||
instructionStr = g_MainStringTable->GetString(79); // You have not completed fusion
|
||||
else if (!g_GameState->SystemOptions().GetPlayerBeatFusion())
|
||||
instructionStr = g_MainStringTable->GetString(77); // To play NES Metroid
|
||||
else if (m_nesUnsupported)
|
||||
else
|
||||
{
|
||||
instructionStr = u"NES Emulator currently unsupported";
|
||||
x30_textpane_instructions.x0_panes[0]->TextSupport()->SetText(instructionStr);
|
||||
x30_textpane_instructions.x0_panes[0]->TextSupport()->SetFontColor(zeus::CColor::skYellow);
|
||||
x30_textpane_instructions.x0_panes[1]->TextSupport()->SetText(instructionStr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1007,7 +1008,6 @@ CFrontEndUI::SFusionBonusFrame::ProcessUserInput(const CFinalInput& input, CSave
|
||||
x39_fusionNotComplete = true;
|
||||
else if (sui)
|
||||
sui->SaveNESState();
|
||||
m_nesUnsupported = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1032,7 +1032,7 @@ void CFrontEndUI::SFusionBonusFrame::Draw() const
|
||||
|
||||
void CFrontEndUI::SFusionBonusFrame::DoCancel(CGuiTableGroup* caller)
|
||||
{
|
||||
if (x39_fusionNotComplete || x3a_mpNotComplete || m_nesUnsupported)
|
||||
if (x39_fusionNotComplete || x3a_mpNotComplete)
|
||||
{
|
||||
CSfxManager::SfxStart(1094, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||
}
|
||||
@@ -1094,16 +1094,10 @@ void CFrontEndUI::SFusionBonusFrame::DoAdvance(CGuiTableGroup* caller)
|
||||
x39_fusionNotComplete = false;
|
||||
PlayAdvanceSfx();
|
||||
}
|
||||
/*
|
||||
else if (g_GameState->SystemOptions().GetPlayerBeatFusion())
|
||||
{
|
||||
x8_action = EAction::PlayNESMetroid;
|
||||
}
|
||||
*/
|
||||
else if (m_nesUnsupported)
|
||||
{
|
||||
m_nesUnsupported = false;
|
||||
PlayAdvanceSfx();
|
||||
x8_action = EAction::None;
|
||||
//x8_action = EAction::PlayNESMetroid;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -241,7 +241,6 @@ public:
|
||||
bool x38_lastDoDraw = false;
|
||||
bool x39_fusionNotComplete = false;
|
||||
bool x3a_mpNotComplete = false;
|
||||
bool m_nesUnsupported = false;
|
||||
|
||||
SFusionBonusFrame();
|
||||
void FinishedLoading();
|
||||
@@ -255,7 +254,6 @@ public:
|
||||
{
|
||||
x39_fusionNotComplete = false;
|
||||
x3a_mpNotComplete = false;
|
||||
m_nesUnsupported = false;
|
||||
}
|
||||
|
||||
void DoCancel(CGuiTableGroup* caller);
|
||||
|
||||
@@ -148,9 +148,9 @@ CMemoryCardDriver::SFileInfo::SFileInfo(kabufuda::ECardSlot port, const std::str
|
||||
: x0_fileInfo(port), x14_name(name) {}
|
||||
|
||||
CMemoryCardDriver::CMemoryCardDriver(kabufuda::ECardSlot cardPort, ResId saveBanner,
|
||||
ResId saveIcon0, ResId saveIcon1, bool inGame)
|
||||
ResId saveIcon0, ResId saveIcon1, bool importPersistent)
|
||||
: x0_cardPort(cardPort), x4_saveBanner(saveBanner),
|
||||
x8_saveIcon0(saveIcon0), xc_saveIcon1(saveIcon1), x19d_inGame(inGame)
|
||||
x8_saveIcon0(saveIcon0), xc_saveIcon1(saveIcon1), x19d_importPersistent(importPersistent)
|
||||
{
|
||||
x100_mcFileInfos.reserve(2);
|
||||
x100_mcFileInfos.emplace_back(EFileState::Unknown, SFileInfo(x0_cardPort, SaveFileNames[0]));
|
||||
@@ -205,7 +205,7 @@ void CMemoryCardDriver::ReadFinished()
|
||||
if (header.x4_savePresent[i])
|
||||
xe4_fileSlots[i] = LoadSaveFile(r);
|
||||
|
||||
if (x19d_inGame)
|
||||
if (x19d_importPersistent)
|
||||
ImportPersistentOptions();
|
||||
}
|
||||
|
||||
@@ -412,6 +412,7 @@ void CMemoryCardDriver::StartFileCreate()
|
||||
return;
|
||||
}
|
||||
|
||||
x194_fileIdx = 0;
|
||||
x198_fileInfo = std::make_unique<CMemoryCardSys::CCardFileInfo>(x0_cardPort, SaveFileNames[x194_fileIdx]);
|
||||
InitializeFileInfo();
|
||||
ECardResult result = x198_fileInfo->CreateFile();
|
||||
@@ -498,7 +499,6 @@ void CMemoryCardDriver::StartCardFormat()
|
||||
|
||||
void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
||||
{
|
||||
printf("MOUNTCARD\n");
|
||||
switch (result)
|
||||
{
|
||||
case ECardResult::READY:
|
||||
@@ -508,7 +508,7 @@ void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
||||
case ECardResult::BROKEN:
|
||||
x10_state = EState::CardMountDone;
|
||||
x14_error = EError::CardBroken;
|
||||
StartCardCheck();
|
||||
//StartCardCheck();
|
||||
break;
|
||||
default:
|
||||
HandleCardError(result, EState::CardMountFailed);
|
||||
@@ -518,7 +518,6 @@ void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateCardProbe()
|
||||
{
|
||||
printf("PROBECARD\n");
|
||||
auto result = CMemoryCardSys::CardProbe(x0_cardPort);
|
||||
switch (result.x0_error)
|
||||
{
|
||||
@@ -546,7 +545,6 @@ void CMemoryCardDriver::UpdateCardProbe()
|
||||
|
||||
void CMemoryCardDriver::UpdateCardCheck(ECardResult result)
|
||||
{
|
||||
printf("CARDCHECK\n");
|
||||
switch (result)
|
||||
{
|
||||
case ECardResult::READY:
|
||||
@@ -568,7 +566,6 @@ void CMemoryCardDriver::UpdateCardCheck(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileDeleteBad(ECardResult result)
|
||||
{
|
||||
printf("DELETEBAD\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
x100_mcFileInfos[x194_fileIdx].first = EFileState::NoFile;
|
||||
@@ -591,7 +588,6 @@ void CMemoryCardDriver::UpdateFileDeleteBad(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileRead(ECardResult result)
|
||||
{
|
||||
printf("FILEREAD\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
auto& fileInfo = x100_mcFileInfos[x194_fileIdx];
|
||||
@@ -636,7 +632,6 @@ void CMemoryCardDriver::UpdateFileRead(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileDeleteAlt(ECardResult result)
|
||||
{
|
||||
printf("DELETEALT\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
x10_state = EState::Ready;
|
||||
@@ -649,7 +644,6 @@ void CMemoryCardDriver::UpdateFileDeleteAlt(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileCreate(ECardResult result)
|
||||
{
|
||||
printf("FILECREATE\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
x10_state = EState::FileCreateDone;
|
||||
@@ -661,7 +655,6 @@ void CMemoryCardDriver::UpdateFileCreate(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
||||
{
|
||||
printf("FILEWRITE\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
ECardResult xferResult = x198_fileInfo->PumpCardTransfer();
|
||||
@@ -669,7 +662,10 @@ void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
||||
{
|
||||
x10_state = EState::Ready;
|
||||
if (x198_fileInfo->CloseFile() == ECardResult::READY)
|
||||
{
|
||||
CMemoryCardSys::CommitToDisk(x0_cardPort);
|
||||
return;
|
||||
}
|
||||
NoCardFound();
|
||||
return;
|
||||
}
|
||||
@@ -689,7 +685,6 @@ void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileCreateTransactional(ECardResult result)
|
||||
{
|
||||
printf("CREATETRANS\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
x10_state = EState::FileCreateTransactionalDone;
|
||||
@@ -701,7 +696,6 @@ void CMemoryCardDriver::UpdateFileCreateTransactional(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileWriteTransactional(ECardResult result)
|
||||
{
|
||||
printf("WRITETRANS\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
ECardResult xferResult = x198_fileInfo->PumpCardTransfer();
|
||||
@@ -732,7 +726,6 @@ void CMemoryCardDriver::UpdateFileWriteTransactional(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileDeleteAltTransactional(ECardResult result)
|
||||
{
|
||||
printf("DELETEALTTRANS\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
x10_state = EState::FileDeleteAltTransactionalDone;
|
||||
@@ -745,10 +738,10 @@ void CMemoryCardDriver::UpdateFileDeleteAltTransactional(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateFileRenameBtoA(ECardResult result)
|
||||
{
|
||||
printf("BTOA\n");
|
||||
if (result == ECardResult::READY)
|
||||
{
|
||||
x10_state = EState::DriverClosed;
|
||||
CMemoryCardSys::CommitToDisk(x0_cardPort);
|
||||
WriteBackupBuf();
|
||||
}
|
||||
else
|
||||
@@ -757,7 +750,6 @@ void CMemoryCardDriver::UpdateFileRenameBtoA(ECardResult result)
|
||||
|
||||
void CMemoryCardDriver::UpdateCardFormat(ECardResult result)
|
||||
{
|
||||
printf("FORMAT\n");
|
||||
if (result == ECardResult::READY)
|
||||
x10_state = EState::CardFormatted;
|
||||
else if (result == ECardResult::BROKEN)
|
||||
|
||||
@@ -139,11 +139,11 @@ private:
|
||||
u32 x194_fileIdx = -1;
|
||||
std::unique_ptr<CMemoryCardSys::CCardFileInfo> x198_fileInfo;
|
||||
bool x19c_ = false;
|
||||
bool x19d_inGame;
|
||||
bool x19d_importPersistent;
|
||||
|
||||
public:
|
||||
CMemoryCardDriver(kabufuda::ECardSlot cardPort, ResId saveBanner,
|
||||
ResId saveIcon0, ResId saveIcon1, bool inGame);
|
||||
ResId saveIcon0, ResId saveIcon1, bool importPersistent);
|
||||
|
||||
void NoCardFound();
|
||||
const CGameState::GameFileStateInfo* GetGameFileStateInfo(int idx);
|
||||
|
||||
@@ -200,11 +200,18 @@ void CSaveUI::SetUIText()
|
||||
{
|
||||
x91_uiTextDirty = false;
|
||||
|
||||
u32 msgA = -1;
|
||||
u32 msgB = -1;
|
||||
u32 opt0 = -1;
|
||||
u32 opt1 = -1;
|
||||
u32 opt2 = -1;
|
||||
s32 msgA = -1;
|
||||
s32 msgB = -1;
|
||||
s32 opt0 = -1;
|
||||
s32 opt1 = -1;
|
||||
s32 opt2 = -1;
|
||||
|
||||
std::u16string msgAStr;
|
||||
std::u16string msgBStr;
|
||||
std::u16string opt0Str;
|
||||
std::u16string opt1Str;
|
||||
std::u16string opt2Str;
|
||||
std::u16string opt3Str;
|
||||
|
||||
switch (x10_uiType)
|
||||
{
|
||||
@@ -218,6 +225,8 @@ void CSaveUI::SetUIText()
|
||||
msgB = 0; // No card found
|
||||
opt0 = 17; // Continue without saving
|
||||
opt1 = 18; // Retry
|
||||
opt2 = -2;
|
||||
opt2Str = u"Create Dolphin Card";
|
||||
break;
|
||||
case EUIType::NeedsFormatBroken:
|
||||
msgB = 1; // Needs format (card broken)
|
||||
@@ -309,30 +318,24 @@ void CSaveUI::SetUIText()
|
||||
default: break;
|
||||
}
|
||||
|
||||
std::u16string msgAStr;
|
||||
if (msgA != -1)
|
||||
if (msgA > -1)
|
||||
msgAStr = x38_strgMemoryCard->GetString(msgA);
|
||||
std::u16string msgBStr;
|
||||
if (msgB != -1)
|
||||
if (msgB > -1)
|
||||
msgBStr = x38_strgMemoryCard->GetString(msgB);
|
||||
x54_textpane_message->TextSupport()->SetText(msgAStr + msgBStr);
|
||||
|
||||
std::u16string opt0Str;
|
||||
if (opt0 != -1)
|
||||
if (opt0 > -1)
|
||||
opt0Str = x38_strgMemoryCard->GetString(opt0);
|
||||
x5c_textpane_choice0->TextSupport()->SetText(opt0Str);
|
||||
|
||||
std::u16string opt1Str;
|
||||
if (opt1 != -1)
|
||||
if (opt1 > -1)
|
||||
opt1Str = x38_strgMemoryCard->GetString(opt1);
|
||||
x60_textpane_choice1->TextSupport()->SetText(opt1Str);
|
||||
|
||||
std::u16string opt2Str;
|
||||
if (opt2 != -1)
|
||||
if (opt2 > -1)
|
||||
opt2Str = x38_strgMemoryCard->GetString(opt2);
|
||||
x64_textpane_choice2->TextSupport()->SetText(opt2Str);
|
||||
|
||||
std::u16string opt3Str;
|
||||
x68_textpane_choice3->TextSupport()->SetText(opt3Str);
|
||||
|
||||
x5c_textpane_choice0->SetIsSelectable(opt0 != -1);
|
||||
@@ -341,6 +344,7 @@ void CSaveUI::SetUIText()
|
||||
x68_textpane_choice3->SetIsSelectable(false);
|
||||
|
||||
x58_tablegroup_choices->SetIsActive(opt0 != -1 || opt1 != -1 || opt2 != -1);
|
||||
x58_tablegroup_choices->SetUserSelection(0);
|
||||
SetUIColors();
|
||||
}
|
||||
|
||||
@@ -388,6 +392,13 @@ void CSaveUI::DoAdvance(CGuiTableGroup* caller)
|
||||
ResetCardDriver();
|
||||
sfx = x84_navConfirmSfx;
|
||||
}
|
||||
else if (userSel == 2 && x10_uiType == EUIType::NoCardFound)
|
||||
{
|
||||
/* Create Dolphin Card */
|
||||
CMemoryCardSys::CreateDolphinCard(kabufuda::ECardSlot::SlotA);
|
||||
ResetCardDriver();
|
||||
sfx = x84_navConfirmSfx;
|
||||
}
|
||||
break;
|
||||
|
||||
case EUIType::NeedsFormatBroken:
|
||||
@@ -651,7 +662,7 @@ CSaveUI::CSaveUI(ESaveContext saveCtx, u64 serial)
|
||||
x38_strgMemoryCard = g_SimplePool->GetObj("STRG_MemoryCard");
|
||||
x44_frmeGenericMenu = g_SimplePool->GetObj("FRME_GenericMenu");
|
||||
|
||||
x6c_cardDriver = ConstructCardDriver(bool(x0_saveCtx));
|
||||
x6c_cardDriver = ConstructCardDriver(x0_saveCtx == ESaveContext::FrontEnd);
|
||||
|
||||
if (saveCtx == ESaveContext::InGame)
|
||||
{
|
||||
@@ -669,12 +680,12 @@ CSaveUI::CSaveUI(ESaveContext saveCtx, u64 serial)
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<CMemoryCardDriver> CSaveUI::ConstructCardDriver(bool inGame)
|
||||
std::unique_ptr<CMemoryCardDriver> CSaveUI::ConstructCardDriver(bool importPersistent)
|
||||
{
|
||||
return std::make_unique<CMemoryCardDriver>(kabufuda::ECardSlot::SlotA,
|
||||
g_ResFactory->GetResourceIdByName("TXTR_SaveBanner")->id,
|
||||
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon0")->id,
|
||||
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon1")->id, inGame);
|
||||
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon1")->id, importPersistent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user