- 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,
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_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)
hookpatched = dogamehooks(dolchunkoffset[i], dolchunksize[i], true);
if (videoWidth == WIDTH_FRAMEBUFFER)
patch_width(dolchunkoffset[i], dolchunksize[i]);
if (deflicker == DEFLICKER_ON_LOW)
{
patch_vfilters(dolchunkoffset[i], dolchunksize[i], vfilter_low);

View File

@ -14,7 +14,7 @@ typedef struct _dolheader
} ATTRIBUTE_PACKED dolheader;
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);
extern bool isForwarder;

View File

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

View File

@ -26,8 +26,8 @@ static u8 *appldr = (u8*)0x81200000;
static const char *GameID = (const char*)0x80000000;
/* Constants */
#define APPLDR_OFFSET 0x910
#define APPLDR_CODE 0x918
#define APPLDR_OFFSET 0x910// usblgx uses 0x2440 -huh?
#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,
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();
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 */
static struct
{
char revision[16];
void *entry;
s32 size;
s32 trailersize;
s32 padding;
} apploader_hdr ATTRIBUTE_ALIGN(32);
char revision[16];//[0-3] 16 divided by 4 bytes = 4
void *entry;// [4] 4 bytes
s32 size;//[5] 4 bytes
s32 trailersize;// [6] 4 bytes
s32 padding;// [7] 4 bytes
} 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,
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.
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);
}
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)
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_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);
if(debuggerselect == 2)
Patch_fwrite(dst, len);
if(hooktype != 0 && hookpatched == false)
hookpatched = dogamehooks(dst, len, false);
if(patchVidModes > 0)
PatchVideoSneek(dst, len);
if(vipatch)
vidolpatcher(dst, len);
if(patchVidModes > 0)
PatchVideoSneek(dst, len);
if(configbytes[0] != 0xCD)
langpatcher(dst, len);
if(countryString)
PatchCountryStrings(dst, len); // Country Patch by WiiPower
if(aspectRatio != -1)
PatchAspectRatio(dst, len, aspectRatio);
if(returnTo)
PatchReturnTo(dst, len, returnTo);
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);
if(patchregion)
PatchRegion(dst, len);
if(private_server)
PrivateServerPatcher(dst, len, private_server, serverAddr);
if(deflicker == DEFLICKER_ON_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)
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)

View File

@ -7,7 +7,7 @@ extern "C" {
/* Prototypes */
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
{
@ -28,6 +28,13 @@ enum
DEFLICKER_ON_HIGH
};
enum
{
WIDTH_AUTO,
WIDTH_FRAMEBUFFER,
WIDTH_MAX
};
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@ -107,8 +107,8 @@ int main()
if(normalCFG.vidMode == 5)
normalCFG.patchVidMode = 1; //progressive mode requires this
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,
normalCFG.returnTo, normalCFG.patchregion, normalCFG.private_server, normalCFG.server_addr, normalCFG.patchFix480p, normalCFG.deflicker, normalCFG.BootType);
AppEntrypoint = Apploader_Run(normalCFG.vidMode, vmode, normalCFG.vipatch, normalCFG.countryString, normalCFG.patchVidMode, normalCFG.aspectRatio, normalCFG.returnTo,
normalCFG.patchregion, normalCFG.private_server, normalCFG.server_addr, normalCFG.videoWidth, normalCFG.patchFix480p, normalCFG.deflicker, normalCFG.BootType);
WDVD_Close();
}
else if(normalCFG.BootType == TYPE_CHANNEL)
@ -118,7 +118,7 @@ int main()
ISFS_Deinitialize();
vmode = Disc_SelectVMode(normalCFG.vidMode, &vmode_reg);// requires Disc_ID[3]
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);
setprog(320);

View File

@ -1337,7 +1337,7 @@ u32 do_new_wiimmfi() {
// Deflicker filter patching by wiidev (blackb0x @ GBAtemp)
void patch_vfilters(void *addr, u32 len, u8 *vfilter)
{
u8 *addr_start = addr;
u8 *addr_start = (u8 *)addr;
while (len >= sizeof(GXRModeObj))
{
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},
{2, 2, 17, 22, 17, 2, 2}
};
u8 *addr_start = addr;
u8 *addr_end = addr + len - 8;
u8 *addr_start = (u8 *)addr;
u8 *addr_end = addr_start + len - 8;
while (addr_start <= addr_end)
{
u8 known_vfilter[7];
@ -1400,8 +1400,8 @@ void deflicker_patch(void *addr, u32 len)
0x508BC00E, 0x99498000, 0x500CC00E,
0x90698000, 0x99498000, 0x90E98000,
0x99498000, 0x91098000, 0x41820040};
u8 *addr_start = addr;
u8 *addr_end = addr + len - sizeof(SearchPattern);
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)
@ -1413,3 +1413,51 @@ void deflicker_patch(void *addr, u32 len)
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 patch_vfilters(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);
void langpatcher(void *addr, u32 len);
void vidolpatcher(void *addr, u32 len);

View File

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

View File

@ -62,7 +62,7 @@ u8 *booter_ptr = NULL;
u32 booter_size = 0;
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.vipatch = vipatch;
@ -73,6 +73,7 @@ void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 pat
strncpy(normalCFG.server_addr, server_addr, 23);
normalCFG.patchFix480p = patchFix480p;
normalCFG.deflicker = deflicker;
normalCFG.videoWidth = videoWidth;
normalCFG.returnTo = returnTo;
normalCFG.configbytes[0] = configbytes[0];
normalCFG.configbytes[1] = configbytes[1];

View File

@ -29,7 +29,7 @@ extern u32 hooktype;
#endif
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);
void ExternalBooter_ChannelSetup(u64 title, bool dol);
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 _GlobalDeflickerOptions[6];
static const SOption _DeflickerOptions[7];
static const SOption _GlobalVideoWidths[2];
static const SOption _VideoWidths[3];
static const SOption _AspectRatio[3];
static const SOption _WidescreenWiiu[3];
static const SOption _vidModePatch[4];

View File

@ -48,6 +48,17 @@ const CMenu::SOption CMenu::_DeflickerOptions[7] = {
{ "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] = {
{ "lngdef", L"Default" },// next should be console
{ "lngjap", L"Japanese" },
@ -253,7 +264,6 @@ void CMenu::_showConfigGame()
}
else
i = 0;
if(i > 0)
m_btnMgr.setText(m_configLbl2Val, wfmt(L"%i", i));
else
@ -396,17 +406,20 @@ void CMenu::_showConfigGame()
}
else if(m_configGamePage == 5)
{
m_btnMgr.setText(m_configLbl1, _t("cfgg38", L"Activity LED"));
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"));
m_btnMgr.setText(m_configLbl1, _t("cfgg45", L"Private Server"));
i = min(m_gcfg2.getUInt(id, "private_server", 0), ARRAY_SIZE(CMenu::_privateServer) - 1u);
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
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_configLbl2Val);
m_btnMgr.show(m_configBtn2P);
@ -444,6 +457,13 @@ void CMenu::_showConfigGame()
m_btnMgr.show(m_configBtn2P);
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)
{
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));
m_btnMgr.setText(m_configBtn1, _optBoolToString(m_gcfg2.getOptBool(id, "led", 0)));
s8 direction = m_btnMgr.selected(m_configBtn1P) ? 1 : -1;
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))
{
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());
m_gcfg2.setUInt(id, "private_server", i);
if(i < 3)
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()
i = loopNum(m_gcfg2.getUInt(id, "video_width") + direction, ARRAY_SIZE(CMenu::_VideoWidths));
m_gcfg2.setInt(id, "video_width", i);
m_btnMgr.setText(m_configLbl2Val, _t(CMenu::_VideoWidths[i].id, CMenu::_VideoWidths[i].text));
}
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."));
_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;
i = loopNum(m_gcfg2.getUInt(id, "widescreen_wiiu", 0) + direction, ARRAY_SIZE(CMenu::_WidescreenWiiu));
m_gcfg2.setInt(id, "widescreen_wiiu", i);
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,8 +122,7 @@ void CMenu::_showConfigMain()
{
m_btnMgr.show(m_configLbl1);
m_btnMgr.show(m_configLbl3);
if(mainCfg_curPage != 14)
m_btnMgr.show(m_configLbl4);
m_btnMgr.show(m_configLbl4);
}
if(mainCfg_curPage == 1)
@ -409,6 +408,9 @@ void CMenu::_showConfigMain()
m_btnMgr.show(m_configLbl3Val);
m_btnMgr.show(m_configBtn3M);
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_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"));
@ -416,6 +418,9 @@ void CMenu::_showConfigMain()
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);
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");
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);
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);
string server_addr = "";
if(private_server > 2)
@ -1010,7 +1013,7 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
ExternalBooter_ChannelSetup(gameTitle, use_dol);
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();
}
@ -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);
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);
string server_addr = "";
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());
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();
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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