Hacking New Classic Controller Hacks

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
I just took a look at Wii Play and like Excite Truck (another launch title), KPAD is quite different to how it works in basically anything else but launch titles. That's why you had trouble with the D-Pad emulation and stuff. The D-Pad assembly hack would need some changes to work on this or other launch titles. If you don't mind, I'll add Wii Play to my investigate list and see if I can add D-Pad emulation or Nunchuk support to your code as a collab.

Im totally fine with that 👍

Btw im going to scrap that one sonic game, would be VERY hard to do, like super hard. The game is already very tedious lol
 
Last edited by awesomeee,
  • Like
Reactions: Vague Rant

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,533
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,913
Country
I really appreciate this efforts!
I would really appreciate a Classic Controller hack for Sonic Riders Zero Gravity. For some reason the game supports the GameCube controller but not the Classic Controller and it is one of the cases that I think the motion controls are awful.
Zero Gravity is easily the most-requested game in the thread so far, it's definitely one I want to figure out. I've looked at it a couple of times already unsuccessfully, but it's not one I'm willing to give up on.

Great ! Please make hacks for all lego games. Will you modify Super Paper Mario to add shake support ? Thanks.
The Lego games might be a fun project to go through since they're all relatively simple. I don't think they ever need the accelerometer? Sometimes when I get really stuck on a hard project it's nice to have something easy to fall back on so I can feel like I'm making some progress, the Lego games could be an ideal candidate there.

I definitely plan to come back to Super Paper Mario, Little King's Story and Disney Universe to add the features they're missing. The last two are already completely playable, just missing conveniences like the IR pointer and Right Stick camera controls, so Paper Mario is a higher priority but I intend to get to all of them.

I appreciate your dedication and commitment to these hacks that you'd still make one for a game you straight up advise us not to play, lol.

Here's hoping the Kororinpa games are a possibility at some point.
Hahaha, yeah. Flip almost 100% got done because the very beginning of the game feels almost decent. Initially I was like "Wow, maybe the harsh reception wasn't deserved and a CC hack is all it needs to be a solid game." But then comes the collision issues, the buggy camera, the crashing and the busted save and it's just captainholt-ohno.gif.

The Kororinpa games are a cool idea. Probably a bit tougher than most because anything that makes use of fine tilting controls is more difficult to figure out than stuff that's just like "Do any kind of motion and the game will do a thing," but it would be neat to have a game like that playable with traditional controls.



Draw three?

H2x1_WiiWare_Uno_image1600w.jpg


Uno is the classic family card game where nobody quite agrees on what the rules are. Can you stack Draw 2s and Wild Draw 4s? Can you challenge a Wild Draw 4 if you think it was played early? Is the game over when one player wins or when everybody else loses? Uno for WiiWare says, "Sure, if you want." With a decent spread of toggle-able rules, local and online multiplayer (not any more, at least officially) and a weird Tournament mode that forces you to try all the game modes, it does pretty much everything you could want from a console port of a card game.

USAEURJPN

  1. Code:
    Classic Controller Support [Vague Rant]
    C2205438 0000001C
    90010024 2C040000
    408200D0 8803005C
    2C000002 408200C4
    9803005E 2C140001
    4082007C 48000015
    801BDCE0 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80650000
    28030001 40810018
    90A1000C 7C6803A6
    4E800021 80A1000C
    90650000 2C030001
    7FE3FB78 C0450004
    40820008 EC4200B2
    C0650008 C0030020
    C023006C FC211024
    4800002D D0030020
    C0030024 C0230070
    FC200850 48000019
    D0030024 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C025000C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    60000000 00000000
    C2204444 0000001A
    2C040002 408200C0
    38800000 71090800
    41820008 60E78000
    71090001 41820008
    60E70008 71094000
    41820008 60E70004
    71090002 41820008
    60E70001 71098000
    41820008 60E70002
    71090010 41820008
    60E70800 71090040
    41820008 60E70400
    71090008 41820008
    60E70100 71090020
    41820008 60E70200
    71092000 41820008
    60E70400 71090200
    41820008 60E70800
    71090080 41820008
    60E70800 71090004
    41820008 60E70400
    71090400 41820008
    60E70010 71091000
    41820008 60E71000
    7CC63B78 70C99FFF
    60000000 00000000
  2. Code:
    Classic Controller Support [Vague Rant]
    C2203E48 0000001C
    90010024 2C040000
    408200D0 8803005C
    2C000002 408200C4
    9803005E 2C140001
    4082007C 48000015
    801BC780 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80650000
    28030001 40810018
    90A1000C 7C6803A6
    4E800021 80A1000C
    90650000 2C030001
    7FE3FB78 C0450004
    40820008 EC4200B2
    C0650008 C0030020
    C023006C FC211024
    4800002D D0030020
    C0030024 C0230070
    FC200850 48000019
    D0030024 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C025000C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    60000000 00000000
    C2202E54 0000001A
    2C040002 408200C0
    38800000 71090800
    41820008 60E78000
    71090001 41820008
    60E70008 71094000
    41820008 60E70004
    71090002 41820008
    60E70001 71098000
    41820008 60E70002
    71090010 41820008
    60E70800 71090040
    41820008 60E70400
    71090008 41820008
    60E70100 71090020
    41820008 60E70200
    71092000 41820008
    60E70400 71090200
    41820008 60E70800
    71090080 41820008
    60E70800 71090004
    41820008 60E70400
    71090400 41820008
    60E70010 71091000
    41820008 60E71000
    7CC63B78 70C99FFF
    60000000 00000000
  3. Code:
    Classic Controller Support [Vague Rant]
    C2203AE8 0000001C
    90010024 2C040000
    408200D0 8803005C
    2C000002 408200C4
    9803005E 2C140001
    4082007C 48000015
    801BC470 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80650000
    28030001 40810018
    90A1000C 7C6803A6
    4E800021 80A1000C
    90650000 2C030001
    7FE3FB78 C0450004
    40820008 EC4200B2
    C0650008 C0030020
    C023006C FC211024
    4800002D D0030020
    C0030024 C0230070
    FC200850 48000019
    D0030024 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C025000C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    60000000 00000000
    C2202AF4 0000001A
    2C040002 408200C0
    38800000 71090800
    41820008 60E78000
    71090001 41820008
    60E70008 71094000
    41820008 60E70004
    71090002 41820008
    60E70001 71098000
    41820008 60E70002
    71090010 41820008
    60E70800 71090040
    41820008 60E70400
    71090008 41820008
    60E70100 71090020
    41820008 60E70200
    71092000 41820008
    60E70400 71090200
    41820008 60E70800
    71090080 41820008
    60E70800 71090004
    41820008 60E70400
    71090400 41820008
    60E70010 71091000
    41820008 60E71000
    7CC63B78 70C99FFF
    60000000 00000000
View attachment Uno_ClassicControllerHack_v1.0.zip

The archive above includes several tools, IPS patches and a Windows batch script to make applying this hack directly to a WAD relatively painless.

In addition to that ZIP, you will need:
  • an Uno (USA/EUR/JPN) WAD
  • common-key.bin
I will not help you find either of the above.

To use the script:
  1. extract the ZIP file somewhere sensible

  2. add the common-key.bin to that directory

  3. drag and drop your Uno WAD onto the apply-patch.bat file

    • alternatively, you can run the script directly and drag and drop the WAD into the window that opens or just type the path to your WAD manually

  4. answer the y/N prompt for whether you want to proceed with the patch

  5. once you're ready, the script will use the included tools to unpack, patch and repack a new WAD with your chosen patch

    • the original WAD will not be modified

  6. do whatever you normally would do with a WAD file
As a general rule, you shouldn't download and run random executables and batch scripts you find on the Internet. If you can't or don't want to run any of these on your machine, the IPS patches are included in the patches directory and you can figure out how to apply them in whatever way you feel comfortable. There is a readme.txt included with slightly more details on how to apply the patches in platform-agnostic terms (e.g. "Unpack your WAD").

Button Mapping​

Wii RemoteClassic ControllerFunction
HomeHome
Works normally
Open/Close Home Button Menu
D-PadD-PadMenus
Scroll Long Menus
AA
R
ZL
Menus
Confirm
Gameplay
Select
BB
L
ZR
Menus
Cancel
Gameplay
Challenge
1 & 2Y & XNot used?
PlusPlusGameplay
Pause
MinusMinusNot used?
IR PointerLeft StickMenus & Gameplay
Navigation

General Notes​

  • Not really much to say about this one. It's Uno, it does the thing. Almost all menus and gameplay are based around pointing and pressing A/B, so A/B are double-mapped all over the place. Personally, ZR feels more natural when I'm Challenging, but B is more natural as Cancel in menus. Play however you like, or make your own mapping in the Technical Notes.

    • I mapped 1, 2 and Minus because why not, there's a billion free buttons in this situation, so if there's some obscure menu I didn't see where it's useful to press Minus, that's covered.

Technical Notes​

Code breakdown:
  • C2 in calc_dpd_variable(): IR pointer emulation
  • C2 in read_kpad_button(): button injector
Code:
; read_kpad_button
; 80204444 for USA
; 80202E54 for EUR
; 80202AF4 for JPN
  cmpwi r4, 0x2
  bne- RETURN

  li r4, 0x0            ; i'm a wiimote

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

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

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

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

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

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

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

    CLASSIC_X:
      andi. r9, r8, 0x8
      beq- CLASSIC_Y
      ori r7, r7, 0x100     ; 2

    CLASSIC_Y:
      andi. r9, r8, 0x20
      beq- CLASSIC_L
      ori r7, r7, 0x200     ; 1

    CLASSIC_L:
      andi. r9, r8, 0x2000
      beq- CLASSIC_R
      ori r7, r7, 0x400     ; b

    CLASSIC_R:
      andi. r9, r8, 0x200
      beq- CLASSIC_ZL
      ori r7, r7, 0x800     ; a

    CLASSIC_ZL:
      andi. r9, r8, 0x80
      beq- CLASSIC_ZR
      ori r7, r7, 0x800     ; a

    CLASSIC_ZR:
      andi. r9, r8, 0x4
      beq- CLASSIC_PLUS
      ori r7, r7, 0x400     ; b

    CLASSIC_PLUS:
      andi. r9, r8, 0x400
      beq- CLASSIC_MINUS
      ori r7, r7, 0x10      ; plus

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

    CLASSIC_DONE:
      or r6, r6, r7

RETURN:
  andi. r9, r6, 0x9FFF
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
Good work navigating through WPADProbe! No updates on my wii music hack yet, i need to map shaking functions to the wiimote for now. Ill probably release the early hack that allows for button instruments soon 👍
 
  • Like
Reactions: Vague Rant

KeinesR

Well-Known Member
Member
Joined
Feb 14, 2020
Messages
176
Trophies
0
Age
34
XP
494
Country
Venezuela
I tried Lego Star Wars and Flips, both works perfect with wii u gamepad, no need to force classic controller.

Btw master @Vague Rant thanks to you i have discovered wii hidden gems. Many thanks as always
 
  • Like
Reactions: Vague Rant

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
@Vague Rant The reason i did wii play was so i could practice these hacks. Its fine if you dont want to fix the D pad emulation. After all this is a pretty wacky game lol

Re: twilight princess: That game actually has debug symbols lol. If you decide to look into it for any reason, theres a debugging map included on the disc to easily find KPAD functions 👍
Post automatically merged:

I also know you said Okami doesnt use kpad read at all, but it uses the nunchuk. I wonder how it reads the extension type and data then…

Perhaps this complicated low level hack would write in the data, or maybe okami just doesnt have enough debug symbols found yet, maybe it does use kpad read!
Post automatically merged:

I know for people that grew up with a SNES that the above is the preferred configuration and matches their own corresponding muscle-memory, but would it be rude of me to ask about a CC_A=jump + CC_B=run configuration for those of us that grew up with the GameBoy instead? (and later DS - I did use my DS as my primary GBA machine for quite a bit as well) I've only computer SMB1, SMB lost levels, and SMB2 for example in their Game Boy incarnations.

As an example, even though I own Contra 4 on cartridge, I actually can barely even play it very well because my own muscle-memory wants to have A=jump and B=shoot as was the case for all of the 2D Metroid games up to that point in time except for Super Metroid (which has built-in configurable controls anyway), and was similarly especially true if you played the NES or Game Boy versions of Contra.

Also, everyone I knew with game consoles (a neighbor near my old house, a neighbor near my current house, and my uncle) all had a Genesis/Mega Drive growing up rather than a SNES - I've literally only played a SNES a whopping one time which was a Best Buy demo unit running Yoshi's Island when I was like 4 years old.

EDIT: Oh lawl, looking at your more recent codes it seems that you've been already doing both AB/BY variations, so I'm guessing NSMBWii simply predated you making both?
I managed to actually make this possible!
I had to merge the disable extension error data and other code stuff into this new one that maps it like that. thanks @Vague Rant

A / B Jump / Run style controls (Awesomeee, Vague Rant, made the new cc hack and gave assembly info)

040DCDB0 38000000
041E6640 90BD1E98
041ECC0C 60000000
C21EB038 00000011
90010044 8803005C
2C000002 40820078
48000009 3F000000
7CA802A6 C0050000
80830000 70800060
4182001C 2C000060
41820014 2C000020
40820038 FC000050
48000030 80030064
2C000001 4182001C
C023007C FC200850
C0430080 FC21102A
EC000072 4800000C
C0230074 EC000072
D0030058 80010044
7C0803A6 38210040
4E800020 00000000
C21EB2E4 0000000B
C03E04DC 807E0004
70600080 4182001C
48000009 4059999A
7C8802A6 C0240000
D03E0060 4800002C
807E0000 70600080
4082000C 901E0060
48000018 C03E0060
2C140001 4082000C
FC000850 D01E0060
60000000 00000000
C21EBD28 0000001D
90010024 2C040000
408200D8 8803005C
2C000002 408200CC
48000015 801DD1D0
3FAAAAAB 3C75C28F
3F800000 7CA802A6
90A1000C 80030004
70008000 41820010
38000000 90030020
90030024 38C00002
98C3005E 81850000
7D8803A6 4E800021
2C030001 7FE3FB78
80A1000C C0450004
40820008 EC4200B2
C0650008 C0030020
C023006C FC211024
4800002D D0030020
C0030024 C0230070
FC200850 48000019
D0030024 80010024
7C0803A6 38210020
4E800020 FC0100FA
C025000C FC000800
4180000C FC000890
48000014 FC200850
FC000800 41810008
FC000890 4E800020
60000000 00000000
C21ECC38 00000012
4E800421 2C140001
40820084 4800000D
3F000000 00000000
7C6802A6 C0430000
C0630004 809EFFA0
80BEFFA4 80DEFFA8
C03E000C FC200850
39000004 48000021
C03E0010 39000001
48000015 909EFFA0
90BEFFA4 90DEFFA8
48000034 FC000A10
FC001040 4D800020
FC011840 41800008
5508083C 7CC04039
40820008 7CA54378
7C844378 7CC64079
4E800020 00000000
C21EAD34 00000021
2C040002 408200FC
38800000 71090800
41820008 60C68000
71090001 41820008
60C60002 71094000
41820008 60C60001
71090002 41820008
60C60008 71098000
41820008 60C60004
71090010 41820008
60C60100 71090040
41820008 60C60200
71090008 41820008
60C60080 71090020
41820008 60C60800
81230064 2C090001
41820038 71092000
41820008 60C60020
71090200 41820008
60C60040 71090080
41820008 60C60080
71090004 4182003C
60C60080 48000034
71092000 41820008
60C60080 71090200
41820008 60C60080
71090080 41820008
60C60020 71090004
41820008 60C60040
71090400 41820008
60C60010 71091000
41820008 60C61000
70C99FFF 00000000
 
Last edited by awesomeee,

Ro_

Member
Newcomer
Joined
Apr 18, 2020
Messages
21
Trophies
0
Age
22
XP
200
Country
Brazil
Hey! Very interesting, I didn't know people made that many Classic Controller codes. I actually did make Classic Controller Support for Mii Channel and I randomly came across with these codes. I'll compare it with my code to see the difference of the IR pointer, mine is completely self made but it is pretty accurate to the Wii Menu one.

Here's a showcase of the code plus the code:
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
Hey! Very interesting, I didn't know people made that many Classic Controller codes. I actually did make Classic Controller Support for Mii Channel and I randomly came across with these codes. I'll compare it with my code to see the difference of the IR pointer, mine is completely self made but it is pretty accurate to the Wii Menu one.

Here's a showcase of the code plus the code:

Good job! How did you make the code? Did you use the debug map and find KPADRead like this thread does?
Also, hello ro, i seen you on youtube a lot LMAO
 

Felold

Active Member
Newcomer
Joined
Sep 25, 2022
Messages
41
Trophies
0
Age
33
Location
Metro City
XP
259
Country
Brazil
The work you guys are doing on these games is trully AMAZING! Excite Truck is one of my favorite Wii games ever and I'm happy to finally be able to play it with normal controls. Thank you guys!!!

I have one suggestion of title; Dragon Blade Wrath of Fire.
The wii don't have much of fantasy hack 'n slash games, and this one has some qualities; the music is good, I like the stages and their atmosphere, the visuals has some charm to it too.
What makes this game bad are the motion controls, they are very imprecise, if those could get fixed this game would be elevated to something more.

You slash in different directions with motion, if those could be mapped like;
X (upward slash)
B (Down slash)
Y (Left slash)
A (Right Slash)
And the others at the shoulder buttons, like fierce and block.


Thank you very much again, you guys are saving so many games, I'm really impressed and grateful for the work you are doing.
 
  • Like
Reactions: Vague Rant

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
Zero Gravity is easily the most-requested game in the thread so far, it's definitely one I want to figure out. I've looked at it a couple of times already unsuccessfully, but it's not one I'm willing to give up on.
Is there any good source where you could ask people about emulating the cc as a gamecube pad? I wonder where you learned how to make these hacks, maybe whoever taught you it also has knowledge about GCN library! (GCN pad code)

You should also try the horizontal remote way, i know its unsatisfying, but why not try?
Post automatically merged:

Of course, some games (like Okami) just straight up do not use KPADRead() at all. In that case you'd have to do a low-level hack in WPAD, and I don't really know anything about that. I can sort of do button injections in WPAD, but how the more complicated stuff like accelerometer, IR pointer and even the analog sticks work in WPAD, no idea. (If anybody's hoping for Okami, sorry, that's not happening from me for that reason. Sad about that one.)
@Vague Rant I know you said this, so i decided to look into it, and im very glad to report that that may not be true! I found an andi. r0, r7, 0x9FFF where the buttons are usually injected!

You should look into it!
1734234046329.png
 
Last edited by awesomeee,

Vague Rant

Deceptively cute
OP
Member
Joined
Aug 7, 2008
Messages
2,533
Trophies
2
Location
Melbourne
Website
vaguerant.tumblr.com
XP
3,913
Country
The work you guys are doing on these games is trully AMAZING! Excite Truck is one of my favorite Wii games ever and I'm happy to finally be able to play it with normal controls. Thank you guys!!!

I have one suggestion of title; Dragon Blade Wrath of Fire.
The wii don't have much of fantasy hack 'n slash games, and this one has some qualities; the music is good, I like the stages and their atmosphere, the visuals has some charm to it too.
What makes this game bad are the motion controls, they are very imprecise, if those could get fixed this game would be elevated to something more.

You slash in different directions with motion, if those could be mapped like;
X (upward slash)
B (Down slash)
Y (Left slash)
A (Right Slash)
And the others at the shoulder buttons, like fierce and block.


Thank you very much again, you guys are saving so many games, I'm really impressed and grateful for the work you are doing.
I've never heard of this game at all, it sounds pretty unique. Getting different directions of swings can be somewhat complicated since it involves a lot of accelerometer theory stuff around what the values should look like for different motions, but I'll definitely add it to my list and see if I can figure it out.

Is there any good source where you could ask people about emulating the cc as a gamecube pad? I wonder where you learned how to make these hacks, maybe whoever taught you it also has knowledge about GCN library! (GCN pad code)

You should also try the horizontal remote way, i know its unsatisfying, but why not try?
Unfortunately, I'm not aware of anyone who has experience in emulating the GameCube pad. I learned to do these by looking at crediar's Classic Controller hacks. You might have noticed in CodeWrite there's an arrow pointing the opposite direction to the build arrow, which turns Gecko C2 codes back into assembly. Doing that, it was possible to see what crediar's code looked like. Then I was able to use Kirby's Return to Dream Land (which includes a debug symbol map) to see what functions crediar was patching and follow along how that implementation worked. From there I eventually ended up writing my own button injector, IR pointer emulation, etc. but the process initially was just having somebody else's example to observe.

I also know you said Okami doesnt use kpad read at all, but it uses the nunchuk. I wonder how it reads the extension type and data then…

Perhaps this complicated low level hack would write in the data, or maybe okami just doesnt have enough debug symbols found yet, maybe it does use kpad read!
@Vague Rant I know you said this, so i decided to look into it, and im very glad to report that that may not be true! I found an andi. r0, r7, 0x9FFF where the buttons are usually injected!

You should look into it!
View attachment 475946
All of the data that KPAD has access to comes from WPAD, the low-level library, so nothing except complexity is stopping anyone from ignoring KPAD entirely and using the low level controller functions to capture input, extension controller type, etc. For example, WPADProbe() reports the controller extension type, so that can be used directly without having to go via KPAD to get it. That is basically how Okami handles all Wiimote and Nunchuk inputs, it uses WPAD directly instead of asking KPAD to go get it and translate the result into readable terms.

All games have the entire KPAD library included, but that doesn't mean they're using it. For Okami, the game doesn't make use of KPAD at all in gameplay, although technically, the Home Button Menu does use KPAD. Rather than every developer needing to separately program their own copy of the Home Button Menu, Nintendo included a library in the SDK which did all of the Home Button Menu stuff, including dealing with input using KPAD. In Okami, that's the only time that KPAD is used. You can try setting a breakpoint on the address you found and you'll see that it never gets executed. The exception there is when you press the Home button and controls get handed back to the HBM lib.

tl;dr: It doesn't matter so much what code exists, what matters is whether it's being executed. Code that isn't being executed isn't doing anything.



icariantitle-crop.jpg


Over the Top's NyxQuest: Kindred Spirits is a 2.5D WiiWare puzzle-platformer with elements of a physics game. Taking control of Nyx, a winged being from Mount Olympus, players are "assisted" by Zeus, represented using the infra-red pointer. Gameplay thus revolves around simultaneous platforming and environment manipulation as you seek to rescue Icarus and discover why the Sun's rays have become so overbearing, melting not just Icarus's wings but civilization itself. For unseen from the top of Mount Olympus, the Earth has devolved into a barren, desert wasteland.
In addition to the Classic Controller code, there's also a Disable Copy Filter code here which sharpens up the visuals slightly.

USA/EURJPN

  1. Code:
    Classic Controller Support [Vague Rant]
    C2110868 00000002
    2C040001 41820008
    2C040002 00000000
    C2110B90 00000002
    28000001 41820008
    28000002 00000000
    C2110F38 00000002
    28000001 41820008
    28000002 00000000
    C2160610 0000001C
    90010024 2C040000
    408200D0 8803005C
    2C000002 408200C4
    9803005E 2C190001
    4082007C 48000015
    8014BCE4 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80650000
    28030001 40810018
    90A1000C 7C6803A6
    4E800021 80A1000C
    90650000 2C030001
    7FE3FB78 C0450004
    40820008 EC4200B2
    C0650008 C0030020
    C0230074 FC211024
    4800002D D0030020
    C0030024 C0230078
    FC200850 48000019
    D0030024 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C025000C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    60000000 00000000
    041614DC 7FC3F378
    C215F66C 0000001A
    2C040002 408200C0
    38800001 71090800
    41820008 60E78000
    71090001 41820008
    60E70008 71094000
    41820008 60E70004
    71090002 41820008
    60E70001 71098000
    41820008 60E70002
    71090010 41820008
    60E70800 71090040
    41820008 60E70800
    71090008 41820008
    60E72000 71090020
    41820008 60E72000
    71092000 41820008
    60E70800 71090200
    41820008 60E70800
    71090080 41820008
    60E72000 71090004
    41820008 60E70400
    71090400 41820008
    60E70010 71091000
    41820008 60E71000
    7CC63B78 70C99FFF
    60000000 00000000
    Code:
    Disable Copy Filter [Vague Rant]
    04135840 48000040
  2. Code:
    Classic Controller Support [Vague Rant]
    C2112010 00000002
    2C040001 41820008
    2C040002 00000000
    C2112338 00000002
    28000001 41820008
    28000002 00000000
    C21126E0 00000002
    28000001 41820008
    28000002 00000000
    C216EDC8 0000001C
    90010024 2C040000
    408200D0 8803005C
    2C000002 408200C4
    9803005E 2C160001
    4082007C 48000015
    8014F2E0 3FAAAAAB
    3D4CCCCD 3F800000
    7CA802A6 80650000
    28030001 40810018
    90A1000C 7C6803A6
    4E800021 80A1000C
    90650000 2C030001
    7FE3FB78 C0450004
    40820008 EC4200B2
    C0650008 C0030020
    C0230074 FC211024
    4800002D D0030020
    C0030024 C0230078
    FC200850 48000019
    D0030024 80010024
    7C0803A6 38210020
    4E800020 FC0100FA
    C025000C FC000800
    4180000C FC000890
    48000014 FC200850
    FC000800 41810008
    FC000890 4E800020
    60000000 00000000
    0416FD18 7FC3F378
    C216DC84 0000001A
    2C040002 408200C0
    38800001 71000800
    41820008 60E78000
    71000001 41820008
    60E70008 71004000
    41820008 60E70004
    71000002 41820008
    60E70001 71008000
    41820008 60E70002
    71000010 41820008
    60E70800 71000040
    41820008 60E70800
    71000008 41820008
    60E72000 71000020
    41820008 60E72000
    71002000 41820008
    60E70800 71000200
    41820008 60E70800
    71000080 41820008
    60E72000 71000004
    41820008 60E70400
    71000400 41820008
    60E70010 71001000
    41820008 60E71000
    7CC63B78 70C09FFF
    60000000 00000000
    Code:
    Disable Copy Filter [Vague Rant]
    04137BD0 48000040
View attachment NyxQuest_ClassicControllerHack_v1.0.zip

The archive above includes several tools, IPS patches and a Windows batch script to make applying this hack directly to a WAD relatively painless.

In addition to that ZIP, you will need:
  • a NyxQuest (USA/EUR/JPN) WAD, any revision
  • common-key.bin
I will not help you find either of the above.

To use the script:
  1. extract the ZIP file somewhere sensible

  2. add the common-key.bin to that directory

  3. drag and drop your NyxQuest WAD onto the apply-patch.bat file

    • alternatively, you can run the script directly and drag and drop the WAD into the window that opens or just type the path to your WAD manually

  4. answer the y/N prompts for which patches you want to apply

  5. once you're ready, the script will use the included tools to unpack, patch and repack a new WAD with your chosen patch

    • the original WAD will not be modified

  6. do whatever you normally would do with a WAD file
As a general rule, you shouldn't download and run random executables and batch scripts you find on the Internet. If you can't or don't want to run any of these on your machine, the IPS patches are included in the patches directory and you can figure out how to apply them in whatever way you feel comfortable. There is a readme.txt included with slightly more details on how to apply the patches in platform-agnostic terms (e.g. "Unpack your WAD").

Button Mapping​

Wii Remote/NunchukClassic ControllerFunction
Wiimote HomeHome
Remember that the Right Stick controls your pointer
Open/Close Home Button Menu
Wiimote D-PadD-PadNot used?
Wiimote AA
B
L
R
Menus
Confirm
Gameplay
Jump
Wiimote BZRMenus
Cancel
Gameplay
Use Zeus Powers
Wiimote 1 & 2Not mappedNot used?
Wiimote PlusPlusGameplay
Pause
Wiimote MinusMinusNot used?
Wiimote PointerRight StickMenus
Navigation
Gameplay
Aim Zeus Powers
Nunchuk StickLeft StickGameplay
Movement
Nunchuk CNot mappedNot used?
Nunchuk ZY
X
ZL
Gameplay
Run
Glide

General Notes​

  • Due to its heavy reliance on the IR pointer, I'd say this is a case where the original infra-red aiming does provide more immediate and intuitive control over Zeus's powers than this hack, where the pointer is handled by the Right Stick. That's clearly how the game was intended to be played, but if you're unwilling or unable to use that scheme, here's an alternative.

    • If you're not using any powers at the moment, you can play using the face buttons (Y/B or X/A) to run, jump and glide, but the action buttons are also available on L/R and Z. This way, when the face buttons are inaccessible because your right thumb is on the Right Stick (which it usually is), all actions are still available to you.

  • NyxQuest had a bit of a complicated history of getting to WiiWare. Originally published in Europe as Icarian: Kindred Spirits, Over the Top were sent a cease and desist by GameForge, the makers of a free-to-play strategy game called Ikariam. As a result, they were forced to rename the game, with a Shop Channel update changing the title from Icarian to NyxQuest. By the time the game reached the US and Japan, this rebrand had already occurred, so the game was only ever available as NyxQuest in those regions.

    • What's much lesser-known is that there was an intervening title between Icarian and NyxQuest. According to GameSutra coverage in 2011, another title the team considered was Icaryx. In fact, I can confirm (for the first time?) that they went much further than considering this title. A rebrand of the game as Icaryx: Kindred Spirits was completed and submitted to Nintendo for release. Never published to the Shop Channel, this build was quickly superseded by the third title, NyxQuest: Kindred Spirits.

      Ultimately, this means there are three EUR builds:

      • v3 Icarian: Kindred Spirits
      • v256 Icaryx: Kindred Spirits
      • v257 NyxQuest: Kindred Spirits

      The Classic Controller hack will work on any of these builds.

Technical Notes​

Code breakdown:
  • C2: bypass Nunchuk error on reconnection
  • C2: still read the Nunchuk Stick even if extension is Classic
  • C2: bypass Nunchuk error on initial connection
  • C2 in calc_dpd_variable(): IR pointer emulation
  • 04 in read_kpad_ext(): redirect Classic Left Stick into Nunchuk Stick field
  • C2 in read_kpad_button(): button injector

USA/EURJPN

  1. Code:
    ; read_kpad_button
    ; 8015F66C for USA/EUR
      cmpwi r4, 0x2
      bne- RETURN
    
      li r4, 0x1            ; i'm a nunchuk
    
        CLASSIC_HOME:
          andi. r9, r8, 0x800
          beq- CLASSIC_UP
          ori r7, r7, 0x8000    ; home
    
        CLASSIC_UP:
          andi. r9, r8, 0x1
          beq- CLASSIC_DOWN
          ori r7, r7, 0x8       ; up (v) / left (h)
    
        CLASSIC_DOWN:
          andi. r9, r8, 0x4000
          beq- CLASSIC_LEFT
          ori r7, r7, 0x4       ; down (v) / right (h)
    
        CLASSIC_LEFT:
          andi. r9, r8, 0x2
          beq- CLASSIC_RIGHT
          ori r7, r7, 0x1       ; left (v) / down (h)
    
        CLASSIC_RIGHT:
          andi. r9, r8, 0x8000
          beq- CLASSIC_A
          ori r7, r7, 0x2       ; right (v) / up (h)
    
        CLASSIC_A:
          andi. r9, r8, 0x10
          beq- CLASSIC_B
          ori r7, r7, 0x800     ; a
    
        CLASSIC_B:
          andi. r9, r8, 0x40
          beq- CLASSIC_X
          ori r7, r7, 0x800     ; a
    
        CLASSIC_X:
          andi. r9, r8, 0x8
          beq- CLASSIC_Y
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_Y:
          andi. r9, r8, 0x20
          beq- CLASSIC_L
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_L:
          andi. r9, r8, 0x2000
          beq- CLASSIC_R
          ori r7, r7, 0x800     ; a
    
        CLASSIC_R:
          andi. r9, r8, 0x200
          beq- CLASSIC_ZL
          ori r7, r7, 0x800     ; a
    
        CLASSIC_ZL:
          andi. r9, r8, 0x80
          beq- CLASSIC_ZR
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_ZR:
          andi. r9, r8, 0x4
          beq- CLASSIC_PLUS
          ori r7, r7, 0x400     ; b
    
        CLASSIC_PLUS:
          andi. r9, r8, 0x400
          beq- CLASSIC_MINUS
          ori r7, r7, 0x10      ; plus
    
        CLASSIC_MINUS:
          andi. r9, r8, 0x1000
          beq- CLASSIC_DONE
          ori r7, r7, 0x1000    ; minus
    
        CLASSIC_DONE:
          or r6, r6, r7
    
    RETURN:
      andi. r9, r6, 0x9FFF
  2. Code:
    ; read_kpad_button
    ; 8016DC84 for JPN
      cmpwi r4, 0x2
      bne- RETURN
    
      li r4, 0x1            ; i'm a nunchuk
    
        CLASSIC_HOME:
          andi. r0, r8, 0x800
          beq- CLASSIC_UP
          ori r7, r7, 0x8000    ; home
    
        CLASSIC_UP:
          andi. r0, r8, 0x1
          beq- CLASSIC_DOWN
          ori r7, r7, 0x8       ; up (v) / left (h)
    
        CLASSIC_DOWN:
          andi. r0, r8, 0x4000
          beq- CLASSIC_LEFT
          ori r7, r7, 0x4       ; down (v) / right (h)
    
        CLASSIC_LEFT:
          andi. r0, r8, 0x2
          beq- CLASSIC_RIGHT
          ori r7, r7, 0x1       ; left (v) / down (h)
    
        CLASSIC_RIGHT:
          andi. r0, r8, 0x8000
          beq- CLASSIC_A
          ori r7, r7, 0x2       ; right (v) / up (h)
    
        CLASSIC_A:
          andi. r0, r8, 0x10
          beq- CLASSIC_B
          ori r7, r7, 0x800     ; a
    
        CLASSIC_B:
          andi. r0, r8, 0x40
          beq- CLASSIC_X
          ori r7, r7, 0x800     ; a
    
        CLASSIC_X:
          andi. r0, r8, 0x8
          beq- CLASSIC_Y
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_Y:
          andi. r0, r8, 0x20
          beq- CLASSIC_L
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_L:
          andi. r0, r8, 0x2000
          beq- CLASSIC_R
          ori r7, r7, 0x800     ; a
    
        CLASSIC_R:
          andi. r0, r8, 0x200
          beq- CLASSIC_ZL
          ori r7, r7, 0x800     ; a
    
        CLASSIC_ZL:
          andi. r0, r8, 0x80
          beq- CLASSIC_ZR
          ori r7, r7, 0x2000    ; z
    
        CLASSIC_ZR:
          andi. r0, r8, 0x4
          beq- CLASSIC_PLUS
          ori r7, r7, 0x400     ; b
    
        CLASSIC_PLUS:
          andi. r0, r8, 0x400
          beq- CLASSIC_MINUS
          ori r7, r7, 0x10      ; plus
    
        CLASSIC_MINUS:
          andi. r0, r8, 0x1000
          beq- CLASSIC_DONE
          ori r7, r7, 0x1000    ; minus
    
        CLASSIC_DONE:
          or r6, r6, r7
    
    RETURN:
      andi. r0, r6, 0x9FFF
 
Last edited by Vague Rant,

tech_A_nina

Active Member
Newcomer
Joined
Aug 1, 2018
Messages
38
Trophies
0
XP
344
Country
United Kingdom
I was thinking about "Nyx Quest" two days ago and now it's playable with a cc hack. Thank you very much for that. Is "Lost winds" on your list too? Might be easy to do, because it just have the swing wiimote action
 
  • Like
Reactions: Vague Rant

NestorM

Well-Known Member
Member
Joined
Feb 19, 2021
Messages
113
Trophies
1
Age
40
XP
1,156
Country
France
@Vague Rant Thank you for those wiiware hacks.
Again, i have two questions LOL.

I have sneek on my Wii u. Is it possible To autoboot sneek vwii and launch a vwii nand title launcher through sneek emulated nand ?

Do you know if there is a kind of database or something with all wii games copy filter/dithering hexadecimal patterns ? Or Maybe gecko codes To disable it ?
The fix mentionned on the 710 post in this thread https://gbatemp.net/threads/possible-to-disable-the-wiis-de-flicker-filter.477163/post-10479236 doesn't work for all games. Some of those have different copy filter patterns.
Thanks.
 
  • Like
Reactions: Vague Rant

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
All of the data that KPAD has access to comes from WPAD, the low-level library, so nothing except complexity is stopping anyone from ignoring KPAD entirely and using the low level controller functions to capture input, extension controller type, etc. For example, WPADProbe() reports the controller extension type, so that can be used directly without having to go via KPAD to get it. That is basically how Okami handles all Wiimote and Nunchuk inputs, it uses WPAD directly instead of asking KPAD to go get it and translate the result into readable terms.

All games have the entire KPAD library included, but that doesn't mean they're using it. For Okami, the game doesn't make use of KPAD at all in gameplay, although technically, the Home Button Menu does use KPAD. Rather than every developer needing to separately program their own copy of the Home Button Menu, Nintendo included a library in the SDK which did all of the Home Button Menu stuff, including dealing with input using KPAD. In Okami, that's the only time that KPAD is used. You can try setting a breakpoint on the address you found and you'll see that it never gets executed. The exception there is when you press the Home button and controls get handed back to the HBM lib.

tl;dr: It doesn't matter so much what code exists, what matters is whether it's being executed. Code that isn't being executed isn't doing anything.

Ah, okay. Sorry! I had no idea.
I think it would be more productive to work on wii music then wii play lol. Im currently stuck on accelerometer data, but ill challenge myself to get it working!
Post automatically merged:

Hi guys, there sadly wont be a classic controller hack for the forecast and news channel.
This is because they might be using low level wpad code or other code. The code always makes the channels boot to a black screen. Sad about these ones.
Post automatically merged:

mii IMAGE.png

The Mii Channel was made by nintendo. wow.

This hack may or may not work on other regions.

I have not been able to get left stick pointer emulation working. I will try and get it working, but no luck so far.


Classic Controller Hack (awesomeee, Vague Rant, made PPC assembly example)

C21E14A8 00000024
90010024 2C040000
40820110 8803005C
2C000002 40820104
48000021 80196E04
3FAAAAAB 3C75C28F
00000000 00000000
3DCCCCCD 3F800000
7CA802A6 90A1000C
5727083C 38E7000C
C0030074 FC000210
C0230078 FC200A10
FC00082A C0450014
FC001040 4180000C
38C0012C 48000014
7CC53AAE 28060000
408100A0 38C6FFFF
7CC53B2E 38C00002
98C3005E 81850000
7D8803A6 4E800021
2C030001 7FE3FB78
80A1000C C0450004
40820008 EC4200B2
C0650008 C0030020
C0230074 FC211024
4800002D D0030020
C0030024 C0230078
FC200850 48000019
D0030024 80010024
7C0803A6 38210020
4E800020 FC0100FA
C0250018 FC000800
4180000C FC000890
48000014 FC200850
FC000800 41810008
FC000890 4E800020
60000000 00000000
C21E2A50 00000019
2C040002 408200B8
71200800 41820008
60E78000 71200001
41820008 60E70008
71204000 41820008
60E70004 71200002
41820008 60E70001
71208000 41820008
60E70002 71200010
41820008 60E70800
71200040 41820008
60E70400 71200008
41820008 60E70100
71200020 41820008
60E70200 71202000
41820008 60E70400
71200200 41820008
60E70800 71200080
41820008 60E70C00
71200004 41820008
60E70C00 71200400
41820008 60E70010
71201000 41820008
60E71000 70E09FFF
60000000 00000000

This hack was pretty simple to make, lol

@Vague Rant I can credit you for the PPC assembly example, do you want credit? Either way is fine.
 
Last edited by awesomeee,

Ro_

Member
Newcomer
Joined
Apr 18, 2020
Messages
21
Trophies
0
Age
22
XP
200
Country
Brazil
Good job! How did you make the code? Did you use the debug map and find KPADRead like this thread does?
Also, hello ro, i seen you on youtube a lot LMAO
There is no debug map. I used my USB Gecko to search for the Wiimote IR pointer coordinates until I found it, from there, I was able to find the inputs. Then I wrote code from there. It accounts for Wiimote and stuff, so it works properly if Classic isn't attached
Post automatically merged:

About the Forecast channel and such, if the code is similar to Mii Channel, then my code could be ported
 
Last edited by Ro_,

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
There is no debug map. I used my USB Gecko to search for the Wiimote IR pointer coordinates until I found it, from there, I was able to find the inputs. Then I wrote code from there. It accounts for Wiimote and stuff, so it works properly if Classic isn't attached
Post automatically merged:

About the Forecast channel and such, if the code is similar to Mii Channel, then my code could be ported
Sadly the forecast and news was released later on after the wii released. I think the code has big differences.
 

Ro_

Member
Newcomer
Joined
Apr 18, 2020
Messages
21
Trophies
0
Age
22
XP
200
Country
Brazil
I can look into it soon.
Post automatically merged:

Got it working in News Channel, now to do it in Forecast. Basically reusing the Mii Channel code and changing address. Also, that code sucks, it can for sure be made better like how you guys are doing

EDIT: I mean, it isn't that bad, it's big but very accurate to Wii Menu, so it is worth it
 
Last edited by Ro_,

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
Also, that code sucks, it can for sure be made better like how you guys are doing

EDIT: I mean, it isn't that bad, it's big but very accurate to Wii Menu, so it is worth it
Its fine, its not a big code anyways lol
I did manage to map the ZL and ZR to A/B though which is pretty cool, anyhoo nice job with the news channel! You should post it here when its done.

How can i improve the mii channel code?
 

Ro_

Member
Newcomer
Joined
Apr 18, 2020
Messages
21
Trophies
0
Age
22
XP
200
Country
Brazil
Hmmmmmm, I'm not sure. The way I do it makes me feel like there's another way to do it. I manipulate the IR pointer location via controller stick. For everything to work properly, I make sure to check if the pointer doesn't go outside of the screen, also making checks for Wiimote so a regular Wiimote can work as it should, but when Classic is attached and Wiimote is not pointing to screen, the Classic code runs, plus other improvements such as making the channel buttons always on screen if Classic is attached and Wiimote is outside of screen. Also changing the pointer rotation.

I did my best to make it as accurate to the Wii Menu - speed, pointer rotation, screen boundaries etc. Rn I'm tweaking the News Channel code because it seems like the screen boundaries and pointer speed behaves differently

In another time, I could probably see how the code you guys are using as base works and use it
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
141
Trophies
0
XP
190
Country
United States
Hmmmmmm, I'm not sure. The way I do it makes me feel like there's another way to do it. I manipulate the IR pointer location via controller stick. For everything to work properly, I make sure to check if the pointer doesn't go outside of the screen, also making checks for Wiimote so a regular Wiimote can work as it should, but when Classic is attached and Wiimote is not pointing to screen, the Classic code runs, plus other improvements such as making the channel buttons always on screen if Classic is attached and Wiimote is outside of screen. Also changing the pointer rotation.

I did my best to make it as accurate to the Wii Menu - speed, pointer rotation, screen boundaries etc. Rn I'm tweaking the News Channel code because it seems like the screen boundaries and pointer speed behaves differently

In another time, I could probably see how the code you guys are using as base works and use it
As cool as all those features are, the way we do it is different then your method, making some features impossible by your method.

We usually use dolphin's debug symbols, find where KPADRead is, and then find where the buttons will be injected into the wii remote. Go to page 5 to find the CC hack guide @Ro_

@Vague Rant You should talk with this guy, he has a lot of knowledge from what i can tell!

To disable extension checks, check page 8
Post automatically merged:

Do you have any knowledge on low level wpad data Ro? Mario strikers is one of those games that uses low level wpad controller reports, and any knowledge would be helpful!
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    Kirbydogs @ Kirbydogs: @Xdqwerty sleep well +1