Hacking New Classic Controller Hacks

leejaclane

Well-Known Member
Member
Joined
Jul 25, 2022
Messages
198
Trophies
1
XP
533
Country
United States
I realize there are versions available on other consoles and on PC which would make a classic controller hack a little bit redundant, but Marvel Ultimate Alliance on Wii always felt basically unplayable to me because of its very finicky motion controls.

I have no idea how difficult it would be to add classic controller support for it, I imagine it wouldn't be easy so I have zero expectations of seeing it done without like a full-on romhack of the game (which again would be kind of a waste of time since it's on other consoles and on PC). But the idea of the game actually being made more playable on Wii is kind of nice. It's probably the worst treatment of any multiplatform game on Wii, at least as far as I know (there are still plenty I've never played).

Even if a classic controller hack wasn't exactly like how it plays on other consoles, anything would be better than the motion controls. But again, I have zero expectations here and with other consoles and PC to play on, it doesn't really need a controller hack.
 

NestorM

Well-Known Member
Newcomer
Joined
Feb 19, 2021
Messages
82
Trophies
0
Age
39
XP
1,000
Country
France
I loved Endless Ocean, that was a cool game. I never played the second one, but I know the first one was all based around using the Wiimote IR pointer, so it's not exactly optimized for playing with an analog stick whereas I assume the controls in the second game were adjusted to work without a pointer. I do have kind of an idea though: since the game has third-person and first-person segments, perhaps something like the Metroid: Other M approach where pointer mode is toggle-able would work. But instead of toggling between off and on, it would toggle between absolute movement which you would use to swim in third-person and a cursor you could use to point at objects in first-person. This is all just theorycrafting for now, but it would be interesting to see how well a system like that worked on a traditional controller. I'll have to play the original game a bit and see if it looks feasible.


I wish I could, but this is basically something Nintendo would have to fix on their end, and they're not helping. :P There's basically no way to debug that situation: there's no emulator that specifically supports Wii U Classic Controller emulation, there's no GameCube memory card ports to plug in a USB debugger, so it's impossible to know what's going on inside the game's memory when a game like this is running, and so impossible to know why it isn't working. New Super Mario Bros. Wii is another one like this, just refuses to recognize that the Wii U's controller emulation exists and offers no way to determine why not. The best hope is probably that somebody adds Wii U Classic Controller emulation as a feature within the Dolphin emulator, so that we can debug why it isn't working. Until then, it's kind of a mystery.



View attachment 458883

Continuing the Wii's run of controversial sequels (or I guess preceding it, this might be the first one?), Super Paper Mario was the first game in the series to move away from the RPG gameplay of the first two entries. This action-puzzler continued in the story-focussed vein of the earlier titles, but with real-time combat and an emphasis on viewing the world from different perspectives, with Mario's new ability to move between 2D and 3D being the main focus. Though extremely well received, others felt this game marked a turning point in the franchise towards lesser games which lost the spirit of the first two games. Still, you can't blame this game for what came next. Or maybe you can: this remains the best-selling entry in the entire Paper Mario franchise. Highlight for @leejaclane who asked about this game.

USA (Rev 2)Europe (Rev 1)Japan (Rev 1)Korea

  1. Code:
    Classic Controller Support [Vague Rant, crediar]
    04312630 48000010
    C22DEAD4 00000020
    88A40028 2C050002
    408200EC 9421FFF0
    7C0802A6 9001000C
    90610008 80030004
    70000040 41820010
    38000000 90030020
    90030024 88C3005E
    70C60002 40820008
    4800006C 3CC08029
    60C6C144 7CC803A6
    4E800021 2C030001
    80610008 48000005
    7CA802A6 C0650088
    40820008 EC6300F2
    C085008C C0030020
    C023006C C0430074
    FC21102A FC211824
    48000035 D0030020
    C0030024 C0230070
    C0430078 FC21102A
    FC200850 48000019
    D0030024 8001000C
    7C0803A6 38210010
    4E800020 FC01013A
    C0250090 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3C23D70A
    3F800000 9421FFC0
    60000000 00000000
    C22DF404 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD873C 00000000
    C22DFAF4 00000023
    901F0068 80DF0060
    4800004D 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000029
    807F0004 7CC61B78
    90DF0004 70C60040
    418200D4 887F005E
    68630002 987F005E
    480000C4 38A00000
    70C30800 41820008
    60A58000 70C30001
    41820008 60A50002
    70C34000 41820008
    60A50001 70C30002
    41820008 60A50008
    70C38000 41820008
    60A50004 70C30010
    41820008 60A50100
    70C30040 41820008
    60A50200 70C30008
    41820008 60A50300
    70C30020 41820008
    60A50800 70C32000
    41820008 60A50040
    70C30200 41820008
    60A50800 70C30080
    41820008 60A50040
    70C30004 41820008
    60A50800 70C30400
    41820008 60A50010
    70C31000 41820008
    60A51000 7CA62B78
    4E800020 00000000
  2. Code:
    Classic Controller Support [Vague Rant, crediar]
    043146E0 48000010
    C22E0B84 00000020
    88A40028 2C050002
    408200EC 9421FFF0
    7C0802A6 9001000C
    90610008 80030004
    70000040 41820010
    38000000 90030020
    90030024 88C3005E
    70C60002 40820008
    4800006C 3CC08029
    60C6E1F4 7CC803A6
    4E800021 2C030001
    80610008 48000005
    7CA802A6 C0650088
    40820008 EC6300F2
    C085008C C0030020
    C023006C C0430074
    FC21102A FC211824
    48000035 D0030020
    C0030024 C0230070
    C0430078 FC21102A
    FC200850 48000019
    D0030024 8001000C
    7C0803A6 38210010
    4E800020 FC01013A
    C0250090 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3C23D70A
    3F800000 9421FFC0
    60000000 00000000
    C22E14B4 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD873C 00000000
    C22E1BA4 00000023
    901F0068 80DF0060
    4800004D 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000029
    807F0004 7CC61B78
    90DF0004 70C60040
    418200D4 887F005E
    68630002 987F005E
    480000C4 38A00000
    70C30800 41820008
    60A58000 70C30001
    41820008 60A50002
    70C34000 41820008
    60A50001 70C30002
    41820008 60A50008
    70C38000 41820008
    60A50004 70C30010
    41820008 60A50100
    70C30040 41820008
    60A50200 70C30008
    41820008 60A50300
    70C30020 41820008
    60A50800 70C32000
    41820008 60A50040
    70C30200 41820008
    60A50800 70C30080
    41820008 60A50040
    70C30004 41820008
    60A50800 70C30400
    41820008 60A50010
    70C31000 41820008
    60A51000 7CA62B78
    4E800020 00000000
  3. Code:
    Classic Controller Support [Vague Rant, crediar]
    04312294 48000010
    C22DE820 00000020
    88A40028 2C050002
    408200EC 9421FFF0
    7C0802A6 9001000C
    90610008 80030004
    70000040 41820010
    38000000 90030020
    90030024 88C3005E
    70C60002 40820008
    4800006C 3CC08029
    60C6BE24 7CC803A6
    4E800021 2C030001
    80610008 48000005
    7CA802A6 C0650088
    40820008 EC6300F2
    C085008C C0030020
    C023006C C0430074
    FC21102A FC211824
    48000035 D0030020
    C0030024 C0230070
    C0430078 FC21102A
    FC200850 48000019
    D0030024 8001000C
    7C0803A6 38210010
    4E800020 FC01013A
    C0250090 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3C23D70A
    3F800000 9421FFC0
    60000000 00000000
    C22DF150 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD873C 00000000
    C22DF840 00000023
    901F0068 80DF0060
    4800004D 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000029
    807F0004 7CC61B78
    90DF0004 70C60040
    418200D4 887F005E
    68630002 987F005E
    480000C4 38A00000
    70C30800 41820008
    60A58000 70C30001
    41820008 60A50002
    70C34000 41820008
    60A50001 70C30002
    41820008 60A50008
    70C38000 41820008
    60A50004 70C30010
    41820008 60A50100
    70C30040 41820008
    60A50200 70C30008
    41820008 60A50300
    70C30020 41820008
    60A50800 70C32000
    41820008 60A50040
    70C30200 41820008
    60A50800 70C30080
    41820008 60A50040
    70C30004 41820008
    60A50800 70C30400
    41820008 60A50010
    70C31000 41820008
    60A51000 7CA62B78
    4E800020 00000000
  4. Code:
    Classic Controller Support [Vague Rant, crediar]
    043264BC 48000010
    C22E786C 00000020
    88A40028 2C050002
    408200EC 9421FFF0
    7C0802A6 9001000C
    90610008 80030004
    70000040 41820010
    38000000 90030020
    90030024 88C3005E
    70C60002 40820008
    4800006C 3CC0802A
    60C643C8 7CC803A6
    4E800021 2C030001
    80610008 48000005
    7CA802A6 C0650088
    40820008 EC6300F2
    C085008C C0030020
    C023006C C0430074
    FC21102A FC211824
    48000035 D0030020
    C0030024 C0230070
    C0430078 FC21102A
    FC200850 48000019
    D0030024 8001000C
    7C0803A6 38210010
    4E800020 FC01013A
    C0250090 FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3C23D70A
    3F800000 9421FFC0
    60000000 00000000
    C22E819C 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD876C 00000000
    C22E88A0 00000023
    901F0068 80DF0060
    4800004D 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000029
    807F0004 7CC61B78
    90DF0004 70C60040
    418200D4 887F005E
    68630002 987F005E
    480000C4 38A00000
    70C30800 41820008
    60A58000 70C30001
    41820008 60A50002
    70C34000 41820008
    60A50001 70C30002
    41820008 60A50008
    70C38000 41820008
    60A50004 70C30010
    41820008 60A50100
    70C30040 41820008
    60A50200 70C30008
    41820008 60A50300
    70C30020 41820008
    60A50800 70C32000
    41820008 60A50040
    70C30200 41820008
    60A50800 70C30080
    41820008 60A50040
    70C30004 41820008
    60A50800 70C30400
    41820008 60A50010
    70C31000 41820008
    60A51000 7CA62B78
    4E800020 00000000

Button Mapping​

Wii RemoteClassic ControllerGame Function
HomeHome
Home Menu works but remember to press L/ZL to enable the pointer and that your A buttons are Y/R/ZR, not the actual A button
Open/Close Home Button Menu
D-PadD-Pad
Left Stick
Menus
Navigation (D-Pad only)
Gameplay
Movement
Wiimote AY/R/ZRGameplay
Switch 2D/3D
Tippi (pointer)
Inspect
Wiimote BNot used
PlusPlusGameplay
Open Menu
MinusMinusGameplay
Controls
Wiimote 1BMenus
Cancel
Tippi (pointer)
Inspect
Wiimote 2AMenus
Confirm
Gameplay
Jump
Tippi (pointer)
Inspect
Wiimote 1+2 (together)XGameplay
Open Quick Menu
Wiimote IR PointerL/ZL (enable/disable)
Left Stick/Right Stick
Tippi (pointer)
Aiming

General Notes​

  • This game handles menu controls separately from movement, so to navigate menus you must use the D-Pad. In gameplay, you can move Mario and the Tippi cursor around with the left analog stick, but all menus are D-Pad only.
  • They released eight different revisions of this game counting all international releases. I've only hacked the final revision received in each region, so that's Rev 2 for USA, Rev 1 for Europe and Japan, and Rev 0 for Korea. If you have a different version of the game, these hacks will not work. If you can give me a compelling reason to hack the other revisions I might come back to them, but jeez eight different releases.
  • I normally advocate for the Y/B layout for platform games, but this really isn't a platform game in any meaningful sense and the Paper Mario series has long since decided that A is its dedicated confirm and jump button, so I went for consistency with the rest of the Paper series over Y/B platform Mario.

Technical Notes​

  • When this game was suggested, I speculated that I might be able to essentially reuse the work I did on Metroid here. That seemed true initially, with this hack coming together pretty quickly, but then I hit a roadblock in the Home Button Menu. The HBM requests a status report from the low-level WPAD library every 64 frames, and this was triggering a reinitialization of the Classic Controller and IR pointer, which notably meant the pointer would completely stop working. I couldn't figure out what caused this, so my solution was just to disable the 64 frame timer in the HBM library update() function which calls getInfoAsync(), which is the first line (04) in this code. I don't think this broke anything but if the Home Button Menu does anything weird, that's probably why. The rest is pretty stock ports of the pointer, stick emulation and button injector from Metroid.

Credits​

  • #wiidev on EFNet for idling while I asked questions about WPAD. Nobody answered them, but I like to think we all had a fun time.

Ok no problem. Thanks for answer. I have a question. Donkey Kong Country Returns already have a cc patch, but it's only playable with dpad. Can you make something to make it playable with both dpad and left thumbstick ?
 

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,489
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,536
Country
Well, I tried the RE4 hack and it's amazing!! finally we can play with any controls without extra steps.
(I would like to learn how to remap some buttons, can you give us some indication of where to start learning?)
I'll definitely try super paper mario with a classic controller, I've been playing it through RVLoader and a gamecube controller.
Again, @Vague Rant thank you so much for your work. I feel that the Wii had a lot of potential with all the control schemes available and they didn't want to adapt them.
If you mean remapping the controls of Resident Evil 4, I wouldn't really have any idea, especially when it comes to GameCube controllers. As far as remapping the controls in one of these Classic Controller hacks, you're looking at something like this.
Code:
70C30800 41820008 60A58000 70C30001 41820008 60A50002 70C34000 41820008 60A50001 70C30002 41820008 60A50008
btn 0800          btn 8000 btn 0001 presses  btn 0002 btn 4000          btn 0001 btn 0002          btn 0008
CC Home  presses  WM Home  CC D-Up  presses  WM D-Up  CC D-Dwn presses  WM D-Dwn CC D-Lft presses  WM D-Lft
So if for some bizarre reason you wanted the CC Home button to press the Wiimote B button, you'd change 60A58000 (Wiimote button 8000) to 60A50400 (Wiimote button 0400).

I've actually been thinking I should open a GitHub repo where I post the actual assembly codes. That would look more like this:
Code:
    BTN_HOME:
      li r5, 0x0
      andi. r3, r6, 0x800
      beq- BTN_UP
      ori r5, r5, 0x8000    ; home

    BTN_UP:
      andi. r3, r6, 0x1
      beq- BTN_DOWN
      ori r5, r5, 0x2       ; d-pad up

    BTN_DOWN:
      andi. r3, r6, 0x4000
      beq- BTN_LEFT
      ori r5, r5, 0x1       ; d-pad down

    BTN_LEFT:
      andi. r3, r6, 0x2
      beq- BTN_RIGHT
      ori r5, r5, 0x8       ; d-pad left
Assembly code isn't the most readable thing around but with the comments and stuff it should be reasonably easy to understand what to edit to get what you want. However, then people would have to convert this assembly to Gecko codes with a PPC assembler, which might be more effort than just editing the existing codes? I dunno, is this something people would use?

I realize there are versions available on other consoles and on PC which would make a classic controller hack a little bit redundant, but Marvel Ultimate Alliance on Wii always felt basically unplayable to me because of its very finicky motion controls.

I have no idea how difficult it would be to add classic controller support for it, I imagine it wouldn't be easy so I have zero expectations of seeing it done without like a full-on romhack of the game (which again would be kind of a waste of time since it's on other consoles and on PC). But the idea of the game actually being made more playable on Wii is kind of nice. It's probably the worst treatment of any multiplatform game on Wii, at least as far as I know (there are still plenty I've never played).

Even if a classic controller hack wasn't exactly like how it plays on other consoles, anything would be better than the motion controls. But again, I have zero expectations here and with other consoles and PC to play on, it doesn't really need a controller hack.
Wow, you're not kidding, reading about the motion controls in this game it sounds absolutely miserable. As a general rule, I'd say the more motion controls a game has, the harder it is to Classic Controller hack, because it involves first learning what exact motion values the game identifies as a shake, thrust, swing, etc. Wario Land: Shake It! and Donkey Kong Jungle Beat detect shaking in pretty much completely unrelated ways, which are different again from how Namco Museum does it and again from how Tron does it, so each one of those ends up taking more effort (or eluding me completely as in some other games I've attempted). I also personally have no experience working with accelerometers, so even the theory side escapes me, like "What values will an accelerometer register if I thrust the Wiimote forward?" I mostly have to just figure this out by trial and error.

I'll be honest and say Ultimate Alliance seems complicated enough that it's one I'm less likely to attempt, but I did enjoy X-Men Legends on GameCube back in the day, so it would absolutely be nice to continue the "series" on Wii. I'll consider this a "Would be nice to have." Also, I'll say I don't really mind if a game already has conventional controls on another platform. A couple of the games I already did are on other platforms, no big deal.

Ok no problem. Thanks for answer. I have a question. Donkey Kong Country Returns already have a cc patch, but it's only playable with dpad. Can you make something to make it playable with both dpad and left thumbstick ?
This is 1000% something I think about all the time. I'm almost certain I could do a version of this where the left stick is just mirroring the D-Pad (8-way movement), but I'd be a lot happier if I could figure out how the Nunchuk is handled so you get full analog movement on the Classic Controller. This is definitely one I will attempt in future. If I don't figure out how the Nunchuk is handled here I may still fall back on digital movement if that's something anybody wants, but I'll be extremely disappointed if that happens.



speed-racer-le-jeu-4e2612e177491.jpg

Sidhe Interactive's Speed Racer: The Videogame is the closest thing we ever got to an F-Zero game on the Wii, even moreso than FAST Racing League on WiiWare. You have the futuristic vehicles and tracks with boost pads, jumps, loops and tubes, vehicular combat with a rival system, a health meter, tens of competitors on the track (up to 20), with gorgeous visuals, all at 60 FPS. Add in the pumping electronica soundtrack by Winifred Phillips (God of War, Borderlands, Assassin's Creed) and you've got the makings of a classic. I've oversold it at this point, so let's reel it in a bit: it's also got ... five tracks. They gets some decent mileage out of them, with each track sporting three different layouts (plus reverse mode), but yes, this is a movie tie-in game which had to meet the hard deadline of the spectacularly unsuccessful movie release. Regardless what you thought of the movie, Speed Racer: The Videogame is great fun. It reviewed quite well and became a minor cult hit with a small community of speedrunners (mainly for the PS2 version, which had conventional controls). We can't be beaten out by the PS2 though, so let's bring some normal controls to our version.

USAEuropeJapan

  1. Code:
    Classic Controller Support [Vague Rant, crediar]
    C232570C 00000018
    88040028 2C000002
    408200B0 7C0802A6
    48000005 7CA802A6
    7C0803A6 80030004
    70000020 41820010
    C00500A0 D003000C
    48000050 38000000
    9003000C 80030004
    700000C0 4082001C
    80C3001C 2C060000
    40810030 38C6FFFF
    90C3001C 4800004C
    38C00004 90C3001C
    C00500A0 70000080
    40820008 FC000050
    D0030014 4800002C
    C003006C C0250098
    EC000072 D0030014
    C025009C FC000210
    FC000828 D0030010
    38000000 90030018
    4E800020 BF400000
    3F800000 4059999A
    9421FFB0 00000000
    C2326878 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08033 60C6FB34
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3D23D70A 3F800000
    9421FFC0 00000000
    C23271A8 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD902C 00000000
    C23278AC 00000021
    901F0068 80DF0060
    48000039 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000015
    807F0004 7CC61B78
    90DF0004 480000C4
    38A00000 70C30800
    41820008 60A58000
    70C30001 41820008
    60A50002 70C34000
    41820008 60A50001
    70C30002 41820008
    60A50008 70C38000
    41820008 60A50004
    70C30010 41820008
    60A50100 70C30040
    41820008 60A50200
    70C30008 41820008
    60A50800 70C30020
    41820008 60A50400
    70C32000 41820008
    60A50040 70C30200
    41820008 60A50080
    70C30080 41820008
    60A50020 70C30004
    41820008 60A50400
    70C30400 41820008
    60A50010 70C31000
    41820008 60A51000
    7CA62B78 4E800020
    60000000 00000000
  2. Code:
    Classic Controller Support [Vague Rant, crediar]
    C236B078 00000018
    88040028 2C000002
    408200B0 7C0802A6
    48000005 7CA802A6
    7C0803A6 80030004
    70000020 41820010
    C00500A0 D003000C
    48000050 38000000
    9003000C 80030004
    700000C0 4082001C
    80C3001C 2C060000
    40810030 38C6FFFF
    90C3001C 4800004C
    38C00004 90C3001C
    C00500A0 70000080
    40820008 FC000050
    D0030014 4800002C
    C003006C C0250098
    EC000072 D0030014
    C025009C FC000210
    FC000828 D0030010
    38000000 90030018
    4E800020 BF400000
    3F800000 4059999A
    9421FFB0 00000000
    C236C1E4 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08038 60C654A0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3D23D70A 3F800000
    9421FFC0 00000000
    C236CB14 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD8E3C 00000000
    C236D218 00000021
    901F0068 80DF0060
    48000039 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000015
    807F0004 7CC61B78
    90DF0004 480000C4
    38A00000 70C30800
    41820008 60A58000
    70C30001 41820008
    60A50002 70C34000
    41820008 60A50001
    70C30002 41820008
    60A50008 70C38000
    41820008 60A50004
    70C30010 41820008
    60A50100 70C30040
    41820008 60A50200
    70C30008 41820008
    60A50800 70C30020
    41820008 60A50400
    70C32000 41820008
    60A50040 70C30200
    41820008 60A50080
    70C30080 41820008
    60A50020 70C30004
    41820008 60A50400
    70C30400 41820008
    60A50010 70C31000
    41820008 60A51000
    7CA62B78 4E800020
    60000000 00000000
  3. Code:
    Classic Controller Support [Vague Rant, crediar]
    C2371A3C 00000018
    88040028 2C000002
    408200B0 7C0802A6
    48000005 7CA802A6
    7C0803A6 80030004
    70000020 41820010
    C00500A0 D003000C
    48000050 38000000
    9003000C 80030004
    700000C0 4082001C
    80C3001C 2C060000
    40810030 38C6FFFF
    90C3001C 4800004C
    38C00004 90C3001C
    C00500A0 70000080
    40820008 FC000050
    D0030014 4800002C
    C003006C C0250098
    EC000072 D0030014
    C025009C FC000210
    FC000828 D0030010
    38000000 90030018
    4E800020 BF400000
    3F800000 4059999A
    9421FFB0 00000000
    C2372BA8 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08038 60C6BE74
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3D23D70A 3F800000
    9421FFC0 00000000
    C23734D8 00000017
    7C0802A6 C01E000C
    C03E0010 48000005
    7CA802A6 C0450098
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000045 39000002
    FC011040 48000039
    FC000050 39000008
    FC001040 48000029
    FC200850 39000001
    FC011040 48000019
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    4800003C 41800024
    7CE34039 40820008
    7CA54378 7C844378
    7D0340F8 7CC61838
    7CE74378 48000010
    7CE34039 41820008
    7CE74278 4E800020
    3F000000 7C0803A6
    80AD8E64 00000000
    C2373BDC 00000021
    901F0068 80DF0060
    48000039 807F0000
    7CC61B78 90DF0000
    7CC630F8 807F0008
    7C663038 90DF0008
    80DF0064 48000015
    807F0004 7CC61B78
    90DF0004 480000C4
    38A00000 70C30800
    41820008 60A58000
    70C30001 41820008
    60A50002 70C34000
    41820008 60A50001
    70C30002 41820008
    60A50008 70C38000
    41820008 60A50004
    70C30010 41820008
    60A50100 70C30040
    41820008 60A50200
    70C30008 41820008
    60A50800 70C30020
    41820008 60A50400
    70C32000 41820008
    60A50040 70C30200
    41820008 60A50080
    70C30080 41820008
    60A50020 70C30004
    41820008 60A50400
    70C30400 41820008
    60A50010 70C31000
    41820008 60A51000
    7CA62B78 4E800020
    60000000 00000000

Button Mapping​

Wii RemoteClassic ControllerGame Function
HomeHome
Home Menu works as normal but remember that Classic X is your Wiimote A button
Open/Close Home Button Menu
D-PadD-Pad
Left Stick
Menus
Navigation
Gameplay
Adjust Car-Fu Moves
Wiimote AXMenus
Confirm
Gameplay
Use Boost to Recover Health
Wiimote BY/ZRMenus
Cancel
Gameplay
Boost
PlusPlusPause
MinusMinusChange Camera
Wiimote 1BMenus
Cancel
Gameplay
Brake/Reverse
Wiimote 2AMenus
Confirm
Gameplay
Accelerate
Wiimote TiltLeft StickSteer
Wiimote ShakeZLJump
Wiimote Thrust Left/RightL/RShunt (attack)
Wiimote IR PointerLeft StickHome Button Menu
Navigation

General Notes​

  • If you have a choice, I strongly recommend playing the European/PAL version game. It's not life-changing, but the US version is missing some features in the Time Trial mode, where the game keeps track of your best lap with a ghost racer and an interval indicator (timer of how far behind/ahead you are). The Europe version also has pretty pink lights on the edges of the first track which are missing from the US/Japan versions.
  • If, for whatever reason, you can't play the PAL game, the Japanese one does support running in English and has all the Time Trial features. Since it's not supposed to be played in English, it uses a different font for the text which doesn't always fit into the button prompts and such, but it's completely playable if you specifically need an NTSC game and can't force the PAL version or whatever.
  • Even though this does add back a conventional control scheme, you might still want to try the PS2 version if you get the chance. Launching four months after the Wii version to coincide with the home video release of the movie, there are a number of changes besides the controls:
    • worse graphics
    • less competitors on track (maximum 12 racers, vs. 20 on Wii)
    • 1 extra track
    • 5 extra cars
  • For this game I combined the D-Pad and Wiimote Tilt both into the Classic Left Stick, because they don't really clash at all and you need to have easy access to the different Car-Fu moves. So if you need to do a backflip, you pull back on the analog stick then press ZL (shake/jump), etc. This way you don't have to stop steering just to do a Car-Fu move. And they're all pretty intuitive anyway, e.g. to "do a barrel boll!" you originally pressed D-Pad Left/Right and shook the Wiimote; here you steer to the left/right and press ZL. It's fine, try the brief tutorial mode from the menu, it's not too complicated.

Technical Notes​

Getting the left/right Shunt Car-Fu accelerometer movement working here really sucked. Even Dolphin can't simulate this correctly; you basically have to hook up an actual Wiimote or other motion-supporting controller and physically do the movements. I had to pause execution mid-motion a bunch of times (harder than it sounds to Swing a Wiimote and press F10 simultaneously on a keyboard without dedicated function keys!) to get a feel for what kind of data that motion imparted. I was eventually able to replicate this and it amounts to an extreme change to the accelerometer Y-axis (which from the user perspective is the X-axis when the Wiimote is turned sideways as it is here) which continues for at least 5 frames. Sounds easy when you say it like that.

Other than that, pretty standard at this point: the usual pointer, stick and button hacks.
 

Tarmfot

Well-Known Member
Member
Joined
Dec 12, 2015
Messages
354
Trophies
0
XP
1,196
Country
Montserrat
EDIT: See also:



Little King's Story is a cult hit RTS/city builder/life sim/RPG from the creator of Harvest Moon/Story of Seasons, Yasuhiro Wada. It was originally released on the Wii, is currently available on Steam and briefly had a reimagined PS Vita release, which has since been delisted. In the game, you play as a child (canonically named Corobo, but chosen by the player) who comes to rule over a tiny kingdom. Tasked with expanding your empire, the moment-to-moment gameplay is somewhat reminiscent of Pikmin, with Corobo being almost powerless on his own and "Charging" recruits at different tasks (tossing them at the target like Olimar). The Wii release has no motion or pointer controls whatsoever, but can only be played with the Wii Remote and Nunchuk. This made it a good candidate for a Classic Controller hack, which you can find in the spoiler below.

USAEuropeJapan

  1. Code:
    Classic Controller Support [Vague Rant, crediar]
    04060E74 60000000
    04078FA4 28000002
    04079550 28000002
    04079558 C0230178
    04079580 28000002
    04079588 C023017C
    C242A1B4 00000029
    7C0802A6 80BF0060
    48000041 809F0000
    7CA52378 90BF0000
    80BF0064 4800002D
    809F0004 7CA52378
    90BF0004 80BF0068
    48000019 809F0008
    7CA52378 90BF0008
    7C0803A6 4E800020
    38C00000 70A40800
    2C040000 41820008
    60C68000 70A40001
    2C040000 41820008
    60C60008 70A44000
    2C040000 41820008
    60C60004 70A40002
    2C040000 41820008
    60C60001 70A48000
    2C040000 41820008
    60C60002 70A40010
    2C040000 41820008
    60C60800 70A40040
    2C040000 41820008
    60C60400 70A40008
    2C040000 41820008
    60C60004 70A40020
    2C040000 41820008
    60C64000 70A42000
    2C040000 41820008
    60C60001 70A40200
    2C040000 41820008
    60C60002 70A40080
    2C040000 41820008
    60C62000 70A40004
    2C040000 41820008
    60C60008 70A40400
    2C040000 41820008
    60C60010 70A41000
    2C040000 41820008
    60C60300 7CC53378
    4E800020 00000000
  2. Code:
    Classic Controller Support [Vague Rant, crediar]
    04060B3C 60000000
    0407837C 28000002
    04078928 28000002
    04078930 C0230178
    04078958 28000002
    04078960 C023017C
    C2428858 00000029
    7C0802A6 80BF0060
    48000041 809F0000
    7CA52378 90BF0000
    80BF0064 4800002D
    809F0004 7CA52378
    90BF0004 80BF0068
    48000019 809F0008
    7CA52378 90BF0008
    7C0803A6 4E800020
    38C00000 70A40800
    2C040000 41820008
    60C68000 70A40001
    2C040000 41820008
    60C60008 70A44000
    2C040000 41820008
    60C60004 70A40002
    2C040000 41820008
    60C60001 70A48000
    2C040000 41820008
    60C60002 70A40010
    2C040000 41820008
    60C60800 70A40040
    2C040000 41820008
    60C60400 70A40008
    2C040000 41820008
    60C60004 70A40020
    2C040000 41820008
    60C64000 70A42000
    2C040000 41820008
    60C60001 70A40200
    2C040000 41820008
    60C60002 70A40080
    2C040000 41820008
    60C62000 70A40004
    2C040000 41820008
    60C60008 70A40400
    2C040000 41820008
    60C60010 70A41000
    2C040000 41820008
    60C60300 7CC53378
    4E800020 00000000
  3. Code:
    Classic Controller Support [Vague Rant, crediar]
    04060CB0 60000000
    04078F98 28000002
    04079544 28000002
    0407954C C0230178
    04079574 28000002
    0407957C C023017C
    C2429B74 00000029
    7C0802A6 80BF0060
    48000041 809F0000
    7CA52378 90BF0000
    80BF0064 4800002D
    809F0004 7CA52378
    90BF0004 80BF0068
    48000019 809F0008
    7CA52378 90BF0008
    7C0803A6 4E800020
    38C00000 70A40800
    2C040000 41820008
    60C68000 70A40001
    2C040000 41820008
    60C60008 70A44000
    2C040000 41820008
    60C60004 70A40002
    2C040000 41820008
    60C60001 70A48000
    2C040000 41820008
    60C60002 70A40010
    2C040000 41820008
    60C60800 70A40040
    2C040000 41820008
    60C60400 70A40008
    2C040000 41820008
    60C60004 70A40020
    2C040000 41820008
    60C64000 70A42000
    2C040000 41820008
    60C60001 70A40200
    2C040000 41820008
    60C60002 70A40080
    2C040000 41820008
    60C62000 70A40004
    2C040000 41820008
    60C60008 70A40400
    2C040000 41820008
    60C60010 70A41000
    2C040000 41820008
    60C60300 7CC53378
    4E800020 00000000

Button (Re-)Mapping​

The button mapping used here is a combination of common sense, the Steam version button layout and advice from Deadweight in the Little King's Story community. That said, the code is relatively easy to customize if you want to use a different layout. First off, here's our layout as set up in the above codes:

Wii Remote/NunchukClassic ControllerGame Function
HomeHome
Classic Controller analog stick is not supported in the Home Button Menu, you will need to use a Wii Remote to quit
Open/Close Home Button Menu
D-Pad UpD-Pad Up
ZR
Change Formation
D-Pad DownD-Pad Down
X
Change Rank (party order, i.e. selected job type)
D-Pad Left/RightD-Pad Left/Right
L/R
Camera Rotation
Wiimote AAConfirm/Action/Charge
Wiimote BBCancel
Recruit (town)
Call Back (field)
Nunchuk CYZoom Camera (town)
Scepter Attack (field)
Nunchuk ZZLTarget
Plus/MinusPlusOpen/Close Field Menu
Wiimote 1
Wiimote 2
MinusDismiss Party (town)
Return to Castle (field)


If you prefer the D-Pad, you can use that to access its original functions (and to navigate menus), but its functions have all been mirrored to the face and shoulder buttons, which is closer to how the original control scheme has you mostly using the action buttons with your right hand. The most contentious change is that the Nunchuk C button has moved to the Y face button. This is how Corobo attacks and feels better with the other action buttons than it does up on the Nunchuk-equivalent L-button. Realistically, the original devs put it on C because that's the only other button you really have access to in the Wiimote and Nunchuk layout. The base game already does a lot of re-using buttons for different functions depending on whether you're in town or the field, and this hack added one more with the Wiimote 1/2 Dismiss (town)/Return (field) buttons being combined into Classic Controller Minus. It feels pretty intuitive combining these since they're both cancel/quit type inputs which are out of the way so you don't accidentally press them.

If you want to change any of these mappings, you'll need to edit the end section of the code. Here it is again with labels for the buttons from the above scheme:
Code:
   |  Wii Output |     xxxx     xxxx | Classic Input
------------------------------------------------------
 1 |             |          70A40800 | Home
 2 |             | 2C040000 41820008 |
 3 |        Home | 60C68000 70A40001 | D-Pad Up
 4 |             | 2C040000 41820008 |
 5 |    D-Pad Up | 60C60008 70A44000 | D-Pad Down
 6 |             | 2C040000 41820008 |
 7 |  D-Pad Down | 60C60004 70A40002 | D-Pad Left
 8 |             | 2C040000 41820008 |
 9 |  D-Pad Left | 60C60001 70A48000 | D-Pad Right
10 |             | 2C040000 41820008 |
11 | D-Pad Right | 60C60002 70A40010 | A
12 |             | 2C040000 41820008 |
13 |           A | 60C60800 70A40040 | B
14 |             | 2C040000 41820008 |
15 |           B | 60C60400 70A40008 | X
16 |             | 2C040000 41820008 |
17 |  D-Pad Down | 60C60004 70A40020 | Y
18 |             | 2C040000 41820008 |
19 |           C | 60C64000 70A42000 | L
20 |             | 2C040000 41820008 |
21 |  D-Pad Left | 60C60001 70A40200 | R
22 |             | 2C040000 41820008 |
23 | D-Pad Right | 60C60002 70A40080 | ZL
24 |             | 2C040000 41820008 |
25 |           Z | 60C62000 70A40004 | ZR
26 |             | 2C040000 41820008 |
27 |    D-Pad Up | 60C60008 70A40400 | Plus
28 |             | 2C040000 41820008 |
29 |        Plus | 60C60010 70A41000 | Minus
30 |             | 2C040000 41820008 |
31 |         1+2 | 60C60300 00000000 |

I know it's a bit lopsided and confusing to look at, but each button value on the right side triggers the next button down on the left side. Just look at the first mapping, where Classic Controller 0800 Home on line 1 (right) triggers Wiimote 8000 Home on line 3 (left), to get a feel for how it works. Personally, I'd suggest changing the left column if you want to customize this layout, keeping the Classic Controller inputs in their default order. Otherwise, it gets confusing really fast.

Each button is a four digit value. Here's a table of the button values you can substitute in to customize your mapping.
Wii Remote/NunchukClassic Controller
0001 D-Pad Left
0002 D-Pad Right
0004 D-Pad Down
0008 D-Pad Up
0010 +
0020 // no button
0040 // no button
0080 // no button
0100 2
0200 1
0400 B
0800 A
1000 -
2000 Z
4000 C
8000 Home
0001 D-Pad Up
0002 D-Pad Left
0004 ZR
0008 X
0010 A
0020 Y
0040 B
0080 ZL
0100 // no button
0200 R
0400 +
0800 // no button
1000 -
2000 L
4000 D-Pad Down
8000 D-Pad Right

General Notes​

Just stuff you might want to know about the hack and underlying game.
  • this is specifically a hack of the way Little King's Story handles Nunchuk inputs; it can't really be generalized to other games (barring perhaps other games on the same engine, assuming they exist)
  • this code breaks the original Nunchuk input; turn off the code if you want to go back to playing with the original controls
  • sorry, I don't have the slightest idea how to map camera rotation to the right stick
  • has also been tested and works on Wii U as a Wii VC injection with Classic Controller emulation, for semi-portable play
  • if you have the choice, you should probably play the USA or Japan versions, which came out after the European game and include extra content and 60 Hz support
  • fans regard the Steam and Vita versions as inferior to the original Wii release

Technical Notes​

Slightly nerdier stuff. The code is basically made up of 4 main parts. The first three are King-specific while the last can basically be ported to other games as long as you can figure out the rest yourself.
  • the first line patches out the code which determines that the Classic Controller is not an acceptable extension
  • the second line tells the game that it should accept Nunchuk button values when they're "pressed" by a Classic Controller (extension type 2)
  • the next four lines again tell the game to use extension 2 and force it to read the Classic Controller left analog offset instead of the Nunchuk when reading the joystick X/Y values
  • the remainder is crediar's original button remapping hack which injects into the SDK read_kpad_acc() function; it reads the CC button values then translates and injects them into the Wiimote/Nunchuk button field

Credits​

  • DeadweightLKS, the world's #1 Little King's Story expert, for advising on the ideal button layout
  • crediar: creating the original Classic Controller hacks for sideways Wii Remote games, in particular Kirby's Return to Dream Land
  • Vague Rant: hacking Nunchuk inputs (C, Z and the analog stick) and disabling "wrong extension" error

Amazing. 🙃

Is it possible mario kart wii one with simple dpad steering using wiimote as a nes controller?
 
Last edited by Tarmfot,

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,489
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,536
Country
Amazing. 🙃

Is it possible mario kart wii one with simple dpad steering using wiimote as a nes controller?
Sounds interesting! Are there enough buttons left for all of the things you can do in Mario Kart Wii? Accelerate, Brake, Slide, Item, Trick, Wheelie ... there's only really four buttons on the Wiimote that are (somewhat) usable in sideways layout, so it'd be pretty crowded. But it might be fun to see if anything could be worked out.



SI_Wii_DonkeyKongCountryReturns_image1600w.png


Classic Con Hacking Returns! Donkey Kong Country Returns is the revival of the classic SNES trilogy, crafted by Retro Studios (Metroid Prime). The game was critically acclaimed then and now, and remains one of the least controversial sequels on the Wii. There's no Kremlings, some people didn't like that. But the game is stellar in all respects and one of the best Wii games and/or 2D platformers ever created. Can you tell I like this one?

That said, this needs a bit more intro than most, because crediar's original Classic Controller hack for Donkey Kong Country Returns a) already exists and b) kicked off this entire genre of Wii hack. Where the original hack had the Classic Controller simulate a sideways Wii Remote, in revisiting this game, I've instead had the Classic Controller be recognized as a Wii Remote & Nunchuk combo, which provides full analog movement on the Classic Controller. As a small bonus, this feature is optional and can be toggled on/off individually for both players while in-game. Highlight for @NestorM who asked about this game.

USAUSA (Rev 1)EuropeJapan

  1. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438526C 28000009
    C23852E0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C2385FC0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2386050 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387214 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    04387300 28000002
    20387C1C 00000000
    04387C1C 02010201
    04387CE0 88ACFFFC
    04387CF0 88ACFFFD
    E2000001 00000000
    C2387C20 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A4D10 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C68370
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A369C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C7C20
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  2. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438710C 28000009
    C2387180 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C2387E60 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387EF0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C23890B4 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    043891A0 28000002
    20389ABC 00000000
    04389ABC 02010201
    04389B80 88ACFFFC
    04389B90 88ACFFFD
    E2000001 00000000
    C2389AC0 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A6CC0 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C6A320
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A564C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C9AC0
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  3. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438666C 28000009
    C23866E0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C23873C0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387450 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2388614 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    04388700 28000002
    2038901C 00000000
    0438901C 02010201
    043890E0 88ACFFFC
    043890F0 88ACFFFD
    E2000001 00000000
    C2389020 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A6160 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C697C0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A4AEC 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C9020
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  4. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438B17C 28000009
    C238B1F0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C238BED0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C238BF60 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C238D124 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    0438D210 28000002
    2038DB2C 00000000
    0438DB2C 02010201
    0438DBF0 88ACFFFC
    0438DC00 88ACFFFD
    E2000001 00000000
    C238DB30 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24AAD90 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C6E3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A971C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618CDB30
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000

Button Mapping​

As mentioned in the intro, this is essentially two Classic Controller hacks working in tandem, so there are two button layouts: one when simulating the Wiimote and Nunchuk and another for simulating the solo Wiimote.

The default is the Nunchuk layout, so let's start with that. This layout matches the one used by Donkey Kong Country Returns 3D on the 3DS and Tropical Freeze on Wii U and Switch.

Wii Remote & NunchukClassic ControllerGame Function
Wiimote HomeHome
Home Menu works as normal
Open/Close Home Button Menu
Wiimote D-PadD-PadNot used?
Wiimote AA/BMenus
Confirm
Gameplay
Jump
Wiimote BR/ZRMenus
Cancel
Gameplay
Grab
Wiimote PlusPlusMenus
Copy Save
Gameplay
Pause
Wiimote MinusMinusMenus
Delete Save
Gameplay
Pause
Wiimote 1/2Not used
Nunchuk Analog StickLeft StickMenus
Navigation
Gameplay
Movement
Nunchuk CNot used
Nunchuk ZL/ZLWorld Map
Zoom Out
Gameplay
Grab
Wiimote & Nunchuk ShakeX/Y (either)Gameplay
Various
Insert/Remove NunchukPlus and Minus (together)Toggle Controller Mode

Next, let's take a look at the Wiimote layout. I matched the later games in the series as closely as possible here, but since there's no analog movement on the Wii Remote, the Grab buttons are now both Grab and Run, as in the actual, physical Wiimote button layout.

Wii RemoteClassic ControllerGame Function
HomeHome
Home Menu works as normal
Open/Close Home Button Menu
D-PadD-PadMenus
Navigation
Gameplay
Movement
AAWorld Map
Zoom Out
BNot used
PlusPlusMenus
Copy Save
Gameplay
Pause
MinusMinusMenus
Delete Save
Gameplay
Pause
1L/R
ZL/ZR
Menus
Cancel
Gameplay
Grab/Run
2B/AMenus
Confirm
Gameplay
Jump
ShakeX/YGameplay
Various
Insert/Remove NunchukPlus and MinusToggle Controller Mode

General Notes​

  • crediar's original hack is amazing and brought this game to many who might otherwise have been turned off by the motion controls. If this updated hack seems useless to you, it probably is. That said, this was an opportunity to expand on crediar's incredible work and make the game even more flexible in its controls. I credit crediar in all of my Classic Controller hacks, since they continue to use parts of the original DKCR hack, but obviously this one owes even more to crediar. A fun note is that the very first line of the code comes unchanged from crediar's original, which was pleasing to me.
  • In North America, two different disc revisions of Donkey Kong Country Returns were pressed, the original (Rev 0) and Rev 1 which included some minor fixes. You will need to know which hack to apply depending on which disc you own. Lazy approach: just try both and see which one works. Slightly less lazy: inspect the disc and look for the revision marking (00 or 01) etched on the inner ring. High effort: back up your disc, load it up in Dolphin, right click it, and look at Properties > Info > Name. It will say either Donkey Kong Country Returns (Disc 1, Revision 0) or (Disc 1, Revision 1). And then you'll know.
  • The Wiimote/Nunchuk toggle feature is relatively pointless, I know. Generally, people want to play with one or the other, not alternate between two different control schemes. Honestly, my main motivation was just that toggling between two different extension controllers with a button combo seemed funny. That said, there is maybe one situation where this is useful. If you've got one actual Classic Controller and one SNES Classic Mini controller and want to play multiplayer, the player with the SNES pad can toggle to Wiimote mode and have D-Pad control, while the Classic Controller retains analog support. Will anybody ever actually do this? Nope. Technically, this satisfies NestorM's request that you be able to play with both the D-Pad and analog stick, you just have to be two different people.

Technical Notes​

Besides the first line of the code mentioned earlier and the standard button injector, this is a complete rewrite of the Classic Controller hack. It's of course still derived from crediar's hack in other ways, as that hack provided something of a roadmap to several of the relevant functions. For example, while my approach ended up being completely different, the original Wiimote shaking hack was hugely informative when tracking down shaking on the Nunchuk. Anyway, let's break down the code.

04
crediar's original patch which prevents shaking from being disabled when a Classic Controller is inserted into the base of the Wiimote.

C2
This is the actual shake hack. In a point of difference from most Wii games, DKCR does not use read_kpad_acc() to read the accelerometers. That was a significant challenge since I've mostly worked with that function to emulate motion controls. Where crediar's original hack injected some fake motion data into the low-level accelerometer data, I took a different approach where I'm coming in at the "other end" (after the motion controls have been evaluated) and enabling the "player shook the controller/s" bits. This amounts to setting and unsetting six bits (presumably six axes?) on alternating frames. In Nunchuk mode, the shakes alternate each frame (Wiimote on frame 0, Nunchuk on frame 1, Wiimote on frame 2) so you're shaking every single frame. On the solo Wiimote, this is just Wiimote, no shake, Wiimote, no shake. I'm storing whether you're currently on the Wiimote or Nunchuk/no shake frame separately for each player.

C2, C2 and C2
The next three codes are all just checking if the user is on a Classic Controller and redirecting Nunchuk analog stick reads to the Classic Controller left stick. The third one is checking for relatively small movements; I don't know what it actually does but my guess is that it's keeping the controller awake (resetting the five minute sleep timer) if the player is touching the analog stick, while leaving some leeway for bad dead zone inputs. Just a guess, though.

04
This patches a check that your extension controller is not >1 (Nunchuk) to >2 (Classic Controller).

20 and C2
The first of these is setting up the default controller mode (Nunchuk style) in some free memory, then patching the game to read the mode from memory instead of using the hardcoded values. Then the C2 is handling multiplayer: adjusting the offset where the values should be read from depending on whether you're player 1 or 2. DKCR aligns all functions to 0x10 (16) bytes, so there's a lot of free space if you add it all up (between 0-12 bytes free between every function). I only needed 4 bytes to save both controllers, so that was fine. There was a one-in-four risk that one of the disc regions would have, by pure coincidence, already been aligned to 0x10 bytes, rendering this approach slightly more complicated, but thankfully none of them were and the hack was able to be reused unchanged.

C2 and C2
Finally getting to some SDK stuff, this is read_kpad_dpd() and read_kpad_button(). The former has nothing interesting going on, but button is doing a lot of heavy lifting this time around. Since we're using it to toggle between Nunchuk and Wiimote modes, we have to call the function which handles extension changes from within the button injector. This is actually the function from the above paragraph. DKCR doesn't have symbols, so the name I came up with for it was ControllerTypeEnumerator(), since it reads the extension and then sets different values for each EXT type (including several invalid ones like Classic Controller). Anyway, when the user toggles controls with Plus and Minus, I'm adjusting the controller values set up in the previous paragraph for the current player, storing r3, r4 and the link register on the stack, then calling the extension toggle function.
 

NestorM

Well-Known Member
Newcomer
Joined
Feb 19, 2021
Messages
82
Trophies
0
Age
39
XP
1,000
Country
France
Sounds interesting! Are there enough buttons left for all of the things you can do in Mario Kart Wii? Accelerate, Brake, Slide, Item, Trick, Wheelie ... there's only really four buttons on the Wiimote that are (somewhat) usable in sideways layout, so it'd be pretty crowded. But it might be fun to see if anything could be worked out.



View attachment 460733

Classic Con Hacking Returns! Donkey Kong Country Returns is the revival of the classic SNES trilogy, crafted by Retro Studios (Metroid Prime). The game was critically acclaimed then and now, and remains one of the least controversial sequels on the Wii. There's no Kremlings, some people didn't like that. But the game is stellar in all respects and one of the best Wii games and/or 2D platformers ever created. Can you tell I like this one?

That said, this needs a bit more intro than most, because crediar's original Classic Controller hack for Donkey Kong Country Returns a) already exists and b) kicked off this entire genre of Wii hack. Where the original hack had the Classic Controller simulate a sideways Wii Remote, in revisiting this game, I've instead had the Classic Controller be recognized as a Wii Remote & Nunchuk combo, which provides full analog movement on the Classic Controller. As a small bonus, this feature is optional and can be toggled on/off individually for both players while in-game. Highlight for @NestorM who asked about this game.

USAUSA (Rev 1)EuropeJapan

  1. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438526C 28000009
    C23852E0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C2385FC0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2386050 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387214 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    04387300 28000002
    20387C1C 00000000
    04387C1C 02010201
    04387CE0 88ACFFFC
    04387CF0 88ACFFFD
    E2000001 00000000
    C2387C20 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A4D10 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C68370
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A369C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C7C20
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  2. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438710C 28000009
    C2387180 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C2387E60 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387EF0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C23890B4 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    043891A0 28000002
    20389ABC 00000000
    04389ABC 02010201
    04389B80 88ACFFFC
    04389B90 88ACFFFD
    E2000001 00000000
    C2389AC0 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A6CC0 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C6A320
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A564C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C9AC0
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  3. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438666C 28000009
    C23866E0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C23873C0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387450 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2388614 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    04388700 28000002
    2038901C 00000000
    0438901C 02010201
    043890E0 88ACFFFC
    043890F0 88ACFFFD
    E2000001 00000000
    C2389020 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A6160 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C697C0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A4AEC 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C9020
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  4. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438B17C 28000009
    C238B1F0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C238BED0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C238BF60 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C238D124 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    0438D210 28000002
    2038DB2C 00000000
    0438DB2C 02010201
    0438DBF0 88ACFFFC
    0438DC00 88ACFFFD
    E2000001 00000000
    C238DB30 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24AAD90 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C6E3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A971C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618CDB30
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000

Button Mapping​

As mentioned in the intro, this is essentially two Classic Controller hacks working in tandem, so there are two button layouts: one when simulating the Wiimote and Nunchuk and another for simulating the solo Wiimote.

The default is the Nunchuk layout, so let's start with that. This layout matches the one used by Donkey Kong Country Returns 3D on the 3DS and Tropical Freeze on Wii U and Switch.

Wii Remote & NunchukClassic ControllerGame Function
Wiimote HomeHome
Home Menu works as normal
Open/Close Home Button Menu
Wiimote D-PadD-PadNot used?
Wiimote AA/BMenus
Confirm
Gameplay
Jump
Wiimote BR/ZRMenus
Cancel
Gameplay
Grab
Wiimote PlusPlusMenus
Copy Save
Gameplay
Pause
Wiimote MinusMinusMenus
Delete Save
Gameplay
Pause
Wiimote 1/2Not used
Nunchuk Analog StickLeft StickMenus
Navigation
Gameplay
Movement
Nunchuk CNot used
Nunchuk ZL/ZLWorld Map
Zoom Out
Gameplay
Grab
Wiimote & Nunchuk ShakeX/Y (either)Gameplay
Various
Insert/Remove NunchukPlus and Minus (together)Toggle Controller Mode


Next, let's take a look at the Wiimote layout. I matched the later games in the series as closely as possible here, but since there's no analog movement on the Wii Remote, the Grab buttons are now both Grab and Run, as in the actual, physical Wiimote button layout.

Wii RemoteClassic ControllerGame Function
HomeHome
Home Menu works as normal
Open/Close Home Button Menu
D-PadD-PadMenus
Navigation
Gameplay
Movement
AAWorld Map
Zoom Out
BNot used
PlusPlusMenus
Copy Save
Gameplay
Pause
MinusMinusMenus
Delete Save
Gameplay
Pause
1L/R
ZL/ZR
Menus
Cancel
Gameplay
Grab/Run
2B/AMenus
Confirm
Gameplay
Jump
ShakeX/YGameplay
Various
Insert/Remove NunchukPlus and MinusToggle Controller Mode

General Notes​

  • crediar's original hack is amazing and brought this game to many who might otherwise have been turned off by the motion controls. If this updated hack seems useless to you, it probably is. That said, this was an opportunity to expand on crediar's incredible work and make the game even more flexible in its controls. I credit crediar in all of my Classic Controller hacks, since they continue to use parts of the original DKCR hack, but obviously this one owes even more to crediar. A fun note is that the very first line of the code comes unchanged from crediar's original, which was pleasing to me.
  • In North America, two different disc revisions of Donkey Kong Country Returns were pressed, the original (Rev 0) and Rev 1 which included some minor fixes. You will need to know which hack to apply depending on which disc you own. Lazy approach: just try both and see which one works. Slightly less lazy: inspect the disc and look for the revision marking (00 or 01) etched on the inner ring. High effort: back up your disc, load it up in Dolphin, right click it, and look at Properties > Info > Name. It will say either Donkey Kong Country Returns (Disc 1, Revision 0) or (Disc 1, Revision 1). And then you'll know.
  • The Wiimote/Nunchuk toggle feature is relatively pointless, I know. Generally, people want to play with one or the other, not alternate between two different control schemes. Honestly, my main motivation was just that toggling between two different extension controllers with a button combo seemed funny. That said, there is maybe one situation where this is useful. If you've got one actual Classic Controller and one SNES Classic Mini controller and want to play multiplayer, the player with the SNES pad can toggle to Wiimote mode and have D-Pad control, while the Classic Controller retains analog support. Will anybody ever actually do this? Nope. Technically, this satisfies NestorM's request that you be able to play with both the D-Pad and analog stick, you just have to be two different people.

Technical Notes​

Besides the first line of the code mentioned earlier and the standard button injector, this is a complete rewrite of the Classic Controller hack. It's of course still derived from crediar's hack in other ways, as that hack provided something of a roadmap to several of the relevant functions. For example, while my approach ended up being completely different, the original Wiimote shaking hack was hugely informative when tracking down shaking on the Nunchuk. Anyway, let's break down the code.

04
crediar's original patch which prevents shaking from being disabled when a Classic Controller is inserted into the base of the Wiimote.

C2
This is the actual shake hack. In a point of difference from most Wii games, DKCR does not use read_kpad_acc() to read the accelerometers. That was a significant challenge since I've mostly worked with that function to emulate motion controls. Where crediar's original hack injected some fake motion data into the low-level accelerometer data, I took a different approach where I'm coming in at the "other end" (after the motion controls have been evaluated) and enabling the "player shook the controller/s" bits. This amounts to setting and unsetting six bits (presumably six axes?) on alternating frames. In Nunchuk mode, the shakes alternate each frame (Wiimote on frame 0, Nunchuk on frame 1, Wiimote on frame 2) so you're shaking every single frame. On the solo Wiimote, this is just Wiimote, no shake, Wiimote, no shake. I'm storing whether you're currently on the Wiimote or Nunchuk/no shake frame separately for each player.

C2, C2 and C2
The next three codes are all just checking if the user is on a Classic Controller and redirecting Nunchuk analog stick reads to the Classic Controller left stick. The third one is checking for relatively small movements; I don't know what it actually does but my guess is that it's keeping the controller awake (resetting the five minute sleep timer) if the player is touching the analog stick, while leaving some leeway for bad dead zone inputs. Just a guess, though.

04
This patches a check that your extension controller is not >1 (Nunchuk) to >2 (Classic Controller).

20 and C2
The first of these is setting up the default controller mode (Nunchuk style) in some free memory, then patching the game to read the mode from memory instead of using the hardcoded values. Then the C2 is handling multiplayer: adjusting the offset where the values should be read from depending on whether you're player 1 or 2. DKCR aligns all functions to 0x10 (16) bytes, so there's a lot of free space if you add it all up (between 0-12 bytes free between every function). I only needed 4 bytes to save both controllers, so that was fine. There was a one-in-four risk that one of the disc regions would have, by pure coincidence, already been aligned to 0x10 bytes, rendering this approach slightly more complicated, but thankfully none of them were and the hack was able to be reused unchanged.

C2 and C2
Finally getting to some SDK stuff, this is read_kpad_dpd() and read_kpad_button(). The former has nothing interesting going on, but button is doing a lot of heavy lifting this time around. Since we're using it to toggle between Nunchuk and Wiimote modes, we have to call the function which handles extension changes from within the button injector. This is actually the function from the above paragraph. DKCR doesn't have symbols, so the name I came up with for it was ControllerTypeEnumerator(), since it reads the extension and then sets different values for each EXT type (including several invalid ones like Classic Controller). Anyway, when the user toggles controls with Plus and Minus, I'm adjusting the controller values set up in the previous paragraph for the current player, storing r3, r4 and the link register on the stack, then calling the extension toggle function.
Yeah thank you ! Fantastic job.
 
  • Like
Reactions: Vague Rant

tech_A_nina

Member
Newcomer
Joined
Aug 1, 2018
Messages
18
Trophies
0
XP
218
Country
United Kingdom
Hey vague_rant, I'm glad to see you are still working on this. Thanks a lot for the effort :) I was trying to create an injection to the wii u for DK returns with the new analog stick movements so I could use the wii u gamepad, but it didn't work. There was no input noticable. I did the same as you mentioned in the super Mario galaxy tutorial. Am I missing something or isn't it possible to get it working on the wii u? I would like to replay the games on the wii u gamepad. Hope you can help. Again thanks a lot for your great work
Post automatically merged:

Sounds interesting! Are there enough buttons left for all of the things you can do in Mario Kart Wii? Accelerate, Brake, Slide, Item, Trick, Wheelie ... there's only really four buttons on the Wiimote that are (somewhat) usable in sideways layout, so it'd be pretty crowded. But it might be fun to see if anything could be worked out.



View attachment 460733

Classic Con Hacking Returns! Donkey Kong Country Returns is the revival of the classic SNES trilogy, crafted by Retro Studios (Metroid Prime). The game was critically acclaimed then and now, and remains one of the least controversial sequels on the Wii. There's no Kremlings, some people didn't like that. But the game is stellar in all respects and one of the best Wii games and/or 2D platformers ever created. Can you tell I like this one?

That said, this needs a bit more intro than most, because crediar's original Classic Controller hack for Donkey Kong Country Returns a) already exists and b) kicked off this entire genre of Wii hack. Where the original hack had the Classic Controller simulate a sideways Wii Remote, in revisiting this game, I've instead had the Classic Controller be recognized as a Wii Remote & Nunchuk combo, which provides full analog movement on the Classic Controller. As a small bonus, this feature is optional and can be toggled on/off individually for both players while in-game. Highlight for @NestorM who asked about this game.

USAUSA (Rev 1)EuropeJapan

  1. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438526C 28000009
    C23852E0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C2385FC0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2386050 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387214 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    04387300 28000002
    20387C1C 00000000
    04387C1C 02010201
    04387CE0 88ACFFFC
    04387CF0 88ACFFFD
    E2000001 00000000
    C2387C20 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A4D10 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C68370
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A369C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C7C20
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  2. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438710C 28000009
    C2387180 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C2387E60 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387EF0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C23890B4 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    043891A0 28000002
    20389ABC 00000000
    04389ABC 02010201
    04389B80 88ACFFFC
    04389B90 88ACFFFD
    E2000001 00000000
    C2389AC0 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A6CC0 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C6A320
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A564C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C9AC0
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  3. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438666C 28000009
    C23866E0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C23873C0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2387450 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C2388614 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    04388700 28000002
    2038901C 00000000
    0438901C 02010201
    043890E0 88ACFFFC
    043890F0 88ACFFFD
    E2000001 00000000
    C2389020 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24A6160 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C697C0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A4AEC 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618C9020
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000
  4. Code:
    Classic Controller with Analog Support [Vague Rant, crediar]
    0438B17C 28000009
    C238B1F0 00000009
    4800000D 000001D5
    000001D5 7C8802A6
    5623103A 7C841A14
    80760000 70630080
    4082000C 386001D5
    48000010 80640000
    7C001B78 5463803E
    90640000 90190020
    60000000 00000000
    C238BED0 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C238BF60 00000003
    7C9A0214 88040064
    28000002 40820008
    3884000C 00000000
    C238D124 00000003
    28080001 4182000C
    28080002 38A5000C
    60000000 00000000
    0438D210 28000002
    2038DB2C 00000000
    0438DB2C 02010201
    0438DBF0 88ACFFFC
    0438DC00 88ACFFFD
    E2000001 00000000
    C238DB30 00000002
    5465083C 7D8C2A14
    9421FFF0 00000000
    C24AAD90 00000019
    88A40028 2C050002
    408200B8 9421FFF0
    7C0802A6 9001000C
    90610008 98A3005E
    3CC08051 60C6E3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C023006C
    FC211024 4800002D
    D0030020 C0030024
    C0230070 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3C23D70A 3F800000
    9421FFC0 00000000
    C24A971C 00000043
    90030068 9421FFF8
    7C0802A6 9001000C
    90810004 90610000
    3D808038 618CDB30
    5729083C 3929FFFC
    7C0C4A2E 48000005
    7CA802A6 81030060
    48000069 80C30000
    7D083378 91030000
    71060080 7D0840F8
    80C30008 7CC84038
    91030008 81030064
    48000041 80C30004
    7D083378 91030004
    71081010 4182018C
    81030000 71081010
    28081010 4082017C
    68000301 7C0C4B2E
    7D8803A6 7F23CB78
    4E800021 48000164
    38E00000 71060800
    41820008 60E78000
    70060001 41820098
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70002 71068000
    41820008 60E70001
    71060010 41820008
    60E70800 71060040
    41820008 60E70800
    71060008 41820008
    60E70080 71060020
    41820008 60E70080
    71062000 41820008
    60E72000 71060200
    41820008 60E70400
    71060080 41820008
    60E72000 71060004
    4182009C 60E70400
    48000094 71060001
    41820008 60E70002
    71064000 41820008
    60E70001 71060002
    41820008 60E70008
    71068000 41820008
    60E70004 71060010
    41820008 60E70900
    71060040 41820008
    60E70100 71060008
    41820008 60E70080
    71060020 41820008
    60E70080 71062000
    41820008 60E70200
    71060200 41820008
    60E70200 71060080
    41820008 60E70200
    71060004 41820008
    60E70200 71060400
    41820008 60E70010
    71061000 41820008
    60E71000 7CE83B78
    4E800020 0000012D
    80610000 80810004
    8001000C 7C0803A6
    38210008 00000000

Button Mapping​

As mentioned in the intro, this is essentially two Classic Controller hacks working in tandem, so there are two button layouts: one when simulating the Wiimote and Nunchuk and another for simulating the solo Wiimote.

The default is the Nunchuk layout, so let's start with that. This layout matches the one used by Donkey Kong Country Returns 3D on the 3DS and Tropical Freeze on Wii U and Switch.

Wii Remote & NunchukClassic ControllerGame Function
Wiimote HomeHome
Home Menu works as normal
Open/Close Home Button Menu
Wiimote D-PadD-PadNot used?
Wiimote AA/BMenus
Confirm
Gameplay
Jump
Wiimote BR/ZRMenus
Cancel
Gameplay
Grab
Wiimote PlusPlusMenus
Copy Save
Gameplay
Pause
Wiimote MinusMinusMenus
Delete Save
Gameplay
Pause
Wiimote 1/2Not used
Nunchuk Analog StickLeft StickMenus
Navigation
Gameplay
Movement
Nunchuk CNot used
Nunchuk ZL/ZLWorld Map
Zoom Out
Gameplay
Grab
Wiimote & Nunchuk ShakeX/Y (either)Gameplay
Various
Insert/Remove NunchukPlus and Minus (together)Toggle Controller Mode


Next, let's take a look at the Wiimote layout. I matched the later games in the series as closely as possible here, but since there's no analog movement on the Wii Remote, the Grab buttons are now both Grab and Run, as in the actual, physical Wiimote button layout.

Wii RemoteClassic ControllerGame Function
HomeHome
Home Menu works as normal
Open/Close Home Button Menu
D-PadD-PadMenus
Navigation
Gameplay
Movement
AAWorld Map
Zoom Out
BNot used
PlusPlusMenus
Copy Save
Gameplay
Pause
MinusMinusMenus
Delete Save
Gameplay
Pause
1L/R
ZL/ZR
Menus
Cancel
Gameplay
Grab/Run
2B/AMenus
Confirm
Gameplay
Jump
ShakeX/YGameplay
Various
Insert/Remove NunchukPlus and MinusToggle Controller Mode

General Notes​

  • crediar's original hack is amazing and brought this game to many who might otherwise have been turned off by the motion controls. If this updated hack seems useless to you, it probably is. That said, this was an opportunity to expand on crediar's incredible work and make the game even more flexible in its controls. I credit crediar in all of my Classic Controller hacks, since they continue to use parts of the original DKCR hack, but obviously this one owes even more to crediar. A fun note is that the very first line of the code comes unchanged from crediar's original, which was pleasing to me.
  • In North America, two different disc revisions of Donkey Kong Country Returns were pressed, the original (Rev 0) and Rev 1 which included some minor fixes. You will need to know which hack to apply depending on which disc you own. Lazy approach: just try both and see which one works. Slightly less lazy: inspect the disc and look for the revision marking (00 or 01) etched on the inner ring. High effort: back up your disc, load it up in Dolphin, right click it, and look at Properties > Info > Name. It will say either Donkey Kong Country Returns (Disc 1, Revision 0) or (Disc 1, Revision 1). And then you'll know.
  • The Wiimote/Nunchuk toggle feature is relatively pointless, I know. Generally, people want to play with one or the other, not alternate between two different control schemes. Honestly, my main motivation was just that toggling between two different extension controllers with a button combo seemed funny. That said, there is maybe one situation where this is useful. If you've got one actual Classic Controller and one SNES Classic Mini controller and want to play multiplayer, the player with the SNES pad can toggle to Wiimote mode and have D-Pad control, while the Classic Controller retains analog support. Will anybody ever actually do this? Nope. Technically, this satisfies NestorM's request that you be able to play with both the D-Pad and analog stick, you just have to be two different people.

Technical Notes​

Besides the first line of the code mentioned earlier and the standard button injector, this is a complete rewrite of the Classic Controller hack. It's of course still derived from crediar's hack in other ways, as that hack provided something of a roadmap to several of the relevant functions. For example, while my approach ended up being completely different, the original Wiimote shaking hack was hugely informative when tracking down shaking on the Nunchuk. Anyway, let's break down the code.

04
crediar's original patch which prevents shaking from being disabled when a Classic Controller is inserted into the base of the Wiimote.

C2
This is the actual shake hack. In a point of difference from most Wii games, DKCR does not use read_kpad_acc() to read the accelerometers. That was a significant challenge since I've mostly worked with that function to emulate motion controls. Where crediar's original hack injected some fake motion data into the low-level accelerometer data, I took a different approach where I'm coming in at the "other end" (after the motion controls have been evaluated) and enabling the "player shook the controller/s" bits. This amounts to setting and unsetting six bits (presumably six axes?) on alternating frames. In Nunchuk mode, the shakes alternate each frame (Wiimote on frame 0, Nunchuk on frame 1, Wiimote on frame 2) so you're shaking every single frame. On the solo Wiimote, this is just Wiimote, no shake, Wiimote, no shake. I'm storing whether you're currently on the Wiimote or Nunchuk/no shake frame separately for each player.

C2, C2 and C2
The next three codes are all just checking if the user is on a Classic Controller and redirecting Nunchuk analog stick reads to the Classic Controller left stick. The third one is checking for relatively small movements; I don't know what it actually does but my guess is that it's keeping the controller awake (resetting the five minute sleep timer) if the player is touching the analog stick, while leaving some leeway for bad dead zone inputs. Just a guess, though.

04
This patches a check that your extension controller is not >1 (Nunchuk) to >2 (Classic Controller).

20 and C2
The first of these is setting up the default controller mode (Nunchuk style) in some free memory, then patching the game to read the mode from memory instead of using the hardcoded values. Then the C2 is handling multiplayer: adjusting the offset where the values should be read from depending on whether you're player 1 or 2. DKCR aligns all functions to 0x10 (16) bytes, so there's a lot of free space if you add it all up (between 0-12 bytes free between every function). I only needed 4 bytes to save both controllers, so that was fine. There was a one-in-four risk that one of the disc regions would have, by pure coincidence, already been aligned to 0x10 bytes, rendering this approach slightly more complicated, but thankfully none of them were and the hack was able to be reused unchanged.

C2 and C2
Finally getting to some SDK stuff, this is read_kpad_dpd() and read_kpad_button(). The former has nothing interesting going on, but button is doing a lot of heavy lifting this time around. Since we're using it to toggle between Nunchuk and Wiimote modes, we have to call the function which handles extension changes from within the button injector. This is actually the function from the above paragraph. DKCR doesn't have symbols, so the name I came up with for it was ControllerTypeEnumerator(), since it reads the extension and then sets different values for each EXT type (including several invalid ones like Classic Controller). Anyway, when the user toggles controls with Plus and Minus, I'm adjusting the controller values set up in the previous paragraph for the current player, storing r3, r4 and the link register on the stack, then calling the extension toggle function.
Ok now I managed to get DK returns running on the wii u gamepad. My first iso was corrupted. Thanks for the code. Next I will try super paper mario, because it's also using the wiimote nuncuck combo. Is there a chance to get silent hill shattered memories running with a classic controller patch? Would be a perfect game for the wii u gamepad. I also tried to inject Wario shake it, but the controlls were false, like moving forward and backward with the up and down buttons of the d-pad. Is there a working cc patch for new super mario bros?
 
Last edited by tech_A_nina,
  • Like
Reactions: Vague Rant

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,489
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,536
Country
Hey vague_rant, I'm glad to see you are still working on this. Thanks a lot for the effort :) I was trying to create an injection to the wii u for DK returns with the new analog stick movements so I could use the wii u gamepad, but it didn't work. There was no input noticable. I did the same as you mentioned in the super Mario galaxy tutorial. Am I missing something or isn't it possible to get it working on the wii u? I would like to replay the games on the wii u gamepad. Hope you can help. Again thanks a lot for your great work
Post automatically merged:


Ok now I managed to get DK returns running on the wii u gamepad. My first iso was corrupted. Thanks for the code. Next I will try super paper mario, because it's also using the wiimote nuncuck combo. Is there a chance to get silent hill shattered memories running with a classic controller patch? Would be a perfect game for the wii u gamepad. I also tried to inject Wario shake it, but the controlls were false, like moving forward and backward with the up and down buttons of the d-pad. Is there a working cc patch for new super mario bros?
Nice, I'm glad you eventually got DK Returns running on the GamePad, super awesome to hear that it works. Thanks for letting me know about Wario as well. The broken controls like that are usually a symptom of the Wii game not correctly detecting the Classic Controller; the same thing happens with injections of Excite Truck unless you enable the "Force Classic Controller connected" checkbox in the injector tool. I wonder if Wario could be fixed with that? If not, it's out of my hands, it's an issue with the Classic Controller emulation in Wii VC injection where it's just not compatible with some games. Unfortunately, that's the case for New Super Mario Bros. Wii, injected versions don't recognize the Classic Controller. Silent Hill definitely sounds like it's on the more complicated end of the spectrum, since it has multiple different hand motions that have to be recognized, so that's probably on the less-likely end, sorry.

This is a bit outside the scope of the project, but would a Other M Nunchuck mod be possible?

Thanks for your hard work, BTW, some of the these mods are really appreciated!
That sounds like a great idea. It seems relatively feasible. I think the major complication would be remapping the inputs on the Wii Remote itself, since you'd need a different layout (A to jump, B to shoot, etc.). To date, I haven't done any remapping of original game inputs, only adding additional mappings on the Classic Controller, so I would need to figure out how to do that, but it does sound cool. I assume you mean retaining the original IR pointer for aiming, right? So you'd move on the Nunchuk, shoot/jump on B/A, maybe Morph Ball on Nunchuk C like in Prime, lock on camera on Nunchuk Z ... Concentration could either use the original motion controls or be mapped on Wiimote Minus or something, since the game doesn't use Minus anyway as far as I can tell. This is definitely an interesting one. As always, no promises, but my curiosity is piqued.



SI_Wii_AnimalCrossingLetsGoToTheCity_image1600w.jpg


Animal Crossing: City Folk aka Let's Go to the City is the third game in Nintendo's Animal Crossing life sim series. The main addition to this entry was Wii Speak support the titular city, expanding on the small town areas of previous entries. This perhaps falls into the "controversial Wii sequel" series, with many complaints about the lack of improvements over the earlier games and the loss of NES games, since Nintendo were now selling those on the Wii Shop Channel instead of giving them away for free. Still, though not revolutionary, City Folk has the same charming atmosphere as the rest of the franchise. And at least it's a real Animal Crossing game. Cough, Amiibo Festival.
Pointer on Left Stick

USAUSA (Rev 1)EuropeEurope (Rev 1)Japan (Rev 1)Korea (Rev 1)

  1. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE160 48000010
    C2443CE4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443D00 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE750 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D338
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF784 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  2. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE284 48000010
    C2443F4C 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F68 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE9B8 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D5A0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF9EC 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  3. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CDFB0 48000010
    C2443CC8 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443CE4 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE5A0 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D188
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF5D4 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  4. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE0D4 48000010
    C2443F30 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F4C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE808 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF83C 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  5. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA8DC 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA944 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE300 48000010
    C2443E80 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443E9C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE8F4 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D4DC
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF928 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  6. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA6A4 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA70C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CF840 48000010
    C244D8C4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C244D8E0 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23C72FC 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803B 60C65EE4
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23C8330 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
Pointer on Right Stick

USAUSA (Rev 1)EuropeEurope (Rev 1)Japan (Rev 1)Korea (Rev 1)

  1. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE160 48000010
    C2443CE4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443D00 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE750 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D338
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF784 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  2. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE284 48000010
    C2443F4C 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F68 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE9B8 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D5A0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF9EC 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  3. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CDFB0 48000010
    C2443CC8 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443CE4 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE5A0 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D188
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF5D4 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  4. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE0D4 48000010
    C2443F30 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F4C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE808 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF83C 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  5. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA8DC 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA944 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE300 48000010
    C2443E80 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443E9C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE8F4 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D4DC
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF928 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  6. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA6A4 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA70C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CF840 48000010
    C244D8C4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C244D8E0 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23C72FC 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803B 60C65EE4
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23C8330 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000

Button Mapping​

Wii Remote & NunchukClassic ControllerGame Function
Wiimote HomeHome
Home Menu works as normal but remember to enable the pointer with L and use the correct stick for your code
Open/Close Home Button Menu
Wiimote D-PadD-PadUp: Change Camera
Left/Right: Change Tool
Down: Put Away Tool
Wiimote AAConfirm
Action
Wiimote BBCancel
Run
Pick Up Items
Wiimote PlusPlus
ZR
Open/Close Map
Next Tab
Wiimote MinusX
ZL
Open/Close Inventory
Previous Tab
Wiimote 1MinusTake Photo
Wiimote 2YOpen/Close Photos
Nunchuk Analog StickLeft StickMovement
Nunchuk CNot mapped
(use A instead)
Confirm
Action
Nunchuk ZRCancel
Run
Pick Up Items
Wiimote IR PointerL (toggle)
Left Stick or Right Stick
(depends on code used)
Move Cursor

General Notes​

  • Two code varieties for this one, choose whichever feels more natural to you. IR aiming is pretty important to City Folk, with all inventory manipulation being IR-based. If you choose the Left Stick code, the Left Stick toggles between movement and IR input, i.e. you can't move and point at the same time. However, there's rarely any advantage to this, as there's no real multitasking possible. If you choose the Right Stick code, all you can really do is move the stupid cursor around while you run. Whee. If you want my opinion, use the Left Stick code.

  • Where possible, I try to "intelligently" enable/disable the pointer mode. The player can always toggle it on/off with the L button, but some other actions (opening the Inventory, Map or Photos menus) will automatically enable pointer mode for you. Try to remember to exit these menus using the same button you used to open them: e.g. you can press X to open the inventory (pointer turns on automatically) then X again to close it (pointer turns off automatically). If you instead open the menu with X then close it with B, you'll still be in pointer mode, because you didn't close with X. In this case, you should press L to disable the pointer manually. I'm trying here.

  • If the IR pointer movement is too fast/slow for you, you can adjust it by editing the float 0.015 (3C75C28F) about halfway through the code. You could adjust it down to 0.01 (3C23D70A) for a slower cursor, or bump it up to 0.02 (3CA3D70A) for a faster cursor, or whatever other number feels appropriate. There's plenty of hex float converters online, I linked one in a previous post somewhere.

  • It's worth knowing that this game supports USB keyboards. Using an on-screen keyboard with an IR pointer is sort of acceptable, but using an on-screen keyboard with a pointer you control using an analog stick is a bad time. If you have a USB keyboard handy it will hugely improve the experience if you're looking to do any typing (e.g. writing letters or chatting with other players over network play). It doesn't have to be a special Wii keyboard or anything; I use a standard PC Logitech Unifying USB dongle in my Wii. Failing that, if you use the phone in your house you can change the keyboard settings to use an old-school mobile keyboard which you might find easier to use with an analog stick.

  • I got a specific request (elsewhere, not in this thread) for an option where the Right Stick pointer is always enabled, but personally I think it's kind of bad. The game changes a lot of things about how it works when you're pointing at the screen, which don't make sense when playing on a traditional controller. For example, pressing A now makes you walk toward the cursor instead of interacting with whatever is in front of you. Pointing at the screen also causes the HUD to display at all times, which means the screen is cluttered with on-screen buttons the whole time you're playing. If anybody here wants this version, I guess ask for it but I find it offers an inferior experience to either of the codes above and shouldn't really be considered an equal option against those.

Technical Notes​

This game has that same Super Paper Mario issue where the Home Button Menu causes a Classic Controller re-init every 64 frames. I solved it the same way, disabling getInfoAsync() from running. Thinking about it more since last time, I suspect this probably has something to do with checking things like the battery level that displays in the HBM. I do still allow getInfoAsync() to run when you first enter the HBM in both this and Paper Mario, so it's not like the HBM is running blind but if you just leave it open it might not correctly track the battery level or something pointless like that, I don't care.

Briefly, the code is: C2 to allow Classic Controller's left stick to be read for movement, C2 to disable the bad EXT error, 04 disable getInfoAsync(), C2 and C2 actually redirect analog reads to the Classic when needed, C2 custom read_kpad_dpd() (Left Stick code has an additional feature to prevent character movement while in pointer mode) and then the button injector gets inserted into KPADRead() in the last C2.

Credits​

  • mogchamp from the AC: Wiimmfi Folk Discord for advising on the button layout
 

Feffe

Well-Known Member
Member
Joined
Oct 12, 2008
Messages
231
Trophies
1
XP
2,281
Country
Italy
@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.

Wii RemoteWii Remote & NunchuckGame Function
AD-Pad DownThird person: Morphball
First person: Fire
BZThird person: Nothing, but Redux uses it for missiles
First person: Move the camera
1AConfirm / Shoot
2BJump / Cancel
+ / -+ / -
PointerC (pressed, though it would
work better if a on/off toggle)
Enter first person
Tilt backwardD-Pad UpRecharge
 

tech_A_nina

Member
Newcomer
Joined
Aug 1, 2018
Messages
18
Trophies
0
XP
218
Country
United Kingdom
Nice, I'm glad you eventually got DK Returns running on the GamePad, super awesome to hear that it works. Thanks for letting me know about Wario as well. The broken controls like that are usually a symptom of the Wii game not correctly detecting the Classic Controller; the same thing happens with injections of Excite Truck unless you enable the "Force Classic Controller connected" checkbox in the injector tool. I wonder if Wario could be fixed with that? If not, it's out of my hands, it's an issue with the Classic Controller emulation in Wii VC injection where it's just not compatible with some games. Unfortunately, that's the case for New Super Mario Bros. Wii, injected versions don't recognize the Classic Controller. Silent Hill definitely sounds like it's on the more complicated end of the spectrum, since it has multiple different hand motions that have to be recognized, so that's probably on the less-likely end, sorry.


That sounds like a great idea. It seems relatively feasible. I think the major complication would be remapping the inputs on the Wii Remote itself, since you'd need a different layout (A to jump, B to shoot, etc.). To date, I haven't done any remapping of original game inputs, only adding additional mappings on the Classic Controller, so I would need to figure out how to do that, but it does sound cool. I assume you mean retaining the original IR pointer for aiming, right? So you'd move on the Nunchuk, shoot/jump on B/A, maybe Morph Ball on Nunchuk C like in Prime, lock on camera on Nunchuk Z ... Concentration could either use the original motion controls or be mapped on Wiimote Minus or something, since the game doesn't use Minus anyway as far as I can tell. This is definitely an interesting one. As always, no promises, but my curiosity is piqued.



View attachment 462240

Animal Crossing: City Folk aka Let's Go to the City is the third game in Nintendo's Animal Crossing life sim series. The main addition to this entry was Wii Speak support the titular city, expanding on the small town areas of previous entries. This perhaps falls into the "controversial Wii sequel" series, with many complaints about the lack of improvements over the earlier games and the loss of NES games, since Nintendo were now selling those on the Wii Shop Channel instead of giving them away for free. Still, though not revolutionary, City Folk has the same charming atmosphere as the rest of the franchise. And at least it's a real Animal Crossing game. Cough, Amiibo Festival.
Pointer on Left Stick

USAUSA (Rev 1)EuropeEurope (Rev 1)Japan (Rev 1)Korea (Rev 1)

  1. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE160 48000010
    C2443CE4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443D00 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE750 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D338
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF784 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  2. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE284 48000010
    C2443F4C 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F68 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE9B8 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D5A0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF9EC 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  3. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CDFB0 48000010
    C2443CC8 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443CE4 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE5A0 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D188
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF5D4 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  4. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE0D4 48000010
    C2443F30 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F4C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE808 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF83C 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  5. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA8DC 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA944 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE300 48000010
    C2443E80 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443E9C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE8F4 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D4DC
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23BF928 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  6. Code:
    Classic Controller Support (Pointer on Left Stick) [Vague Rant, crediar]
    C20FA6A4 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA70C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CF840 48000010
    C244D8C4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C244D8E0 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23C72FC 0000001C
    88A40028 2C050002
    408200CC 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803B 60C65EE4
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450084 40820008
    EC4200B2 C0650088
    C0030020 C023006C
    FC211024 48000039
    D0030020 C0030024
    C0230070 FC200850
    48000025 D0030024
    38000000 9003006C
    90030070 8001000C
    7C0803A6 38210010
    4E800020 FC0100FA
    C025008C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    3FAAAAAB 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C23C8330 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
Pointer on Right Stick

USAUSA (Rev 1)EuropeEurope (Rev 1)Japan (Rev 1)Korea (Rev 1)

  1. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE160 48000010
    C2443CE4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443D00 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE750 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D338
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF784 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  2. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA624 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA68C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE284 48000010
    C2443F4C 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F68 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE9B8 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D5A0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF9EC 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  3. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CDFB0 48000010
    C2443CC8 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443CE4 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE5A0 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D188
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF5D4 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  4. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA784 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA7EC 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE0D4 48000010
    C2443F30 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443F4C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE808 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D3F0
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF83C 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  5. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA8DC 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA944 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CE300 48000010
    C2443E80 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C2443E9C 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23BE8F4 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803A 60C6D4DC
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23BF928 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000
  6. Code:
    Classic Controller Support (Pointer on Right Stick) [Vague Rant, crediar]
    C20FA6A4 00000003
    2C030002 40820008
    3863FFFF 3803FF04
    60000000 00000000
    C20FA70C 00000003
    2C040002 40820008
    3884FFFF 20640001
    60000000 00000000
    042CF840 48000010
    C244D8C4 00000003
    2C000001 4182000C
    C0230104 48000008
    C0230074 00000000
    C244D8E0 00000003
    2C000001 4182000C
    C0230108 48000008
    C0230078 00000000
    C23C72FC 0000001A
    88A40028 2C050002
    408200C0 88A3005E
    2C050002 4C820020
    9421FFF0 7C0802A6
    9001000C 90610008
    3CC0803B 60C65EE4
    7CC803A6 4E800021
    2C030001 80610008
    48000005 7CA802A6
    C0450078 40820008
    EC4200B2 C065007C
    C0030020 C0230074
    FC211024 4800002D
    D0030020 C0030024
    C0230078 FC200850
    48000019 D0030024
    8001000C 7C0803A6
    38210010 4E800020
    FC0100FA C0250080
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 3FAAAAAB
    3CA3D70A 3F800000
    9421FFC0 00000000
    C23C8330 00000026
    901F0068 811F0060
    48000061 80DF0000
    7D083378 911F0000
    7D0840F8 80DF0008
    7CC84038 911F0008
    811F0064 4800003D
    80DF0004 7D083378
    911F0004 71060040
    41820010 38C00002
    98DF005E 480000E0
    71060080 418200D8
    88DF005E 68C60002
    98DF005E 480000C8
    38E00000 71060800
    41820008 60E78000
    71060001 41820008
    60E70008 71064000
    41820008 60E70004
    71060002 41820008
    60E70001 71068000
    41820008 60E70002
    71060010 41820008
    60E70800 71060040
    41820008 60E70400
    71060008 41820008
    60E71080 71060020
    41820008 60E70180
    71062000 41820008
    60E70080 71060200
    41820008 60E72000
    71060080 41820008
    60E71040 71060004
    4182000C 60E70050
    48000004 71060400
    41820008 60E70090
    71061000 41820008
    60E70200 7CE83B78
    4E800020 00000000

Button Mapping​

Wii Remote & NunchukClassic ControllerGame Function
Wiimote HomeHome
Home Menu works as normal but remember to enable the pointer with L and use the correct stick for your code
Open/Close Home Button Menu
Wiimote D-PadD-PadUp: Change Camera
Left/Right: Change Tool
Down: Put Away Tool
Wiimote AAConfirm
Action
Wiimote BBCancel
Run
Pick Up Items
Wiimote PlusPlus
ZR
Open/Close Map
Next Tab
Wiimote MinusX
ZL
Open/Close Inventory
Previous Tab
Wiimote 1MinusTake Photo
Wiimote 2YOpen/Close Photos
Nunchuk Analog StickLeft StickMovement
Nunchuk CNot mapped
(use A instead)
Confirm
Action
Nunchuk ZRCancel
Run
Pick Up Items
Wiimote IR PointerL (toggle)
Left Stick or Right Stick
(depends on code used)
Move Cursor

General Notes​

  • Two code varieties for this one, choose whichever feels more natural to you. IR aiming is pretty important to City Folk, with all inventory manipulation being IR-based. If you choose the Left Stick code, the Left Stick toggles between movement and IR input, i.e. you can't move and point at the same time. However, there's rarely any advantage to this, as there's no real multitasking possible. If you choose the Right Stick code, all you can really do is move the stupid cursor around while you run. Whee. If you want my opinion, use the Left Stick code.

  • Where possible, I try to "intelligently" enable/disable the pointer mode. The player can always toggle it on/off with the L button, but some other actions (opening the Inventory, Map or Photos menus) will automatically enable pointer mode for you. Try to remember to exit these menus using the same button you used to open them: e.g. you can press X to open the inventory (pointer turns on automatically) then X again to close it (pointer turns off automatically). If you instead open the menu with X then close it with B, you'll still be in pointer mode, because you didn't close with X. In this case, you should press L to disable the pointer manually. I'm trying here.

  • If the IR pointer movement is too fast/slow for you, you can adjust it by editing the float 0.015 (3C75C28F) about halfway through the code. You could adjust it down to 0.01 (3C23D70A) for a slower cursor, or bump it up to 0.02 (3CA3D70A) for a faster cursor, or whatever other number feels appropriate. There's plenty of hex float converters online, I linked one in a previous post somewhere.

  • It's worth knowing that this game supports USB keyboards. Using an on-screen keyboard with an IR pointer is sort of acceptable, but using an on-screen keyboard with a pointer you control using an analog stick is a bad time. If you have a USB keyboard handy it will hugely improve the experience if you're looking to do any typing (e.g. writing letters or chatting with other players over network play). It doesn't have to be a special Wii keyboard or anything; I use a standard PC Logitech Unifying USB dongle in my Wii. Failing that, if you use the phone in your house you can change the keyboard settings to use an old-school mobile keyboard which you might find easier to use with an analog stick.

  • I got a specific request (elsewhere, not in this thread) for an option where the Right Stick pointer is always enabled, but personally I think it's kind of bad. The game changes a lot of things about how it works when you're pointing at the screen, which don't make sense when playing on a traditional controller. For example, pressing A now makes you walk toward the cursor instead of interacting with whatever is in front of you. Pointing at the screen also causes the HUD to display at all times, which means the screen is cluttered with on-screen buttons the whole time you're playing. If anybody here wants this version, I guess ask for it but I find it offers an inferior experience to either of the codes above and shouldn't really be considered an equal option against those.

Technical Notes​

This game has that same Super Paper Mario issue where the Home Button Menu causes a Classic Controller re-init every 64 frames. I solved it the same way, disabling getInfoAsync() from running. Thinking about it more since last time, I suspect this probably has something to do with checking things like the battery level that displays in the HBM. I do still allow getInfoAsync() to run when you first enter the HBM in both this and Paper Mario, so it's not like the HBM is running blind but if you just leave it open it might not correctly track the battery level or something pointless like that, I don't care.

Briefly, the code is: C2 to allow Classic Controller's left stick to be read for movement, C2 to disable the bad EXT error, 04 disable getInfoAsync(), C2 and C2 actually redirect analog reads to the Classic when needed, C2 custom read_kpad_dpd() (Left Stick code has an additional feature to prevent character movement while in pointer mode) and then the button injector gets inserted into KPADRead() in the last C2.

Credits​

  • mogchamp from the AC: Wiimmfi Folk Discord for advising on the button layout
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?
 

Lostbhoy

HEY YOU GUYS!
Member
Joined
Aug 23, 2009
Messages
2,750
Trophies
2
Age
44
Location
Scotland
XP
5,903
Country
United Kingdom
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..
Screenshot_20241002-234351.png

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.
 
Last edited by Lostbhoy,

tech_A_nina

Member
Newcomer
Joined
Aug 1, 2018
Messages
18
Trophies
0
XP
218
Country
United Kingdom
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.
I have read on the internet that super paper mario freezes a lot on wii and dolphin android emulators. What format does your game have?
 

tech_A_nina

Member
Newcomer
Joined
Aug 1, 2018
Messages
18
Trophies
0
XP
218
Country
United Kingdom
Never had it freeze on console or dolphin im afraid. Using usa nsp Rev 2.

I've already completed half the game with my own my mappings but this seemed way better!
Ok but how do you know it is rev 2? Is there a way to check that? After all they released so man revisions for this game. Maybe we both have the wrong ones. In that case it won't work
 

Lostbhoy

HEY YOU GUYS!
Member
Joined
Aug 23, 2009
Messages
2,750
Trophies
2
Age
44
Location
Scotland
XP
5,903
Country
United Kingdom
Ok but how do you know it is rev 2? Is there a way to check that? After all they released so man revisions for this game. Maybe we both have the wrong ones. In that case it won't work
Tells you in Dolphin. I've gave up now anyway, i'll just stick to tilting my phone and using touch as tippi!

Screenshot_20241003-113744.png
 
  • Like
Reactions: tech_A_nina

leejaclane

Well-Known Member
Member
Joined
Jul 25, 2022
Messages
198
Trophies
1
XP
533
Country
United States
Ok but how do you know it is rev 2? Is there a way to check that? After all they released so man revisions for this game. Maybe we both have the wrong ones. In that case it won't work
Dolphin or tools such as Wii Backup Manager can identify what revision a game is. The disc will typically have an indication on it as well, assuming you have the disc available.
 

tech_A_nina

Member
Newcomer
Joined
Aug 1, 2018
Messages
18
Trophies
0
XP
218
Country
United Kingdom
Ok thanks. Turns out I have rev1 for super paper mario pal which the cc code was for, but it freezes after I create a save file. Has anyone tested the classic controller patch already with success?
 

blue-spirit

Active Member
Newcomer
Joined
Jan 23, 2024
Messages
42
Trophies
0
Age
27
XP
150
Country
Germany
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.
 
Last edited by blue-spirit,
  • Like
Reactions: Vague Rant

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • Xdqwerty @ Xdqwerty:
    I SERIOUSLY need a brain
  • SylverReZ @ SylverReZ:
    WarioWare is referring to the GBA title, and I haven't really heard of that until now, well, it's been a while since I've ever played it.
  • Xdqwerty @ Xdqwerty:
    In order to have all that stuff everyone else has
  • Kirbydogs @ Kirbydogs:
    it's the little red bird who has either a long as nether to overworld tongue to a longer than yo mom flipped horizontally beak
    +2
  • Xdqwerty @ Xdqwerty:
    @SylverReZ, wanna talk about PS3? I'm smart enough for that
  • Xdqwerty @ Xdqwerty:
    And non poor enough for that also
  • Kirbydogs @ Kirbydogs:
    A PS3? Hmm, last time I remember playing that was like a year ago before my Uncle's broke
  • Kirbydogs @ Kirbydogs:
    Minecraft on it was fun
  • SylverReZ @ SylverReZ:
    Right, good luck with me on that. I'll be on a break from here for a while as I'm focusing on other stuff. L8ers! :)
    +1
  • Kirbydogs @ Kirbydogs:
    until microsoft wanted more money ;-;
  • SylverReZ @ SylverReZ:
    You too, seeya.
    +1
  • Kirbydogs @ Kirbydogs:
    todly lod
    +2
  • Xdqwerty @ Xdqwerty:
    I want braincells
  • Kirbydogs @ Kirbydogs:
    It's against the laws of a human body to not have any. Without them, you wouldn't be able to breath, read, write, walk, talk, hawk (tuah), slop, flock, and more.
    +1
  • Xdqwerty @ Xdqwerty:
    @Kirbydogs, ok good night lets stop talking about how much i want to die
  • Kirbydogs @ Kirbydogs:
    I was mostly joking about without them you wouldn't be able to fly lol
  • Xdqwerty @ Xdqwerty:
    I'm sure i'm not gonna sleep this night bc of how much i'm gonna be thinking about my self hatred
  • Kirbydogs @ Kirbydogs:
    ok.. that no good, but ok..
  • Kirbydogs @ Kirbydogs:
    no way google replaced the sound for a hawk as a "TUAH! TUAH TUAH! TU-TU-TU-TUAH!"
  • Kirbydogs @ Kirbydogs:
    ...hello?
    Kirbydogs @ Kirbydogs: ...hello?