Hacking New Classic Controller Hacks

Jayinem

Well-Known Member
Member
Joined
Dec 16, 2021
Messages
1,011
Trophies
1
XP
2,434
Country
United States
It's a shame all game Wii games didn't have this option from default, as time has gone on I think it's the worst control scheme ever created. To be fair a few games implemented it well like Metroid Prime 3 and Skyward Sword but overall still awful.
 

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,489
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,531
Country
@Vague Rant Thanks for the answer. Yeah, the idea is using the IR pointer. This is how I mapped the game on Dolphin, I'm sure you can figure out something better.
I looked into this and have now updated the Metroid: Other M post with a new code adding Nunchuk support. 👍

Wario Shake Dimension is working now with the "force cc connected" option. Thanks for that info. I tried Super paper mario. Got it working until I had to enter a name and then the game freezes with a loud buzzing sound. Does it mean I have the wrong revision version? How can I check the rev Version number? Unfortunately I don't have the disc anymore. But if the cc codes are for another version of super paper mario, wouldn't it just freeze at the start and not after typing a name?
Never used gecko codes before but using Dolphin Android and this happens when inputting the code for Super Paper Mario.

I mean.... What is the error? Where is the error?? Can anyone help, I'm living upto my name here..
View attachment 462343

Edit... Turns out you take out the heading and only add the code then! That cleared the error however it doesn't seem to working when i boot the game. Using the correct rev also.
Really odd that you're both having problems with Super Paper Mario. I re-tested it on my end on both Dolphin (Windows) and real (OG Wii) hardware and it works without any issues. I'm really not sure what could be causing this. Tough to guess without it ever breaking for me. Definitely weird that it crashes when creating a save specifically. These controller hacks run on every single frame, so I'd generally expect them to either crash immediately or never. Confusing.

Can someone make a hack to use the gamecube controller in pes 2013 or the classic controller in need for speed pro street or carbon
I generally don't mention if I've started on a game because I don't want to get hopes up that it will get finished, but I did actually look at Need for Speed: ProStreet after a previous request. I got it partially working, but it needs more work to actually be playable. I got a bit stuck and put it aside and moved on to other games, but I do want to come back to it and see if I can figure it out. Need for Speed: Carbon I'm probably less likely to do since you can already play the GameCube version via Nintendont with whatever controller you want. Is there anything the Wii version adds that you don't get from playing the GameCube one?

Wow, these hacks are great! Thanks for the work. Is it possible to have this thread appear in the Wii U forum as well? Some people, myself included, like to inject Wii games with cc hacks to play them on the gamepad, and I just came across this thread by chance.
Thanks! Fellow Wii U owner here, opening up more Wii games to be playable on GamePad is definitely a nice bonus to this project. I'm not sure if GBATemp can display the same thread across multiple boards, but perhaps some sort of tutorial thread on the Wii U side about how to add Classic Controller hacks to games, with a link back to this thread and any other Classic Controller hacks (crediar's Kirby's Return to Dream Land and Thomas83Lin's Rune Factory: Tides of Destiny; others?), would be a solid idea.



926ec030f29f83ce5318754fdb631a33.png


Arika's Endless Ocean is perhaps the most "blue ocean" game ever released on the Wii, both figuratively and literally. Nintendo courted casual gamers heavily in the Wii/DS generation and this game is just an extremely chilled out, relaxing time. With fantastic graphics and no real way to lose, this game becomes far more about the fun of exploring the depths of the ocean, discovering lost treasures and polishing marine life until it sparkles. It's also one of the few Wii games to support playing custom MP3 music from the SD card, so you can listen to whatever you want (Sigur Rós) while you dive. While the sequel added Classic Controller support, the original game is an extremely Wiimote-focussed affair, with basically all interactions revolving around the IR pointer, with some occasional shaking. This game's heavy focus on the Wiimote led me to implement a Nunchuk mode in addition to Classic Controller, retaining the original spirit while adding a little bit of flexibility. Highlight for @SPAC3W4IFU, who asked about this game.

USAEuropeJapan (Rev 1)

  1. Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C22D3BAC 0000000D
    7C0802A6 48000005
    7CA802A6 7C0803A6
    80030000 70004000
    4182003C C0050040
    C0250048 80C50044
    34C6FFFF 41820028
    D003000C D0030010
    D0030014 D0230018
    90C50044 4E800020
    4059999A 00000004
    40BC7277 38000004
    90050044 9421FFC0
    60000000 00000000
    C22D48EC 0000003A
    7C0802A6 48000005
    7CA802A6 80C50198
    80E60000 2C070000
    41820008 90E5019C
    88EE0028 2C070001
    4082000C 3903FFF4
    48000010 2C070002
    40820188 7C681B78
    9421FFE0 90010024
    90610008 90A1000C
    90C10010 38000002
    9803005E 800501A0
    C04501B0 C008006C
    FC000210 C0280070
    FC200A10 FC00082A
    FC001040 408000C8
    2C040000 41820018
    8005019C 90060000
    80010024 38210020
    48000128 2C070001
    418200A4 C0030074
    FC000210 C0230078
    FC200A10 FC00082A
    FC001040 4080000C
    2C000001 40820080
    2C000001 41820018
    38000000 90030020
    90030024 38000001
    900501A0 818501A4
    7D8803A6 4E800021
    2C030001 80610008
    80A1000C 80C10010
    C04501A8 40820008
    EC4200B2 C06501AC
    C0030020 C0230074
    FC211024 48000059
    D0030020 C0030024
    C0230078 FC200850
    48000045 D0030024
    8005019C 90060000
    48000024 38000000
    900501A0 C008006C
    D0030020 C0080070
    D0030024 38000000
    90060000 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C02501B4 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    8068494C 3F800000
    00000000 8031F36C
    3FAAAAAB 3C23D70A
    3DCCCCCD 3F4CCCCD
    7C0803A6 9421FFE0
    60000000 00000000
    C22D5CA4 0000001C
    2C040001 40820014
    71002000 418200C8
    60E71000 480000C0
    2C040002 408200B8
    71200800 41820008
    60E78000 71200001
    41820008 60E70008
    71204000 41820008
    60E70004 71200002
    41820008 60E70001
    71208000 41820008
    60E70002 71200010
    41820008 60E70800
    71200040 41820008
    60E70400 71200008
    41820008 60E70100
    71200020 41820008
    60E70200 71202000
    41820008 61084000
    71200200 41820008
    60E70800 71200080
    41820008 60E71000
    71200004 41820008
    60E70400 71200400
    41820008 60E70010
    71201000 41820008
    60E71000 70E09FFF
    60000000 00000000
  2. Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C22D3A4C 0000000D
    7C0802A6 48000005
    7CA802A6 7C0803A6
    80030000 70004000
    4182003C C0050040
    C0250048 80C50044
    34C6FFFF 41820028
    D003000C D0030010
    D0030014 D0230018
    90C50044 4E800020
    4059999A 00000004
    40BC7277 38000004
    90050044 9421FFC0
    60000000 00000000
    C22D478C 0000003A
    7C0802A6 48000005
    7CA802A6 80C50198
    80E60000 2C070000
    41820008 90E5019C
    88EE0028 2C070001
    4082000C 3903FFF4
    48000010 2C070002
    40820188 7C681B78
    9421FFE0 90010024
    90610008 90A1000C
    90C10010 38000002
    9803005E 800501A0
    C04501B0 C008006C
    FC000210 C0280070
    FC200A10 FC00082A
    FC001040 408000C8
    2C040000 41820018
    8005019C 90060000
    80010024 38210020
    48000128 2C070001
    418200A4 C0030074
    FC000210 C0230078
    FC200A10 FC00082A
    FC001040 4080000C
    2C000001 40820080
    2C000001 41820018
    38000000 90030020
    90030024 38000001
    900501A0 818501A4
    7D8803A6 4E800021
    2C030001 80610008
    80A1000C 80C10010
    C04501A8 40820008
    EC4200B2 C06501AC
    C0030020 C0230074
    FC211024 48000059
    D0030020 C0030024
    C0230078 FC200850
    48000045 D0030024
    8005019C 90060000
    48000024 38000000
    900501A0 C008006C
    D0030020 C0080070
    D0030024 38000000
    90060000 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C02501B4 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    8068450C 3F800000
    00000000 8031F20C
    3FAAAAAB 3C23D70A
    3DCCCCCD 3F4CCCCD
    7C0803A6 9421FFE0
    60000000 00000000
    C22D5B44 0000001C
    2C040001 40820014
    71002000 418200C8
    60E71000 480000C0
    2C040002 408200B8
    71200800 41820008
    60E78000 71200001
    41820008 60E70008
    71204000 41820008
    60E70004 71200002
    41820008 60E70001
    71208000 41820008
    60E70002 71200010
    41820008 60E70800
    71200040 41820008
    60E70400 71200008
    41820008 60E70100
    71200020 41820008
    60E70200 71202000
    41820008 61084000
    71200200 41820008
    60E70800 71200080
    41820008 60E71000
    71200004 41820008
    60E70400 71200400
    41820008 60E70010
    71201000 41820008
    60E71000 70E09FFF
    60000000 00000000
  3. Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C22D0350 0000000D
    7C0802A6 48000005
    7CA802A6 7C0803A6
    80030000 70004000
    4182003C C0050040
    C0250048 80C50044
    34C6FFFF 41820028
    D003000C D0030010
    D0030014 D0230018
    90C50044 4E800020
    4059999A 00000004
    40BC7277 38000004
    90050044 9421FFC0
    60000000 00000000
    C22D1090 0000003A
    7C0802A6 48000005
    7CA802A6 80C50198
    80E60000 2C070000
    41820008 90E5019C
    88EE0028 2C070001
    4082000C 3903FFF4
    48000010 2C070002
    40820188 7C681B78
    9421FFE0 90010024
    90610008 90A1000C
    90C10010 38000002
    9803005E 800501A0
    C04501B0 C008006C
    FC000210 C0280070
    FC200A10 FC00082A
    FC001040 408000C8
    2C040000 41820018
    8005019C 90060000
    80010024 38210020
    48000128 2C070001
    418200A4 C0030074
    FC000210 C0230078
    FC200A10 FC00082A
    FC001040 4080000C
    2C000001 40820080
    2C000001 41820018
    38000000 90030020
    90030024 38000001
    900501A0 818501A4
    7D8803A6 4E800021
    2C030001 80610008
    80A1000C 80C10010
    C04501A8 40820008
    EC4200B2 C06501AC
    C0030020 C0230074
    FC211024 48000059
    D0030020 C0030024
    C0230078 FC200850
    48000045 D0030024
    8005019C 90060000
    48000024 38000000
    900501A0 C008006C
    D0030020 C0080070
    D0030024 38000000
    90060000 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C02501B4 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    80667A94 3F800000
    00000000 80317CB8
    3FAAAAAB 3C23D70A
    3DCCCCCD 3F4CCCCD
    7C0803A6 9421FFE0
    60000000 00000000
    C22D2448 0000001C
    2C040001 40820014
    71002000 418200C8
    60E71000 480000C0
    2C040002 408200B8
    71200800 41820008
    60E78000 71200001
    41820008 60E70008
    71204000 41820008
    60E70004 71200002
    41820008 60E70001
    71208000 41820008
    60E70002 71200010
    41820008 60E70800
    71200040 41820008
    60E70400 71200008
    41820008 60E70100
    71200020 41820008
    60E70200 71202000
    41820008 61084000
    71200200 41820008
    60E70800 71200080
    41820008 60E71000
    71200004 41820008
    60E70400 71200400
    41820008 60E70010
    71201000 41820008
    60E71000 70E09FFF
    60000000 00000000

Button Mapping​

This one adds support for both the Classic Controller and Nunchuk, so we'll need a table for each. That said, the Nunchuk mode is basically just the normal Wiimote mode plus a stick and two buttons, so we'll get that one out of the way first.

Wii RemoteNunchukGame Function
MinusZAuto-Swim
ShakeCVarious
PointerStickMovement (underwater)

Wii RemoteClassic ControllerGame Function
HomeHome
Remember to point with the right stick on Classic Controller
Open/Close Home Button Menu
D-PadD-PadTool Menu Navigation
AA/RMenus
Confirm
Gameplay
Interact
BB/ZRMenus
Cancel
Gameplay
Swim
PlusPlusFocus
Zoom In
MinusMinus/ZLGameplay
Auto-Swim
Focus
Zoom Out
1YOpen Map
2XChange View
ShakeLVarious
IR PointerLeft Stick
Right Stick
Menus
Navigation
Gameplay
Movement (underwater)
Cursor Movement

General Notes​

  • Again, basically everything you do in this game revolves around the IR pointer, from player movement to aiming and fish interactions. Adapting this to a twin-stick (Classic)/one-stick-one-pointer (Nunchuk) setup does require a bit of compromise. Essentially, the different inputs have to fight over who's in charge of the IR pointer at the moment. I decided that the left stick gets higher priority: if you try to use both simultaneously, the left stick wins and right stick movement is ignored.

    • The way this all works is that the left stick represents absolute movement and the right stick/IR pointer represents cursor movement. This allows you to swim around with entirely traditional controls (stick and buttons) then when you want to use the cursor, you let go of the left stick and move it around with the right stick/IR pointer. When you want to stop using the pointer, you go back to the left stick again.

    • In the brief walking segments, you will need to use the right stick/IR cursor to move around and interact with people, objects and animals. The traditional, left-stick movement only works underwater.

    • Remember that A is double-mapped to Classic A and R. When your thumb is busy manipulating the cursor with the right stick, you can use the R button to focus on a fish or whatever else you're interacting with without having to move off the right stick.

  • Is this the first Nunchuk hack? Having to add Nunchuk support from scratch forced me to rethink how button injection should work, so with this hack I'm finally retiring crediar's original button injector, which also proved useful when updating the previous Metroid: Other M hack with Nunchuk support, since a method of remapping the Wiimote itself was also necessary in that case. But I'm getting side-tracked. A nice bonus here is that if you're just diving (not interacting with anything), you can do all of that entirely on the solo Nunchuk.

  • Japan received two revisions of this game; the first was recalled after the discovery of a game-breaking bug in the aquarium feature. Owners were able to request a replacement copy with the bug fixed. By the time the game came to the US and Europe, this bug fix was already included. I didn't bother hacking the Japan Rev 0 release because I doubt there's enough people playing that rare, recalled Japanese version anyway.

Technical Notes​

This hack is made up of three codes, all within KPAD.

The first one applies to read_kpad_acc(). It's slightly different to previous accelerometer hacks in that instead of completely replacing the "real" accelerometer, here we only replace the function while the user is holding the shake button (Classic L/Nunchuk C). Otherwise, the accelerometer function runs normally. This is important for Nunchuk mode. The accelerometer data is used to determine the relative angle at which the sensor bar should be found, so to correctly find the sensor bar we need the real accelerometer data, not our faked version.

The second hack, which makes up the bulk of the total lines, applies to calc_dpd_variable(), a child of read_kpad_dpd(), the pointer function. Previous hacks applied directly to the parent function, but in this case where we still want the pointer to function normally sometimes, it was easier to apply it here, since this is after KPAD has determined whether or not the (real) IR pointer is currently in-use. This way, if KPAD says a real Wiimote is currently really pointed at the sensor bar, we can use that pointer data, but if not we can stick with our fake pointer instead. This hack is also responsible for managing which stick is currently "in charge" of the IR pointer and disabling the cursor visibility when in absolute mode. A lot going on in here.

As mentioned, this hack marks the debut of a new button injector, which is the third hack. It's still inside KPADRead and It still does all the same stuff, but it's also able to remap the Wiimote itself and it still manages to be slightly shorter than the original method. We're jumping in earlier here (before the button states have been processed into pressed/held/released), so we no longer have to manage all of that manually: injecting the values before they get to that code means the game handles processing the buttons for us, as if they were real Wiimote buttons.
 

tech_A_nina

Member
Newcomer
Joined
Aug 1, 2018
Messages
16
Trophies
0
XP
213
Country
United Kingdom
I looked into this and have now updated the Metroid: Other M post with a new code adding Nunchuk support. 👍



Really odd that you're both having problems with Super Paper Mario. I re-tested it on my end on both Dolphin (Windows) and real (OG Wii) hardware and it works without any issues. I'm really not sure what could be causing this. Tough to guess without it ever breaking for me. Definitely weird that it crashes when creating a save specifically. These controller hacks run on every single frame, so I'd generally expect them to either crash immediately or never. Confusing.


I generally don't mention if I've started on a game because I don't want to get hopes up that it will get finished, but I did actually look at Need for Speed: ProStreet after a previous request. I got it partially working, but it needs more work to actually be playable. I got a bit stuck and put it aside and moved on to other games, but I do want to come back to it and see if I can figure it out. Need for Speed: Carbon I'm probably less likely to do since you can already play the GameCube version via Nintendont with whatever controller you want. Is there anything the Wii version adds that you don't get from playing the GameCube one?


Thanks! Fellow Wii U owner here, opening up more Wii games to be playable on GamePad is definitely a nice bonus to this project. I'm not sure if GBATemp can display the same thread across multiple boards, but perhaps some sort of tutorial thread on the Wii U side about how to add Classic Controller hacks to games, with a link back to this thread and any other Classic Controller hacks (crediar's Kirby's Return to Dream Land and Thomas83Lin's Rune Factory: Tides of Destiny; others?), would be a solid idea.



View attachment 462904

Arika's Endless Ocean is perhaps the most "blue ocean" game ever released on the Wii, both figuratively and literally. Nintendo courted casual gamers heavily in the Wii/DS generation and this game is just an extremely chilled out, relaxing time. With fantastic graphics and no real way to lose, this game becomes far more about the fun of exploring the depths of the ocean, discovering lost treasures and polishing marine life until it sparkles. It's also one of the few Wii games to support playing custom MP3 music from the SD card, so you can listen to whatever you want (Sigur Rós) while you dive. While the sequel added Classic Controller support, the original game is an extremely Wiimote-focussed affair, with basically all interactions revolving around the IR pointer, with some occasional shaking. This game's heavy focus on the Wiimote led me to implement a Nunchuk mode in addition to Classic Controller, retaining the original spirit while adding a little bit of flexibility. Highlight for @SPAC3W4IFU, who asked about this game.

USAEuropeJapan (Rev 1)

  1. Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C22D3BAC 0000000D
    7C0802A6 48000005
    7CA802A6 7C0803A6
    80030000 70004000
    4182003C C0050040
    C0250048 80C50044
    34C6FFFF 41820028
    D003000C D0030010
    D0030014 D0230018
    90C50044 4E800020
    4059999A 00000004
    40BC7277 38000004
    90050044 9421FFC0
    60000000 00000000
    C22D48EC 0000003A
    7C0802A6 48000005
    7CA802A6 80C50198
    80E60000 2C070000
    41820008 90E5019C
    88EE0028 2C070001
    4082000C 3903FFF4
    48000010 2C070002
    40820188 7C681B78
    9421FFE0 90010024
    90610008 90A1000C
    90C10010 38000002
    9803005E 800501A0
    C04501B0 C008006C
    FC000210 C0280070
    FC200A10 FC00082A
    FC001040 408000C8
    2C040000 41820018
    8005019C 90060000
    80010024 38210020
    48000128 2C070001
    418200A4 C0030074
    FC000210 C0230078
    FC200A10 FC00082A
    FC001040 4080000C
    2C000001 40820080
    2C000001 41820018
    38000000 90030020
    90030024 38000001
    900501A0 818501A4
    7D8803A6 4E800021
    2C030001 80610008
    80A1000C 80C10010
    C04501A8 40820008
    EC4200B2 C06501AC
    C0030020 C0230074
    FC211024 48000059
    D0030020 C0030024
    C0230078 FC200850
    48000045 D0030024
    8005019C 90060000
    48000024 38000000
    900501A0 C008006C
    D0030020 C0080070
    D0030024 38000000
    90060000 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C02501B4 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    8068494C 3F800000
    00000000 8031F36C
    3FAAAAAB 3C23D70A
    3DCCCCCD 3F4CCCCD
    7C0803A6 9421FFE0
    60000000 00000000
    C22D5CA4 0000001C
    2C040001 40820014
    71002000 418200C8
    60E71000 480000C0
    2C040002 408200B8
    71200800 41820008
    60E78000 71200001
    41820008 60E70008
    71204000 41820008
    60E70004 71200002
    41820008 60E70001
    71208000 41820008
    60E70002 71200010
    41820008 60E70800
    71200040 41820008
    60E70400 71200008
    41820008 60E70100
    71200020 41820008
    60E70200 71202000
    41820008 61084000
    71200200 41820008
    60E70800 71200080
    41820008 60E71000
    71200004 41820008
    60E70400 71200400
    41820008 60E70010
    71201000 41820008
    60E71000 70E09FFF
    60000000 00000000
  2. Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C22D3A4C 0000000D
    7C0802A6 48000005
    7CA802A6 7C0803A6
    80030000 70004000
    4182003C C0050040
    C0250048 80C50044
    34C6FFFF 41820028
    D003000C D0030010
    D0030014 D0230018
    90C50044 4E800020
    4059999A 00000004
    40BC7277 38000004
    90050044 9421FFC0
    60000000 00000000
    C22D478C 0000003A
    7C0802A6 48000005
    7CA802A6 80C50198
    80E60000 2C070000
    41820008 90E5019C
    88EE0028 2C070001
    4082000C 3903FFF4
    48000010 2C070002
    40820188 7C681B78
    9421FFE0 90010024
    90610008 90A1000C
    90C10010 38000002
    9803005E 800501A0
    C04501B0 C008006C
    FC000210 C0280070
    FC200A10 FC00082A
    FC001040 408000C8
    2C040000 41820018
    8005019C 90060000
    80010024 38210020
    48000128 2C070001
    418200A4 C0030074
    FC000210 C0230078
    FC200A10 FC00082A
    FC001040 4080000C
    2C000001 40820080
    2C000001 41820018
    38000000 90030020
    90030024 38000001
    900501A0 818501A4
    7D8803A6 4E800021
    2C030001 80610008
    80A1000C 80C10010
    C04501A8 40820008
    EC4200B2 C06501AC
    C0030020 C0230074
    FC211024 48000059
    D0030020 C0030024
    C0230078 FC200850
    48000045 D0030024
    8005019C 90060000
    48000024 38000000
    900501A0 C008006C
    D0030020 C0080070
    D0030024 38000000
    90060000 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C02501B4 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    8068450C 3F800000
    00000000 8031F20C
    3FAAAAAB 3C23D70A
    3DCCCCCD 3F4CCCCD
    7C0803A6 9421FFE0
    60000000 00000000
    C22D5B44 0000001C
    2C040001 40820014
    71002000 418200C8
    60E71000 480000C0
    2C040002 408200B8
    71200800 41820008
    60E78000 71200001
    41820008 60E70008
    71204000 41820008
    60E70004 71200002
    41820008 60E70001
    71208000 41820008
    60E70002 71200010
    41820008 60E70800
    71200040 41820008
    60E70400 71200008
    41820008 60E70100
    71200020 41820008
    60E70200 71202000
    41820008 61084000
    71200200 41820008
    60E70800 71200080
    41820008 60E71000
    71200004 41820008
    60E70400 71200400
    41820008 60E70010
    71201000 41820008
    60E71000 70E09FFF
    60000000 00000000
  3. Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C22D0350 0000000D
    7C0802A6 48000005
    7CA802A6 7C0803A6
    80030000 70004000
    4182003C C0050040
    C0250048 80C50044
    34C6FFFF 41820028
    D003000C D0030010
    D0030014 D0230018
    90C50044 4E800020
    4059999A 00000004
    40BC7277 38000004
    90050044 9421FFC0
    60000000 00000000
    C22D1090 0000003A
    7C0802A6 48000005
    7CA802A6 80C50198
    80E60000 2C070000
    41820008 90E5019C
    88EE0028 2C070001
    4082000C 3903FFF4
    48000010 2C070002
    40820188 7C681B78
    9421FFE0 90010024
    90610008 90A1000C
    90C10010 38000002
    9803005E 800501A0
    C04501B0 C008006C
    FC000210 C0280070
    FC200A10 FC00082A
    FC001040 408000C8
    2C040000 41820018
    8005019C 90060000
    80010024 38210020
    48000128 2C070001
    418200A4 C0030074
    FC000210 C0230078
    FC200A10 FC00082A
    FC001040 4080000C
    2C000001 40820080
    2C000001 41820018
    38000000 90030020
    90030024 38000001
    900501A0 818501A4
    7D8803A6 4E800021
    2C030001 80610008
    80A1000C 80C10010
    C04501A8 40820008
    EC4200B2 C06501AC
    C0030020 C0230074
    FC211024 48000059
    D0030020 C0030024
    C0230078 FC200850
    48000045 D0030024
    8005019C 90060000
    48000024 38000000
    900501A0 C008006C
    D0030020 C0080070
    D0030024 38000000
    90060000 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C02501B4 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    80667A94 3F800000
    00000000 80317CB8
    3FAAAAAB 3C23D70A
    3DCCCCCD 3F4CCCCD
    7C0803A6 9421FFE0
    60000000 00000000
    C22D2448 0000001C
    2C040001 40820014
    71002000 418200C8
    60E71000 480000C0
    2C040002 408200B8
    71200800 41820008
    60E78000 71200001
    41820008 60E70008
    71204000 41820008
    60E70004 71200002
    41820008 60E70001
    71208000 41820008
    60E70002 71200010
    41820008 60E70800
    71200040 41820008
    60E70400 71200008
    41820008 60E70100
    71200020 41820008
    60E70200 71202000
    41820008 61084000
    71200200 41820008
    60E70800 71200080
    41820008 60E71000
    71200004 41820008
    60E70400 71200400
    41820008 60E70010
    71201000 41820008
    60E71000 70E09FFF
    60000000 00000000

Button Mapping​

This one adds support for both the Classic Controller and Nunchuk, so we'll need a table for each. That said, the Nunchuk mode is basically just the normal Wiimote mode plus a stick and two buttons, so we'll get that one out of the way first.

Wii RemoteNunchukGame Function
MinusZAuto-Swim
ShakeCVarious
PointerStickMovement (underwater)


Wii RemoteClassic ControllerGame Function
HomeHome
Remember to point with the right stick on Classic Controller
Open/Close Home Button Menu
D-PadD-PadTool Menu Navigation
AA/RMenus
Confirm
Gameplay
Interact
BB/ZRMenus
Cancel
Gameplay
Swim
PlusPlusFocus
Zoom In
MinusMinus/ZLGameplay
Auto-Swim
Focus
Zoom Out
1YOpen Map
2XChange View
ShakeLVarious
IR PointerLeft Stick
Right Stick
Menus
Navigation
Gameplay
Movement (underwater)
Cursor Movement


General Notes​

  • Again, basically everything you do in this game revolves around the IR pointer, from player movement to aiming and fish interactions. Adapting this to a twin-stick (Classic)/one-stick-one-pointer (Nunchuk) setup does require a bit of compromise. Essentially, the different inputs have to fight over who's in charge of the IR pointer at the moment. I decided that the left stick gets higher priority: if you try to use both simultaneously, the left stick wins and right stick movement is ignored.
    • The way this all works is that the left stick represents absolute movement and the right stick/IR pointer represents cursor movement. This allows you to swim around with entirely traditional controls (stick and buttons) then when you want to use the cursor, you let go of the left stick and move it around with the right stick/IR pointer. When you want to stop using the pointer, you go back to the left stick again.

    • In the brief walking segments, you will need to use the right stick/IR cursor to move around and interact with people, objects and animals. The traditional, left-stick movement only works underwater.

    • Remember that A is double-mapped to Classic A and R. When your thumb is busy manipulating the cursor with the right stick, you can use the R button to focus on a fish or whatever else you're interacting with without having to move off the right stick.

  • Is this the first Nunchuk hack? Having to add Nunchuk support from scratch forced me to rethink how button injection should work, so with this hack I'm finally retiring crediar's original button injector, which also proved useful when updating the previous Metroid: Other M hack with Nunchuk support, since a method of remapping the Wiimote itself was also necessary in that case. But I'm getting side-tracked. A nice bonus here is that if you're just diving (not interacting with anything), you can do all of that entirely on the solo Nunchuk.

  • Japan received two revisions of this game; the first was recalled after the discovery of a game-breaking bug in the aquarium feature. Owners were able to request a replacement copy with the bug fixed. By the time the game came to the US and Europe, this bug fix was already included. I didn't bother hacking the Japan Rev 0 release because I doubt there's enough people playing that rare, recalled Japanese version anyway.

Technical Notes​

This hack is made up of three codes, all within KPAD.

The first one applies to read_kpad_acc(). It's slightly different to previous accelerometer hacks in that instead of completely replacing the "real" accelerometer, here we only replace the function while the user is holding the shake button (Classic L/Nunchuk C). Otherwise, the accelerometer function runs normally. This is important for Nunchuk mode. The accelerometer data is used to determine the relative angle at which the sensor bar should be found, so to correctly find the sensor bar we need the real accelerometer data, not our faked version.

The second hack, which makes up the bulk of the total lines, applies to calc_dpd_variable(), a child of read_kpad_dpd(), the pointer function. Previous hacks applied directly to the parent function, but in this case where we still want the pointer to function normally sometimes, it was easier to apply it here, since this is after KPAD has determined whether or not the (real) IR pointer is currently in-use. This way, if KPAD says a real Wiimote is currently really pointed at the sensor bar, we can use that pointer data, but if not we can stick with our fake pointer instead. This hack is also responsible for managing which stick is currently "in charge" of the IR pointer and disabling the cursor visibility when in absolute mode. A lot going on in here.

As mentioned, this hack marks the debut of a new button injector, which is the third hack. It's still inside KPADRead and It still does all the same stuff, but it's also able to remap the Wiimote itself and it still manages to be slightly shorter than the original method. We're jumping in earlier here (before the button states have been processed into pressed/held/released), so we no longer have to manage all of that manually: injecting the values before they get to that code means the game handles processing the buttons for us, as if they were real Wiimote buttons.
Did you test it with a pal version as well? I just have a pal rev 1 and a ntsc rev 0 version of this game. Unfortunately the pal rev 1 is not working. I asked some friends about a ntsc rev 2 version. Maybe this will do the trick. I let you know. In the meantime: how about the game rhythm heaven fever and cc support? Should be relatively easy, it just have two buttons a and b to be pressed. It would be better to transfer them to ZR and ZL, because you have to press them simultaneously sometimes. Would be really great. It is one of those games: easy to understand, but so hard to perfect it
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    BigOnYa @ BigOnYa: https://www.tomsguide.com/how-to/how-to-boot-into-windows-10-safe-mode