Refactor 64DD game loading (supports custom settings and RDB)

(Nothing done for plugins yet)
This commit is contained in:
LuigiBlood 2019-01-25 20:20:59 +01:00
parent cd80e4f0a4
commit 95e31542cf
6 changed files with 113 additions and 108 deletions

View File

@ -374,11 +374,6 @@ bool CN64System::RunFileImage(const char * FileLoc)
{ {
return false; return false;
} }
if (g_Rom == g_DDRom && g_Rom != NULL && g_DDRom != NULL && g_Disk != NULL)
{
g_Settings->SaveString(Game_IniKey, g_Disk->GetDiskIdent().c_str());
g_System->RefreshGameSettings();
}
if (g_Settings->LoadBool(Setting_AutoStart) != 0) if (g_Settings->LoadBool(Setting_AutoStart) != 0)
{ {
WriteTrace(TraceN64System, TraceDebug, "Automattically starting rom"); WriteTrace(TraceN64System, TraceDebug, "Automattically starting rom");
@ -387,6 +382,49 @@ bool CN64System::RunFileImage(const char * FileLoc)
return true; return true;
} }
bool CN64System::RunDiskImage(const char * FileLoc)
{
if (!LoadFileImage(g_Settings->LoadStringVal(File_DiskIPLPath).c_str()))
{
g_Settings->SaveString(File_DiskIPLPath, "");
return false;
}
if (!LoadDiskImage(FileLoc, false))
{
return false;
}
if (g_Settings->LoadBool(Setting_AutoStart) != 0)
{
WriteTrace(TraceN64System, TraceDebug, "Automattically starting rom");
RunLoadedImage();
}
return true;
}
bool CN64System::RunDiskComboImage(const char * FileLoc, const char * FileLocDisk)
{
if (!LoadFileImageIPL(g_Settings->LoadStringVal(File_DiskIPLPath).c_str()))
{
g_Settings->SaveString(File_DiskIPLPath, "");
return false;
}
if (!LoadDiskImage(FileLocDisk, true))
{
return false;
}
if (!LoadFileImage(FileLoc))
{
return false;
}
if (g_Settings->LoadBool(Setting_AutoStart) != 0)
{
WriteTrace(TraceN64System, TraceDebug, "Automattically starting rom");
RunLoadedImage();
}
return true;
}
void CN64System::RunLoadedImage(void) void CN64System::RunLoadedImage(void)
{ {
WriteTrace(TraceN64System, TraceDebug, "Start"); WriteTrace(TraceN64System, TraceDebug, "Start");
@ -402,7 +440,7 @@ void CN64System::RunLoadedImage(void)
WriteTrace(TraceN64System, TraceDebug, "Done"); WriteTrace(TraceN64System, TraceDebug, "Done");
} }
bool CN64System::RunFileImageIPL(const char * FileLoc) bool CN64System::LoadFileImageIPL(const char * FileLoc)
{ {
CloseSystem(); CloseSystem();
if (g_Settings->LoadBool(GameRunning_LoadingInProgress)) if (g_Settings->LoadBool(GameRunning_LoadingInProgress))
@ -459,7 +497,7 @@ bool CN64System::RunFileImageIPL(const char * FileLoc)
return true; return true;
} }
bool CN64System::RunDiskImage(const char * FileLoc, const bool Expansion) bool CN64System::LoadDiskImage(const char * FileLoc, const bool Expansion)
{ {
CloseSystem(); CloseSystem();
if (g_Settings->LoadBool(GameRunning_LoadingInProgress)) if (g_Settings->LoadBool(GameRunning_LoadingInProgress))

View File

@ -59,8 +59,10 @@ public:
//Methods //Methods
static bool LoadFileImage(const char * FileLoc); static bool LoadFileImage(const char * FileLoc);
static bool RunFileImage(const char * FileLoc); static bool RunFileImage(const char * FileLoc);
static bool RunFileImageIPL(const char * FileLoc); static bool RunDiskImage(const char * FileLoc);
static bool RunDiskImage(const char * FileLoc, const bool Expansion); static bool RunDiskComboImage(const char * FileLoc, const char * FileLocDisk);
static bool LoadFileImageIPL(const char * FileLoc);
static bool LoadDiskImage(const char * FileLoc, const bool Expansion);
static void RunLoadedImage(void); static void RunLoadedImage(void);
static void CloseSystem(void); static void CloseSystem(void);

View File

@ -126,20 +126,16 @@ void CMainMenu::OnOpenRom(HWND hWnd)
return; return;
} }
// Open Disk // Open Disk
if (!g_BaseSystem->RunDiskImage(File.c_str(), false)) if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskImage(File.c_str()))
{ {
return; CPath FileNameIPL;
} const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); if (FileNameIPL.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
if ((IPLROM.length() <= 0) || (!g_BaseSystem->RunFileImage(IPLROM.c_str()))) {
{ g_Settings->SaveString(File_DiskIPLPath, (const char *)FileNameIPL);
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; g_BaseSystem->RunDiskImage(File.c_str());
CPath FileName; }
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true)) }
{
g_BaseSystem->RunFileImage(FileName);
}
}
} }
void CMainMenu::OnRomInfo(HWND hWnd) void CMainMenu::OnRomInfo(HWND hWnd)
@ -554,17 +550,14 @@ bool CMainMenu::ProcessMessage(HWND hWnd, DWORD /*FromAccelerator*/, DWORD MenuI
g_BaseSystem->RunFileImage(FileName.c_str()); g_BaseSystem->RunFileImage(FileName.c_str());
else else
{ {
if (g_BaseSystem->RunDiskImage(FileName.c_str(), false)) if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskImage(FileName.c_str()))
{ {
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); CPath FileNameIPL;
if ((IPLROM.length() <= 0) || (!g_BaseSystem->RunFileImage(IPLROM.c_str()))) const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
if (FileNameIPL.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{ {
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; g_Settings->SaveString(File_DiskIPLPath, (const char *)FileNameIPL);
CPath FileNameIPL; g_BaseSystem->RunDiskImage(FileName.c_str());
if (FileNameIPL.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{
g_BaseSystem->RunFileImage(FileNameIPL);
}
} }
} }
} }

View File

@ -989,17 +989,14 @@ LRESULT CALLBACK CMainGui::MainGui_Proc(HWND hWnd, DWORD uMsg, DWORD wParam, DWO
} }
else else
{ {
if (g_BaseSystem->RunDiskImage(_this->CurrentedSelectedRom(), false)) if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskImage(_this->CurrentedSelectedRom()))
{ {
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); CPath FileName;
if ((IPLROM.length() <= 0) || (!g_BaseSystem->RunFileImage(IPLROM.c_str()))) const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{ {
CPath FileName; g_Settings->SaveString(File_DiskIPLPath, (const char *)FileName);
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; g_BaseSystem->RunDiskImage(_this->CurrentedSelectedRom());
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{
g_BaseSystem->RunFileImage(FileName);
}
} }
} }
} }
@ -1007,38 +1004,21 @@ LRESULT CALLBACK CMainGui::MainGui_Proc(HWND hWnd, DWORD uMsg, DWORD wParam, DWO
} }
case ID_POPUPMENU_PLAYGAMEWITHDISK: case ID_POPUPMENU_PLAYGAMEWITHDISK:
{ {
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); CPath FileName;
if ((IPLROM.length() <= 0) || (!g_BaseSystem->RunFileImageIPL(IPLROM.c_str()))) const char * Filter = "N64DD Disk Image (*.ndd)\0*.ndd\0All files (*.*)\0*.*\0";
{ if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; {
CPath FileName; if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskComboImage(_this->CurrentedSelectedRom(), FileName))
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true)) {
{ CPath FileNameIPL;
g_BaseSystem->RunFileImageIPL(FileName); const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
// Open Disk if (FileNameIPL.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
const char * N64DDFilter = "N64DD Disk Image (*.ndd)\0*.ndd\0All files (*.*)\0*.*\0"; {
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), N64DDFilter, true)) g_Settings->SaveString(File_DiskIPLPath, (const char *)FileNameIPL);
{ g_BaseSystem->RunDiskComboImage(_this->CurrentedSelectedRom(), FileName);
if (g_BaseSystem->RunDiskImage(FileName, true)) }
{ }
g_BaseSystem->RunFileImage(_this->CurrentedSelectedRom()); }
}
}
}
}
else
{
// Open Disk
CPath FileName;
const char * Filter = "N64DD Disk Image (*.ndd)\0*.ndd\0All files (*.*)\0*.*\0";
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{
if (g_BaseSystem->RunDiskImage(FileName, true))
{
g_BaseSystem->RunFileImage(_this->CurrentedSelectedRom());
}
}
}
} }
break; break;
case ID_POPUPMENU_ROMDIRECTORY: _this->SelectRomDir(); break; case ID_POPUPMENU_ROMDIRECTORY: _this->SelectRomDir(); break;
@ -1195,19 +1175,16 @@ LRESULT CALLBACK CMainGui::MainGui_Proc(HWND hWnd, DWORD uMsg, DWORD wParam, DWO
else else
{ {
// Open Disk // Open Disk
if (CN64System::RunDiskImage(filename, false)) if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskImage(filename))
{ {
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); CPath FileName;
if ((IPLROM.length() <= 0) || (!CN64System::RunFileImage(IPLROM.c_str()))) const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
{ if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
CPath FileName; {
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; g_Settings->SaveString(File_DiskIPLPath, (const char *)FileName);
if (FileName.SelectFile(hWnd, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true)) g_BaseSystem->RunDiskImage(filename);
{ }
CN64System::RunFileImage(FileName); }
}
}
}
} }
} }
break; break;

View File

@ -811,17 +811,14 @@ void CRomBrowser::RomList_OpenRom(uint32_t /*pnmh*/)
CN64System::RunFileImage(pRomInfo->szFullFileName); CN64System::RunFileImage(pRomInfo->szFullFileName);
else else
{ {
if (CN64System::RunDiskImage(pRomInfo->szFullFileName, false)) if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskImage(pRomInfo->szFullFileName))
{ {
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); CPath FileName;
if ((IPLROM.length() <= 0) || (!CN64System::RunFileImage(IPLROM.c_str()))) const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
if (FileName.SelectFile(m_MainWindow, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{ {
CPath FileName; g_Settings->SaveString(File_DiskIPLPath, (const char *)FileName);
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; g_BaseSystem->RunDiskImage(pRomInfo->szFullFileName);
if (FileName.SelectFile(m_MainWindow, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
{
CN64System::RunFileImage(FileName);
}
} }
} }
} }
@ -887,6 +884,7 @@ void CRomBrowser::RomList_PopupMenu(uint32_t /*pnmh*/)
if (inBasicMode) { DeleteMenu(hPopupMenu, 9, MF_BYPOSITION); } if (inBasicMode) { DeleteMenu(hPopupMenu, 9, MF_BYPOSITION); }
if (inBasicMode && !CheatsRemembered) { DeleteMenu(hPopupMenu, 8, MF_BYPOSITION); } if (inBasicMode && !CheatsRemembered) { DeleteMenu(hPopupMenu, 8, MF_BYPOSITION); }
DeleteMenu(hPopupMenu, 7, MF_BYPOSITION); DeleteMenu(hPopupMenu, 7, MF_BYPOSITION);
if (CPath(m_SelectedRom).GetExtension() == "ndd") { DeleteMenu(hPopupMenu, 1, MF_BYPOSITION); }
if (!inBasicMode && g_Plugins && g_Plugins->Gfx() && g_Plugins->Gfx()->GetRomBrowserMenu != NULL) if (!inBasicMode && g_Plugins && g_Plugins->Gfx() && g_Plugins->Gfx()->GetRomBrowserMenu != NULL)
{ {
HMENU GfxMenu = (HMENU)g_Plugins->Gfx()->GetRomBrowserMenu(); HMENU GfxMenu = (HMENU)g_Plugins->Gfx()->GetRomBrowserMenu();

View File

@ -37,19 +37,16 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /
else else
{ {
//Ext is *.ndd, so it should be a disk file. //Ext is *.ndd, so it should be a disk file.
if (CN64System::RunDiskImage(g_Settings->LoadStringVal(Cmd_RomFile).c_str(), false)) if (!CPath(g_Settings->LoadStringVal(File_DiskIPLPath)).Exists() || !g_BaseSystem->RunDiskImage(g_Settings->LoadStringVal(Cmd_RomFile).c_str()))
{ {
stdstr IPLROM = g_Settings->LoadStringVal(File_DiskIPLPath); CPath FileNameIPL;
if ((IPLROM.length() <= 0) || (!CN64System::RunFileImage(IPLROM.c_str()))) const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0";
{ if (FileNameIPL.SelectFile(NULL, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true))
CPath FileName; {
const char * Filter = "64DD IPL ROM Image (*.zip, *.7z, *.?64, *.rom, *.usa, *.jap, *.pal, *.bin)\0*.?64;*.zip;*.7z;*.bin;*.rom;*.usa;*.jap;*.pal\0All files (*.*)\0*.*\0"; g_Settings->SaveString(File_DiskIPLPath, (const char *)FileNameIPL);
if (FileName.SelectFile(NULL, g_Settings->LoadStringVal(RomList_GameDir).c_str(), Filter, true)) g_BaseSystem->RunDiskImage(g_Settings->LoadStringVal(Cmd_RomFile).c_str());
{ }
CN64System::RunFileImage(FileName); }
}
}
}
} }
} }
else else