mirror of https://github.com/AxioDL/metaforce.git
Memory card bug fixes
This commit is contained in:
parent
6968d9f0d3
commit
9ea7cee23c
|
@ -365,6 +365,7 @@ bool FRME::Extract(const SpecBase &dataSpec,
|
||||||
"bg_node = bpy.context.scene.world.node_tree.nodes['Background']\n",
|
"bg_node = bpy.context.scene.world.node_tree.nodes['Background']\n",
|
||||||
pakRouter.getBestEntryName(entry).c_str());
|
pakRouter.getBestEntryName(entry).c_str());
|
||||||
|
|
||||||
|
int pIdx = 0;
|
||||||
for (const FRME::Widget& w : frme.widgets)
|
for (const FRME::Widget& w : frme.widgets)
|
||||||
{
|
{
|
||||||
os << "binding = None\n"
|
os << "binding = None\n"
|
||||||
|
@ -532,6 +533,7 @@ bool FRME::Extract(const SpecBase &dataSpec,
|
||||||
}
|
}
|
||||||
|
|
||||||
os.format("frme_obj = bpy.data.objects.new(name='%s', object_data=binding)\n"
|
os.format("frme_obj = bpy.data.objects.new(name='%s', object_data=binding)\n"
|
||||||
|
"frme_obj.pass_index = %d\n"
|
||||||
"parentName = '%s'\n"
|
"parentName = '%s'\n"
|
||||||
"frme_obj.retro_widget_type = 'RETRO_%s'\n"
|
"frme_obj.retro_widget_type = 'RETRO_%s'\n"
|
||||||
"frme_obj.retro_widget_use_anim_controller = %s\n"
|
"frme_obj.retro_widget_use_anim_controller = %s\n"
|
||||||
|
@ -546,7 +548,7 @@ bool FRME::Extract(const SpecBase &dataSpec,
|
||||||
" frme_obj.retro_widget_parent = parentName\n"
|
" frme_obj.retro_widget_parent = parentName\n"
|
||||||
"else:\n"
|
"else:\n"
|
||||||
" frme_obj.parent = bpy.data.objects[parentName]\n",
|
" frme_obj.parent = bpy.data.objects[parentName]\n",
|
||||||
w.header.name.c_str(), w.header.parent.c_str(),
|
w.header.name.c_str(), pIdx++, w.header.parent.c_str(),
|
||||||
w.type.toString().c_str(),
|
w.type.toString().c_str(),
|
||||||
w.header.useAnimController ? "True" : "False",
|
w.header.useAnimController ? "True" : "False",
|
||||||
w.header.defaultVisible ? "True" : "False",
|
w.header.defaultVisible ? "True" : "False",
|
||||||
|
|
|
@ -79,9 +79,6 @@ const CSaveWorldMemory& CMemoryCardSys::GetSaveWorldMemory(ResId wldId) const
|
||||||
|
|
||||||
CMemoryCardSys::CMemoryCardSys()
|
CMemoryCardSys::CMemoryCardSys()
|
||||||
{
|
{
|
||||||
g_CardImagePaths[0] = ResolveDolphinCardPath(kabufuda::ECardSlot::SlotA);
|
|
||||||
g_CardImagePaths[1] = ResolveDolphinCardPath(kabufuda::ECardSlot::SlotB);
|
|
||||||
|
|
||||||
x0_hints = g_SimplePool->GetObj("HINT_Hints");
|
x0_hints = g_SimplePool->GetObj("HINT_Hints");
|
||||||
xc_memoryWorlds.reserve(16);
|
xc_memoryWorlds.reserve(16);
|
||||||
x1c_worldInter.emplace();
|
x1c_worldInter.emplace();
|
||||||
|
@ -340,6 +337,7 @@ ECardResult CMemoryCardSys::CCardFileInfo::WriteFile()
|
||||||
{
|
{
|
||||||
BuildCardBuffer();
|
BuildCardBuffer();
|
||||||
//DCStoreRange(x104_cardBuffer.data(), x104_cardBuffer.size());
|
//DCStoreRange(x104_cardBuffer.data(), x104_cardBuffer.size());
|
||||||
|
x0_status = EStatus::Transferring;
|
||||||
return CMemoryCardSys::WriteFile(m_handle, x104_cardBuffer.data(), x104_cardBuffer.size(), 0);
|
return CMemoryCardSys::WriteFile(m_handle, x104_cardBuffer.data(), x104_cardBuffer.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,6 +348,9 @@ ECardResult CMemoryCardSys::CCardFileInfo::CloseFile()
|
||||||
|
|
||||||
kabufuda::ProbeResults CMemoryCardSys::CardProbe(kabufuda::ECardSlot port)
|
kabufuda::ProbeResults CMemoryCardSys::CardProbe(kabufuda::ECardSlot port)
|
||||||
{
|
{
|
||||||
|
g_CardImagePaths[0] = ResolveDolphinCardPath(kabufuda::ECardSlot::SlotA);
|
||||||
|
g_CardImagePaths[1] = ResolveDolphinCardPath(kabufuda::ECardSlot::SlotB);
|
||||||
|
|
||||||
kabufuda::ProbeResults res = kabufuda::Card::probeCardFile(g_CardImagePaths[int(port)]);
|
kabufuda::ProbeResults res = kabufuda::Card::probeCardFile(g_CardImagePaths[int(port)]);
|
||||||
g_OpResults[int(port)] = res.x0_error;
|
g_OpResults[int(port)] = res.x0_error;
|
||||||
return res;
|
return res;
|
||||||
|
@ -358,13 +359,12 @@ kabufuda::ProbeResults CMemoryCardSys::CardProbe(kabufuda::ECardSlot port)
|
||||||
ECardResult CMemoryCardSys::MountCard(kabufuda::ECardSlot port)
|
ECardResult CMemoryCardSys::MountCard(kabufuda::ECardSlot port)
|
||||||
{
|
{
|
||||||
kabufuda::Card& card = g_CardStates[int(port)];
|
kabufuda::Card& card = g_CardStates[int(port)];
|
||||||
card.commit();
|
card.close();
|
||||||
card = kabufuda::Card(g_CardImagePaths[int(port)], "GM8E", "01");
|
card = kabufuda::Card(g_CardImagePaths[int(port)], "GM8E", "01");
|
||||||
ECardResult result = card.getError();
|
ECardResult result = card.getError();
|
||||||
g_OpResults[int(port)] = result;
|
g_OpResults[int(port)] = result;
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
return ECardResult::READY;
|
return ECardResult::READY;
|
||||||
card = kabufuda::Card();
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,12 +570,12 @@ ECardResult CMemoryCardSys::Rename(kabufuda::ECardSlot port, const char* oldName
|
||||||
ECardResult CMemoryCardSys::FormatCard(kabufuda::ECardSlot port)
|
ECardResult CMemoryCardSys::FormatCard(kabufuda::ECardSlot port)
|
||||||
{
|
{
|
||||||
kabufuda::Card& card = g_CardStates[int(port)];
|
kabufuda::Card& card = g_CardStates[int(port)];
|
||||||
|
card.format(port);
|
||||||
if (CardResult err = card.getError())
|
if (CardResult err = card.getError())
|
||||||
{
|
{
|
||||||
g_OpResults[int(port)] = err;
|
g_OpResults[int(port)] = err;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
card.format(port);
|
|
||||||
g_OpResults[int(port)] = ECardResult::READY;
|
g_OpResults[int(port)] = ECardResult::READY;
|
||||||
return ECardResult::READY;
|
return ECardResult::READY;
|
||||||
}
|
}
|
||||||
|
@ -586,6 +586,15 @@ void CMemoryCardSys::CommitToDisk(kabufuda::ECardSlot port)
|
||||||
card.commit();
|
card.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kabufuda::SystemString CMemoryCardSys::CreateDolphinCard(kabufuda::ECardSlot slot)
|
||||||
|
{
|
||||||
|
kabufuda::SystemString path = _CreateDolphinCard(slot);
|
||||||
|
CardProbe(slot);
|
||||||
|
MountCard(slot);
|
||||||
|
FormatCard(slot);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
void CMemoryCardSys::Shutdown()
|
void CMemoryCardSys::Shutdown()
|
||||||
{
|
{
|
||||||
UnmountCard(kabufuda::ECardSlot::SlotA);
|
UnmountCard(kabufuda::ECardSlot::SlotA);
|
||||||
|
|
|
@ -66,6 +66,8 @@ class CMemoryCardSys
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static kabufuda::SystemString ResolveDolphinCardPath(kabufuda::ECardSlot slot);
|
static kabufuda::SystemString ResolveDolphinCardPath(kabufuda::ECardSlot slot);
|
||||||
|
static kabufuda::SystemString CreateDolphinCard(kabufuda::ECardSlot slot);
|
||||||
|
static kabufuda::SystemString _CreateDolphinCard(kabufuda::ECardSlot slot);
|
||||||
|
|
||||||
using ECardResult = kabufuda::ECardResult;
|
using ECardResult = kabufuda::ECardResult;
|
||||||
struct CardResult
|
struct CardResult
|
||||||
|
|
|
@ -20,4 +20,30 @@ kabufuda::SystemString CMemoryCardSys::ResolveDolphinCardPath(kabufuda::ECardSlo
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kabufuda::SystemString CMemoryCardSys::_CreateDolphinCard(kabufuda::ECardSlot slot)
|
||||||
|
{
|
||||||
|
const char* home = getenv("HOME");
|
||||||
|
if (!home)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
kabufuda::SystemString path = home;
|
||||||
|
path += "/Library/Application Support/Dolphin/GC";
|
||||||
|
if (hecl::RecursiveMakeDir(path.c_str()) < 0)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
path += hecl::Format("/MemoryCard%c.USA.raw",
|
||||||
|
slot == kabufuda::ECardSlot::SlotA ? 'A' : 'B');
|
||||||
|
FILE* fp = hecl::Fopen(path.c_str(), "wb");
|
||||||
|
if (!fp)
|
||||||
|
return {};
|
||||||
|
/*
|
||||||
|
const u32 fword = 0xffffffff;
|
||||||
|
for (int i=0 ; i<0x1000000/4 ; ++i)
|
||||||
|
fwrite(&fword, 1, 4, fp);
|
||||||
|
*/
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -891,7 +891,7 @@ std::unique_ptr<u8[]> CTexture::BuildMemoryCardTex(u32& sizeOut, ETexelFormat& f
|
||||||
int baseX = bx * 4;
|
int baseX = bx * 4;
|
||||||
for (int y=0 ; y<4 ; ++y)
|
for (int y=0 ; y<4 ; ++y)
|
||||||
{
|
{
|
||||||
const RGBA8* source = sourceMip + (baseY + y) * w + baseX;
|
const RGBA8* source = sourceMip + (x6_h - (baseY + y) - 1) * w + baseX;
|
||||||
for (int x=0 ; x<4 ; ++x)
|
for (int x=0 ; x<4 ; ++x)
|
||||||
{
|
{
|
||||||
if (source[x].a == 0xff)
|
if (source[x].a == 0xff)
|
||||||
|
@ -931,8 +931,10 @@ std::unique_ptr<u8[]> CTexture::BuildMemoryCardTex(u32& sizeOut, ETexelFormat& f
|
||||||
for (int i=0; i<256; ++i)
|
for (int i=0; i<256; ++i)
|
||||||
{
|
{
|
||||||
u16& color = paletteColors[i];
|
u16& color = paletteColors[i];
|
||||||
if (i < nentries)
|
if (i >= nentries)
|
||||||
|
{
|
||||||
color = 0;
|
color = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const RGBA8& colorIn = paletteTexels[i];
|
const RGBA8& colorIn = paletteTexels[i];
|
||||||
|
@ -940,7 +942,7 @@ std::unique_ptr<u8[]> CTexture::BuildMemoryCardTex(u32& sizeOut, ETexelFormat& f
|
||||||
{
|
{
|
||||||
color = hecl::SBig(u16((colorIn.r >> 3 << 10) |
|
color = hecl::SBig(u16((colorIn.r >> 3 << 10) |
|
||||||
(colorIn.g >> 3 << 5) |
|
(colorIn.g >> 3 << 5) |
|
||||||
(colorIn.b >> 3)));
|
(colorIn.b >> 3) | 0x8000));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -962,7 +964,7 @@ std::unique_ptr<u8[]> CTexture::BuildMemoryCardTex(u32& sizeOut, ETexelFormat& f
|
||||||
int baseX = bx * 8;
|
int baseX = bx * 8;
|
||||||
for (int y=0 ; y<4 ; ++y)
|
for (int y=0 ; y<4 ; ++y)
|
||||||
{
|
{
|
||||||
const u8* source = sourceMip + (baseY + y) * w + baseX;
|
const u8* source = sourceMip + (x6_h - (baseY + y) - 1) * w + baseX;
|
||||||
for (int x=0 ; x<8 ; ++x)
|
for (int x=0 ; x<8 ; ++x)
|
||||||
*texel++ = source[x];
|
*texel++ = source[x];
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,9 +30,9 @@ s32 CBitStreamReader::ReadEncoded(u32 bitCount)
|
||||||
|
|
||||||
baseVal = (baseVal & (x1c_val >> (32 - x20_bitOffset))) << diff;
|
baseVal = (baseVal & (x1c_val >> (32 - x20_bitOffset))) << diff;
|
||||||
x20_bitOffset = 0;
|
x20_bitOffset = 0;
|
||||||
u32 bit = diff & 7;
|
auto pos = std::div(diff, 8);
|
||||||
u32 count = (diff >> 3) + ((-bit | bit) >> 31);
|
if (pos.rem) ++pos.quot;
|
||||||
readUBytesToBuf(&x1c_val, count);
|
readUBytesToBuf(&x1c_val, pos.quot);
|
||||||
/* The game uses Big Endian, which doesn't work for us */
|
/* The game uses Big Endian, which doesn't work for us */
|
||||||
/* Little Endian sucks */
|
/* Little Endian sucks */
|
||||||
athena::utility::BigUint32(x1c_val);
|
athena::utility::BigUint32(x1c_val);
|
||||||
|
@ -42,7 +42,7 @@ s32 CBitStreamReader::ReadEncoded(u32 bitCount)
|
||||||
baseVal2 = (1 << diff) - 1;
|
baseVal2 = (1 << diff) - 1;
|
||||||
|
|
||||||
ret = baseVal | (baseVal2 & (x1c_val >> (32 - diff))) << x20_bitOffset;
|
ret = baseVal | (baseVal2 & (x1c_val >> (32 - diff))) << x20_bitOffset;
|
||||||
x20_bitOffset = (count << 3) - diff;
|
x20_bitOffset = (pos.quot << 3) - diff;
|
||||||
x1c_val <<= diff;
|
x1c_val <<= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,9 +71,9 @@ void CBitStreamWriter::WriteEncoded(u32 val, u32 bitCount)
|
||||||
x18_bitOffset = 0;
|
x18_bitOffset = 0;
|
||||||
u32 tmp = x14_val;
|
u32 tmp = x14_val;
|
||||||
athena::utility::BigUint32(tmp);
|
athena::utility::BigUint32(tmp);
|
||||||
u32 bit = (32 - x18_bitOffset) & 7;
|
auto pos = std::div(32 - x18_bitOffset, 8);
|
||||||
u32 count = ((32 - x18_bitOffset) >> 3) + ((-bit | bit) >> 31);
|
if (pos.rem) ++pos.quot;
|
||||||
writeBytes(&tmp, count);
|
writeBytes(&tmp, pos.quot);
|
||||||
|
|
||||||
u32 rem = 32 - diff;
|
u32 rem = 32 - diff;
|
||||||
baseVal = -1;
|
baseVal = -1;
|
||||||
|
@ -85,6 +85,20 @@ void CBitStreamWriter::WriteEncoded(u32 val, u32 bitCount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CBitStreamWriter::Flush()
|
||||||
|
{
|
||||||
|
if (x18_bitOffset && x18_bitOffset < 0x20)
|
||||||
|
{
|
||||||
|
u32 tmp = x14_val;
|
||||||
|
athena::utility::BigUint32(tmp);
|
||||||
|
auto pos = std::div(32 - x18_bitOffset, 8);
|
||||||
|
if (pos.rem) ++pos.quot;
|
||||||
|
writeBytes(&tmp, pos.quot);
|
||||||
|
x18_bitOffset = 32;
|
||||||
|
x14_val = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class CZipSupport
|
class CZipSupport
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace urde
|
||||||
using CInputStream = athena::io::IStreamReader;
|
using CInputStream = athena::io::IStreamReader;
|
||||||
using COutputStream = athena::io::IStreamWriter;
|
using COutputStream = athena::io::IStreamWriter;
|
||||||
|
|
||||||
struct CBitStreamReader : athena::io::MemoryCopyReader
|
struct CBitStreamReader : athena::io::MemoryReader
|
||||||
{
|
{
|
||||||
u32 x1c_val = 0;
|
u32 x1c_val = 0;
|
||||||
u32 x20_bitOffset = 0;
|
u32 x20_bitOffset = 0;
|
||||||
|
@ -31,26 +31,21 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
CBitStreamReader(const void* data, atUint64 length)
|
CBitStreamReader(const void* data, atUint64 length)
|
||||||
: MemoryCopyReader(data, length)
|
: MemoryReader(data, length)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CBitStreamReader(const std::string& filename)
|
|
||||||
: MemoryCopyReader(filename)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
atUint64 readUBytesToBuf(void *buf, atUint64 len)
|
atUint64 readUBytesToBuf(void *buf, atUint64 len)
|
||||||
{
|
{
|
||||||
x20_bitOffset = 0;
|
x20_bitOffset = 0;
|
||||||
atUint64 tmp = MemoryCopyReader::readUBytesToBuf(buf, len);
|
atUint64 tmp = MemoryReader::readUBytesToBuf(buf, len);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 ReadEncoded(u32 key);
|
s32 ReadEncoded(u32 key);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CBitStreamWriter : public athena::io::MemoryCopyWriter
|
class CBitStreamWriter : public athena::io::MemoryWriter
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
u32 x14_val = 0;
|
u32 x14_val = 0;
|
||||||
|
@ -59,21 +54,21 @@ public:
|
||||||
static inline u32 GetBitCount(u32 maxVal) { return CBitStreamReader::GetBitCount(maxVal); }
|
static inline u32 GetBitCount(u32 maxVal) { return CBitStreamReader::GetBitCount(maxVal); }
|
||||||
|
|
||||||
CBitStreamWriter(atUint8* data = nullptr, atUint64 length=0x10)
|
CBitStreamWriter(atUint8* data = nullptr, atUint64 length=0x10)
|
||||||
: MemoryCopyWriter(data, length)
|
: MemoryWriter(data, length)
|
||||||
{}
|
|
||||||
|
|
||||||
CBitStreamWriter(const std::string& filename)
|
|
||||||
: MemoryCopyWriter(filename)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void writeUBytes(const atUint8 *data, atUint64 len)
|
void writeUBytes(const atUint8 *data, atUint64 len)
|
||||||
{
|
{
|
||||||
x14_val = 0;
|
x14_val = 0;
|
||||||
x18_bitOffset = 0x20;
|
x18_bitOffset = 0x20;
|
||||||
MemoryCopyWriter::writeUBytes(data, len);
|
MemoryWriter::writeUBytes(data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteEncoded(u32 val, u32 bitCount);
|
void WriteEncoded(u32 val, u32 bitCount);
|
||||||
|
|
||||||
|
void Flush();
|
||||||
|
|
||||||
|
~CBitStreamWriter() { Flush(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
using CMemoryInStream = athena::io::MemoryReader;
|
using CMemoryInStream = athena::io::MemoryReader;
|
||||||
|
|
|
@ -184,6 +184,8 @@ void CFrontEndUI::SNewFileSelectFrame::Update(float dt)
|
||||||
CFrontEndUI::SNewFileSelectFrame::EAction
|
CFrontEndUI::SNewFileSelectFrame::EAction
|
||||||
CFrontEndUI::SNewFileSelectFrame::ProcessUserInput(const CFinalInput& input)
|
CFrontEndUI::SNewFileSelectFrame::ProcessUserInput(const CFinalInput& input)
|
||||||
{
|
{
|
||||||
|
xc_action = EAction::None;
|
||||||
|
|
||||||
if (x8_subMenu != ESubMenu::ExistingGamePopup)
|
if (x8_subMenu != ESubMenu::ExistingGamePopup)
|
||||||
x4_saveUI->ProcessUserInput(input);
|
x4_saveUI->ProcessUserInput(input);
|
||||||
|
|
||||||
|
@ -957,6 +959,7 @@ void CFrontEndUI::SFusionBonusFrame::Update(float dt, CSaveUI* saveUI)
|
||||||
x24_loadedFrame->FindWidget("textpane_proceed")->SetIsVisible(showFusionSuitProceed);
|
x24_loadedFrame->FindWidget("textpane_proceed")->SetIsVisible(showFusionSuitProceed);
|
||||||
|
|
||||||
std::u16string instructionStr;
|
std::u16string instructionStr;
|
||||||
|
x30_textpane_instructions.x0_panes[0]->TextSupport()->SetFontColor(zeus::CColor::skWhite);
|
||||||
if (x28_tablegroup_options->GetUserSelection() == 1)
|
if (x28_tablegroup_options->GetUserSelection() == 1)
|
||||||
{
|
{
|
||||||
/* Fusion Suit */
|
/* Fusion Suit */
|
||||||
|
@ -972,12 +975,10 @@ void CFrontEndUI::SFusionBonusFrame::Update(float dt, CSaveUI* saveUI)
|
||||||
instructionStr = g_MainStringTable->GetString(79); // You have not completed fusion
|
instructionStr = g_MainStringTable->GetString(79); // You have not completed fusion
|
||||||
else if (!g_GameState->SystemOptions().GetPlayerBeatFusion())
|
else if (!g_GameState->SystemOptions().GetPlayerBeatFusion())
|
||||||
instructionStr = g_MainStringTable->GetString(77); // To play NES Metroid
|
instructionStr = g_MainStringTable->GetString(77); // To play NES Metroid
|
||||||
else if (m_nesUnsupported)
|
else
|
||||||
{
|
{
|
||||||
instructionStr = u"NES Emulator currently unsupported";
|
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[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;
|
x39_fusionNotComplete = true;
|
||||||
else if (sui)
|
else if (sui)
|
||||||
sui->SaveNESState();
|
sui->SaveNESState();
|
||||||
m_nesUnsupported = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1032,7 +1032,7 @@ void CFrontEndUI::SFusionBonusFrame::Draw() const
|
||||||
|
|
||||||
void CFrontEndUI::SFusionBonusFrame::DoCancel(CGuiTableGroup* caller)
|
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);
|
CSfxManager::SfxStart(1094, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||||
}
|
}
|
||||||
|
@ -1094,16 +1094,10 @@ void CFrontEndUI::SFusionBonusFrame::DoAdvance(CGuiTableGroup* caller)
|
||||||
x39_fusionNotComplete = false;
|
x39_fusionNotComplete = false;
|
||||||
PlayAdvanceSfx();
|
PlayAdvanceSfx();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
else if (g_GameState->SystemOptions().GetPlayerBeatFusion())
|
else if (g_GameState->SystemOptions().GetPlayerBeatFusion())
|
||||||
{
|
{
|
||||||
x8_action = EAction::PlayNESMetroid;
|
x8_action = EAction::None;
|
||||||
}
|
//x8_action = EAction::PlayNESMetroid;
|
||||||
*/
|
|
||||||
else if (m_nesUnsupported)
|
|
||||||
{
|
|
||||||
m_nesUnsupported = false;
|
|
||||||
PlayAdvanceSfx();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -241,7 +241,6 @@ public:
|
||||||
bool x38_lastDoDraw = false;
|
bool x38_lastDoDraw = false;
|
||||||
bool x39_fusionNotComplete = false;
|
bool x39_fusionNotComplete = false;
|
||||||
bool x3a_mpNotComplete = false;
|
bool x3a_mpNotComplete = false;
|
||||||
bool m_nesUnsupported = false;
|
|
||||||
|
|
||||||
SFusionBonusFrame();
|
SFusionBonusFrame();
|
||||||
void FinishedLoading();
|
void FinishedLoading();
|
||||||
|
@ -255,7 +254,6 @@ public:
|
||||||
{
|
{
|
||||||
x39_fusionNotComplete = false;
|
x39_fusionNotComplete = false;
|
||||||
x3a_mpNotComplete = false;
|
x3a_mpNotComplete = false;
|
||||||
m_nesUnsupported = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoCancel(CGuiTableGroup* caller);
|
void DoCancel(CGuiTableGroup* caller);
|
||||||
|
|
|
@ -148,9 +148,9 @@ CMemoryCardDriver::SFileInfo::SFileInfo(kabufuda::ECardSlot port, const std::str
|
||||||
: x0_fileInfo(port), x14_name(name) {}
|
: x0_fileInfo(port), x14_name(name) {}
|
||||||
|
|
||||||
CMemoryCardDriver::CMemoryCardDriver(kabufuda::ECardSlot cardPort, ResId saveBanner,
|
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),
|
: 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.reserve(2);
|
||||||
x100_mcFileInfos.emplace_back(EFileState::Unknown, SFileInfo(x0_cardPort, SaveFileNames[0]));
|
x100_mcFileInfos.emplace_back(EFileState::Unknown, SFileInfo(x0_cardPort, SaveFileNames[0]));
|
||||||
|
@ -205,7 +205,7 @@ void CMemoryCardDriver::ReadFinished()
|
||||||
if (header.x4_savePresent[i])
|
if (header.x4_savePresent[i])
|
||||||
xe4_fileSlots[i] = LoadSaveFile(r);
|
xe4_fileSlots[i] = LoadSaveFile(r);
|
||||||
|
|
||||||
if (x19d_inGame)
|
if (x19d_importPersistent)
|
||||||
ImportPersistentOptions();
|
ImportPersistentOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,6 +412,7 @@ void CMemoryCardDriver::StartFileCreate()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x194_fileIdx = 0;
|
||||||
x198_fileInfo = std::make_unique<CMemoryCardSys::CCardFileInfo>(x0_cardPort, SaveFileNames[x194_fileIdx]);
|
x198_fileInfo = std::make_unique<CMemoryCardSys::CCardFileInfo>(x0_cardPort, SaveFileNames[x194_fileIdx]);
|
||||||
InitializeFileInfo();
|
InitializeFileInfo();
|
||||||
ECardResult result = x198_fileInfo->CreateFile();
|
ECardResult result = x198_fileInfo->CreateFile();
|
||||||
|
@ -498,7 +499,6 @@ void CMemoryCardDriver::StartCardFormat()
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("MOUNTCARD\n");
|
|
||||||
switch (result)
|
switch (result)
|
||||||
{
|
{
|
||||||
case ECardResult::READY:
|
case ECardResult::READY:
|
||||||
|
@ -508,7 +508,7 @@ void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
||||||
case ECardResult::BROKEN:
|
case ECardResult::BROKEN:
|
||||||
x10_state = EState::CardMountDone;
|
x10_state = EState::CardMountDone;
|
||||||
x14_error = EError::CardBroken;
|
x14_error = EError::CardBroken;
|
||||||
StartCardCheck();
|
//StartCardCheck();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
HandleCardError(result, EState::CardMountFailed);
|
HandleCardError(result, EState::CardMountFailed);
|
||||||
|
@ -518,7 +518,6 @@ void CMemoryCardDriver::UpdateMountCard(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateCardProbe()
|
void CMemoryCardDriver::UpdateCardProbe()
|
||||||
{
|
{
|
||||||
printf("PROBECARD\n");
|
|
||||||
auto result = CMemoryCardSys::CardProbe(x0_cardPort);
|
auto result = CMemoryCardSys::CardProbe(x0_cardPort);
|
||||||
switch (result.x0_error)
|
switch (result.x0_error)
|
||||||
{
|
{
|
||||||
|
@ -546,7 +545,6 @@ void CMemoryCardDriver::UpdateCardProbe()
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateCardCheck(ECardResult result)
|
void CMemoryCardDriver::UpdateCardCheck(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("CARDCHECK\n");
|
|
||||||
switch (result)
|
switch (result)
|
||||||
{
|
{
|
||||||
case ECardResult::READY:
|
case ECardResult::READY:
|
||||||
|
@ -568,7 +566,6 @@ void CMemoryCardDriver::UpdateCardCheck(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileDeleteBad(ECardResult result)
|
void CMemoryCardDriver::UpdateFileDeleteBad(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("DELETEBAD\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
x100_mcFileInfos[x194_fileIdx].first = EFileState::NoFile;
|
x100_mcFileInfos[x194_fileIdx].first = EFileState::NoFile;
|
||||||
|
@ -591,7 +588,6 @@ void CMemoryCardDriver::UpdateFileDeleteBad(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileRead(ECardResult result)
|
void CMemoryCardDriver::UpdateFileRead(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("FILEREAD\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
auto& fileInfo = x100_mcFileInfos[x194_fileIdx];
|
auto& fileInfo = x100_mcFileInfos[x194_fileIdx];
|
||||||
|
@ -636,7 +632,6 @@ void CMemoryCardDriver::UpdateFileRead(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileDeleteAlt(ECardResult result)
|
void CMemoryCardDriver::UpdateFileDeleteAlt(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("DELETEALT\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
x10_state = EState::Ready;
|
x10_state = EState::Ready;
|
||||||
|
@ -649,7 +644,6 @@ void CMemoryCardDriver::UpdateFileDeleteAlt(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileCreate(ECardResult result)
|
void CMemoryCardDriver::UpdateFileCreate(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("FILECREATE\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
x10_state = EState::FileCreateDone;
|
x10_state = EState::FileCreateDone;
|
||||||
|
@ -661,7 +655,6 @@ void CMemoryCardDriver::UpdateFileCreate(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("FILEWRITE\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
ECardResult xferResult = x198_fileInfo->PumpCardTransfer();
|
ECardResult xferResult = x198_fileInfo->PumpCardTransfer();
|
||||||
|
@ -669,7 +662,10 @@ void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
||||||
{
|
{
|
||||||
x10_state = EState::Ready;
|
x10_state = EState::Ready;
|
||||||
if (x198_fileInfo->CloseFile() == ECardResult::READY)
|
if (x198_fileInfo->CloseFile() == ECardResult::READY)
|
||||||
|
{
|
||||||
|
CMemoryCardSys::CommitToDisk(x0_cardPort);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
NoCardFound();
|
NoCardFound();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -689,7 +685,6 @@ void CMemoryCardDriver::UpdateFileWrite(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileCreateTransactional(ECardResult result)
|
void CMemoryCardDriver::UpdateFileCreateTransactional(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("CREATETRANS\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
x10_state = EState::FileCreateTransactionalDone;
|
x10_state = EState::FileCreateTransactionalDone;
|
||||||
|
@ -701,7 +696,6 @@ void CMemoryCardDriver::UpdateFileCreateTransactional(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileWriteTransactional(ECardResult result)
|
void CMemoryCardDriver::UpdateFileWriteTransactional(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("WRITETRANS\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
ECardResult xferResult = x198_fileInfo->PumpCardTransfer();
|
ECardResult xferResult = x198_fileInfo->PumpCardTransfer();
|
||||||
|
@ -732,7 +726,6 @@ void CMemoryCardDriver::UpdateFileWriteTransactional(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileDeleteAltTransactional(ECardResult result)
|
void CMemoryCardDriver::UpdateFileDeleteAltTransactional(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("DELETEALTTRANS\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
x10_state = EState::FileDeleteAltTransactionalDone;
|
x10_state = EState::FileDeleteAltTransactionalDone;
|
||||||
|
@ -745,10 +738,10 @@ void CMemoryCardDriver::UpdateFileDeleteAltTransactional(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateFileRenameBtoA(ECardResult result)
|
void CMemoryCardDriver::UpdateFileRenameBtoA(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("BTOA\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
{
|
{
|
||||||
x10_state = EState::DriverClosed;
|
x10_state = EState::DriverClosed;
|
||||||
|
CMemoryCardSys::CommitToDisk(x0_cardPort);
|
||||||
WriteBackupBuf();
|
WriteBackupBuf();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -757,7 +750,6 @@ void CMemoryCardDriver::UpdateFileRenameBtoA(ECardResult result)
|
||||||
|
|
||||||
void CMemoryCardDriver::UpdateCardFormat(ECardResult result)
|
void CMemoryCardDriver::UpdateCardFormat(ECardResult result)
|
||||||
{
|
{
|
||||||
printf("FORMAT\n");
|
|
||||||
if (result == ECardResult::READY)
|
if (result == ECardResult::READY)
|
||||||
x10_state = EState::CardFormatted;
|
x10_state = EState::CardFormatted;
|
||||||
else if (result == ECardResult::BROKEN)
|
else if (result == ECardResult::BROKEN)
|
||||||
|
|
|
@ -139,11 +139,11 @@ private:
|
||||||
u32 x194_fileIdx = -1;
|
u32 x194_fileIdx = -1;
|
||||||
std::unique_ptr<CMemoryCardSys::CCardFileInfo> x198_fileInfo;
|
std::unique_ptr<CMemoryCardSys::CCardFileInfo> x198_fileInfo;
|
||||||
bool x19c_ = false;
|
bool x19c_ = false;
|
||||||
bool x19d_inGame;
|
bool x19d_importPersistent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMemoryCardDriver(kabufuda::ECardSlot cardPort, ResId saveBanner,
|
CMemoryCardDriver(kabufuda::ECardSlot cardPort, ResId saveBanner,
|
||||||
ResId saveIcon0, ResId saveIcon1, bool inGame);
|
ResId saveIcon0, ResId saveIcon1, bool importPersistent);
|
||||||
|
|
||||||
void NoCardFound();
|
void NoCardFound();
|
||||||
const CGameState::GameFileStateInfo* GetGameFileStateInfo(int idx);
|
const CGameState::GameFileStateInfo* GetGameFileStateInfo(int idx);
|
||||||
|
|
|
@ -200,11 +200,18 @@ void CSaveUI::SetUIText()
|
||||||
{
|
{
|
||||||
x91_uiTextDirty = false;
|
x91_uiTextDirty = false;
|
||||||
|
|
||||||
u32 msgA = -1;
|
s32 msgA = -1;
|
||||||
u32 msgB = -1;
|
s32 msgB = -1;
|
||||||
u32 opt0 = -1;
|
s32 opt0 = -1;
|
||||||
u32 opt1 = -1;
|
s32 opt1 = -1;
|
||||||
u32 opt2 = -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)
|
switch (x10_uiType)
|
||||||
{
|
{
|
||||||
|
@ -218,6 +225,8 @@ void CSaveUI::SetUIText()
|
||||||
msgB = 0; // No card found
|
msgB = 0; // No card found
|
||||||
opt0 = 17; // Continue without saving
|
opt0 = 17; // Continue without saving
|
||||||
opt1 = 18; // Retry
|
opt1 = 18; // Retry
|
||||||
|
opt2 = -2;
|
||||||
|
opt2Str = u"Create Dolphin Card";
|
||||||
break;
|
break;
|
||||||
case EUIType::NeedsFormatBroken:
|
case EUIType::NeedsFormatBroken:
|
||||||
msgB = 1; // Needs format (card broken)
|
msgB = 1; // Needs format (card broken)
|
||||||
|
@ -309,30 +318,24 @@ void CSaveUI::SetUIText()
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::u16string msgAStr;
|
if (msgA > -1)
|
||||||
if (msgA != -1)
|
|
||||||
msgAStr = x38_strgMemoryCard->GetString(msgA);
|
msgAStr = x38_strgMemoryCard->GetString(msgA);
|
||||||
std::u16string msgBStr;
|
if (msgB > -1)
|
||||||
if (msgB != -1)
|
|
||||||
msgBStr = x38_strgMemoryCard->GetString(msgB);
|
msgBStr = x38_strgMemoryCard->GetString(msgB);
|
||||||
x54_textpane_message->TextSupport()->SetText(msgAStr + msgBStr);
|
x54_textpane_message->TextSupport()->SetText(msgAStr + msgBStr);
|
||||||
|
|
||||||
std::u16string opt0Str;
|
if (opt0 > -1)
|
||||||
if (opt0 != -1)
|
|
||||||
opt0Str = x38_strgMemoryCard->GetString(opt0);
|
opt0Str = x38_strgMemoryCard->GetString(opt0);
|
||||||
x5c_textpane_choice0->TextSupport()->SetText(opt0Str);
|
x5c_textpane_choice0->TextSupport()->SetText(opt0Str);
|
||||||
|
|
||||||
std::u16string opt1Str;
|
if (opt1 > -1)
|
||||||
if (opt1 != -1)
|
|
||||||
opt1Str = x38_strgMemoryCard->GetString(opt1);
|
opt1Str = x38_strgMemoryCard->GetString(opt1);
|
||||||
x60_textpane_choice1->TextSupport()->SetText(opt1Str);
|
x60_textpane_choice1->TextSupport()->SetText(opt1Str);
|
||||||
|
|
||||||
std::u16string opt2Str;
|
if (opt2 > -1)
|
||||||
if (opt2 != -1)
|
|
||||||
opt2Str = x38_strgMemoryCard->GetString(opt2);
|
opt2Str = x38_strgMemoryCard->GetString(opt2);
|
||||||
x64_textpane_choice2->TextSupport()->SetText(opt2Str);
|
x64_textpane_choice2->TextSupport()->SetText(opt2Str);
|
||||||
|
|
||||||
std::u16string opt3Str;
|
|
||||||
x68_textpane_choice3->TextSupport()->SetText(opt3Str);
|
x68_textpane_choice3->TextSupport()->SetText(opt3Str);
|
||||||
|
|
||||||
x5c_textpane_choice0->SetIsSelectable(opt0 != -1);
|
x5c_textpane_choice0->SetIsSelectable(opt0 != -1);
|
||||||
|
@ -341,6 +344,7 @@ void CSaveUI::SetUIText()
|
||||||
x68_textpane_choice3->SetIsSelectable(false);
|
x68_textpane_choice3->SetIsSelectable(false);
|
||||||
|
|
||||||
x58_tablegroup_choices->SetIsActive(opt0 != -1 || opt1 != -1 || opt2 != -1);
|
x58_tablegroup_choices->SetIsActive(opt0 != -1 || opt1 != -1 || opt2 != -1);
|
||||||
|
x58_tablegroup_choices->SetUserSelection(0);
|
||||||
SetUIColors();
|
SetUIColors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,6 +392,13 @@ void CSaveUI::DoAdvance(CGuiTableGroup* caller)
|
||||||
ResetCardDriver();
|
ResetCardDriver();
|
||||||
sfx = x84_navConfirmSfx;
|
sfx = x84_navConfirmSfx;
|
||||||
}
|
}
|
||||||
|
else if (userSel == 2 && x10_uiType == EUIType::NoCardFound)
|
||||||
|
{
|
||||||
|
/* Create Dolphin Card */
|
||||||
|
CMemoryCardSys::CreateDolphinCard(kabufuda::ECardSlot::SlotA);
|
||||||
|
ResetCardDriver();
|
||||||
|
sfx = x84_navConfirmSfx;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EUIType::NeedsFormatBroken:
|
case EUIType::NeedsFormatBroken:
|
||||||
|
@ -651,7 +662,7 @@ CSaveUI::CSaveUI(ESaveContext saveCtx, u64 serial)
|
||||||
x38_strgMemoryCard = g_SimplePool->GetObj("STRG_MemoryCard");
|
x38_strgMemoryCard = g_SimplePool->GetObj("STRG_MemoryCard");
|
||||||
x44_frmeGenericMenu = g_SimplePool->GetObj("FRME_GenericMenu");
|
x44_frmeGenericMenu = g_SimplePool->GetObj("FRME_GenericMenu");
|
||||||
|
|
||||||
x6c_cardDriver = ConstructCardDriver(bool(x0_saveCtx));
|
x6c_cardDriver = ConstructCardDriver(x0_saveCtx == ESaveContext::FrontEnd);
|
||||||
|
|
||||||
if (saveCtx == ESaveContext::InGame)
|
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,
|
return std::make_unique<CMemoryCardDriver>(kabufuda::ECardSlot::SlotA,
|
||||||
g_ResFactory->GetResourceIdByName("TXTR_SaveBanner")->id,
|
g_ResFactory->GetResourceIdByName("TXTR_SaveBanner")->id,
|
||||||
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon0")->id,
|
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon0")->id,
|
||||||
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon1")->id, inGame);
|
g_ResFactory->GetResourceIdByName("TXTR_SaveIcon1")->id, importPersistent);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
2
hecl
2
hecl
|
@ -1 +1 @@
|
||||||
Subproject commit 8915d494174c221673badcdb25e37fd43d98af88
|
Subproject commit afe419a5e923885105a1a26ca21bf87fa7a881c7
|
2
kabufuda
2
kabufuda
|
@ -1 +1 @@
|
||||||
Subproject commit 11d1c676c4b776561bcfa3960a89c2d0775254fa
|
Subproject commit 537cceca49bbcc2a71ec9eafd156b5e2496cc31f
|
Loading…
Reference in New Issue