diff --git a/resources/wiiflow_game_booter/source/apploader.c b/resources/wiiflow_game_booter/source/apploader.c index 92a698f4..b7858d12 100644 --- a/resources/wiiflow_game_booter/source/apploader.c +++ b/resources/wiiflow_game_booter/source/apploader.c @@ -119,6 +119,8 @@ void maindolpatches(void *dst, int len, u8 vidMode, GXRModeObj *vmode, bool vipa if(hooktype != 0 && hookpatched == false) hookpatched = dogamehooks(dst, len, false); patchVideoModes(dst, len, vidMode, vmode, patchVidModes); + if(patchVidModes > 0) + PatchVideoSneek(dst, len); if(vipatch) vidolpatcher(dst, len); if(configbytes[0] != 0xCD) diff --git a/resources/wiiflow_game_booter/source/patchcode.c b/resources/wiiflow_game_booter/source/patchcode.c index 9ac66e37..826a5256 100644 --- a/resources/wiiflow_game_booter/source/patchcode.c +++ b/resources/wiiflow_game_booter/source/patchcode.c @@ -245,6 +245,22 @@ void vidolpatcher(void *addr, u32 len) } } +void PatchVideoSneek(void *addr, u32 len) +{ + u8 *addr_start = addr; + u8 *addr_end = addr+len; + + while(addr_start < addr_end) + { + if(*(vu32*)(addr_start) == 0x3C608000) + { + if(((*(vu32*)(addr_start+4) & 0xFC1FFFFF ) == 0x800300CC) && ((*(vu32*)(addr_start+8) >> 24) == 0x54)) + *(vu32*)(addr_start+4) = 0x5400F0BE | ((*(vu32*)(addr_start+4) & 0x3E00000) >> 5); + } + addr_start += 4; + } +} + //giantpune's magic super patch to return to channels static u32 ad[ 4 ] = { 0, 0, 0, 0 };//these variables are global on the off chance the different parts needed diff --git a/resources/wiiflow_game_booter/source/patchcode.h b/resources/wiiflow_game_booter/source/patchcode.h index 82e21d73..10620934 100644 --- a/resources/wiiflow_game_booter/source/patchcode.h +++ b/resources/wiiflow_game_booter/source/patchcode.h @@ -33,6 +33,7 @@ extern u8 configbytes[2]; bool dogamehooks(void *addr, u32 len, bool channel); void langpatcher(void *addr, u32 len); void vidolpatcher(void *addr, u32 len); +void PatchVideoSneek(void *addr, u32 len); void PatchCountryStrings(void *Address, int Size); void PatchAspectRatio(void *addr, u32 len, u8 aspect); bool PatchReturnTo(void *Address, int Size, u32 id);