- added framebuffer video width game option taken from usblgx. thanks to wiidev/blackb0x. #345

This commit is contained in:
Fledge68 2023-04-07 17:06:30 -05:00
parent b878b9e2ee
commit 1239b90751
27 changed files with 215 additions and 61 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 MiB

After

Width:  |  Height:  |  Size: 4.4 MiB

View File

@ -206,7 +206,7 @@ u32 LoadChannel(u64 title, bool dol, u32 *IOS)
} }
void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio,
u32 returnTo, u8 private_server, const char *server_addr, bool patchFix480p, u8 deflicker, u8 bootType) u32 returnTo, u8 private_server, const char *server_addr, u8 videoWidth, bool patchFix480p, u8 deflicker, u8 bootType)
{ {
u8 vfilter_off[7] = {0, 0, 21, 22, 21, 0, 0}; u8 vfilter_off[7] = {0, 0, 21, 22, 21, 0, 0};
u8 vfilter_low[7] = {4, 4, 16, 16, 16, 4, 4}; u8 vfilter_low[7] = {4, 4, 16, 16, 16, 4, 4};
@ -232,6 +232,9 @@ void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryStrin
if(hooktype != 0 && hookpatched == false) if(hooktype != 0 && hookpatched == false)
hookpatched = dogamehooks(dolchunkoffset[i], dolchunksize[i], true); hookpatched = dogamehooks(dolchunkoffset[i], dolchunksize[i], true);
if (videoWidth == WIDTH_FRAMEBUFFER)
patch_width(dolchunkoffset[i], dolchunksize[i]);
if (deflicker == DEFLICKER_ON_LOW) if (deflicker == DEFLICKER_ON_LOW)
{ {
patch_vfilters(dolchunkoffset[i], dolchunksize[i], vfilter_low); patch_vfilters(dolchunkoffset[i], dolchunksize[i], vfilter_low);

View File

@ -14,7 +14,7 @@ typedef struct _dolheader
} ATTRIBUTE_PACKED dolheader; } ATTRIBUTE_PACKED dolheader;
void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, void PatchChannel(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio,
u32 returnTo, u8 private_server, const char *server_addr, bool patchFix480p, u8 deflicker, u8 bootType); u32 returnTo, u8 private_server, const char *server_addr, u8 videoWidth, bool patchFix480p, u8 deflicker, u8 bootType);
u32 LoadChannel(u64 title, bool dol, u32 *IOS); u32 LoadChannel(u64 title, bool dol, u32 *IOS);
extern bool isForwarder; extern bool isForwarder;

View File

@ -49,6 +49,7 @@ struct the_CFG {
s8 aspectRatio; s8 aspectRatio;
bool patchFix480p; bool patchFix480p;
u8 deflicker; u8 deflicker;
u8 videoWidth;
u8 private_server; u8 private_server;
char server_addr[24]; char server_addr[24];
u8 *cheats; u8 *cheats;

View File

@ -26,8 +26,8 @@ static u8 *appldr = (u8*)0x81200000;
static const char *GameID = (const char*)0x80000000; static const char *GameID = (const char*)0x80000000;
/* Constants */ /* Constants */
#define APPLDR_OFFSET 0x910 #define APPLDR_OFFSET 0x910// usblgx uses 0x2440 -huh?
#define APPLDR_CODE 0x918 #define APPLDR_CODE 0x918// usblgx uses APPLDR_OFFSET + 0x20 - huh?
void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio,
u32 returnTo, bool patchregion, u8 private_server, const char *server_addr, u8 deflicker, u8 bootType); u32 returnTo, bool patchregion, u8 private_server, const char *server_addr, u8 deflicker, u8 bootType);
@ -39,18 +39,19 @@ static void NewSuperMarioBrosPatch();
static void Patch_23400_and_MKWii_vulnerability(); static void Patch_23400_and_MKWii_vulnerability();
bool hookpatched = false; bool hookpatched = false;
// wiiflow uses a struct to hold the appldr hdr and usblgx uses a u32 buffer[32] array to hold it.
/* Thanks Tinyload */ /* Thanks Tinyload */
static struct static struct
{ {
char revision[16]; char revision[16];//[0-3] 16 divided by 4 bytes = 4
void *entry; void *entry;// [4] 4 bytes
s32 size; s32 size;//[5] 4 bytes
s32 trailersize; s32 trailersize;// [6] 4 bytes
s32 padding; s32 padding;// [7] 4 bytes
} apploader_hdr ATTRIBUTE_ALIGN(32); } apploader_hdr ATTRIBUTE_ALIGN(32);// 16+4+4+4+4=32 bytes
u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo,
bool patchregion , u8 private_server, const char *server_addr, bool patchFix480p, u8 deflicker, u8 bootType) bool patchregion , u8 private_server, const char *server_addr, u8 videoWidth, bool patchFix480p, u8 deflicker, u8 bootType)
{ {
//! Disable private server for games that still have official servers. //! Disable private server for games that still have official servers.
if(memcmp(GameID, "SC7", 3) == 0 || memcmp(GameID, "RJA", 3) == 0 || if(memcmp(GameID, "SC7", 3) == 0 || memcmp(GameID, "RJA", 3) == 0 ||
@ -118,6 +119,12 @@ u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryStrin
prog(20); prog(20);
} }
free_wip(); free_wip();
patch_kirby((u8 *)0x80000000);// can't be done during maindolpatches.
if(videoWidth == WIDTH_FRAMEBUFFER)
patch_width((void*)0x80000000, 0x900000);
if(hooktype != 0 && hookpatched) if(hooktype != 0 && hookpatched)
ocarina_do_code(); ocarina_do_code();
@ -153,36 +160,28 @@ void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipa
u8 vfilter_medium[7] = {4, 8, 12, 16, 12, 8, 4}; u8 vfilter_medium[7] = {4, 8, 12, 16, 12, 8, 4};
u8 vfilter_high[7] = {8, 8, 10, 12, 10, 8, 8}; u8 vfilter_high[7] = {8, 8, 10, 12, 10, 8, 8};
patch_kirby((u8 *)0x80000000);
do_wip_code((u8 *)dst, len);
Remove_001_Protection(dst, len);
if(CurrentIOS.Type == IOS_TYPE_WANIN && CurrentIOS.Revision < 13)
Anti_002_fix(dst, len);
if((CurrentIOS.Type == IOS_TYPE_WANIN && CurrentIOS.Revision < 13) || CurrentIOS.Type == IOS_TYPE_HERMES)
patch_NoDiscinDrive(dst, len);
patchVideoModes(dst, len, vidMode, vmode, patchVidModes, bootType); patchVideoModes(dst, len, vidMode, vmode, patchVidModes, bootType);
if(debuggerselect == 2) if(debuggerselect == 2)
Patch_fwrite(dst, len); Patch_fwrite(dst, len);
if(hooktype != 0 && hookpatched == false) if(hooktype != 0 && hookpatched == false)
hookpatched = dogamehooks(dst, len, false); hookpatched = dogamehooks(dst, len, false);
if(patchVidModes > 0)
PatchVideoSneek(dst, len);
if(vipatch) if(vipatch)
vidolpatcher(dst, len); vidolpatcher(dst, len);
if(patchVidModes > 0)
PatchVideoSneek(dst, len);
if(configbytes[0] != 0xCD) if(configbytes[0] != 0xCD)
langpatcher(dst, len); langpatcher(dst, len);
if(countryString) if(countryString)
PatchCountryStrings(dst, len); // Country Patch by WiiPower PatchCountryStrings(dst, len); // Country Patch by WiiPower
if(aspectRatio != -1) do_wip_code((u8 *)dst, len);
PatchAspectRatio(dst, len, aspectRatio); Remove_001_Protection(dst, len);
if(returnTo) if(CurrentIOS.Type == IOS_TYPE_WANIN && CurrentIOS.Revision < 13)
PatchReturnTo(dst, len, returnTo); Anti_002_fix(dst, len);
if((CurrentIOS.Type == IOS_TYPE_WANIN && CurrentIOS.Revision < 13) || CurrentIOS.Type == IOS_TYPE_HERMES)
patch_NoDiscinDrive(dst, len);
if(patchregion) if(patchregion)
PatchRegion(dst, len); PatchRegion(dst, len);
if(private_server)
PrivateServerPatcher(dst, len, private_server, serverAddr);
if(deflicker == DEFLICKER_ON_LOW) if(deflicker == DEFLICKER_ON_LOW)
{ {
patch_vfilters(dst, len, vfilter_low); patch_vfilters(dst, len, vfilter_low);
@ -206,6 +205,12 @@ void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipa
if (deflicker == DEFLICKER_OFF_EXTENDED) if (deflicker == DEFLICKER_OFF_EXTENDED)
deflicker_patch(dst, len); deflicker_patch(dst, len);
} }
if(returnTo)
PatchReturnTo(dst, len, returnTo);
if(aspectRatio != -1)
PatchAspectRatio(dst, len, aspectRatio);
if(private_server)
PrivateServerPatcher(dst, len, private_server, serverAddr);
} }
static void patch_NoDiscinDrive(void *buffer, u32 len) static void patch_NoDiscinDrive(void *buffer, u32 len)

View File

@ -7,7 +7,7 @@ extern "C" {
/* Prototypes */ /* Prototypes */
u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo, u32 Apploader_Run(u8 vidMode, GXRModeObj *vmode, bool vipatch, bool countryString, u8 patchVidModes, int aspectRatio, u32 returnTo,
bool patchregion, u8 private_server, const char * server_addr, bool patchFix480p, u8 deflicker, u8 bootType); bool patchregion, u8 private_server, const char * server_addr, u8 videoWidth, bool patchFix480p, u8 deflicker, u8 bootType);
enum enum
{ {
@ -28,6 +28,13 @@ enum
DEFLICKER_ON_HIGH DEFLICKER_ON_HIGH
}; };
enum
{
WIDTH_AUTO,
WIDTH_FRAMEBUFFER,
WIDTH_MAX
};
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@ -107,8 +107,8 @@ int main()
if(normalCFG.vidMode == 5) if(normalCFG.vidMode == 5)
normalCFG.patchVidMode = 1; //progressive mode requires this normalCFG.patchVidMode = 1; //progressive mode requires this
vmode = Disc_SelectVMode(normalCFG.vidMode, &vmode_reg);// requires Disc_ID[3] vmode = Disc_SelectVMode(normalCFG.vidMode, &vmode_reg);// requires Disc_ID[3]
AppEntrypoint = Apploader_Run(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, normalCFG.patchVidMode, normalCFG.aspectRatio, AppEntrypoint = Apploader_Run(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, normalCFG.patchVidMode, normalCFG.aspectRatio, normalCFG.returnTo,
normalCFG.returnTo, normalCFG.patchregion, normalCFG.private_server, normalCFG.server_addr, normalCFG.patchFix480p, normalCFG.deflicker, normalCFG.BootType); normalCFG.patchregion, normalCFG.private_server, normalCFG.server_addr, normalCFG.videoWidth, normalCFG.patchFix480p, normalCFG.deflicker, normalCFG.BootType);
WDVD_Close(); WDVD_Close();
} }
else if(normalCFG.BootType == TYPE_CHANNEL) else if(normalCFG.BootType == TYPE_CHANNEL)
@ -118,7 +118,7 @@ int main()
ISFS_Deinitialize(); ISFS_Deinitialize();
vmode = Disc_SelectVMode(normalCFG.vidMode, &vmode_reg);// requires Disc_ID[3] vmode = Disc_SelectVMode(normalCFG.vidMode, &vmode_reg);// requires Disc_ID[3]
PatchChannel(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, normalCFG.patchVidMode, normalCFG.aspectRatio, PatchChannel(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, normalCFG.patchVidMode, normalCFG.aspectRatio,
normalCFG.returnTo, normalCFG.private_server, normalCFG.server_addr, normalCFG.patchFix480p, normalCFG.deflicker, normalCFG.BootType); normalCFG.returnTo, normalCFG.private_server, normalCFG.server_addr, normalCFG.videoWidth, normalCFG.patchFix480p, normalCFG.deflicker, normalCFG.BootType);
} }
gprintf("Entrypoint: %08x, Requested Game IOS: %i\n", AppEntrypoint, GameIOS); gprintf("Entrypoint: %08x, Requested Game IOS: %i\n", AppEntrypoint, GameIOS);
setprog(320); setprog(320);

View File

@ -1337,7 +1337,7 @@ u32 do_new_wiimmfi() {
// Deflicker filter patching by wiidev (blackb0x @ GBAtemp) // Deflicker filter patching by wiidev (blackb0x @ GBAtemp)
void patch_vfilters(void *addr, u32 len, u8 *vfilter) void patch_vfilters(void *addr, u32 len, u8 *vfilter)
{ {
u8 *addr_start = addr; u8 *addr_start = (u8 *)addr;
while (len >= sizeof(GXRModeObj)) while (len >= sizeof(GXRModeObj))
{ {
GXRModeObj *vidmode = (GXRModeObj *)addr_start; GXRModeObj *vidmode = (GXRModeObj *)addr_start;
@ -1369,8 +1369,8 @@ void patch_vfilters_rogue(void *addr, u32 len, u8 *vfilter)
{4, 4, 16, 16, 16, 4, 4}, {4, 4, 16, 16, 16, 4, 4},
{2, 2, 17, 22, 17, 2, 2} {2, 2, 17, 22, 17, 2, 2}
}; };
u8 *addr_start = addr; u8 *addr_start = (u8 *)addr;
u8 *addr_end = addr + len - 8; u8 *addr_end = addr_start + len - 8;
while (addr_start <= addr_end) while (addr_start <= addr_end)
{ {
u8 known_vfilter[7]; u8 known_vfilter[7];
@ -1400,8 +1400,8 @@ void deflicker_patch(void *addr, u32 len)
0x508BC00E, 0x99498000, 0x500CC00E, 0x508BC00E, 0x99498000, 0x500CC00E,
0x90698000, 0x99498000, 0x90E98000, 0x90698000, 0x99498000, 0x90E98000,
0x99498000, 0x91098000, 0x41820040}; 0x99498000, 0x91098000, 0x41820040};
u8 *addr_start = addr; u8 *addr_start = (u8 *)addr;
u8 *addr_end = addr + len - sizeof(SearchPattern); u8 *addr_end = addr_start + len - sizeof(SearchPattern);
while (addr_start <= addr_end) while (addr_start <= addr_end)
{ {
if (memcmp(addr_start, SearchPattern, sizeof(SearchPattern)) == 0) if (memcmp(addr_start, SearchPattern, sizeof(SearchPattern)) == 0)
@ -1413,3 +1413,51 @@ void deflicker_patch(void *addr, u32 len)
addr_start += 4; addr_start += 4;
} }
} }
void patch_width(void *addr, u32 len)
{
u8 SearchPattern[32] = {
0x40, 0x82, 0x00, 0x08, 0x48, 0x00, 0x00, 0x1C,
0x28, 0x09, 0x00, 0x03, 0x40, 0x82, 0x00, 0x08,
0x48, 0x00, 0x00, 0x10, 0x2C, 0x03, 0x00, 0x00,
0x40, 0x82, 0x00, 0x08, 0x54, 0xA5, 0x0C, 0x3C};
u8 *addr_start = (u8 *)addr;
u8 *addr_end = addr_start + len - sizeof(SearchPattern);
while (addr_start <= addr_end)
{
if (memcmp(addr_start, SearchPattern, sizeof(SearchPattern)) == 0)
{
if (addr_start[-0x70] == 0xA0 && addr_start[-0x6E] == 0x00 && addr_start[-0x6D] == 0x0A)
{
if (addr_start[-0x44] == 0xA0 && addr_start[-0x42] == 0x00 && addr_start[-0x41] == 0x0E)
{
u8 reg_a = (addr_start[-0x6F] >> 5);
u8 reg_b = (addr_start[-0x43] >> 5);
// Patch to the framebuffer resolution
addr_start[-0x41] = 0x04;
// Center the image
void *offset = addr_start - 0x70;
u32 old_heap_ptr = *(u32 *)0x80003110;
*(u32 *)0x80003110 = old_heap_ptr - 0x40;
u32 heap_space = old_heap_ptr - 0x40;
u32 org_address = (addr_start[-0x70] << 24) | (addr_start[-0x6F] << 16);
*(u32 *)(heap_space + 0x00) = org_address | 4;
*(u32 *)(heap_space + 0x04) = 0x200002D0 | (reg_b << 21) | (reg_a << 16);
*(u32 *)(heap_space + 0x08) = 0x38000002 | (reg_a << 21);
*(u32 *)(heap_space + 0x0C) = 0x7C000396 | (reg_a << 21) | (reg_b << 16) | (reg_a << 11);
*(u32 *)offset = 0x48000000 + ((heap_space - (u32)offset) & 0x3ffffff);
*(u32 *)(heap_space + 0x10) = 0x48000000 + ((((u32)offset + 0x04) - (heap_space + 0x10)) & 0x3ffffff);
gprintf("Patched resolution. Branched from 0x%x to 0x%x\n", offset, heap_space);
return;
}
}
}
addr_start += 4;
}
}

View File

@ -33,6 +33,7 @@ extern u8 configbytes[2];
void deflicker_patch(void *addr, u32 len); void deflicker_patch(void *addr, u32 len);
void patch_vfilters(void *addr, u32 len, u8 *vfilter); void patch_vfilters(void *addr, u32 len, u8 *vfilter);
void patch_vfilters_rogue(void *addr, u32 len, u8 *vfilter); void patch_vfilters_rogue(void *addr, u32 len, u8 *vfilter);
void patch_width(void *addr, u32 len);
bool dogamehooks(void *addr, u32 len, bool channel); bool dogamehooks(void *addr, u32 len, bool channel);
void langpatcher(void *addr, u32 len); void langpatcher(void *addr, u32 len);
void vidolpatcher(void *addr, u32 len); void vidolpatcher(void *addr, u32 len);

View File

@ -49,6 +49,7 @@ struct the_CFG {
s8 aspectRatio; s8 aspectRatio;
bool patchFix480p; bool patchFix480p;
u8 deflicker; u8 deflicker;
u8 videoWidth;
u8 private_server; u8 private_server;
char server_addr[24]; char server_addr[24];
u8 *cheats; u8 *cheats;

View File

@ -62,7 +62,7 @@ u8 *booter_ptr = NULL;
u32 booter_size = 0; u32 booter_size = 0;
void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, s8 aspectRatio, u8 private_server, const char *server_addr, void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, s8 aspectRatio, u8 private_server, const char *server_addr,
bool patchFix480p, u8 deflicker, u32 returnTo, u8 BootType, bool use_led) u8 videoWidth, bool patchFix480p, u8 deflicker, u32 returnTo, u8 BootType, bool use_led)
{ {
normalCFG.vidMode = vidMode; normalCFG.vidMode = vidMode;
normalCFG.vipatch = vipatch; normalCFG.vipatch = vipatch;
@ -73,6 +73,7 @@ void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 pat
strncpy(normalCFG.server_addr, server_addr, 23); strncpy(normalCFG.server_addr, server_addr, 23);
normalCFG.patchFix480p = patchFix480p; normalCFG.patchFix480p = patchFix480p;
normalCFG.deflicker = deflicker; normalCFG.deflicker = deflicker;
normalCFG.videoWidth = videoWidth;
normalCFG.returnTo = returnTo; normalCFG.returnTo = returnTo;
normalCFG.configbytes[0] = configbytes[0]; normalCFG.configbytes[0] = configbytes[0];
normalCFG.configbytes[1] = configbytes[1]; normalCFG.configbytes[1] = configbytes[1];

View File

@ -29,7 +29,7 @@ extern u32 hooktype;
#endif #endif
void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, s8 aspectRatio, u8 private_server, const char *server_addr, void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, s8 aspectRatio, u8 private_server, const char *server_addr,
bool patchFix480p, u8 deflicker, u32 returnTo, u8 BootType, bool use_led); u8 videoWidth, bool patchFix480p, u8 deflicker, u32 returnTo, u8 BootType, bool use_led);
bool ExternalBooter_LoadBins(const char *binDir); bool ExternalBooter_LoadBins(const char *binDir);
void ExternalBooter_ChannelSetup(u64 title, bool dol); void ExternalBooter_ChannelSetup(u64 title, bool dol);
void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, const char *ID); void ExternalBooter_WiiGameSetup(bool wbfs, bool dvd, bool patchregion, const char *ID);

View File

@ -1018,6 +1018,8 @@ private:
static const SOption _languages[11]; static const SOption _languages[11];
static const SOption _GlobalDeflickerOptions[6]; static const SOption _GlobalDeflickerOptions[6];
static const SOption _DeflickerOptions[7]; static const SOption _DeflickerOptions[7];
static const SOption _GlobalVideoWidths[2];
static const SOption _VideoWidths[3];
static const SOption _AspectRatio[3]; static const SOption _AspectRatio[3];
static const SOption _WidescreenWiiu[3]; static const SOption _WidescreenWiiu[3];
static const SOption _vidModePatch[4]; static const SOption _vidModePatch[4];

View File

@ -48,6 +48,17 @@ const CMenu::SOption CMenu::_DeflickerOptions[7] = {
{ "df_high", L"On (High)" }, { "df_high", L"On (High)" },
}; };
const CMenu::SOption CMenu::_GlobalVideoWidths[2] = {
{ "vw_auto", L"Auto" },
{ "vw_frmbuf", L"Framebuffer" },
};
const CMenu::SOption CMenu::_VideoWidths[3] = {
{ "vw_def", L"Default" },
{ "vw_auto", L"Auto" },
{ "vw_frmbuf", L"Framebuffer" },
};
const CMenu::SOption CMenu::_languages[11] = { const CMenu::SOption CMenu::_languages[11] = {
{ "lngdef", L"Default" },// next should be console { "lngdef", L"Default" },// next should be console
{ "lngjap", L"Japanese" }, { "lngjap", L"Japanese" },
@ -253,7 +264,6 @@ void CMenu::_showConfigGame()
} }
else else
i = 0; i = 0;
if(i > 0) if(i > 0)
m_btnMgr.setText(m_configLbl2Val, wfmt(L"%i", i)); m_btnMgr.setText(m_configLbl2Val, wfmt(L"%i", i));
else else
@ -396,17 +406,20 @@ void CMenu::_showConfigGame()
} }
else if(m_configGamePage == 5) else if(m_configGamePage == 5)
{ {
m_btnMgr.setText(m_configLbl1, _t("cfgg38", L"Activity LED")); m_btnMgr.setText(m_configLbl1, _t("cfgg45", L"Private Server"));
m_btnMgr.setText(m_configBtn1, _optBoolToString(m_gcfg2.getOptBool(id, "led", 0)));
m_btnMgr.show(m_configLbl1);
m_btnMgr.show(m_configBtn1);
m_btnMgr.setText(m_configLbl2, _t("cfgg45", L"Private Server"));
i = min(m_gcfg2.getUInt(id, "private_server", 0), ARRAY_SIZE(CMenu::_privateServer) - 1u); i = min(m_gcfg2.getUInt(id, "private_server", 0), ARRAY_SIZE(CMenu::_privateServer) - 1u);
if(i < 3) if(i < 3)
m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_privateServer[i].id, CMenu::_privateServer[i].text)); m_btnMgr.setText(m_configLbl1Val, _t(CMenu::_privateServer[i].id, CMenu::_privateServer[i].text));
else else
m_btnMgr.setText(m_configLbl2Val, custom_servers[i - 3]);//wstringEx() m_btnMgr.setText(m_configLbl1Val, custom_servers[i - 3]);//wstringEx()
m_btnMgr.show(m_configLbl1);
m_btnMgr.show(m_configLbl1Val);
m_btnMgr.show(m_configBtn1P);
m_btnMgr.show(m_configBtn1M);
m_btnMgr.setText(m_configLbl2, _t("cfgg65", L"Video Width"));
i = min(m_gcfg2.getUInt(id, "video_width", 0), ARRAY_SIZE(CMenu::_VideoWidths) - 1u);
m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_VideoWidths[i].id, CMenu::_VideoWidths[i].text));
m_btnMgr.show(m_configLbl2); m_btnMgr.show(m_configLbl2);
m_btnMgr.show(m_configLbl2Val); m_btnMgr.show(m_configLbl2Val);
m_btnMgr.show(m_configBtn2P); m_btnMgr.show(m_configBtn2P);
@ -444,6 +457,13 @@ void CMenu::_showConfigGame()
m_btnMgr.show(m_configBtn2P); m_btnMgr.show(m_configBtn2P);
m_btnMgr.show(m_configBtn2M); m_btnMgr.show(m_configBtn2M);
} }
else // wii only
{
m_btnMgr.setText(m_configLbl2, _t("cfgg38", L"Activity LED"));
m_btnMgr.setText(m_configBtn2, _optBoolToString(m_gcfg2.getOptBool(id, "led", 0)));
m_btnMgr.show(m_configLbl2);
m_btnMgr.show(m_configBtn2);
}
} }
} }
@ -739,20 +759,22 @@ void CMenu::_configGame(const dir_discHdr *hdr, bool disc)
} }
else if(m_configGamePage == 5) else if(m_configGamePage == 5)
{ {
if(m_btnMgr.selected(m_configBtn1)) if(m_btnMgr.selected(m_configBtn1P) || m_btnMgr.selected(m_configBtn1M))
{ {
m_gcfg2.setBool(id, "led", !m_gcfg2.getBool(id, "led", 0)); s8 direction = m_btnMgr.selected(m_configBtn1P) ? 1 : -1;
m_btnMgr.setText(m_configBtn1, _optBoolToString(m_gcfg2.getOptBool(id, "led", 0))); i = loopNum(m_gcfg2.getUInt(id, "private_server") + direction, ARRAY_SIZE(CMenu::_privateServer) + custom_servers.size());
m_gcfg2.setUInt(id, "private_server", i);
if(i < 3)
m_btnMgr.setText(m_configLbl1Val, _t(CMenu::_privateServer[i].id, CMenu::_privateServer[i].text));
else
m_btnMgr.setText(m_configLbl1Val, custom_servers[i - 3]);//wstringEx()
} }
else if(m_btnMgr.selected(m_configBtn2P) || m_btnMgr.selected(m_configBtn2M)) else if(m_btnMgr.selected(m_configBtn2P) || m_btnMgr.selected(m_configBtn2M))
{ {
s8 direction = m_btnMgr.selected(m_configBtn2P) ? 1 : -1; s8 direction = m_btnMgr.selected(m_configBtn2P) ? 1 : -1;
i = loopNum(m_gcfg2.getUInt(id, "private_server") + direction, ARRAY_SIZE(CMenu::_privateServer) + custom_servers.size()); i = loopNum(m_gcfg2.getUInt(id, "video_width") + direction, ARRAY_SIZE(CMenu::_VideoWidths));
m_gcfg2.setUInt(id, "private_server", i); m_gcfg2.setInt(id, "video_width", i);
if(i < 3) m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_VideoWidths[i].id, CMenu::_VideoWidths[i].text));
m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_privateServer[i].id, CMenu::_privateServer[i].text));
else
m_btnMgr.setText(m_configLbl2Val, custom_servers[i - 3]);//wstringEx()
} }
else if(m_btnMgr.selected(m_configBtn3P) || m_btnMgr.selected(m_configBtn3M)) else if(m_btnMgr.selected(m_configBtn3P) || m_btnMgr.selected(m_configBtn3M))
{ {
@ -798,13 +820,18 @@ void CMenu::_configGame(const dir_discHdr *hdr, bool disc)
_error(_t("dlmsg14", L"Done.")); _error(_t("dlmsg14", L"Done."));
_showConfigGame(); _showConfigGame();
} }
else if(m_btnMgr.selected(m_configBtn2P) || m_btnMgr.selected(m_configBtn2M)) else if(m_btnMgr.selected(m_configBtn2P) || m_btnMgr.selected(m_configBtn2M))// wii u only
{ {
s8 direction = m_btnMgr.selected(m_configBtn2P) ? 1 : -1; s8 direction = m_btnMgr.selected(m_configBtn2P) ? 1 : -1;
i = loopNum(m_gcfg2.getUInt(id, "widescreen_wiiu", 0) + direction, ARRAY_SIZE(CMenu::_WidescreenWiiu)); i = loopNum(m_gcfg2.getUInt(id, "widescreen_wiiu", 0) + direction, ARRAY_SIZE(CMenu::_WidescreenWiiu));
m_gcfg2.setInt(id, "widescreen_wiiu", i); m_gcfg2.setInt(id, "widescreen_wiiu", i);
m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_WidescreenWiiu[i].id, CMenu::_WidescreenWiiu[i].text)); m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_WidescreenWiiu[i].id, CMenu::_WidescreenWiiu[i].text));
} }
else if(m_btnMgr.selected(m_configBtn2))// wii only
{
m_gcfg2.setBool(id, "led", !m_gcfg2.getBool(id, "led", 0));
m_btnMgr.setText(m_configBtn2, _optBoolToString(m_gcfg2.getOptBool(id, "led", 0)));
}
} }
} }
} }

View File

@ -122,7 +122,6 @@ void CMenu::_showConfigMain()
{ {
m_btnMgr.show(m_configLbl1); m_btnMgr.show(m_configLbl1);
m_btnMgr.show(m_configLbl3); m_btnMgr.show(m_configLbl3);
if(mainCfg_curPage != 14)
m_btnMgr.show(m_configLbl4); m_btnMgr.show(m_configLbl4);
} }
@ -409,6 +408,9 @@ void CMenu::_showConfigMain()
m_btnMgr.show(m_configLbl3Val); m_btnMgr.show(m_configLbl3Val);
m_btnMgr.show(m_configBtn3M); m_btnMgr.show(m_configBtn3M);
m_btnMgr.show(m_configBtn3P); m_btnMgr.show(m_configBtn3P);
m_btnMgr.show(m_configLbl4Val);
m_btnMgr.show(m_configBtn4M);
m_btnMgr.show(m_configBtn4P);
m_btnMgr.setText(m_configLbl1, _t("cfg729", L"Use system proxy settings")); m_btnMgr.setText(m_configLbl1, _t("cfg729", L"Use system proxy settings"));
m_btnMgr.setText(m_configBtn1, m_cfg.getBool("PROXY", "proxy_use_system") ? _t("on", L"On") : _t("off", L"Off")); m_btnMgr.setText(m_configBtn1, m_cfg.getBool("PROXY", "proxy_use_system") ? _t("on", L"On") : _t("off", L"Off"));
m_btnMgr.setText(m_configLbl2, _t("cfg730", L"Always show main icons")); m_btnMgr.setText(m_configLbl2, _t("cfg730", L"Always show main icons"));
@ -416,6 +418,9 @@ void CMenu::_showConfigMain()
m_btnMgr.setText(m_configLbl3, _t("cfgg61", L"Deflicker Filter")); m_btnMgr.setText(m_configLbl3, _t("cfgg61", L"Deflicker Filter"));
int i = min(max(0, m_cfg.getInt("GENERAL", "deflicker_wii", 0)), (int)ARRAY_SIZE(CMenu::_GlobalDeflickerOptions) - 1); int i = min(max(0, m_cfg.getInt("GENERAL", "deflicker_wii", 0)), (int)ARRAY_SIZE(CMenu::_GlobalDeflickerOptions) - 1);
m_btnMgr.setText(m_configLbl3Val, _t(CMenu::_GlobalDeflickerOptions[i].id, CMenu::_GlobalDeflickerOptions[i].text)); m_btnMgr.setText(m_configLbl3Val, _t(CMenu::_GlobalDeflickerOptions[i].id, CMenu::_GlobalDeflickerOptions[i].text));
m_btnMgr.setText(m_configLbl4, _t("cfgg65", L"Video Width"));
i = min(max(0, m_cfg.getInt("GENERAL", "video_width", 0)), (int)ARRAY_SIZE(CMenu::_GlobalVideoWidths) - 1);
m_btnMgr.setText(m_configLbl4Val, _t(CMenu::_GlobalVideoWidths[i].id, CMenu::_GlobalVideoWidths[i].text));
} }
} }
@ -961,6 +966,13 @@ void CMenu::_configMain(void)
int val = m_cfg.getInt("GENERAL", "deflicker_wii"); int val = m_cfg.getInt("GENERAL", "deflicker_wii");
m_btnMgr.setText(m_configLbl3Val, _t(CMenu::_GlobalDeflickerOptions[val].id, CMenu::_GlobalDeflickerOptions[val].text)); m_btnMgr.setText(m_configLbl3Val, _t(CMenu::_GlobalDeflickerOptions[val].id, CMenu::_GlobalDeflickerOptions[val].text));
} }
else if(m_btnMgr.selected(m_configBtn4P) || m_btnMgr.selected(m_configBtn4M))
{
s8 direction = m_btnMgr.selected(m_configBtn4P) ? 1 : -1;
m_cfg.setInt("GENERAL", "video_width", loopNum(m_cfg.getUInt("GENERAL", "video_width") + direction, ARRAY_SIZE(CMenu::_GlobalVideoWidths)));
int val = m_cfg.getInt("GENERAL", "video_width");
m_btnMgr.setText(m_configLbl4Val, _t(CMenu::_GlobalVideoWidths[val].id, CMenu::_GlobalVideoWidths[val].text));
}
} }
} }
} }

View File

@ -861,6 +861,9 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
u8 deflicker = min(m_gcfg2.getUInt(id, "deflicker_wii", 0), ARRAY_SIZE(CMenu::_DeflickerOptions) - 1u); u8 deflicker = min(m_gcfg2.getUInt(id, "deflicker_wii", 0), ARRAY_SIZE(CMenu::_DeflickerOptions) - 1u);
deflicker = (deflicker == 0) ? min(m_cfg.getUInt("GENERAL", "deflicker_wii", 0), ARRAY_SIZE(CMenu::_GlobalDeflickerOptions) - 1u) : deflicker - 1; deflicker = (deflicker == 0) ? min(m_cfg.getUInt("GENERAL", "deflicker_wii", 0), ARRAY_SIZE(CMenu::_GlobalDeflickerOptions) - 1u) : deflicker - 1;
u8 videoWidth = min(m_gcfg2.getUInt(id, "video_width", 0), ARRAY_SIZE(CMenu::_VideoWidths) - 1u);
videoWidth = (videoWidth == 0) ? min(m_cfg.getUInt("GENERAL", "video_width", 0), ARRAY_SIZE(CMenu::_GlobalVideoWidths) - 1u) : videoWidth-1;
u8 private_server = m_gcfg2.getUInt(id, "private_server", 0); u8 private_server = m_gcfg2.getUInt(id, "private_server", 0);
string server_addr = ""; string server_addr = "";
if(private_server > 2) if(private_server > 2)
@ -1010,7 +1013,7 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
ExternalBooter_ChannelSetup(gameTitle, use_dol); ExternalBooter_ChannelSetup(gameTitle, use_dol);
WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, private_server, server_addr.c_str(), WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, private_server, server_addr.c_str(),
fix480p, deflicker, 0, TYPE_CHANNEL, use_led); videoWidth, fix480p, deflicker, 0, TYPE_CHANNEL, use_led);
Sys_Exit(); Sys_Exit();
} }
@ -1116,6 +1119,9 @@ void CMenu::_launchWii(dir_discHdr *hdr, bool dvd, bool disc_cfg)
u8 deflicker = min(m_gcfg2.getUInt(id, "deflicker_wii", 0), ARRAY_SIZE(CMenu::_DeflickerOptions) - 1u); u8 deflicker = min(m_gcfg2.getUInt(id, "deflicker_wii", 0), ARRAY_SIZE(CMenu::_DeflickerOptions) - 1u);
deflicker = (deflicker == 0) ? min(m_cfg.getUInt("GENERAL", "deflicker_wii", 0), ARRAY_SIZE(CMenu::_GlobalDeflickerOptions) - 1u) : deflicker-1; deflicker = (deflicker == 0) ? min(m_cfg.getUInt("GENERAL", "deflicker_wii", 0), ARRAY_SIZE(CMenu::_GlobalDeflickerOptions) - 1u) : deflicker-1;
u8 videoWidth = min(m_gcfg2.getUInt(id, "video_width", 0), ARRAY_SIZE(CMenu::_VideoWidths) - 1u);
videoWidth = (videoWidth == 0) ? min(m_cfg.getUInt("GENERAL", "video_width", 0), ARRAY_SIZE(CMenu::_GlobalVideoWidths) - 1u) : videoWidth-1;
u8 private_server = m_gcfg2.getUInt(id, "private_server", 0); u8 private_server = m_gcfg2.getUInt(id, "private_server", 0);
string server_addr = ""; string server_addr = "";
if(private_server > 2) if(private_server > 2)
@ -1331,7 +1337,7 @@ void CMenu::_launchWii(dir_discHdr *hdr, bool dvd, bool disc_cfg)
ExternalBooter_WiiGameSetup(wbfs_partition, dvd, patchregion, id.c_str()); ExternalBooter_WiiGameSetup(wbfs_partition, dvd, patchregion, id.c_str());
WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, private_server, server_addr.c_str(), WiiFlow_ExternalBooter(videoMode, vipatch, countryPatch, patchVidMode, aspectRatio, private_server, server_addr.c_str(),
fix480p, deflicker, returnTo, TYPE_WII_GAME, use_led); videoWidth, fix480p, deflicker, returnTo, TYPE_WII_GAME, use_led);
Sys_Exit(); Sys_Exit();
} }

View File

@ -164,6 +164,7 @@ cfgg57=Não permitido para disco!
cfgg58=Somente adultos cfgg58=Somente adultos
cfgg59=Emulação BBA cfgg59=Emulação BBA
cfgg60=Perfil BBA Net cfgg60=Perfil BBA Net
cfgg65=Video Width
cfgg4=Patch strings de países cfgg4=Patch strings de países
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -478,6 +479,9 @@ vmpall=Todas
vmpmore=Mais vmpmore=Mais
vmpnone=Nenhum vmpnone=Nenhum
vmpnormal=Normal vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Instalar WAD wad1=Instalar WAD
wad2=Ok wad2=Ok
wad3= wad3=

View File

@ -167,6 +167,7 @@ cfgg57=Niet toegestaan voor schijf!
cfgg58=Alleen volwassenen cfgg58=Alleen volwassenen
cfgg59=BBA-emulatie cfgg59=BBA-emulatie
cfgg60=BBA Net Profile cfgg60=BBA Net Profile
cfgg65=Video Width
cfgg4=Landinstellingenpatch cfgg4=Landinstellingenpatch
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -483,6 +484,9 @@ vmpall=Alles
vmpmore=Meer vmpmore=Meer
vmpnone=Geen vmpnone=Geen
vmpnormal=Normaal vmpnormal=Normaal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=WAD installeren wad1=WAD installeren
wad2=Starten wad2=Starten
wad3= wad3=

View File

@ -169,6 +169,7 @@ cfgg61=Deflicker Filter
cfgg62=Reload cached cover cfgg62=Reload cached cover
cfgg63=Converting cover please wait... cfgg63=Converting cover please wait...
cfgg64=Reset Settings to Defaults cfgg64=Reset Settings to Defaults
cfgg65=Video Width
cfgg4=Patch country strings cfgg4=Patch country strings
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -487,6 +488,9 @@ vmpall=All
vmpmore=More vmpmore=More
vmpnone=None vmpnone=None
vmpnormal=Normal vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Install WAD wad1=Install WAD
wad2=Go wad2=Go
wad3= wad3=

View File

@ -164,6 +164,7 @@ cfgg57=Non-Autorisé pour ce Disque!
cfgg58=Résérvé aux Adultes cfgg58=Résérvé aux Adultes
cfgg59=Emulation BBA cfgg59=Emulation BBA
cfgg60=Profil Net BBA cfgg60=Profil Net BBA
cfgg65=Video Width
cfgg4=Patcher Jeux Import cfgg4=Patcher Jeux Import
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -469,6 +470,9 @@ vmpall=Tout
vmpmore=Plus vmpmore=Plus
vmpnone=Aucun vmpnone=Aucun
vmpnormal=Normal vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Installer WAD wad1=Installer WAD
wad2=Aller wad2=Aller
wad3= wad3=

View File

@ -168,6 +168,7 @@ cfgg58=Nur für Erwachsene
cfgg59=BBA-Emulation cfgg59=BBA-Emulation
cfgg60=BBA-Netzprofil cfgg60=BBA-Netzprofil
cfgg61=Entflimmer-Filter cfgg61=Entflimmer-Filter
cfgg65=Video Width
cfgg4=Länder-Strings patchen cfgg4=Länder-Strings patchen
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -500,6 +501,9 @@ vmpall=Alle
vmpmore=Mehr vmpmore=Mehr
vmpnone=Keinen vmpnone=Keinen
vmpnormal=Normal vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=WAD Installieren wad1=WAD Installieren
wad2=Start wad2=Start
wad3= wad3=

View File

@ -160,6 +160,7 @@ cfgg57=Non consentito per i dischi!
cfgg58=solo adulti cfgg58=solo adulti
cfgg59=Emulazione BBA cfgg59=Emulazione BBA
cfgg60=BBA Profilo di Rete cfgg60=BBA Profilo di Rete
cfgg65=Video Width
cfgg7=Vipatch cfgg7=Vipatch
cfgg8=Indietro cfgg8=Indietro
cfghb1=Impostazioni Homebrew cfghb1=Impostazioni Homebrew
@ -462,6 +463,9 @@ vmpall=Tutte
vmpmore=Di più vmpmore=Di più
vmpnone=Nessuna vmpnone=Nessuna
vmpnormal=Normale vmpnormal=Normale
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Installa WAD wad1=Installa WAD
wad2=Avvia wad2=Avvia
wad3=Selezionato %s, dopo l'installazione ritornerai all'explorer wad3=Selezionato %s, dopo l'installazione ritornerai all'explorer

View File

@ -168,6 +168,7 @@ cfgg58=성인용
cfgg59=BBA 에뮬레이션 cfgg59=BBA 에뮬레이션
cfgg60=BBA 넷 프로파일 cfgg60=BBA 넷 프로파일
cfgg61=디플리커 필터 cfgg61=디플리커 필터
cfgg65=Video Width
cfgg4=국가 문자열 패치 cfgg4=국가 문자열 패치
cfgg5=오카리나 cfgg5=오카리나
cfgg6= cfgg6=
@ -491,6 +492,9 @@ vmpall=모두
vmpmore=더 많은 vmpmore=더 많은
vmpnone=없음 vmpnone=없음
vmpnormal=보통 vmpnormal=보통
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=WAD 설치 wad1=WAD 설치
wad2=가기 wad2=가기
wad3= wad3=

View File

@ -167,6 +167,7 @@ cfgg57=Niedozwolone przez płytę!
cfgg58=Ustaw znacznik tylko dla dorosłych cfgg58=Ustaw znacznik tylko dla dorosłych
cfgg59=Emulacja BBA cfgg59=Emulacja BBA
cfgg60=Profil Net BBA cfgg60=Profil Net BBA
cfgg65=Video Width
cfgg4=Spatchuj ustawienia kraju cfgg4=Spatchuj ustawienia kraju
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -481,6 +482,9 @@ vmpall=Wszystkie
vmpmore=Więcej vmpmore=Więcej
vmpnone=Żadne vmpnone=Żadne
vmpnormal=Normal vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Zainstaluj plik WAD wad1=Zainstaluj plik WAD
wad2=Rozpocznij wad2=Rozpocznij
wad3= wad3=

View File

@ -169,6 +169,7 @@ cfgg61=Фильтр подавления мерцания
cfgg62=Перезагрузить кэшированную обложку cfgg62=Перезагрузить кэшированную обложку
cfgg63=Конвертирование обложки, подождите... cfgg63=Конвертирование обложки, подождите...
cfgg64=Сбросить настройки до значений по умолчанию cfgg64=Сбросить настройки до значений по умолчанию
cfgg65=Video Width
cfgg4=Патч Country Strings cfgg4=Патч Country Strings
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -487,6 +488,9 @@ vmpall=Все
vmpmore=Больше vmpmore=Больше
vmpnone=Отсутствует vmpnone=Отсутствует
vmpnormal=Обычное vmpnormal=Обычное
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Установить WAD wad1=Установить WAD
wad2=Перейти wad2=Перейти
wad3= wad3=

View File

@ -165,6 +165,7 @@ cfgg58=Solo para adultos
cfgg59=Emulación BBA cfgg59=Emulación BBA
cfgg60=Perfil de red BBA cfgg60=Perfil de red BBA
cfgg61=Filtro Antiparpadeo de video cfgg61=Filtro Antiparpadeo de video
cfgg65=Video Width
cfgg4=Parchar cadenas de país cfgg4=Parchar cadenas de país
cfgg5=Ocarina cfgg5=Ocarina
cfgg6= cfgg6=
@ -480,6 +481,9 @@ vmpall=Todos
vmpmore=Más vmpmore=Más
vmpnone=Ninguno vmpnone=Ninguno
vmpnormal=Normal vmpnormal=Normal
vw_auto=Auto
vw_def=Default
vw_frmbuf=Framebuffer
wad1=Instalar WAD wad1=Instalar WAD
wad2=Empezar wad2=Empezar
wad3= wad3=