- ISO's for GC games that come with 2 disc are now dumped in 1 folder

- If a 2 disc GC game is launched with Devolution, tell Devolution the location of the 2nd disc*

* Use Wiiflow's game installer to backup your GC game

- Made check for Devolution more safe
- Added some neek2o magic (neek2o r90+ required*):
* Added an exit option to neek2o
* Added an option in gameconfig menu to launch vc/ww titles from wiiflow nand emulation in neek2o instead of cIOS
This commit is contained in:
overjoy.psm 2012-07-22 18:02:56 +00:00
parent 53c5594d29
commit 55e174b512
14 changed files with 2532 additions and 44 deletions

View File

@ -148,13 +148,23 @@ bool DEVO_Installed(const char* path)
FILE *f = fopen(loader_path, "rb");
if(f)
{
devo = true;
u8 *tbuf = (u8 *)MEM2_alloc(0x04);
fread(tbuf, 1, 4, f);
if(*(vu32*)tbuf == 0x4800004c)
devo = true;
MEM2_free(tbuf);
fclose(f);
}
return devo;
}
void DEVO_SetOptions(const char *path, const char *partition, const char* loader, const char *gameID, bool memcard_emu)
void DEVO_ShowReport(void)
{
gprintf("\n%.72s\n\n", (char *)0x93100004);
}
void DEVO_SetOptions(const char *isopath, const char *partition, const char *loader, const char *gameID, bool memcard_emu)
{
//Read in loader.bin
char loader_path[256];
@ -162,6 +172,7 @@ void DEVO_SetOptions(const char *path, const char *partition, const char* loader
FILE *f = fopen(loader_path, "rb");
if(f)
{
gprintf("Read devolution loader: \"%s\"\n", loader_path);
fseek(f, 0, SEEK_END);
u32 size = ftell(f);
rewind(f);
@ -170,15 +181,21 @@ void DEVO_SetOptions(const char *path, const char *partition, const char* loader
DCFlushRange(loader_bin, size);
fclose(f);
}
else
gprintf("Uh oh!! What now?\n");
DEVO_ShowReport();
//start writing cfg to mem
struct stat st;
int data_fd;
char iso2path[256];
stat(path, &st);
FILE *iso_file = fopen(path, "rb");
fread((u8*)0x80000000, 1, 32, iso_file);
fclose(iso_file);
stat(isopath, &st);
f = fopen(isopath, "rb");
gprintf("Read iso file: \"%s\"\n", isopath);
fread((u8*)0x80000000, 1, 32, f);
fclose(f);
// fill out the Devolution config struct
memset(DEVO_CONFIG, 0, sizeof(*DEVO_CONFIG));
@ -187,6 +204,22 @@ void DEVO_SetOptions(const char *path, const char *partition, const char* loader
DEVO_CONFIG->device_signature = st.st_dev;
DEVO_CONFIG->disc1_cluster = st.st_ino;
// If 2nd iso file tell Devo about it
strcpy(iso2path, isopath);
char *ptz = (char *)NULL;
ptz = strstr(iso2path, "game.iso");
if(ptz != NULL)
strncpy(ptz, "gam1.iso", 8);
f = fopen(iso2path, "rb");
if(f)
{
gprintf("Found 2nd iso file for multi DVD game: \"%s\"\n", iso2path);
stat(iso2path, &st);
DEVO_CONFIG->disc2_cluster = st.st_ino;
fclose(f);
}
// make sure these directories exist, they are required for Devolution to function correctly
char full_path[256];
snprintf(full_path, sizeof(full_path), "%s:/apps", partition);

View File

@ -63,11 +63,11 @@ typedef struct global_config
u32 disc2_cluster;
} gconfig;
bool DEVO_Installed(const char* path);
void DEVO_SetOptions(const char* path, const char *partition, const char *loader, const char *gameID, bool memcard_emum);
bool DEVO_Installed(const char *path);
void DEVO_ShowReport(void);
void DEVO_SetOptions(const char *isopath, const char *partition, const char *loader, const char *gameID, bool memcard_emum);
void DEVO_Boot();
// General
void GC_SetVideoMode(u8 videomode, u8 videoSetting);
void GC_SetLanguage(u8 lang);

2230
source/loader/armboot.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -254,6 +254,25 @@ bool GCDump::__WaitForDisc(u8 dsc, u32 msg)
return done;
}
bool GCDump::__CheckMDHack(u32 ID)
{
/********************************************************************/
/**** Because some lazy gamedevs don't set a proper max FST size ****/
/*** on their first disc some games need a hardcoded hack. Please ***/
/****** report unsupported games so we can add an entry for it ******/
/********************************************************************/
switch(ID >> 8)
{
case 0x475153: /*** Tales of Symphonia ***/
return true;
break;
default:
return false;
break;
}
return false;
}
s32 GCDump::DumpGame()
{
static gc_discHdr gcheader ATTRIBUTE_ALIGN(32);
@ -295,25 +314,28 @@ s32 GCDump::DumpGame()
Asciify2(gcheader.title);
snprintf(folder, sizeof(folder), fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition));
if(!fsop_DirExist(folder))
if(!Disc)
{
gprintf("Creating directory: %s\n", folder);
fsop_MakeFolder(folder);
}
memset(folder, 0, sizeof(folder));
snprintf(folder, sizeof(folder), "%s/%s [%.06s]%s", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id, Disc ? "2" : "");
if(!fsop_DirExist(folder))
{
gprintf("Creating directory: %s\n", folder);
fsop_MakeFolder(folder);
}
else
{
gprintf("Skipping game: %s (Already installed)(%d)\n", gcheader.title, Gamesize[MultiGameDump]);
gc_done += Gamesize[MultiGameDump];
MultiGameDump++;
continue;
snprintf(folder, sizeof(folder), fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition));
if(!fsop_DirExist(folder))
{
gprintf("Creating directory: %s\n", folder);
fsop_MakeFolder(folder);
}
memset(folder, 0, sizeof(folder));
snprintf(folder, sizeof(folder), "%s/%s [%.06s]", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id);
if(!fsop_DirExist(folder))
{
gprintf("Creating directory: %s\n", folder);
fsop_MakeFolder(folder);
}
else
{
gprintf("Skipping game: %s (Already installed)(%d)\n", gcheader.title, Gamesize[MultiGameDump]);
gc_done += Gamesize[MultiGameDump];
MultiGameDump++;
continue;
}
}
ret = __DiscReadRaw(ReadBuffer, NextOffset, 0x440);
@ -374,10 +396,10 @@ s32 GCDump::DumpGame()
gprintf("Data Offset : 0x%08x\n", FSTOffset+FSTSize);
gprintf("Disc size : %d\n", DiscSize);
if(writeexfiles)
if(writeexfiles && !Disc)
{
memset(folder, 0, sizeof(folder));
snprintf(folder, sizeof(folder), "%s/%s [%.06s]%s/sys", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id, Disc ? "2" : "");
snprintf(folder, sizeof(folder), "%s/%s [%.06s]/sys", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id);
if(!fsop_DirExist(folder))
{
gprintf("Creating directory: %s\n", folder);
@ -397,7 +419,17 @@ s32 GCDump::DumpGame()
gc_done += __DiscWrite(gamepath, 0x2440+NextOffset, ApploaderSize, ReadBuffer);
}
snprintf(gamepath, sizeof(gamepath), "%s/%s [%.06s]%s/game.iso", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id, Disc ? "2" : "");
if(!Disc)
{
snprintf(gamepath, sizeof(gamepath), "%s/%s [%.06s]/game.iso", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id);
}
else
{
char *ptz = (char *)NULL;
ptz = strstr(gamepath, "game.iso");
if(ptz != NULL)
strncpy(ptz, "gam1.iso", 8);
}
gprintf("Writing %s\n", gamepath);
if(compressed)
@ -480,7 +512,7 @@ s32 GCDump::DumpGame()
}
MEM2_free(FSTBuffer);
if(FSTTotal > FSTSize && !multigamedisc)
if((FSTTotal > FSTSize || __CheckMDHack(ID)) && !multigamedisc)
{
if(Disc)
{
@ -630,7 +662,7 @@ s32 GCDump::CheckSpace(u32 *needed, bool comp)
size += multisize;
Gamesize[MultiGameDump] = multisize;
if(FSTTotal > FSTSize && !multigamedisc)
if((FSTTotal > FSTSize || __CheckMDHack(ID)) && !multigamedisc)
{
if(Disc == 0 && !scnddisc)
__WaitForDisc(1, 1);

View File

@ -132,5 +132,6 @@ private:
s32 __DiscWriteFile(FILE *f, u64 offset, u32 length, u8 *ReadBuffer);
void __AnalizeMultiDisc();
bool __WaitForDisc(u8 dsc, u32 msg);
bool __CheckMDHack(u32 ID);
};
#endif

100
source/loader/nk.c Normal file
View File

@ -0,0 +1,100 @@
/***************************************************************************
* Copyright (C) 2012 OverjoY for Wiiflow
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
* nk.c
*
***************************************************************************/
#include <stdio.h>
#include <ogcsys.h>
#include <string.h>
#include "mem2.hpp"
#include "nk.h"
#include "cios.h"
#include "armboot.h"
s32 Launch_nk(u64 TitleID, const char *nandpath)
{
if(neek2o())
{
SYS_ResetSystem(SYS_RESTART, 0, 0);
return 1;
}
FILE *file = NULL;
long fsize;
file = fopen( "usb1:/sneek/kernel.bin", "rb" );
if(!file)
file = fopen( "sd:/sneek/kernel.bin", "rb" );
if(file)
{
fseek(file , 0 , SEEK_END);
fsize = ftell(file);
rewind(file);
fread((void *)0x91000000, 1, fsize, file);
DCFlushRange((void *)0x91000000, fsize);
}
else
{
return 0;
}
fclose(file);
memcfg *MC = (memcfg*)MEM1_alloc(sizeof(memcfg));
if(MC == NULL)
return 0;
memset(MC, 0, sizeof(memcfg));
MC->magic = 0x666c6f77;
MC->titleid = TitleID;
if(nandpath != NULL)
{
strcpy(MC->nandpath, nandpath);
MC->config |= NCON_EXT_NAND_PATH;
}
memcpy((void *)0x81200000, MC, sizeof(memcfg));
DCFlushRange((void *)(0x81200000), sizeof(memcfg));
MEM1_free(MC);
/*** Thnx giantpune! ***/
void *mini = MEM1_memalign(32, armboot_size);
if(!mini)
return 0;
memcpy(mini, armboot, armboot_size);
DCFlushRange(mini, armboot_size);
*(u32*)0xc150f000 = 0x424d454d;
asm volatile("eieio");
*(u32*)0xc150f004 = MEM_VIRTUAL_TO_PHYSICAL(mini);
asm volatile("eieio");
IOS_ReloadIOS(0xfe);
MEM1_free(mini);
return 1;
}

33
source/loader/nk.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef __NK_H__
#define __NK_H__
enum ExtNANDCfg
{
NCON_EXT_DI_PATH = (1<<0),
NCON_EXT_NAND_PATH = (1<<1),
};
typedef struct _memcfg
{
u32 magic;
u64 titleid;
u32 config;
u32 paddinga;
u32 paddingb;
u32 paddingc;
u32 paddingd;
char dipath[256];
char nandpath[256];
} memcfg;
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
s32 Launch_nk(u64 TitleID, const char *nandpath);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif //__NK_H__

View File

@ -474,6 +474,8 @@ private:
u16 m_gameSettingsLblCustom;
u16 m_gameSettingsBtnCustom;
u16 m_gameSettingsLblLaunchNK;
u16 m_gameSettingsBtnLaunchNK;
u16 m_gameSettingsLblOcarina;
u16 m_gameSettingsBtnOcarina;

View File

@ -58,6 +58,8 @@ void CMenu::_hideGameSettings(bool instant)
m_btnMgr.hide(m_gameSettingsBtnGCLoader_M, instant);
m_btnMgr.hide(m_gameSettingsLblCustom, instant);
m_btnMgr.hide(m_gameSettingsBtnCustom, instant);
m_btnMgr.hide(m_gameSettingsLblLaunchNK, instant);
m_btnMgr.hide(m_gameSettingsBtnLaunchNK, instant);
m_btnMgr.hide(m_gameSettingsLblOcarina, instant);
m_btnMgr.hide(m_gameSettingsBtnOcarina, instant);
m_btnMgr.hide(m_gameSettingsLblCheat, instant);
@ -337,6 +339,8 @@ void CMenu::_showGameSettings(void)
{
m_btnMgr.show(m_gameSettingsLblCustom);
m_btnMgr.show(m_gameSettingsBtnCustom);
m_btnMgr.show(m_gameSettingsLblLaunchNK);
m_btnMgr.show(m_gameSettingsBtnLaunchNK);
}
else if(m_cf.getHdr()->type == TYPE_WII_GAME)
{
@ -359,6 +363,8 @@ void CMenu::_showGameSettings(void)
{
m_btnMgr.hide(m_gameSettingsLblCustom);
m_btnMgr.hide(m_gameSettingsBtnCustom);
m_btnMgr.hide(m_gameSettingsLblLaunchNK);
m_btnMgr.hide(m_gameSettingsBtnLaunchNK);
m_btnMgr.hide(m_gameSettingsLblEmulationVal);
m_btnMgr.hide(m_gameSettingsLblEmulation);
@ -421,6 +427,7 @@ void CMenu::_showGameSettings(void)
i = min((u32)m_gcfg2.getInt(id, "aspect_ratio", 0), ARRAY_SIZE(CMenu::_AspectRatio) - 1u);
m_btnMgr.setText(m_gameSettingsLblAspectRatioVal, _t(CMenu::_AspectRatio[i].id, CMenu::_AspectRatio[i].text));
m_btnMgr.setText(m_gameSettingsBtnCustom, _optBoolToString(m_gcfg2.getOptBool(id, "custom", 0)));
m_btnMgr.setText(m_gameSettingsBtnLaunchNK, _optBoolToString(m_gcfg2.getOptBool(id, "useneek", 0)));
}
int j = 0;
@ -533,6 +540,15 @@ void CMenu::_gameSettings(void)
m_gcfg2.setBool(id, "custom", true);
_showGameSettings();
}
else if (m_btnMgr.selected(m_gameSettingsBtnLaunchNK))
{
bool booloption = m_gcfg2.getBool(id, "useneek");
if (booloption != false)
m_gcfg2.remove(id, "useneek");
else
m_gcfg2.setBool(id, "useneek", true);
_showGameSettings();
}
else if(m_btnMgr.selected(m_gameSettingsBtnDevoMemcardEmu))
{
bool booloption = m_gcfg2.getBool(id, "devo_memcard_emu");
@ -795,6 +811,9 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
m_gameSettingsBtnIOSM = _addPicButton(theme, "GAME_SETTINGS/IOS_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 330, 190, 56, 56);
m_gameSettingsBtnIOSP = _addPicButton(theme, "GAME_SETTINGS/IOS_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 544, 190, 56, 56);
m_gameSettingsLblLaunchNK = _addLabel(theme, "GAME_SETTINGS/LAUNCHNEEK", theme.lblFont, L"", 40, 250, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsBtnLaunchNK = _addButton(theme, "GAME_SETTINGS/LAUNCHNEEK_BTN", theme.btnFont, L"", 330, 250, 240, 56, theme.btnFontColor);
m_gameSettingsLblExtractSave = _addLabel(theme, "GAME_SETTINGS/EXTRACT_SAVE", theme.lblFont, L"", 40, 310, 290, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_gameSettingsBtnExtractSave = _addButton(theme, "GAME_SETTINGS/EXTRACT_SAVE_BTN", theme.btnFont, L"", 330, 310, 270, 56, theme.btnFontColor);
@ -815,6 +834,8 @@ void CMenu::_initGameSettingsMenu(CMenu::SThemeData &theme)
_setHideAnim(m_gameSettingsBtnVideoP, "GAME_SETTINGS/VIDEO_PLUS", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblCustom, "GAME_SETTINGS/CUSTOM", -200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnCustom, "GAME_SETTINGS/CUSTOM_BTN", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblLaunchNK, "GAME_SETTINGS/LAUNCHNEEK", -200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnLaunchNK, "GAME_SETTINGS/LAUNCHNEEK_BTN", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblDMLGameVideo, "GAME_SETTINGS/DML_VIDEO", -200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsLblDMLVideo, "GAME_SETTINGS/DML_VIDEO_BTN", 200, 0, 1.f, 0.f);
_setHideAnim(m_gameSettingsBtnDMLVideoM, "GAME_SETTINGS/DML_VIDEO_MINUS", 200, 0, 1.f, 0.f);
@ -917,6 +938,7 @@ void CMenu::_textGameSettings(void)
m_btnMgr.setText(m_gameSettingsLblNMM, _t("cfgg28", L"NMM"));
m_btnMgr.setText(m_gameSettingsLblNoDVD, _t("cfgg29", L"No DVD Patch"));
m_btnMgr.setText(m_gameSettingsLblCustom, _t("custom", L"Custom"));
m_btnMgr.setText(m_gameSettingsLblLaunchNK, _t("neek1", L"Launch Title with neek2o"));
m_btnMgr.setText(m_gameSettingsLblExtractSave, _t("cfgg30", L"Extract Save from NAND"));
m_btnMgr.setText(m_gameSettingsBtnExtractSave, _t("cfgg31", L"Extract"));
m_btnMgr.setText(m_gameSettingsLblFlashSave, _t("cfgg32", L"Flash Save to NAND"));

View File

@ -33,6 +33,7 @@
#include "gecko.h"
#include "homebrew.h"
#include "types.h"
#include "nk.h"
#include "gc/gc.h"
#include "gc/fileOps.h"
#include "gc/gcdisc.hpp"
@ -1057,11 +1058,24 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
int userIOS = m_gcfg2.getInt(id, "ios", 0);
u64 gameTitle = TITLE_ID(hdr->settings[0],hdr->settings[1]);
bool useNK2o = m_gcfg2.getBool(id, "useneek", false);
m_gcfg1.save(true);
m_gcfg2.save(true);
m_cat.save(true);
m_cfg.save(true);
if(useNK2o && !emu_disabled)
{
cleanup(true);
if(!Launch_nk(gameTitle, emuPath.c_str()))
{
error(_t("errneek1", L"Cannot launch neek2o. Verify your neek2o setup"));
Sys_LoadMenu();
}
while(1);
}
cleanup();
if(!forwarder)
@ -1150,6 +1164,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
{
u32 cover = 0;
#ifndef DOLPHIN
Disc_Init();
if(!neek2o())
{
Disc_SetUSB(NULL, false);

View File

@ -1,6 +1,8 @@
#include "menu.hpp"
#include "svnrev.h"
#include "cios.h"
#include "nk.h"
u32 m_homeLblTitle;
u32 m_exittoLblTitle;
@ -15,6 +17,7 @@ u32 m_homeBtnExitToHBC;
u32 m_homeBtnExitToMenu;
u32 m_homeBtnExitToPriiloader;
u32 m_homeBtnExitToBootmii;
u32 m_homeBtnExitToNeek;
STexture m_homeBg;
@ -125,6 +128,15 @@ bool CMenu::_ExitTo(void)
exitHandler(4);
break;
}
else if(m_btnMgr.selected(m_homeBtnExitToNeek))
{
if(!Launch_nk(0x1000144574641LL, NULL))
{
error(sfmt("errneek1", L"Cannot launch neek2o. Verify your neek2o setup"));
exitHandler(2);
}
break;
}
}
else if(BTN_HOME_PRESSED)
{
@ -159,6 +171,7 @@ void CMenu::_showExitTo(void)
m_btnMgr.show(m_homeBtnExitToMenu);
m_btnMgr.show(m_homeBtnExitToPriiloader);
m_btnMgr.show(m_homeBtnExitToBootmii);
m_btnMgr.show(m_homeBtnExitToNeek);
}
void CMenu::_hideHome(bool instant)
@ -180,6 +193,7 @@ void CMenu::_hideExitTo(bool instant)
m_btnMgr.hide(m_homeBtnExitToMenu, instant);
m_btnMgr.hide(m_homeBtnExitToPriiloader, instant);
m_btnMgr.hide(m_homeBtnExitToBootmii, instant);
m_btnMgr.hide(m_homeBtnExitToNeek, instant);
}
void CMenu::_initHomeAndExitToMenu(CMenu::SThemeData &theme)
@ -216,11 +230,12 @@ void CMenu::_initHomeAndExitToMenu(CMenu::SThemeData &theme)
m_homeBtnExitToMenu = _addButton(theme, "EXIT_TO/MENU", theme.btnFont, L"", 220, 180, 200, 56, theme.btnFontColor);
m_homeBtnExitToPriiloader = _addButton(theme, "EXIT_TO/PRIILOADER", theme.btnFont, L"", 220, 240, 200, 56, theme.btnFontColor);
m_homeBtnExitToBootmii = _addButton(theme, "EXIT_TO/BOOTMII", theme.btnFont, L"", 220, 300, 200, 56, theme.btnFontColor);
m_homeBtnExitToNeek = _addButton(theme, "EXIT_TO/NEEK", theme.btnFont, L"", 220, 360, 200, 56, theme.btnFontColor);
_setHideAnim(m_homeBtnExitToHBC, "EXIT_TO/HBC", 0, 0, -2.f, 0.f);
_setHideAnim(m_homeBtnExitToMenu, "EXIT_TO/MENU", 0, 0, -2.f, 0.f);
_setHideAnim(m_homeBtnExitToPriiloader, "EXIT_TO/PRIILOADER", 0, 0, -2.f, 0.f);
_setHideAnim(m_homeBtnExitToBootmii, "EXIT_TO/BOOTMII", 0, 0, -2.f, 0.f);
_setHideAnim(m_homeBtnExitToNeek, "EXIT_TO/NEEK", 0, 0, -2.f, 0.f);
_textExitTo();
_hideExitTo(true);
@ -245,4 +260,8 @@ void CMenu::_textExitTo(void)
m_btnMgr.setText(m_homeBtnExitToMenu, _t("menu", L"System Menu"));
m_btnMgr.setText(m_homeBtnExitToPriiloader, _t("prii", L"Priiloader"));
m_btnMgr.setText(m_homeBtnExitToBootmii, _t("bootmii", L"Bootmii"));
if(!neek2o())
m_btnMgr.setText(m_homeBtnExitToNeek, _t("neek2o", L"neek2o"));
else
m_btnMgr.setText(m_homeBtnExitToNeek, _t("real", L"Real Nand"));
}

View File

@ -158,7 +158,7 @@ int CMenu::_GCgameInstaller(void *obj)
GCDump m_gcdump;
bool skip = m.m_cfg.getBool("DML", "skip_on_error", false);
bool comp = m.m_cfg.getBool("DML", "compressed_dump", true);
bool comp = m.m_cfg.getBool("DML", "compressed_dump", false);
bool wexf = m.m_cfg.getBool("DML", "write_ex_files", true);
bool alig = m.m_cfg.getBool("DML", "force_32k_align_files", false);
u32 nretry = m.m_cfg.getUInt("DML", "num_retries", 5);
@ -313,6 +313,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
m_btnMgr.show(m_wbfsLblMessage);
m_btnMgr.setText(m_wbfsLblMessage, L"");
Disc_SetUSB(NULL, false);
Disc_Init();
if (Disc_Wait() < 0)
{
error(_t("wbfsoperr1", L"Disc_Wait failed"));

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<pd><ViewState><e p="Wiiflow" x="true"></e><e p="Wiiflow\resources" x="false"></e><e p="Wiiflow\source\devicemounter\libwbfs" x="true"></e><e p="Wiiflow\data" x="false"></e><e p="Wiiflow\scripts" x="false"></e><e p="Wiiflow\source" x="true"></e><e p="Wiiflow\source\network" x="true"></e><e p="Wiiflow\source\channel" x="true"></e><e p="Wiiflow\source\menu" x="true"></e><e p="Wiiflow\docs" x="false"></e><e p="Wiiflow\portlibs" x="false"></e><e p="Wiiflow\source\banner" x="false"></e><e p="Wiiflow\source\cheats" x="true"></e><e p="Wiiflow\source\config" x="true"></e><e p="Wiiflow\source\devicemounter" x="true"></e><e p="Wiiflow\source\gc" x="true"></e><e p="Wiiflow\source\gecko" x="true"></e><e p="Wiiflow\source\gui" x="true"></e><e p="Wiiflow\source\homebrew" x="true"></e><e p="Wiiflow\source\list" x="true"></e><e p="Wiiflow\source\loader" x="true"></e><e p="Wiiflow\source\memory" x="false"></e><e p="Wiiflow\source\music" x="true"></e><e p="Wiiflow\source\plugin" x="true"></e><e p="Wiiflow\source\unzip" x="true"></e><e p="Wiiflow\source\wstringEx" x="false"></e><e p="Wiiflow\wii" x="false"></e></ViewState></pd>
<pd><ViewState><e p="Wiiflow" x="true"></e><e p="Wiiflow\resources" x="false"></e><e p="Wiiflow\source\devicemounter\libwbfs" x="true"></e><e p="Wiiflow\data" x="false"></e><e p="Wiiflow\scripts" x="false"></e><e p="Wiiflow\source" x="true"></e><e p="Wiiflow\source\network" x="true"></e><e p="Wiiflow\source\channel" x="true"></e><e p="Wiiflow\source\menu" x="true"></e><e p="Wiiflow\docs" x="false"></e><e p="Wiiflow\portlibs" x="false"></e><e p="Wiiflow\source\banner" x="false"></e><e p="Wiiflow\source\cheats" x="true"></e><e p="Wiiflow\source\config" x="true"></e><e p="Wiiflow\source\devicemounter" x="true"></e><e p="Wiiflow\source\gc" x="true"></e><e p="Wiiflow\source\gecko" x="true"></e><e p="Wiiflow\source\gui" x="true"></e><e p="Wiiflow\source\homebrew" x="true"></e><e p="Wiiflow\source\list" x="true"></e><e p="Wiiflow\source\loader" x="true"></e><e p="Wiiflow\source\memory" x="true"></e><e p="Wiiflow\source\music" x="true"></e><e p="Wiiflow\source\plugin" x="true"></e><e p="Wiiflow\source\unzip" x="true"></e><e p="Wiiflow\source\wstringEx" x="false"></e><e p="Wiiflow\wii" x="false"></e></ViewState></pd>