mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-01 00:55:06 +01:00
- 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:
parent
53c5594d29
commit
55e174b512
@ -148,20 +148,31 @@ 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];
|
||||
snprintf(loader_path, sizeof(loader_path), "%s/loader.bin", 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));
|
||||
@ -186,6 +203,22 @@ void DEVO_SetOptions(const char *path, const char *partition, const char* loader
|
||||
DEVO_CONFIG->version = 0x00000100;
|
||||
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];
|
||||
|
@ -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
2230
source/loader/armboot.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -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,8 +419,18 @@ 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);
|
||||
|
@ -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
100
source/loader/nk.c
Normal 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
33
source/loader/nk.h
Normal 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__
|
@ -474,6 +474,8 @@ private:
|
||||
|
||||
u16 m_gameSettingsLblCustom;
|
||||
u16 m_gameSettingsBtnCustom;
|
||||
u16 m_gameSettingsLblLaunchNK;
|
||||
u16 m_gameSettingsBtnLaunchNK;
|
||||
|
||||
u16 m_gameSettingsLblOcarina;
|
||||
u16 m_gameSettingsBtnOcarina;
|
||||
|
@ -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);
|
||||
@ -376,12 +382,12 @@ void CMenu::_showGameSettings(void)
|
||||
if (m_gameSettingsPage == 5)
|
||||
{
|
||||
m_btnMgr.show(m_gameSettingsLblFlashSave);
|
||||
m_btnMgr.show(m_gameSettingsBtnFlashSave);
|
||||
m_btnMgr.show(m_gameSettingsBtnFlashSave);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_btnMgr.hide(m_gameSettingsLblFlashSave);
|
||||
m_btnMgr.hide(m_gameSettingsBtnFlashSave);
|
||||
m_btnMgr.hide(m_gameSettingsBtnFlashSave);
|
||||
}
|
||||
|
||||
u32 i = 0;
|
||||
@ -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"));
|
||||
|
@ -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,17 +1058,30 @@ 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)
|
||||
{
|
||||
if(!emu_disabled)
|
||||
{
|
||||
{
|
||||
Nand::Instance()->Init(emuPath.c_str(), emuPartition, false);
|
||||
Nand::Instance()->Enable_Emu();
|
||||
}
|
||||
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
@ -84,7 +87,7 @@ bool CMenu::_Home(void)
|
||||
}
|
||||
else if(BTN_HOME_PRESSED)
|
||||
{
|
||||
exitHandler(0);
|
||||
exitHandler(0);
|
||||
break;
|
||||
}
|
||||
else if(BTN_B_PRESSED)
|
||||
@ -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)
|
||||
{
|
||||
@ -146,7 +158,7 @@ void CMenu::_showHome(void)
|
||||
m_btnMgr.show(m_homeBtnSettings);
|
||||
m_btnMgr.show(m_homeBtnReloadCache);
|
||||
m_btnMgr.show(m_homeBtnUpdate);
|
||||
m_btnMgr.show(m_homeBtnAbout);
|
||||
m_btnMgr.show(m_homeBtnAbout);
|
||||
m_btnMgr.show(m_homeBtnExitTo);
|
||||
}
|
||||
|
||||
@ -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)
|
||||
@ -168,7 +181,7 @@ void CMenu::_hideHome(bool instant)
|
||||
m_btnMgr.hide(m_homeBtnSettings, instant);
|
||||
m_btnMgr.hide(m_homeBtnReloadCache, instant);
|
||||
m_btnMgr.hide(m_homeBtnUpdate, instant);
|
||||
m_btnMgr.hide(m_homeBtnAbout, instant);
|
||||
m_btnMgr.hide(m_homeBtnAbout, instant);
|
||||
m_btnMgr.hide(m_homeBtnExitTo, 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"));
|
||||
}
|
@ -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
@ -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>
|
Loading…
Reference in New Issue
Block a user