mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-23 19:59:16 +01:00
- fixed nintendont video and language selecting per game. seems their 'key' names were different in config_game.cpp and menu_game.cpp so when you changed them in settings it didn't matter because launching a game used a different setting name. this is fixed now. if you used the global defaults you would have never noticed this.
- fixed using force progressive patch for nintendont. so when you select a 480p or pal480p video mode it actually turns on progressive mode. only works on certain games just like nintendont. tested on rampage total destruction and working. - fixed led option for nintendont. seems the setting was there in game settings but was not used when launching a game. - added skip IPL option per game. used to skip the GC or triforce BIOS if you have it installed. some games may not work with the BIOS so you can set those to skip it. - added wiimote CC rumble option per game. this works only with wii CC or CCpro and will only make the wiimote vibrate in case you didn't know. - auto set native control and led to off if on Wii U. they only work on Wii. - WiiFlow Lite now ALWAYS uses Nintendont Args config and only work with nintendont v3.358+. - removed USB HID option since nintendont auto detects usb controllers since v3.304+
This commit is contained in:
parent
00ee2477ec
commit
97b79238a3
BIN
out/boot.dol
BIN
out/boot.dol
Binary file not shown.
Before Width: | Height: | Size: 3.1 MiB After Width: | Height: | Size: 3.1 MiB |
185
source/gc/gc.cpp
185
source/gc/gc.cpp
@ -38,19 +38,21 @@
|
||||
#include "memory/memory.h"
|
||||
#include "memory/mem2.hpp"
|
||||
|
||||
/* since Nintendont v1.98 argsboot is supported. and since wiiflow lite doesn't support versions less than v3.358
|
||||
we will use argsboot every time. */
|
||||
|
||||
// Nintendont
|
||||
NIN_CFG NinCfg;
|
||||
u8 NinDevice = 0;
|
||||
bool NinArgsboot = false;
|
||||
|
||||
void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath,char *NewCheatPath, const char *partition,
|
||||
bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker,
|
||||
bool wiiu_widescreen, bool NIN_Debugger, bool tri_arcade)
|
||||
void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath, char *NewCheatPath, const char *partition,
|
||||
bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool led, bool native_ctl, bool deflicker, bool wiiu_widescreen,
|
||||
bool NIN_Debugger, bool tri_arcade, bool cc_rumble, bool ipl)
|
||||
{
|
||||
NinDevice = DeviceHandle.PathToDriveType(game);
|
||||
//clear nincfg and set magicbytes now in case of return when NINRev=0 below
|
||||
memset(&NinCfg, 0, sizeof(NIN_CFG));
|
||||
NinCfg.Magicbytes = 0x01070CF6;
|
||||
NinCfg.MemCardBlocks = 0x2;//251 blocks
|
||||
|
||||
//check version
|
||||
u32 NIN_cfg_version = NIN_CFG_VERSION;
|
||||
@ -61,123 +63,95 @@ void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath
|
||||
const char *dol_path = fmt(NIN_LOADER_PATH, DeviceName[i]);
|
||||
if(!fsop_FileExist(dol_path))
|
||||
continue;
|
||||
//u8 *buffer = NULL;
|
||||
u8 *buffer = NULL;
|
||||
u32 filesize = 0;
|
||||
const char *str = "$$Version:";
|
||||
u8 *buffer = fsop_ReadFile(dol_path, &filesize);
|
||||
buffer = fsop_ReadFile(dol_path, &filesize);
|
||||
// if buffer is NULL then out of memory - hopefully that doesn't happen and shouldn't
|
||||
for(u32 i = 0; i < filesize; i += 32)
|
||||
{
|
||||
if(memcmp(buffer+i, str, strlen(str)) == 0)
|
||||
{
|
||||
// Write buffer in NINVersion
|
||||
// get nintendont version (NINVersion) from current position in nintendont boot.dol (buffer)
|
||||
snprintf(NINVersion, sizeof(NINVersion), "%s", buffer+i+strlen(str));
|
||||
// get revision from version and use it to get NinCfg version
|
||||
NINRev = atoi(strchr(NINVersion, '.')+1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(buffer);
|
||||
break;
|
||||
/*u32 filesize = 0;
|
||||
u8 *buffer = fsop_ReadFile(dol_path, &filesize);
|
||||
char NINversion[21];
|
||||
for(u32 i = 0; i < filesize-60; ++i)
|
||||
{
|
||||
// Nintendont Loader..Built : %s %s..Jan 10 2014.11:21:01
|
||||
if((*(vu32*)(buffer+i+2)) == 0x6e74656e && (*(vu32*)(buffer+i+6)) == 0x646f6e74
|
||||
&& (*(vu32*)(buffer+i+11)) == 0x4c6f6164) //'nten' 'dont' 'Load'
|
||||
{
|
||||
for(int k= 30; k <50; ++k)
|
||||
{
|
||||
if((*(vu32*)(buffer+i+k)) == 0x4A616E20 || (*(vu32*)(buffer+i+k)) == 0x46656220 ||
|
||||
(*(vu32*)(buffer+i+k)) == 0x4D617220 || (*(vu32*)(buffer+i+k)) == 0x41707220 ||
|
||||
(*(vu32*)(buffer+i+k)) == 0x4D617920 || (*(vu32*)(buffer+i+k)) == 0x4A756E20 ||
|
||||
(*(vu32*)(buffer+i+k)) == 0x4A756C20 || (*(vu32*)(buffer+i+k)) == 0x41756720 ||
|
||||
(*(vu32*)(buffer+i+k)) == 0x53657020 || (*(vu32*)(buffer+i+k)) == 0x4F637420 ||
|
||||
(*(vu32*)(buffer+i+k)) == 0x4E6F7620 || (*(vu32*)(buffer+i+k)) == 0x44656320 ) // find Month
|
||||
{
|
||||
for(int j = 0 ; j < 20 ; j++)
|
||||
NINversion[j] = *(u8*)(buffer+i+k+j);
|
||||
|
||||
NINversion[11] = ' '; // replace \0 between year and time with a space.
|
||||
NINversion[20] = 0;
|
||||
struct tm time;
|
||||
strptime(NINversion, "%b %d %Y %H:%M:%S", &time);
|
||||
|
||||
const time_t NINLoaderTime = mktime(&time);
|
||||
const time_t v135time = 1407167999;// v1.135
|
||||
|
||||
if(difftime(NINLoaderTime,v135time) > 0)
|
||||
NIN_cfg_version = 3;
|
||||
else
|
||||
NIN_cfg_version = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(buffer);
|
||||
break;*/
|
||||
}
|
||||
if(NINRev == 0)
|
||||
return;
|
||||
if(NINRev >= 135 && NINRev < 354)
|
||||
if(NINRev == 0 || NINRev < 358)
|
||||
return;// nintendont not found or revision is less than 358(was 135) thus too old for wiiflow lite
|
||||
/*if(NINRev >= 135 && NINRev < 354)
|
||||
NIN_cfg_version = 3;
|
||||
else if(NINRev >= 354 && NINRev < 358)
|
||||
NIN_cfg_version = 4;
|
||||
NIN_cfg_version = 4;*/
|
||||
else if(NINRev >= 358 && NINRev < 368)
|
||||
NIN_cfg_version = 5;
|
||||
else if(NINRev >= 368 && NINRev < 424)
|
||||
NIN_cfg_version = 6;
|
||||
|
||||
else if(NINRev >= 424 && NINRev < 431)
|
||||
NIN_cfg_version = 7;
|
||||
|
||||
NinCfg.Version = NIN_cfg_version;
|
||||
|
||||
/*if(memcmp("0x474851",gameID,3)==0)
|
||||
/*if(memcmp("0x474851",gameID,3)==0) // old fix for simpsons hit & run - r155 fixed this
|
||||
NinCfg.MaxPads = 1;
|
||||
else*/
|
||||
NinCfg.MaxPads = 4;
|
||||
NinCfg.MaxPads = 4;
|
||||
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE;// always force video?
|
||||
|
||||
if((videomode > 3) && (videomode != 6))
|
||||
{
|
||||
NinCfg.Config |= NIN_CFG_FORCE_PROG;
|
||||
NinCfg.VideoMode |= NIN_VID_PROG;
|
||||
}
|
||||
|
||||
NinCfg.Config |= NIN_CFG_AUTO_BOOT;
|
||||
|
||||
NinDevice = DeviceHandle.PathToDriveType(game);
|
||||
if(NinDevice != SD)
|
||||
NinCfg.Config |= NIN_CFG_USB;
|
||||
|
||||
if(IsOnWiiU() == true)
|
||||
NinCfg.Config |= NIN_CFG_MEMCARDEMU;
|
||||
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE;
|
||||
|
||||
if((videomode > 3) && (videomode != 6))
|
||||
NinCfg.Config |= NIN_CFG_FORCE_PROG;
|
||||
|
||||
if(usb_hid)
|
||||
NinCfg.Config |= NIN_CFG_HID;
|
||||
|
||||
if(NIN_Debugger)
|
||||
if(NIN_Debugger && IsOnWiiU() == false) //wii only
|
||||
NinCfg.Config |= NIN_CFG_OSREPORT;
|
||||
|
||||
if(native_ctl)
|
||||
if(native_ctl && IsOnWiiU() == false) //wii only
|
||||
NinCfg.Config |= NIN_CFG_NATIVE_SI;
|
||||
|
||||
if(deflicker)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_DF;
|
||||
|
||||
if(wiiu_widescreen)
|
||||
if(wiiu_widescreen && IsOnWiiU() == true) //wii u vwii only
|
||||
NinCfg.Config |= NIN_CFG_WIIU_WIDE;
|
||||
|
||||
if(widescreen)
|
||||
NinCfg.Config |= NIN_CFG_FORCE_WIDE;
|
||||
|
||||
if(led)
|
||||
NinCfg.Config |= NIN_CFG_LED;
|
||||
|
||||
if(tri_arcade)
|
||||
NinCfg.Config |= NIN_CFG_ARCADE_MODE;
|
||||
|
||||
if(emuMC > 0)
|
||||
if(cc_rumble)
|
||||
NinCfg.Config |= NIN_CFG_BIT_CC_RUMBLE;
|
||||
|
||||
if(ipl)
|
||||
NinCfg.Config |= NIN_CFG_SKIP_IPL;
|
||||
|
||||
NinCfg.MemCardBlocks = 0x2; //251 blocks
|
||||
|
||||
if(emuMC > 0 || IsOnWiiU() == true) //force memcardemu for wii u vwii
|
||||
NinCfg.Config |= NIN_CFG_MEMCARDEMU;
|
||||
|
||||
if(emuMC > 1)
|
||||
{
|
||||
NinCfg.Config |= NIN_CFG_MC_MULTI;
|
||||
NinCfg.MemCardBlocks = 0x4;//1019 blocks (8MB)
|
||||
NinCfg.MemCardBlocks = 0x4; //1019 blocks (8MB)
|
||||
}
|
||||
if(CheatPath != NULL && NewCheatPath != NULL && cheats)
|
||||
{
|
||||
@ -205,23 +179,23 @@ void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath
|
||||
gprintf("Nintendont Game Path: %s, ID: %08x\n", NinCfg.GamePath, NinCfg.GameID);
|
||||
}
|
||||
|
||||
void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker)
|
||||
void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool cc_rumble, bool native_ctl, bool deflicker)
|
||||
{
|
||||
memset(&NinCfg, 0, sizeof(NIN_CFG));
|
||||
NinCfg.Magicbytes = 0x01070CF6;
|
||||
FILE * location = fopen("sd:/nincfg.bin", "r");
|
||||
if(location == NULL)
|
||||
{
|
||||
NinCfg.Config |= NIN_CFG_USB;
|
||||
fclose(location);
|
||||
location = NULL;
|
||||
}
|
||||
|
||||
fclose(location);
|
||||
location = NULL;
|
||||
|
||||
NinCfg.Version = NIN_CFG_VERSION;
|
||||
NinCfg.Config |= NIN_CFG_AUTO_BOOT;
|
||||
NinCfg.VideoMode |= NIN_VID_AUTO;
|
||||
|
||||
if(usb_hid)
|
||||
NinCfg.Config |= NIN_CFG_HID;
|
||||
if(cc_rumble)
|
||||
NinCfg.Config |= NIN_CFG_BIT_CC_RUMBLE;
|
||||
if(emuMC == 1)
|
||||
{
|
||||
NinCfg.Config |= NIN_CFG_MEMCARDEMU;
|
||||
@ -245,26 +219,32 @@ void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool usb_hid, bool native_ct
|
||||
|
||||
void Nintendont_WriteOptions()
|
||||
{
|
||||
/* Newer Nintendont versions */
|
||||
gprintf("Writing Arguments\n");
|
||||
AddBootArgument((char*)&NinCfg, sizeof(NIN_CFG));
|
||||
}
|
||||
|
||||
/*void Nintendont_WriteOptions()
|
||||
{
|
||||
// Newer Nintendont versions
|
||||
if(NinArgsboot == true)
|
||||
{
|
||||
gprintf("Writing Arguments\n");
|
||||
AddBootArgument((char*)&NinCfg, sizeof(NIN_CFG));
|
||||
return;
|
||||
}
|
||||
/* general loader */
|
||||
// general loader
|
||||
if(DeviceHandle.SD_Inserted())
|
||||
{
|
||||
gprintf("Writing Nintendont CFG: sd:/%s\n", NIN_CFG_PATH);
|
||||
fsop_WriteFile(fmt("sd:/%s", NIN_CFG_PATH), &NinCfg, sizeof(NIN_CFG));
|
||||
}
|
||||
/* for kernel */
|
||||
// for kernel
|
||||
if(NinDevice != SD)
|
||||
{
|
||||
gprintf("Writing Nintendont USB Kernel CFG: %s:/%s\n", DeviceName[NinDevice], NIN_CFG_PATH);
|
||||
fsop_WriteFile(fmt("%s:/%s", DeviceName[NinDevice], NIN_CFG_PATH), &NinCfg, sizeof(NIN_CFG));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
bool Nintendont_Installed()
|
||||
{
|
||||
@ -291,7 +271,8 @@ bool Nintendont_GetLoader()
|
||||
{
|
||||
gprintf("Nintendont loaded: %s\n", dol_path);
|
||||
AddBootArgument(dol_path);
|
||||
//search for argsboot
|
||||
break;
|
||||
//search for argsboot not needed
|
||||
u32 size;
|
||||
const char *dol_ptr = GetHomebrew(&size);
|
||||
for(u32 i = 0; i < size; i += 0x10)
|
||||
@ -483,7 +464,7 @@ void GC_SetVideoMode(u8 videomode, u8 loader)
|
||||
syssram *sram;
|
||||
sram = __SYS_LockSram();
|
||||
GXRModeObj *vmode = VIDEO_GetPreferredMode(0);
|
||||
int vmode_reg = 0;
|
||||
int vmode_reg = 0;// VI_NTSC
|
||||
|
||||
if((VIDEO_HaveComponentCable() && (CONF_GetProgressiveScan() > 0)) || ((videomode > 3) && (videomode != 6)))
|
||||
sram->flags |= 0x80; //set progressive flag
|
||||
@ -492,7 +473,7 @@ void GC_SetVideoMode(u8 videomode, u8 loader)
|
||||
|
||||
if(videomode == 1 || videomode == 3 || videomode == 5 || videomode == 6 || videomode == 7)
|
||||
{
|
||||
vmode_reg = 1;
|
||||
vmode_reg = 1;// VI_PAL
|
||||
sram->flags |= 0x01; // Set bit 0 to set the video mode to PAL
|
||||
sram->ntd |= 0x40; //set pal60 flag
|
||||
}
|
||||
@ -501,52 +482,52 @@ void GC_SetVideoMode(u8 videomode, u8 loader)
|
||||
sram->flags &= 0xFE; // Clear bit 0 to set the video mode to NTSC
|
||||
sram->ntd &= 0xBF; //clear pal60 flag
|
||||
}
|
||||
|
||||
if(videomode == 1)
|
||||
/* should the sram pal60 flag be cleared for PAL50? */
|
||||
if(videomode == 1)// PAL50
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_PAL50;
|
||||
vmode = &TVPal528IntDf;
|
||||
}
|
||||
else if(videomode == 2)
|
||||
else if(videomode == 2)// NTSC
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_NTSC;
|
||||
vmode = &TVNtsc480IntDf;
|
||||
}
|
||||
else if(videomode == 3)
|
||||
else if(videomode == 3)// PAL60
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_PAL60;
|
||||
vmode = &TVEurgb60Hz480IntDf;
|
||||
vmode_reg = 5;
|
||||
vmode_reg = 5;// VI_EURGB60
|
||||
}
|
||||
else if(videomode == 4)
|
||||
else if(videomode == 4)// NTSC 480P
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_NTSC;
|
||||
vmode = &TVNtsc480IntDf;// shouldn't this be vmode = &TVNtsc480Prog
|
||||
vmode = &TVNtsc480Prog;
|
||||
}
|
||||
else if(videomode == 5)
|
||||
else if(videomode == 5)// PAL 480P
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_PAL60;
|
||||
vmode = &TVEurgb60Hz480IntDf;
|
||||
vmode = &TVEurgb60Hz480Prog;
|
||||
vmode_reg = 5;
|
||||
}
|
||||
else if(videomode == 6)
|
||||
else if(videomode == 6)// MPAL
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_MPAL;
|
||||
vmode = &TVEurgb60Hz480IntDf;
|
||||
vmode_reg = 5;// not sure about this
|
||||
vmode_reg = 2;// VI_MPAL
|
||||
}
|
||||
else if(videomode == 7)
|
||||
else if(videomode == 7)// MPAL Prog
|
||||
{
|
||||
if(loader == 1)
|
||||
NinCfg.VideoMode |= NIN_VID_FORCE_MPAL;
|
||||
vmode = &TVEurgb60Hz480IntDf;
|
||||
vmode_reg = 5;
|
||||
vmode = &TVEurgb60Hz480Prog;
|
||||
vmode_reg = 2;
|
||||
}
|
||||
|
||||
__SYS_UnlockSram(1); // 1 -> write changes
|
||||
@ -560,14 +541,14 @@ void GC_SetVideoMode(u8 videomode, u8 loader)
|
||||
if(vmode != 0)
|
||||
VIDEO_Configure(vmode);
|
||||
|
||||
/* Setup video */
|
||||
/* Setup video
|
||||
VIDEO_SetBlack(FALSE);
|
||||
VIDEO_Flush();
|
||||
VIDEO_WaitVSync();
|
||||
if(vmode->viTVMode & VI_NON_INTERLACE)
|
||||
VIDEO_WaitVSync();
|
||||
else while(VIDEO_GetNextField())
|
||||
VIDEO_WaitVSync();
|
||||
VIDEO_WaitVSync(); */
|
||||
|
||||
/* Set black and flush */
|
||||
VIDEO_SetBlack(TRUE);
|
||||
|
@ -27,10 +27,10 @@
|
||||
|
||||
bool Nintendont_Installed();
|
||||
bool Nintendont_GetLoader();
|
||||
void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker);
|
||||
void Nintendont_BootDisc(u8 emuMC, bool widescreen, bool cc_rumble, bool native_ctl, bool deflicker);
|
||||
void Nintendont_SetOptions(const char *game, const char *gameID, char *CheatPath, char *NewCheatPath, const char *partition,
|
||||
bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool usb_hid, bool native_ctl, bool deflicker,
|
||||
bool wiiu_widescreen, bool NIN_Debugger, bool tri_arcade);
|
||||
bool cheats, u8 emuMC, u8 videomode, bool widescreen, bool led, bool native_ctl, bool deflicker, bool wiiu_widescreen,
|
||||
bool NIN_Debugger, bool tri_arcade, bool cc_rumble, bool ipl);
|
||||
void Nintendont_WriteOptions();
|
||||
|
||||
// Devolution
|
||||
|
@ -2,17 +2,18 @@
|
||||
#ifndef __COMMON_CONFIG_H__
|
||||
#define __COMMON_CONFIG_H__
|
||||
|
||||
#define NIN_CFG_VERSION 0x00000007
|
||||
#define NIN_CFG_VERSION 0x00000008
|
||||
#define NIN_CFG_MAXPAD 4
|
||||
#define MEM_CARD_MAX (5)
|
||||
#define MEM_CARD_CODE(x) (1<<(x+2))
|
||||
#define MEM_CARD_SIZE(x) (1<<(x+19))
|
||||
#define MEM_CARD_BLOCKS(x) ((1<<(x+6))-5)
|
||||
|
||||
// nin_cfg version does not match nintendont version
|
||||
typedef struct NIN_CFG
|
||||
{
|
||||
unsigned int Magicbytes; // 0x01070CF6
|
||||
unsigned int Version;
|
||||
unsigned int Version; // v4 since v3.354, v5 since v3.358, v6 since v3.368, v7 since v4.424, v8 since v4.431
|
||||
unsigned int Config;
|
||||
unsigned int VideoMode;
|
||||
unsigned int Language;
|
||||
@ -23,25 +24,30 @@ typedef struct NIN_CFG
|
||||
unsigned int MemCardBlocks;
|
||||
} NIN_CFG;
|
||||
|
||||
// NIN_CFG_REMLIMIT is disc read speed limt enabled by default. It keeps loading speed at GC speed.
|
||||
// disabling it may speed up loading times but cause other game issues.
|
||||
enum ninconfig
|
||||
{
|
||||
NIN_CFG_CHEATS = (1<<0),
|
||||
NIN_CFG_DEBUGGER = (1<<1), // Only for Wii Version
|
||||
NIN_CFG_DEBUGWAIT = (1<<2), // Only for Wii Version
|
||||
NIN_CFG_MEMCARDEMU = (1<<3),
|
||||
NIN_CFG_CHEAT_PATH = (1<<4),
|
||||
NIN_CFG_FORCE_WIDE = (1<<5),
|
||||
NIN_CFG_FORCE_PROG = (1<<6),
|
||||
NIN_CFG_AUTO_BOOT = (1<<7),
|
||||
NIN_CFG_HID = (1<<8),
|
||||
NIN_CFG_OSREPORT = (1<<9),
|
||||
NIN_CFG_USB = (1<<10),
|
||||
NIN_CFG_LED = (1<<11),
|
||||
NIN_CFG_LOG = (1<<12),
|
||||
NIN_CFG_MC_MULTI = (1<<13),
|
||||
NIN_CFG_NATIVE_SI = (1<<14),
|
||||
NIN_CFG_WIIU_WIDE = (1<<15),
|
||||
NIN_CFG_ARCADE_MODE = (1<<16),
|
||||
NIN_CFG_CHEATS = (1<<0),
|
||||
NIN_CFG_DEBUGGER = (1<<1), // Only for Wii Version
|
||||
NIN_CFG_DEBUGWAIT = (1<<2), // Only for Wii Version
|
||||
NIN_CFG_MEMCARDEMU = (1<<3),
|
||||
NIN_CFG_CHEAT_PATH = (1<<4),
|
||||
NIN_CFG_FORCE_WIDE = (1<<5),
|
||||
NIN_CFG_FORCE_PROG = (1<<6),
|
||||
NIN_CFG_AUTO_BOOT = (1<<7),
|
||||
NIN_CFG_HID = (1<<8), // Unused since v3.304
|
||||
NIN_CFG_REMLIMIT = (1<<8), // v3.358 cfg version 5
|
||||
NIN_CFG_OSREPORT = (1<<9),
|
||||
NIN_CFG_USB = (1<<10), // r40
|
||||
NIN_CFG_LED = (1<<11), // v1.45
|
||||
NIN_CFG_LOG = (1<<12), // v1.109
|
||||
NIN_CFG_MC_MULTI = (1<<13), // v1.135
|
||||
NIN_CFG_NATIVE_SI = (1<<14), // v2.189 - only for Wii
|
||||
NIN_CFG_WIIU_WIDE = (1<<15), // v2.258 - only for Wii U
|
||||
NIN_CFG_ARCADE_MODE = (1<<16), // v4.424 cfg version 7
|
||||
NIN_CFG_BIT_CC_RUMBLE = (1<<17), // v4.431 cfg version 8
|
||||
NIN_CFG_SKIP_IPL = (1<<18), // v4.435 cfg version 8
|
||||
};
|
||||
|
||||
enum ninvideomode
|
||||
@ -60,7 +66,8 @@ enum ninvideomode
|
||||
|
||||
NIN_VID_FORCE_MASK = NIN_VID_FORCE_PAL50|NIN_VID_FORCE_PAL60|NIN_VID_FORCE_NTSC|NIN_VID_FORCE_MPAL,
|
||||
|
||||
NIN_VID_PROG = (1<<4), //important to prevent blackscreens
|
||||
NIN_VID_PROG = (1<<4),
|
||||
NIN_VID_PATCH_PAL50 = (1<<5), // v3.368 cfg version 6
|
||||
};
|
||||
|
||||
enum ninlanguage
|
||||
@ -78,12 +85,5 @@ enum ninlanguage
|
||||
NIN_LAN_AUTO = -1,
|
||||
};
|
||||
|
||||
enum VideoModes
|
||||
{
|
||||
GCVideoModeNone = 0,
|
||||
GCVideoModePAL60 = 1,
|
||||
GCVideoModeNTSC = 2,
|
||||
GCVideoModePROG = 3,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -482,8 +482,8 @@ private:
|
||||
s16 m_gameSettingsLblWidescreen;
|
||||
s16 m_gameSettingsBtnWidescreen;
|
||||
|
||||
s16 m_gameSettingsLblUSB_HID;
|
||||
s16 m_gameSettingsBtnUSB_HID;
|
||||
s16 m_gameSettingsLblCC_Rumble;
|
||||
s16 m_gameSettingsBtnCC_Rumble;
|
||||
|
||||
s16 m_gameSettingsLblNATIVE_CTL;
|
||||
s16 m_gameSettingsBtnNATIVE_CTL;
|
||||
@ -494,6 +494,9 @@ private:
|
||||
s16 m_gameSettingsLblArcade;
|
||||
s16 m_gameSettingsBtnArcade;
|
||||
|
||||
s16 m_gameSettingsLblSkip_IPL;
|
||||
s16 m_gameSettingsBtnSkip_IPL;
|
||||
|
||||
s16 m_gameSettingsLblGCLoader;
|
||||
s16 m_gameSettingsLblGCLoader_Val;
|
||||
s16 m_gameSettingsBtnGCLoader_P;
|
||||
|
@ -112,14 +112,16 @@ void CMenu::_hideGameSettingsPg(bool instant)
|
||||
m_btnMgr.hide(m_gameSettingsLblGCLoader_Val, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnGCLoader_P, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnGCLoader_M, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblUSB_HID, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnUSB_HID, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblCC_Rumble, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnCC_Rumble, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblNATIVE_CTL, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnNATIVE_CTL, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblDeflicker, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnDeflicker, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblArcade, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnArcade, instant);
|
||||
m_btnMgr.hide(m_gameSettingsLblSkip_IPL, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnSkip_IPL, instant);
|
||||
// Channels only
|
||||
m_btnMgr.hide(m_gameSettingsLblApploader, instant);
|
||||
m_btnMgr.hide(m_gameSettingsBtnApploader, instant);
|
||||
@ -285,14 +287,18 @@ void CMenu::_showGameSettings(void)
|
||||
{
|
||||
if(GameHdr->type == TYPE_GC_GAME)
|
||||
{
|
||||
m_btnMgr.show(m_gameSettingsLblUSB_HID);
|
||||
m_btnMgr.show(m_gameSettingsBtnUSB_HID);
|
||||
m_btnMgr.show(m_gameSettingsLblCC_Rumble);
|
||||
m_btnMgr.show(m_gameSettingsBtnCC_Rumble);
|
||||
|
||||
m_btnMgr.show(m_gameSettingsLblNATIVE_CTL);
|
||||
m_btnMgr.show(m_gameSettingsBtnNATIVE_CTL);
|
||||
|
||||
m_btnMgr.show(m_gameSettingsBtnArcade);
|
||||
m_btnMgr.show(m_gameSettingsLblArcade);
|
||||
|
||||
m_btnMgr.show(m_gameSettingsBtnSkip_IPL);
|
||||
m_btnMgr.show(m_gameSettingsLblSkip_IPL);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -349,10 +355,11 @@ void CMenu::_showGameSettings(void)
|
||||
m_btnMgr.setText(m_gameSettingsLblWidescreen, _t("cfgg36", L"Widescreen Patch"));
|
||||
m_btnMgr.setText(m_gameSettingsBtnWidescreen, _optBoolToString(m_gcfg2.getOptBool(id, "widescreen", 0)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnDevoMemcardEmu, _optBoolToString(m_gcfg2.getOptBool(id, "devo_memcard_emu", 2)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnUSB_HID, _optBoolToString(m_gcfg2.getOptBool(id, "usb_hid", 2)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnCC_Rumble, _optBoolToString(m_gcfg2.getOptBool(id, "cc_rumble", 2)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnNATIVE_CTL, _optBoolToString(m_gcfg2.getOptBool(id, "native_ctl", 2)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnDeflicker, _optBoolToString(m_gcfg2.getOptBool(id, "Deflicker", 0)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnDeflicker, _optBoolToString(m_gcfg2.getOptBool(id, "deflicker", 0)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnArcade, _optBoolToString(m_gcfg2.getOptBool(id, "triforce_arcade", 0)));
|
||||
m_btnMgr.setText(m_gameSettingsBtnSkip_IPL, _optBoolToString(m_gcfg2.getOptBool(id, "skip_ipl", 0)));
|
||||
|
||||
i = min((u32)m_gcfg2.getInt(id, "video_mode", 0), ARRAY_SIZE(CMenu::_GCvideoModes) - 1u);
|
||||
m_btnMgr.setText(m_gameSettingsLblVideo, _t(CMenu::_GCvideoModes[i].id, CMenu::_GCvideoModes[i].text));
|
||||
@ -362,7 +369,7 @@ void CMenu::_showGameSettings(void)
|
||||
|
||||
if(GCLoader == NINTENDONT)
|
||||
{
|
||||
m_btnMgr.setText(m_gameSettingsLblEmuMemCard, _t("cfgg47", L"Emulated MemCard"));
|
||||
//m_btnMgr.setText(m_gameSettingsLblEmuMemCard, _t("cfgg47", L"Emulated MemCard"));
|
||||
i = min((u32)m_gcfg2.getInt(id, "emu_memcard", 0), ARRAY_SIZE(CMenu::_NinEmuCard) - 1u);
|
||||
m_btnMgr.setText(m_gameSettingsLblEmuMemCard_Val, _t(CMenu::_NinEmuCard[i].id, CMenu::_NinEmuCard[i].text));
|
||||
if(IsOnWiiU())
|
||||
@ -616,12 +623,12 @@ void CMenu::_gameSettings(void)
|
||||
}
|
||||
else if(m_btnMgr.selected(m_gameSettingsBtnDeflicker))
|
||||
{
|
||||
m_gcfg2.setBool(id, "Deflicker", !m_gcfg2.getBool(id, "Deflicker", 0));
|
||||
m_gcfg2.setBool(id, "deflicker", !m_gcfg2.getBool(id, "deflicker", 0));
|
||||
_showGameSettings();
|
||||
}
|
||||
else if(m_btnMgr.selected(m_gameSettingsBtnUSB_HID))
|
||||
else if(m_btnMgr.selected(m_gameSettingsBtnCC_Rumble))
|
||||
{
|
||||
m_gcfg2.setOptBool(id, "usb_hid", loopNum(m_gcfg2.getOptBool(id, "usb_hid") + 1, 3));
|
||||
m_gcfg2.setOptBool(id, "cc_rumble", loopNum(m_gcfg2.getOptBool(id, "cc_rumble") + 1, 3));
|
||||
_showGameSettings();
|
||||
}
|
||||
else if(m_btnMgr.selected(m_gameSettingsBtnArcade))
|
||||
@ -629,6 +636,11 @@ void CMenu::_gameSettings(void)
|
||||
m_gcfg2.setBool(id, "triforce_arcade", !m_gcfg2.getBool(id, "triforce_arcade", 0));
|
||||
_showGameSettings();
|
||||
}
|
||||
else if(m_btnMgr.selected(m_gameSettingsBtnSkip_IPL))
|
||||
{
|
||||
m_gcfg2.setBool(id, "skip_ipl", !m_gcfg2.getBool(id, "skip_ipl", 0));
|
||||
_showGameSettings();
|
||||
}
|
||||
else if(m_btnMgr.selected(m_gameSettingsBtnPrivateServer))
|
||||
{
|
||||
m_gcfg2.setBool(id, "private_server", !m_gcfg2.getBool(id, "private_server", 0));
|
||||
@ -773,8 +785,11 @@ void CMenu::_initGameSettingsMenu()
|
||||
m_gameSettingsBtnLaunchNK = _addButton("GAME_SETTINGS/LAUNCHNEEK_BTN", theme.btnFont, L"", 420, 250, 200, 48, theme.btnFontColor);
|
||||
|
||||
//GC Nintendont Page 4
|
||||
m_gameSettingsLblUSB_HID = _addLabel("GAME_SETTINGS/USB_HID", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnUSB_HID = _addButton("GAME_SETTINGS/USB_HID_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor);
|
||||
//m_gameSettingsLblUSB_HID = _addLabel("GAME_SETTINGS/USB_HID", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
//m_gameSettingsBtnUSB_HID = _addButton("GAME_SETTINGS/USB_HID_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor);
|
||||
|
||||
m_gameSettingsLblCC_Rumble = _addLabel("GAME_SETTINGS/CC_RUMBLE", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnCC_Rumble = _addButton("GAME_SETTINGS/CC_RUMBLE_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor);
|
||||
|
||||
m_gameSettingsLblNATIVE_CTL = _addLabel("GAME_SETTINGS/NATIVE_CTL", theme.lblFont, L"", 20, 185, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnNATIVE_CTL = _addButton("GAME_SETTINGS/NATIVE_CTL_BTN", theme.btnFont, L"", 420, 190, 200, 48, theme.btnFontColor);
|
||||
@ -782,6 +797,9 @@ void CMenu::_initGameSettingsMenu()
|
||||
m_gameSettingsLblArcade = _addLabel("GAME_SETTINGS/ARCADE", theme.lblFont, L"", 20, 245, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnArcade = _addButton("GAME_SETTINGS/ARCADE_BTN", theme.btnFont, L"", 420, 250, 200, 48, theme.btnFontColor);
|
||||
|
||||
m_gameSettingsLblSkip_IPL = _addLabel("GAME_SETTINGS/SKIP_IPL", theme.lblFont, L"", 20, 305, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnSkip_IPL = _addButton("GAME_SETTINGS/SKIP_IPL_BTN", theme.btnFont, L"", 420, 310, 200, 48, theme.btnFontColor);
|
||||
|
||||
//Page 5
|
||||
m_gameSettingsLblLED = _addLabel("GAME_SETTINGS/LED", theme.lblFont, L"", 20, 125, 385, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
|
||||
m_gameSettingsBtnLED = _addButton("GAME_SETTINGS/LED_BTN", theme.btnFont, L"", 420, 130, 200, 48, theme.btnFontColor);
|
||||
@ -854,8 +872,8 @@ void CMenu::_initGameSettingsMenu()
|
||||
_setHideAnim(m_gameSettingsLblLED, "GAME_SETTINGS/LED", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnLED, "GAME_SETTINGS/LED_BTN", -50, 0, 1.f, 0.f);
|
||||
|
||||
_setHideAnim(m_gameSettingsLblUSB_HID, "GAME_SETTINGS/USB_HID", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnUSB_HID, "GAME_SETTINGS/USB_HID_BTN", -50, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsLblCC_Rumble, "GAME_SETTINGS/CC_RUMBLE", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnCC_Rumble, "GAME_SETTINGS/CC_RUMBLE_BTN", -50, 0, 1.f, 0.f);
|
||||
|
||||
_setHideAnim(m_gameSettingsLblNATIVE_CTL, "GAME_SETTINGS/NATIVE_CTL", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnNATIVE_CTL, "GAME_SETTINGS/NATIVE_CTL_BTN", -50, 0, 1.f, 0.f);
|
||||
@ -877,6 +895,9 @@ void CMenu::_initGameSettingsMenu()
|
||||
_setHideAnim(m_gameSettingsLblArcade, "GAME_SETTINGS/ARCADE", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnArcade, "GAME_SETTINGS/ARCADE_BTN", -50, 0, 1.f, 0.f);
|
||||
|
||||
_setHideAnim(m_gameSettingsLblSkip_IPL, "GAME_SETTINGS/SKIP_IPL", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnSkip_IPL, "GAME_SETTINGS/SKIP_IPL_BTN", -50, 0, 1.f, 0.f);
|
||||
|
||||
_setHideAnim(m_gameSettingsLblGCLoader, "GAME_SETTINGS/GC_LOADER", 50, 0, -2.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsLblGCLoader_Val, "GAME_SETTINGS/GC_LOADER_BTN", -50, 0, 1.f, 0.f);
|
||||
_setHideAnim(m_gameSettingsBtnGCLoader_P, "GAME_SETTINGS/GC_LOADER_PLUS", -50, 0, 1.f, 0.f);
|
||||
@ -943,8 +964,9 @@ void CMenu::_textGameSettings(void)
|
||||
m_btnMgr.setText(m_gameSettingsLblAspectRatio, _t("cfgg27", L"Aspect Ratio"));
|
||||
m_btnMgr.setText(m_gameSettingsLblApploader, _t("cfgg37", L"Boot Apploader"));
|
||||
m_btnMgr.setText(m_gameSettingsLblEmuMemCard, _t("cfgg47", L"Emulated MemCard"));
|
||||
m_btnMgr.setText(m_gameSettingsLblUSB_HID, _t("cfgg42", L"USB-HID Controller"));
|
||||
m_btnMgr.setText(m_gameSettingsLblCC_Rumble, _t("cfgg52", L"Wiimote CC Rumble"));
|
||||
m_btnMgr.setText(m_gameSettingsLblNATIVE_CTL, _t("cfgg43", L"Native Control"));
|
||||
m_btnMgr.setText(m_gameSettingsLblSkip_IPL, _t("cfgg53", L"Skip IPL BIOS"));
|
||||
|
||||
m_btnMgr.setText(m_gameSettingsLblArcade, _t("cfgg48", L"Triforce Arcade Mode"));
|
||||
m_btnMgr.setText(m_gameSettingsLblEmulation, _t("cfgg24", L"NAND Emulation"));
|
||||
|
@ -1030,12 +1030,12 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
|
||||
if(has_enabled_providers() && _initNetwork() == 0)
|
||||
add_game_to_card(id);
|
||||
|
||||
u8 GClanguage = min((u32)m_gcfg2.getInt(id, "gc_language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u);
|
||||
u8 GClanguage = min((u32)m_gcfg2.getInt(id, "language", 0), ARRAY_SIZE(CMenu::_GClanguages) - 1u);
|
||||
GClanguage = (GClanguage == 0) ? min((u32)m_cfg.getInt(GC_DOMAIN, "game_language", 0), ARRAY_SIZE(CMenu::_GlobalGClanguages) - 1u) : GClanguage-1;
|
||||
if(id[3] == 'E' || id[3] == 'J')
|
||||
GClanguage = 1; //=english
|
||||
|
||||
u8 videoMode = min((u32)m_gcfg2.getInt(id, "gc_video_mode", 0), ARRAY_SIZE(CMenu::_GCvideoModes) - 1u);
|
||||
u8 videoMode = min((u32)m_gcfg2.getInt(id, "video_mode", 0), ARRAY_SIZE(CMenu::_GCvideoModes) - 1u);
|
||||
videoMode = (videoMode == 0) ? min((u32)m_cfg.getInt(GC_DOMAIN, "video_mode", 0), ARRAY_SIZE(CMenu::_GlobalGCvideoModes) - 1u) : videoMode-1;
|
||||
if(disc || videoMode == 0)
|
||||
{
|
||||
@ -1056,16 +1056,27 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
|
||||
}
|
||||
else if(loader == NINTENDONT)
|
||||
{
|
||||
u8 emuMC = min((u32)m_gcfg2.getInt(id, "emu_memcard", m_cfg.getInt(GC_DOMAIN, "emu_memcard", 2)), ARRAY_SIZE(CMenu::_NinEmuCard) - 1u);
|
||||
emuMC = (emuMC == 0) ? m_cfg.getInt(GC_DOMAIN, "emu_memcard", 2) : emuMC-1;
|
||||
bool usb_hid = m_gcfg2.testOptBool(id, "usb_hid", m_cfg.getBool(GC_DOMAIN, "usb_hid", false));
|
||||
u8 emuMC = min((u32)m_gcfg2.getInt(id, "emu_memcard", 0), ARRAY_SIZE(CMenu::_NinEmuCard) - 1u);
|
||||
emuMC = (emuMC == 0) ? m_cfg.getInt(GC_DOMAIN, "emu_memcard", 1) : emuMC - 1;
|
||||
|
||||
// these 2 settings have global defaults in wfl main config
|
||||
bool cc_rumble = m_gcfg2.testOptBool(id, "cc_rumble", m_cfg.getBool(GC_DOMAIN, "cc_rumble", false));
|
||||
bool native_ctl = m_gcfg2.testOptBool(id, "native_ctl", m_cfg.getBool(GC_DOMAIN, "native_ctl", false));
|
||||
bool deflicker = m_gcfg2.getBool(id, "Deflicker", false);
|
||||
|
||||
bool deflicker = m_gcfg2.getBool(id, "deflicker", false);
|
||||
bool tri_arcade = m_gcfg2.getBool(id, "triforce_arcade", false);
|
||||
bool activity_led = m_gcfg2.getBool(id, "led", false);
|
||||
bool ipl = m_gcfg2.getBool(id, "skip_ipl", false);
|
||||
if(IsOnWiiU())
|
||||
{
|
||||
native_ctl = false;
|
||||
activity_led = false;
|
||||
}
|
||||
if(disc == true)
|
||||
{
|
||||
//emuMC = m_cfg.getInt(GC_DOMAIN, "emu_memcard", 1);
|
||||
Nintendont_BootDisc(emuMC, widescreen, usb_hid, native_ctl, deflicker);
|
||||
/*funny, in order for these settings to work they would have to be entered in gameconfig2 manually under the gameID
|
||||
or the game will have to already be on USB or SD but then why launch via disc?*/
|
||||
Nintendont_BootDisc(emuMC, widescreen, cc_rumble, native_ctl, deflicker);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1089,7 +1100,8 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
|
||||
snprintf(NewCheatPath, sizeof(NewCheatPath), "%s%s.gct",GC_Path,id);
|
||||
|
||||
Nintendont_SetOptions(path, id, CheatPath, NewCheatPath, DeviceName[currentPartition],
|
||||
cheats, emuMC, videoMode, widescreen, usb_hid, native_ctl, deflicker, wiiu_widescreen, NIN_Debugger, tri_arcade);
|
||||
cheats, emuMC, videoMode, widescreen, activity_led, native_ctl, deflicker, wiiu_widescreen,
|
||||
NIN_Debugger, tri_arcade, cc_rumble, ipl);
|
||||
}
|
||||
}
|
||||
/* configs no longer needed */
|
||||
|
@ -123,6 +123,8 @@ cfgg48=EmuNAND not on USB1!
|
||||
cfgg49=Neek2o Not Found!
|
||||
cfgg50=No save to extract!
|
||||
cfgg51=No save to flash to real NAND!
|
||||
cfgg52=Wiimote CC Rumble
|
||||
cfgg53=Skip IPL BIOS
|
||||
cfgg4=Patch country strings
|
||||
cfgg5=Ocarina
|
||||
cfgg6=
|
||||
|
Loading…
Reference in New Issue
Block a user