Hacking New Classic Controller Hacks

  • Thread starter Thread starter Vague Rant
  • Start date Start date
  • Views Views 250,127
  • Replies Replies 690
  • Likes Likes 42
Has anyone requested Crash of the Titans and Mind Over Mutant yet? it'd be very cool to have classic controller mods for these games since they're better looking than the PS2 versions, especially the latter which almost matches the 360 version in asset quality but without being as demanding to emulate and having a 60fps hack.

I'm requesting this mainly for because these games require pointer and waggle usage for certain things, like for projectile based mutants and for using their super attacks (not to mention that the TK mutant has a strafe only seen in the Wii version). If possible it'd be great if a classic controller setup somewhat matched the controller layouts seen in the other versions

Oh yeah, and classic controller codes for the Skylanders games would be really cool too if it could be done sometime in the future, those games have pretty basic waggle and pointer usage, with the waggle stuff being simplified to mashing the X button in the Wii U ports.
 
Hello, is this hack possible for the zelda wii games skyward sword and twilight princess?
Skyward sword wont be happening, it uses motion plus and might not be possible. The accelerometer implementation is too hard to hack in.

Twilight princess is a low priority, since you can already play it in nintendont with Widescreen, and is very good.

The game does have debugging symbols though, and there is a lot of documentation on these hacks, so i might give it a shot 👍
 
  • Like
Reactions: Felold
Skyward sword wont be happening, it uses motion plus and might not be possible. The accelerometer implementation is too hard to hack in.

Twilight princess is a low priority, since you can already play it in nintendont with Widescreen, and is very good.

The game does have debugging symbols though, and there is a lot of documentation on these hacks, so i might give it a shot 👍
Maybe one day for skyward sword or never?
 
@Vague Rant Hi. Game resquest : Ougon No Kizuna/Golden bonds, a jap exclusive Wii game, translated in english by Brand Newman. This game looks very cool but isn't classic controller compatible. Thanks.
Ooh, that's neat. Always cool to be getting "new" Wii games. I'll add it to my list of games to investigate.

Has anyone requested Crash of the Titans and Mind Over Mutant yet? it'd be very cool to have classic controller mods for these games since they're better looking than the PS2 versions, especially the latter which almost matches the 360 version in asset quality but without being as demanding to emulate and having a 60fps hack.

I'm requesting this mainly for because these games require pointer and waggle usage for certain things, like for projectile based mutants and for using their super attacks (not to mention that the TK mutant has a strafe only seen in the Wii version). If possible it'd be great if a classic controller setup somewhat matched the controller layouts seen in the other versions

Oh yeah, and classic controller codes for the Skylanders games would be really cool too if it could be done sometime in the future, those games have pretty basic waggle and pointer usage, with the waggle stuff being simplified to mashing the X button in the Wii U ports.
I don't think anybody's requested the Crash games before, but they're definitely a couple that I've thought about as potential candidates. I haven't gone any further than thinking about them currently, but they're certainly something I'd be interested to investigate.

I have literally zero familiarity with Skylanders, is it possible to run those without any of the NFC hardware stuff? I wouldn't have any way to test them on real hardware, but I could potentially test them via emulation if there's a way to fake the accessories.

Hello, is this hack possible for the zelda wii games skyward sword and twilight princess?
awesomeee covered this already, but the short version is, not by me. Gyroscopes (as used in the MotionPlus) are even more complex than accelerometers to simulate so I wouldn't even want to try, and Twilight Princess as mentioned has a GameCube version that's already designed for traditional controls and playable on Wii, so not really one I'm interested in. Sorry!



rihattleship.jpg


Let's close out 2024 with another video game adaptation of a 2012 box office flop, Hasbro's Battleship, developed by Magic Pockets. Rather than adapting the actual tabletop Battleship game, the version for Wii, DS and 3DS was a blatant clone of the Advance Wars franchise. For the unfamiliar, these are turn-based strategy games where two commanding officers with unique strengths and weaknesses send their rock-paper-scissors unit types into grid-based battles. Gameplay has players juggling considerations of health, fuel, fog of war, etc. while managing existing units and/or deploying new ones. While there's no new ground (or water) being broken here, Battleship is a remarkably solid game which easily outshines the FPS released on HD consoles.
Despite coming out at the very tail end of the Wii's lifespan, Battleship only supports fullscreen 4:3 display. That's wild, so I've included a widescreen code here as well.

USAEUR

  1. Code:
    Classic Controller Support [Vague Rant]
    C2037D50 00000002
    28030001 41820008
    28030002 00000000
    C21002B8 0000001B
    90010024 2C040000
    408200CC 8803005C
    2C000002 408200C0
    9803005E 2C160001
    40820078 48000015
    80230CB7 3FAAAAAB
    3D19999A 3F800000
    7CA802A6 80030004
    70008000 41820010
    38000000 90030020
    90030024 80850000
    88840000 2C040001
    C0450004 40820008
    EC4200B2 C0650008
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    80010024 7C0803A6
    38210020 4E800020
    FC0100FA C025000C
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    C2101218 00000012
    4E800421 2C160001
    40820080 4800000D
    3F000000 00000000
    7C6802A6 C0430000
    C0630004 809EFFA0
    80BEFFA4 80DEFFA8
    C03E000C 39000001
    48000021 C03E0010
    39000004 48000015
    909EFFA0 90BEFFA4
    90DEFFA8 48000034
    FC000A10 FC001040
    4D800020 FC011840
    41800008 5508083C
    7CC04039 40820008
    7CA54378 7C844378
    7CC64079 4E800020
    60000000 00000000
    04101220 7FC3F378
    04102610 39000000
    041027B0 39000000
    C20FF174 0000001A
    2C040002 408200C0
    38800001 71000800
    41820008 60E78000
    71000001 41820008
    60E70008 71004000
    41820008 60E70004
    71000002 41820008
    60E70001 71008000
    41820008 60E70002
    71000010 41820008
    60E70800 71000040
    41820008 60E70400
    71000008 41820008
    60E70010 71000020
    41820008 60E70100
    71002000 41820008
    60E72000 71000200
    41820008 60E74000
    71000080 41820008
    60E72000 71000004
    41820008 60E74000
    71000400 41820008
    60E70200 71001000
    41820008 60E71000
    7CC63B78 70C09FFF
    60000000 00000000
    Code:
    16:9 Widescreen [Vague Rant]
    C203C364 00000004
    EC420024 3CA08023
    88A50CB7 2C050001
    40820008 EC4200B2
    60000000 00000000
  2. Code:
    Classic Controller Support [Vague Rant]
    C2037D8C 00000002
    28030001 41820008
    28030002 00000000
    C21002F8 0000001B
    90010024 2C040000
    408200CC 8803005C
    2C000002 408200C0
    9803005E 2C160001
    40820078 48000015
    80230CF7 3FAAAAAB
    3D19999A 3F800000
    7CA802A6 80030004
    70008000 41820010
    38000000 90030020
    90030024 80850000
    88840000 2C040001
    C0450004 40820008
    EC4200B2 C0650008
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    80010024 7C0803A6
    38210020 4E800020
    FC0100FA C025000C
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    C2101258 00000012
    4E800421 2C160001
    40820080 4800000D
    3F000000 00000000
    7C6802A6 C0430000
    C0630004 809EFFA0
    80BEFFA4 80DEFFA8
    C03E000C 39000001
    48000021 C03E0010
    39000004 48000015
    909EFFA0 90BEFFA4
    90DEFFA8 48000034
    FC000A10 FC001040
    4D800020 FC011840
    41800008 5508083C
    7CC04039 40820008
    7CA54378 7C844378
    7CC64079 4E800020
    60000000 00000000
    04101260 7FC3F378
    04102650 39000000
    041027F0 39000000
    C20FF1B4 0000001A
    2C040002 408200C0
    38800001 71000800
    41820008 60E78000
    71000001 41820008
    60E70008 71004000
    41820008 60E70004
    71000002 41820008
    60E70001 71008000
    41820008 60E70002
    71000010 41820008
    60E70800 71000040
    41820008 60E70400
    71000008 41820008
    60E70010 71000020
    41820008 60E70100
    71002000 41820008
    60E72000 71000200
    41820008 60E74000
    71000080 41820008
    60E72000 71000004
    41820008 60E74000
    71000400 41820008
    60E70200 71001000
    41820008 60E71000
    7CC63B78 70C09FFF
    60000000 00000000
    Code:
    16:9 Widescreen [Vague Rant]
    C203C3A0 00000004
    EC420024 3CA08023
    88A50CF7 2C050001
    40820008 EC4200B2
    60000000 00000000

Button Mapping​

Wii Remote/NunchukClassic ControllerFunction
Wiimote HomeHome
Works normally
Open/Close Home Menu
Wiimote D-PadD-Pad
Left Stick
Menus/Gameplay
Navigation
Wiimote AAMenus
Confirm
Gameplay
Confirm
Show Movement Range
Wiimote BBMenus
Cancel
Gameplay
Cancel
Show Attack Range
Wiimote 1PlusGameplay
Pause
Wiimote 2YNot used?
Wiimote PlusXGameplay
Toggle Minimap
Wiimote MinusMinusGameplay
Show Unit Details
Wiimote PointerLeft StickGameplay
Duel Aiming
Home Button Menu
Navigation
Nunchuk StickRight StickMenus
Navigation
Gameplay
Camera Control
Nunchuk CR
ZR
Gameplay
Next Unit
Nunchuk ZL
ZL
Gameplay
Previous Unit

General Notes​

  • Not much to say for this one. The controls are pretty simple and everything works pretty much how you'd expect it to. The most complex part are the Duels, which have you aiming a reticle with the "IR pointer" (Left Stick) and shooting at the enemy ships.

  • Being cross-platform with the DS and 3DS, this game is tiny. Most of the disc is just the boilerplate update titles, the game itself is practically WiiWare. I'm not making any kind of judgment call about that, I just thought it was interesting.

Technical Notes​

Code breakdown:
  • C2: bypass Nunchuk error
  • C2 in calc_dpd_variable(): simulate IR pointer
  • C2 and 04 in read_kpad_ext(): D-Pad emulation on Left Stick, Nunchuk Stick on Right Stick
  • 04 and 04 in KPADRead(): potential lag frame bug fix
  • C2 in read_kpad_button(): button injector
Code:
; read_kpad_button
; 800FF174 for USA
; 800FF1B4 for EUR
; r4 holds extType
; r6 holds wiimote bitfield
; r7 holds wiimote+nunchuk bitfield
; r8 holds classic bitfield
  cmpwi r4, 0x2
  bne- RETURN

  li r4, 0x1            ; i'm a nunchuk

    CLASSIC_HOME:
      andi. r0, r8, 0x800
      beq- CLASSIC_UP
      ori r7, r7, 0x8000    ; home

    CLASSIC_UP:
      andi. r0, r8, 0x1
      beq- CLASSIC_DOWN
      ori r7, r7, 0x8       ; up (v) / left (h)

    CLASSIC_DOWN:
      andi. r0, r8, 0x4000
      beq- CLASSIC_LEFT
      ori r7, r7, 0x4       ; down (v) / right (h)

    CLASSIC_LEFT:
      andi. r0, r8, 0x2
      beq- CLASSIC_RIGHT
      ori r7, r7, 0x1       ; left (v) / down (h)

    CLASSIC_RIGHT:
      andi. r0, r8, 0x8000
      beq- CLASSIC_A
      ori r7, r7, 0x2       ; right (v) / up (h)

    CLASSIC_A:
      andi. r0, r8, 0x10
      beq- CLASSIC_B
      ori r7, r7, 0x800     ; a

    CLASSIC_B:
      andi. r0, r8, 0x40
      beq- CLASSIC_X
      ori r7, r7, 0x400     ; b

    CLASSIC_X:
      andi. r0, r8, 0x8
      beq- CLASSIC_Y
      ori r7, r7, 0x10      ; plus

    CLASSIC_Y:
      andi. r0, r8, 0x20
      beq- CLASSIC_L
      ori r7, r7, 0x100     ; 2

    CLASSIC_L:
      andi. r0, r8, 0x2000
      beq- CLASSIC_R
      ori r7, r7, 0x2000    ; z

    CLASSIC_R:
      andi. r0, r8, 0x200
      beq- CLASSIC_ZL
      ori r7, r7, 0x4000    ; c

    CLASSIC_ZL:
      andi. r0, r8, 0x80
      beq- CLASSIC_ZR
      ori r7, r7, 0x2000    ; z

    CLASSIC_ZR:
      andi. r0, r8, 0x4
      beq- CLASSIC_PLUS
      ori r7, r7, 0x4000    ; c

    CLASSIC_PLUS:
      andi. r0, r8, 0x400
      beq- CLASSIC_MINUS
      ori r7, r7, 0x200     ; 1

    CLASSIC_MINUS:
      andi. r0, r8, 0x1000
      beq- CLASSIC_DONE
      ori r7, r7, 0x1000    ; minus

    CLASSIC_DONE:
      or r6, r6, r7

RETURN:
  andi. r0, r6, 0x9FFF
 
Good job! I have an idea for when you do Epic Mickey 2.

So instead of mapping the right stick to pointing, why not just map the right stick to the D pad so you dont need to point? It would be like the remakes controls lol, just a cool idea i had. It would also make gameplay easier as we dont want the lock on button toggling a lot on accident.
 
I'll cry if i look at this game for one more minute.

Chick Chick BOOM was a game. (By tons of bits)
This game needed the IR pointer, and supported multiplayer! (yay)
1735669942885.png


This hack will not work reliably, what do you expect? Its meant to be played with Wii Remotes (Lol)

Classic Controller Support (Awesomeee, Vague Rant)
You know the drill, Vague made the helpful PPC assemblies, thanks!


C222ED38 00000029
90010024 2C040000
40820138 8803005C
2C000002 4082012C
48000021 80210D90
3FAAAAAB 3C54FDF4
00000000 00000000
3DCCCCCD 3F800000
7CA802A6 90A1000C
5727083C 38E7000C
C0030074 FC000210
C0230078 FC200A10
C083006C FC802210
C0A30070 FCA02A10
FC00082A FC84282A
FC00202A C0450014
FC001040 4180000C
38C0012C 48000014
7CC53AAE 28060000
408100B0 38C6FFFF
7CC53B2E 38C00002
98C3005E 81850000
7D8803A6 4E800021
2C030001 7FE3FB78
80A1000C C0450004
40820008 EC4200B2
C0650008 C0030020
C0230074 C083006C
FC21202A FC211024
48000035 D0030020
C0030024 C0230078
C0830070 FC21202A
FC200850 48000019
D0030024 80010024
7C0803A6 38210020
4E800020 FC0100FA
C0250018 FC000800
4180000C FC000890
48000014 FC200850
FC000800 41810008
FC000890 4E800020
60000000 00000000
C222DBF4 00000019
2C040002 408200B8
71000800 41820008
60C68000 71000001
41820008 60C60008
71004000 41820008
60C60004 71000002
41820008 60C60001
71008000 41820008
60C60002 71000010
41820008 60C60800
71000040 41820008
60C60400 71000008
41820008 60C60100
71000020 41820008
60C60200 71002000
41820008 60C60800
71000200 41820008
60C60800 71000080
41820008 60C60800
71000004 41820008
60C60800 71000400
41820008 60C60010
71001000 41820008
60C61000 70C09FFF
60000000 00000000

For this game, i tried to make the pointer as fast/slow as i could, since you need to be precise, but i couldnt really find a good point, so I set the speed to 13. (I think)

Controls
CC Wii Remote

ZL, ZR, L, R , A A Button

B B Button

X / Y 1/2 Buttons (Not mapped?)


Left AND Right stick: IR Pointer

Not much to say really, have fun!
 
I have literally zero familiarity with Skylanders, is it possible to run those without any of the NFC hardware stuff? I wouldn't have any way to test them on real hardware, but I could potentially test them via emulation if there's a way to fake the accessories.
Yeah! In fact Dolphin has full portal emulation, even including support for Trap Team's speaker stuff, and you can also create figure data to play as any character and such, it's awesome. If you go to Tools>USB Devices>Skylanders Portal, you'll see a whole window dedicated to portal emulation, it's fairly straightforward i think, and recently some fixes were pushed so that the portal no longer disconnects with Superchargers Racing, so it can properly emulate all of the entries on the console. (Also i'd recommend setting a hotkey to quickly bring up the portal emulation window while playing, it's a lifesaver)

I don't think anybody's requested the Crash games before, but they're definitely a couple that I've thought about as potential candidates. I haven't gone any further than thinking about them currently, but they're certainly something I'd be interested to investigate.
Ah i see, good to know that you've considered them, i'd love to see some more support for these games.
 
  • Like
Reactions: Vague Rant
Good job! I have an idea for when you do Epic Mickey 2.

So instead of mapping the right stick to pointing, why not just map the right stick to the D pad so you dont need to point? It would be like the remakes controls lol, just a cool idea i had. It would also make gameplay easier as we dont want the lock on button toggling a lot on accident.
Definitely something to consider, but depends a bit on how Epic Mickey 2 works. That wouldn't really work for the first game because the game behaves differently depending on whether you're using the IR pointer currently. When you splash (not shoot) paint/thinner while the pointer is off-screen, Mickey simply splashes in the direction he's facing. When the pointer is on-screen, the splash goes toward the pointer instead. Having the pointer permanently centered would break this, so that all attacks require you to rotate the camera to face your target, which might just be bad in a different way. This is kind of why I haven't done many pointer-focussed games, every potential solution causes another issue.

Any chance of looking at Project Zero 2 Wii edition and Zero Tsukihami no kamen(aka Fatal Frame 2&4)?
Project Zero 2 is one that I looked into as far as reading the manual for it and I kind of just noped out due to how complex the motion controls seemed. Anything that wants to use both the Wiimote and Nunchuk accelerometers in a bunch of diverse ways (i.e. tracking specific motions rather than just whether there is motion) is a lot tougher to work with. Not to say they're impossible, I just suspect they would end up on my failed hack pile if I tried.



zane.png


Happy new year! Tecmo's Rygar: The Battle of Argus is a port of the PlayStation 2 original, Rygar: The Legendary Adventure. A reboot of the classic arcade and NES games, this entry takes on the form of a third-person exploratory action game with "search action" and RPG elements. The player character fights using magical chained shields known as Diskarmors, which can be thrown and swung around like deadly yo-yos. Alongside the combat, a story combining elements of Greek, Roman and Egyptian history and myth has often seen this game compared to the God of War series, though Rygar was actually released a couple of years earlier.
Rygar doesn't officially support 16:9 widescreen, but there is actually an unused widescreen mode left over in the game, so I've included a code to restore that feature as well.

USAEURJPN

  1. Code:
    Classic Controller Support [Vague Rant]
    C200C288 00000002
    28000001 41820008
    28000002 00000000
    C21B7374 00000015
    8803005C 2C000002
    40820098 48000011
    4059999A 40000000
    00000000 7CA802A6
    C0250000 C0450004
    A8C50008 2C060000
    4182000C FC211024
    48000010 80830004
    70800080 4182001C
    D02304A8 68C60001
    2C0F0001 4082004C
    B0C50008 48000044
    80830000 70800800
    4082000C 38C00000
    48000024 A8C5000A
    38C60001 2C060008
    41800014 C0030060
    FC000050 EC0000B2
    D00304A4 2C0F0001
    40820008 B0C5000A
    80C3000C 00000000
    C21B7DBC 0000001B
    90010024 2C040000
    408200CC 8803005C
    2C000002 408200C0
    9803005E 2C0F0001
    40820078 48000015
    803E2F14 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80030004
    70008000 41820010
    38000000 90030020
    90030024 80850000
    80840000 2C040001
    C0450004 40820008
    EC4200B2 C0650008
    C0030020 C0230060
    FC211024 4800002D
    D0030020 C0030024
    C0230064 FC200850
    48000019 D0030024
    80010024 7C0803A6
    38210020 4E800020
    FC0100FA C025000C
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    041B8C74 7FC3F378
    041B9360 39200000
    C21B9364 0000001A
    2C040002 408200C0
    38800001 71200800
    41820008 61088000
    71200001 41820008
    61080208 71204000
    41820008 61080004
    71200002 41820008
    61080001 71208000
    41820008 61080002
    71200010 41820008
    61080080 71200040
    41820008 61082000
    71200008 41820008
    61080400 71200020
    41820008 61080800
    71202000 41820008
    61080001 71200200
    41820008 61080002
    71200080 41820008
    61084000 71200004
    41820008 61080004
    71200400 41820008
    61080010 71201000
    41820008 61081000
    7CE74378 70E09FFF
    60000000 00000000

    Code:
    16:9 Widescreen [Vague Rant]
    06008FD4 00000054
    2C030000 4180002C
    2C030003 41810024
    41820014 2C030001
    4182000C 900D8F4C
    4800000C 38600001
    906D8F4C 900D8F48
    7C0802A6 900D8F54
    38610008 38800001
    4816B809 800D8F54
    7C0803A6 88010008
    900D8F54 00000000
    0229A55A 0000029E
  2. Code:
    Classic Controller Support [Vague Rant]
    C200C31C 00000002
    28000001 41820008
    28000002 00000000
    C21BC62C 00000015
    8803005C 2C000002
    40820098 48000011
    4059999A 40000000
    00000000 7CA802A6
    C0250000 C0450004
    A8C50008 2C060000
    4182000C FC211024
    48000010 80830004
    70800080 4182001C
    D02304DC 68C60001
    2C190001 4082004C
    B0C50008 48000044
    80830000 70800800
    4082000C 38C00000
    48000024 A8C5000A
    38C60001 2C060008
    41800014 C0030060
    FC000050 EC0000B2
    D00304D8 2C190001
    40820008 B0C5000A
    80C3000C 00000000
    C21BD074 0000001B
    90010024 2C040000
    408200CC 8803005C
    2C000002 408200C0
    9803005E 2C190001
    40820078 48000015
    803F179C 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80030004
    70008000 41820010
    38000000 90030020
    90030024 80850000
    80840000 2C040001
    C0450004 40820008
    EC4200B2 C0650008
    C0030020 C0230060
    FC211024 4800002D
    D0030020 C0030024
    C0230064 FC200850
    48000019 D0030024
    80010024 7C0803A6
    38210020 4E800020
    FC0100FA C025000C
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    041BDF48 7FC3F378
    041BEC34 39000000
    041BED90 39000000
    C21BC0D0 0000001A
    2C040002 408200C0
    38800001 71090800
    41820008 60E78000
    71090001 41820008
    60E70208 71094000
    41820008 60E70004
    71090002 41820008
    60E70001 71098000
    41820008 60E70002
    71090010 41820008
    60E70080 71090040
    41820008 60E72000
    71090008 41820008
    60E70400 71090020
    41820008 60E70800
    71092000 41820008
    60E70001 71090200
    41820008 60E70002
    71090080 41820008
    60E74000 71090004
    41820008 60E70004
    71090400 41820008
    60E70010 71091000
    41820008 60E71000
    7CC63B78 70C99FFF
    60000000 00000000

    Code:
    16:9 Widescreen [Vague Rant]
    0600908C 0000003C
    2C030000 4182000C
    2C030001 4082000C
    906D8FB4 906D8FB0
    7C0802A6 900D8FBC
    38610008 38800001
    4816FF59 800D8FBC
    7C0803A6 88010008
    900D8FBC 00000000
  3. Code:
    Classic Controller Support [Vague Rant]
    C200C288 00000002
    28000001 41820008
    28000002 00000000
    C21B6E84 00000015
    8803005C 2C000002
    40820098 48000011
    4059999A 40000000
    00000000 7CA802A6
    C0250000 C0450004
    A8C50008 2C060000
    4182000C FC211024
    48000010 80830004
    70800080 4182001C
    D02304A8 68C60001
    2C0F0001 4082004C
    B0C50008 48000044
    80830000 70800800
    4082000C 38C00000
    48000024 A8C5000A
    38C60001 2C060008
    41800014 C0030060
    FC000050 EC0000B2
    D00304A4 2C0F0001
    40820008 B0C5000A
    80C3000C 00000000
    C21B78CC 0000001B
    90010024 2C040000
    408200CC 8803005C
    2C000002 408200C0
    9803005E 2C0F0001
    40820078 48000015
    803DEF34 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80030004
    70008000 41820010
    38000000 90030020
    90030024 80850000
    80840000 2C040001
    C0450004 40820008
    EC4200B2 C0650008
    C0030020 C0230060
    FC211024 4800002D
    D0030020 C0030024
    C0230064 FC200850
    48000019 D0030024
    80010024 7C0803A6
    38210020 4E800020
    FC0100FA C025000C
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    041B8784 7FC3F378
    041B8E70 39200000
    C21B8E74 0000001A
    2C040002 408200C0
    38800001 71200800
    41820008 61088000
    71200001 41820008
    61080208 71204000
    41820008 61080004
    71200002 41820008
    61080001 71208000
    41820008 61080002
    71200010 41820008
    61080080 71200040
    41820008 61082000
    71200008 41820008
    61080400 71200020
    41820008 61080800
    71202000 41820008
    61080001 71200200
    41820008 61080002
    71200080 41820008
    61084000 71200004
    41820008 61080004
    71200400 41820008
    61080010 71201000
    41820008 61081000
    7CE74378 70E09FFF
    60000000 00000000

    Code:
    16:9 Widescreen [Vague Rant]
    06008FD4 00000054
    2C030000 4180002C
    2C030003 41810024
    41820014 2C030001
    4182000C 900D8F2C
    4800000C 38600001
    906D8F2C 900D8F28
    7C0802A6 900D8F34
    38610008 38800001
    4816B319 800D8F34
    7C0803A6 88010008
    900D8F34 00000000

Button Mapping​

Wii Remote/NunchukClassic ControllerFunction
Wiimote HomeHome
Remember that Y is your A button
Open/Close Home Menu
Wiimote D-PadD-PadMenus
Navigation
Wiimote D-Pad Left/RightL/RMenus
Navigation
Gameplay
Cycle Diskarmors
Wiimote D-Pad DownZRGameplay
Slide
Wiimote AYMenus
Confirm
Gameplay
Standard Attack
Wiimote BXMenus
Cancel
Gameplay
Strong Attack
Wiimote 1D-Pad UpGameplay
Toggle Minimap
Wiimote 2Not mappedNot used?
Wiimote PlusPlusGameplay
Pause
Wiimote MinusMinusGameplay
Open Menu
Wiimote SwingA
Y + Left Stick Left/Right
Gameplay
Various Attacks
Nunchuk StickLeft StickMenus
Navigation
Gameplay
Movement
Nunchuk CZLGameplay
Guard
Nunchuk ZBGameplay
Jump

General Notes​

  • First up: I did not hack the Gladiator Mode at all and you cannot play that mode via this hack. This is a minor, separate part of the game, selectable from the menu, which is entirely motion-controlled. This hack is intended for playing the main story mode, known as Conquest Mode. If you want to play the motion control minigame, break out the motion controllers. You're not missing anything anyway, reviews described this mode as "tedious".

  • The control layout is mostly based on the original PS2 control scheme. In that version, you had two attack buttons. On Wii, there are three, with the third "button" being a swing of the Wiimote. Fortunately, the PS2 game was very fond of doubling up its mapping (there are two Guard buttons and two Standard Attack buttons), which gave us room to map the Slide and Wiimote Shake abilities to their own buttons, without sacrificing any functionality.

    • Replicating the PS2 controls did mean that the menu controls are very weird here, with Y/X for Confirm/Cancel. You can either deal with it or change the mapping to suit your preferences using the source in the Technical Notes section.

  • This game puts control of the copy ("deflicker") filter entirely in the user's hands. You can configure it to your preferences on the Options screen. Set Anti-Aliasing to 1 to disable the filter.

  • I'm not done talking about this game yet because I think it's fascinating. This is all just weird details that aren't relevant to the actual hack, so stop reading now if you don't care about Rygar trivia.

    • So the guy you play as in the Rygar series ... Rygar, right? Not exactly. It's kind of a Metroid situation. ライガー (literally Raigaa) is actually the name of the villain from the first Rygar game (called Warrior of Argus in Japan). The character you play as was initially given no name beyond "Warrior of Argus". When that game was localized into English as Rygar, everybody kind of just assumed Rygar was the guy you play as. Due to the vagaries of transliterating Japanese L/R sounds, the villain ended up being called Ligar, which left "Rygar" open to become the hero's presumed name. Ultimately, this means Rygar is a game where two guys fight over the correct pronunciation of their name. So that's fun.

    • In Rygar: The Legendary Adventure/Battle for Argus, the character you play as is explicitly called Rygar. He identifies himself as Rygar in the narration, other characters call him Rygar in cutscenes, there's no question: you are Rygar, Warrior of Argus. Except there is question, because in the Japanese versions (where the voiced dialogue is all still in English), the player character is actually named Zehn. So if you want to go by the creators' intent, Rygar/Ligar is just some bad guy and you're playing as a dude called Zehn. So that's fun.

    • The original PS2 release was a pretty high-effort game for Tecmo. Rebooted alongside another of their major franchises, Ninja Gaiden, this was another attempt at modernizing a classic action game for the new millenium. Tecmo staff travelled to Greece to find inspiration and reference materials to use in the game's design. On the audio side, it has fully voice-acted dialogue and a massive orchestral soundtrack performed by the Moscow International Symphonic Orchestra. So that's fun.

    • The Legendary Adventure was highly acclaimed (83 on Metacritic!) but despite its obvious quality, did not find much of an audience on PS2. Having cost Tecmo quite a bit to produce, they weren't willing to give up on it after a single attempt, and the Wii's let's-call-it-"legacy" hardware design offered the perfect opportunity to re-release an unsuccessful last-gen game for a new audience. In an attempt to make Rygar/Zehn more appealing, they gave him an edgy redesign with a more muted color scheme (OG Rygar dressed entirely in red), anime hair, a bare, tattooed chest and more accessories than you can swing a Diskarmor at. So that's fun.

    • Besides the cosmetic overhaul, Tecmo added all-new motion controls for several Diskarmor attacks. Though fairly restrained in their use (you could play the entire game without ever using them, but a few attack varieties are not available via the buttons), the developers made a big deal about how important these were to the game. Between you and me, I think they just wanted to justify doing a Wii port: developers noted that without the new motion controls, it could have been a PlayStation 3 or Xbox 360 game, but they wanted to take advantage of the the Wii Remote. I suspect the motion controls are just an excuse and the real reasoning is that they didn't want to remaster all of the game's standard-def assets for the HD consoles. That's about medium fun.

    • Another addition to the Wii port were some new enemy types, making combat less repetitive, as well as a separate Gladiator game mode which sees you using motion controls to dispatch waves of enemies. None of these additions or changes seem to have helped the game's performance, either critically or commercially. The edgy redesign of the main character was roundly mocked, the gameplay was criticized as dated (it was a 2002 game re-releasing in 2009), and many were disappointed in the lack of technical improvements, with not even widescreen support being added to the Wii game. The game bombed for the second time in a row, this time losing the critics as well. To be clear, there's nothing wrong with the Wii port in a technical sense, it's just that the game had already been out for 7 years. Reviews showed this, with this version netting just a 52 on Metacritic. That's not very fun.

    • I have terrible opinions all the time, but I love this game. I don't mean that it's fun because it's terrible or anything like that, it's just a ridiculously fun time. You absolutely have to come to Rygar accepting all of its 2002-ness. The Resident Evil-style fixed camera, the unintentionally comedic voice-acting, the poorly translated English, this game is one of the last gasps of a dead era of gaming. We've come a long way, in many ways for the better, but I miss games like this that got weird with it and succeeded, or at least almost did. Besides God of War, Rygar really reminds me of the Prince of Persia: Sands of Time trilogy, Devil May Cry or the late Wii exclusive, Pandora's Tower. If you like any of those and can tolerate the jank, give it a shot.

Technical Notes​

Code breakdown:
  • C2: bypass Nunchuk error
  • C2 in read_kpad_acc(): fake Wiimote swings and shakes
  • C2 in calc_dpd_variable(): simulate IR pointer
  • 04 in read_kpad_stick(): redirect Classic Left Stick into Nunchuk Stick
  • 04 (USA/EUR/JPN) and 04 (EUR only) in KPADRead(): potential lag frame bug fix
  • C2 in KPADRead() (USA/JPN)/read_kpad_button() (EUR): button injector

USA/JPNEUR

  1. Code:
    ; button injector
    ; 801B9364 for USA
    ; 801B8E74 for JPN
    ; r4 holds extType
    ; r7 holds wiimote bitfield
    ; r8 holds wiimote+nunchuk bitfield
    ; r9 holds classic bitfield
      cmpwi r4, 0x2
      bne- RETURN
    
      li r4, 0x1            ; i'm a nunchuk
    
        CLASSIC_HOME:
          andi. r0, r9, 0x800
          beq- CLASSIC_UP
          ori r8, r8, 0x8000    ; home
    
        CLASSIC_UP:
          andi. r0, r9, 0x1
          beq- CLASSIC_DOWN
          ori r8, r8, 0x208     ; 1 and up (v) / left (h)
    
        CLASSIC_DOWN:
          andi. r0, r9, 0x4000
          beq- CLASSIC_LEFT
          ori r8, r8, 0x4       ; down (v) / right (h)
    
        CLASSIC_LEFT:
          andi. r0, r9, 0x2
          beq- CLASSIC_RIGHT
          ori r8, r8, 0x1       ; left (v) / down (h)
    
        CLASSIC_RIGHT:
          andi. r0, r9, 0x8000
          beq- CLASSIC_A
          ori r8, r8, 0x2       ; right (v) / up (h)
    
        CLASSIC_A:
          andi. r0, r9, 0x10
          beq- CLASSIC_B
          ori r8, r8, 0x80      ; shake
    
        CLASSIC_B:
          andi. r0, r9, 0x40
          beq- CLASSIC_X
          ori r8, r8, 0x2000    ; z
    
        CLASSIC_X:
          andi. r0, r9, 0x8
          beq- CLASSIC_Y
          ori r8, r8, 0x400     ; b
    
        CLASSIC_Y:
          andi. r0, r9, 0x20
          beq- CLASSIC_L
          ori r8, r8, 0x800     ; a
    
        CLASSIC_L:
          andi. r0, r9, 0x2000
          beq- CLASSIC_R
          ori r8, r8, 0x1       ; left (v) / down (h)
    
        CLASSIC_R:
          andi. r0, r9, 0x200
          beq- CLASSIC_ZL
          ori r8, r8, 0x2       ; right (v) / up (h)
    
        CLASSIC_ZL:
          andi. r0, r9, 0x80
          beq- CLASSIC_ZR
          ori r8, r8, 0x4000    ; c
    
        CLASSIC_ZR:
          andi. r0, r9, 0x4
          beq- CLASSIC_PLUS
          ori r8, r8, 0x4       ; down (v) / right (h)
    
        CLASSIC_PLUS:
          andi. r0, r9, 0x400
          beq- CLASSIC_MINUS
          ori r8, r8, 0x10      ; plus
    
        CLASSIC_MINUS:
          andi. r0, r9, 0x1000
          beq- CLASSIC_DONE
          ori r8, r8, 0x1000    ; minus
    
        CLASSIC_DONE:
          or r7, r7, r8
    
    RETURN:
      andi. r0, r7, 0x9FFF
  2. Code:
    ; read_kpad_button
    ; 801BC0D0 for EUR
    ; r4 holds extType
    ; r6 holds wiimote bitfield
    ; r7 holds wiimote+nunchuk bitfield
    ; r8 holds classic bitfield
      cmpwi r4, 0x2
      bne- RETURN
    
      li r4, 0x1            ; i'm a nunchuk
    
        CLASSIC_HOME:
          andi. r9, r8, 0x800
          beq- CLASSIC_UP
          ori r7, r7, 0x8000    ; home
    
        CLASSIC_UP:
          andi. r9, r8, 0x1
          beq- CLASSIC_DOWN
          ori r7, r7, 0x208     ; 1 and up (v) / left (h)
    
        CLASSIC_DOWN:
          andi. r9, r8, 0x4000
          beq- CLASSIC_LEFT
          ori r7, r7, 0x4       ; down (v) / right (h)
    
        CLASSIC_LEFT:
          andi. r9, r8, 0x2
          beq- CLASSIC_RIGHT
          ori r7, r7, 0x1       ; left (v) / down (h)
    
        CLASSIC_RIGHT:
          andi. r9, r8, 0x8000
          beq- CLASSIC_A
          ori r7, r7, 0x2       ; right (v) / up (h)
    
        CLASSIC_A:
          andi. r9, r8, 0x10
          beq- CLASSIC_B
          ori r7, r7, 0x80      ; shake
    
        CLASSIC_B:
          andi. r9, r8, 0x40
          beq- CLASSIC_X
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_X:
          andi. r9, r8, 0x8
          beq- CLASSIC_Y
          ori r7, r7, 0x400     ; b
    
        CLASSIC_Y:
          andi. r9, r8, 0x20
          beq- CLASSIC_L
          ori r7, r7, 0x800     ; a
    
        CLASSIC_L:
          andi. r9, r8, 0x2000
          beq- CLASSIC_R
          ori r7, r7, 0x1       ; left (v) / down (h)
    
        CLASSIC_R:
          andi. r9, r8, 0x200
          beq- CLASSIC_ZL
          ori r7, r7, 0x2       ; right (v) / up (h)
    
        CLASSIC_ZL:
          andi. r9, r8, 0x80
          beq- CLASSIC_ZR
          ori r7, r7, 0x4000    ; c
    
        CLASSIC_ZR:
          andi. r9, r8, 0x4
          beq- CLASSIC_PLUS
          ori r7, r7, 0x4       ; down (v) / right (h)
    
        CLASSIC_PLUS:
          andi. r9, r8, 0x400
          beq- CLASSIC_MINUS
          ori r7, r7, 0x10      ; plus
    
        CLASSIC_MINUS:
          andi. r9, r8, 0x1000
          beq- CLASSIC_DONE
          ori r7, r7, 0x1000    ; minus
    
        CLASSIC_DONE:
          or r6, r6, r7
    
    RETURN:
      andi. r9, r6, 0x9FFF

As mentioned, the widescreen support here is actually a restoration of a feature left behind by the original developers. It's certainly not perfect--HUD elements are stretched, sometimes the fixed camera can see things off the sides that were never meant to be visible--but the game plays quite nicely with a bit of extra breathing room. Even the Home Button Menu was adjusted to support widescreen before the feature was dropped entirely. The hack checks the console aspect ratio setting to determine whether it should (re-)enable widescreen support. There was also a bug in the USA version which only occurs when running at widescreen 480p: the game misconfigures the width of the video interface to 711 pixels (670 is the intended width), so I fixed that too.

The EUR release came out quite a bit later and is built on a newer SDK version than the JPN and USA versions. I don't really have anything interesting to say about that, it just meant stuff moved around a lot and some of the SDK functions are different.
 
Oh, what the heck?! I was LITERALLY just thinking about this game and you bring this out the very minute the new year started, lol.

Anyways, I remember playing this on the PS2 back then and it was fun. It’s nice to see the Wii port can be played with a similar control scheme now. Now, I just wish there was a hack that reverted that stupid redesign, lol.
 
Yeah that was my thought, i love the ps2 version and having the Wii one with better controls now is pretty cool even if the redesign is still tacky and out of place, but having a more instant slide without the original's delay is probably pretty good for movement, and i'm curious about the new enemies function wise.
 
Happy new years! I found out a reliable way to track down KPADRead via WPADProbe.

So when you set a breakpoint and run to the thing a few times, there will usually be a callstack thing looking like “LR = XXXXXXXXXX”. I am not sure of the full amount of digits.

Usually that is almost always KPADRead. To further confirm this, check if the call’s area is colored white, basically meaning dolphin could not identify what symbol or whatever it is.

Sometimes it will be the wrong callstack thing, so press run to there a few more times, and a new one might appear. That can also be the right one.

Of course, some games do not have the LR= call, so it might be a different one.

Thanks, and happy new year!
 
Oh yeah, out of curiosity how complex is Madworld's use of motion to convert into a classic controller scheme? It'd be great to have an alternative control option for that game, i remember it being fun but it's heavy use of motion control made it kind of tiring to play.
 
Do you know the insertion address for some game's Accelerometer data? I know this is a silly question since motion controls are super hard to implement, but I think i am getting close to getting my hack to work!
 
Any chance for a cc hack of "world of goo"? I mean yes, it's an IR pointer driven game, but I like the art style and humour of it. And since it has no shaking components in it, it should be easy to do. The IR emulation in the cc hacks is pretty on point and smooth
 

Site & Scene News

Popular threads in this forum