Hacking New Classic Controller Hacks

Honkinghard

Active Member
Newcomer
Joined
Jun 4, 2018
Messages
26
Trophies
0
XP
341
Country
United States
Oh, right. Yeah, that's why I'm asking in here.
The WAD seems fine as verified by Dolphin, but wouldn't patch. Hence why I'm asking if Vague had a chance to investigate.
 

Davidtop10

New Member
Newbie
Joined
Sep 20, 2024
Messages
3
Trophies
0
Age
30
XP
59
Country
United States
Sorry for the simple question, but how do you make them work ?
I've tried to put the codes on the cheat.txt and it doesn't show up on ocarina,

Should the file be in gct format? If so how do you make the game read the gct file, I've Googled this and found nothing
Post automatically merged:

Sorry for the simple question, but how do you make them work ?
I've tried to put the codes on the cheat.txt and it doesn't show up on ocarina,

Should the file be in gct format? If so how do you make the game read the gct file, I've Googled this and found nothing
Nevermind guys, I didn't know on real hardware all you need is cheatmanager homebrew app to change the file from .txt to gct .

Edit: if you guys do requests, can I request for the shake feature in one piece grand adventure to be changed to a button? the game uses with nunchuck and the shaking is with the remote, and thanks for everything
 
Last edited by Davidtop10,

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
180
Trophies
0
XP
245
Country
United States
Update #2 on the Wiimote remapper: I tried Wii Music, a game that uses KPADRead and it still does not work. Very strange
Post automatically merged:

Sorry for the simple question, but how do you make them work ?
I've tried to put the codes on the cheat.txt and it doesn't show up on ocarina,

Should the file be in gct format? If so how do you make the game read the gct file, I've Googled this and found nothing
Post automatically merged:


Nevermind guys, I didn't know on real hardware all you need is cheatmanager homebrew app to change the file from .txt to gct .

Edit: if you guys do requests, can I request for the shake feature in one piece grand adventure to be changed to a button? the game uses with nunchuck and the shaking is with the remote, and thanks for everything
Is there a Wiimote or Nunchuk button the game does not use at all? It might be possible
 
Last edited by awesomeee,
  • Like
Reactions: Davidtop10

Davidtop10

New Member
Newbie
Joined
Sep 20, 2024
Messages
3
Trophies
0
Age
30
XP
59
Country
United States
Update #2 on the Wiimote remapper: I tried Wii Music, a game that uses KPADRead and it still does not work. Very strange
Post automatically merged:


Is there a Wiimote or Nunchuk button the game does not use at all? It might be possible
Yes it doesn't use "2", is there an app so I can do it myself, don't wanna be a burden
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
180
Trophies
0
XP
245
Country
United States
Yes it doesn't use "2", is there an app so I can do it myself, don't wanna be a burden
It might be possible, but you will need to find where buttons are injected in your game, and it also complicated by the fact that you would need to force fake accelerometer data to load, which is 100% the hardest part of these hacks. Do you have any knowledge of making these hacks?
 

Davidtop10

New Member
Newbie
Joined
Sep 20, 2024
Messages
3
Trophies
0
Age
30
XP
59
Country
United States
It might be possible, but you will need to find where buttons are injected in your game, and it also complicated by the fact that you would need to force fake accelerometer data to load, which is 100% the hardest part of these hacks. Do you have any knowledge of making these hacks?
I have 0 knowledge about this tbh. I've tried to search on YouTube but didn't find English friendly content
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
180
Trophies
0
XP
245
Country
United States
Hello! I am working on a video guide on how to make these hacks. It will probably be finished today or tomorrow 👍
Post automatically merged:

Hello @Vague Rant, I have made a small video guide on making these hacks. It isnt much, but I tried my best, It also lacks some quality, but here, lol:


Im going to make a follow up video later on for sure 👍
 
Last edited by awesomeee,

_47iscool

Hacker
Member
Joined
Nov 18, 2013
Messages
815
Trophies
1
XP
1,468
Country
United States
View attachment 458554

I want to be clear off the bat that this is not a Classic Controller hack, but I'm not starting a new thread for "I got rid of the Nunchuk notice on a game that supports the GameCube controller." On startup, this game checks whether there is a Nunchuk or Classic Controller in the Wiimote. Notably, it doesn't even check if there is a Wiimote connected, it goes straight to checking whether there's a valid extension controller. Good one. This is fine if you want to play with Nunchuk or Classic Controller, but it means you need a second controller handy just to get to the part with GameCube controller support. Also, it's Resident Evil 4, I'm not doing an intro where I explain what Resident Evil 4 is. Highlight for @lauty29 who noted this issue's existence.

USAEuropeGermanyJapan (Rev 0)Japan (Rev 1)

  1. Code:
    Skip Nunchuk Splash Screen [Vague Rant]
    0416B260 38600001
    
    Skip All Splash Screens [Vague Rant]
    0416B088 38000001
  2. Code:
    Skip Nunchuk Splash Screen [Vague Rant]
    0416B094 38600001
    
    Skip All Splash Screens [Vague Rant]
    0416AEBC 38000001
  3. Code:
    Skip Nunchuk Splash Screen [Vague Rant]
    0416B0C8 38600001
    
    Skip All Splash Screens [Vague Rant]
    0416AEF0 38000001
  4. Code:
    Skip Nunchuk Splash Screen [Vague Rant]
    0416ADDC 38600001
    
    Skip All Splash Screens [Vague Rant]
    0416AC04 38000001
  5. Code:
    Skip Nunchuk Splash Screen [Vague Rant]
    0416B1E8 38600001
    
    Skip All Splash Screens [Vague Rant]
    0416AD28 38000001

General Notes​

  • There's two codes here. The first skips over just the "insert a Nunchuk" error, while the second skips all of the boot screens: the Wiimote strap warning, Nunchuk error and mature content warning. If you're using a GameCube controller (and no Wiimote), you can get past the Wiimote strap screen by just waiting a few seconds, but if you want to get to the game faster, you can just skip all of them. If you're using the code to skip all splashes, you don't need to use the Nunchuk one as well. It won't hurt anything though, so you can if you want.
  • If you're looking to play in German, you should probably stick to the Europe release. I don't know much about this Wii version, but on GameCube the German release removed two game modes entirely. The standard Europe release still has German language support, so I don't know if there's any reason to play the Germany-specific version.

Technical Notes​

  • The most interesting thing to note here is that the SDK SCGetLanguage() function runs before displaying these screens, since they need to be localized for each supported language. After finding the first one through "proper" reverse engineering and seeing how it worked, when porting to the rest I was able to just find GetLanguage and walk back to the caller. This might be a workable approach to finding these splash screens in other games if anyone is looking to similarly modify or remove them.
Very nice.

A reason for me to put this game back on my USB drive. I tried doing this years ago and I got no where with it. I mostly use the Gamecube controller so this is a big help.
 
  • Like
Reactions: Vague Rant

Riot20052

Well-Known Member
Newcomer
Joined
Jan 31, 2023
Messages
57
Trophies
0
Age
20
XP
267
Country
United States
Globs of Replies.


Huh, very weird, I'll have to double-check what's going on there.


This might be a case where the language menu is set up to support a solo Wiimote (you could try unplugging the CC entirely and see if the Wiimote works standalone) but the game after that point only responds while a Nunchuk is connected. I just had this situation with the game in this post, where the controls would work initially but then once the game starts checking if the Nunchuk is available, they quit. Fixing it was a similar process to fixing Nunchuk error messages, trying to identify some code that checks that the extension byte is 1 and misbehaves when it isn't.

If you're lucky, you can sometimes fix this by patching places where the result of a WPADProbe() run is checked. That function doesn't return the result in r3, instead the way it works is that you pass it an address and it writes the extension byte to that address. If you go back to my previous post where I screenshotted WPADProbe(), you can see the instruction at 80325638: stw r0, 0 (r30). That's where the extension is being written out (as a 32-bit value, so generally 00000002 in our case). If you breakpoint that address (the equivalent in your game, I mean), then copy the address from r30 and paste it into the top right of the Memory tab, you can see that address in memory, right click it and set a read breakpoint, to pause execution any time the game reads that value. This can sometimes be a quick way to find what's looking for a 1, because if something reads that address then immediately compares it against 1, you can be sure it's some type of Nunchuk check, and then you can insert your own code something like this, replacing the compare instruction:
Code:
; bypass nunchuk check
  cmplwi r0, 1
  beq- RETURN
  cmplwi r0, 2

RETURN:
(Change register as necessary. Also, some games use cmpwi for this comparison and others use cmplwi; for our purposes either is fine but just match whatever the OG game does for safety.)

You can usually safely ignore the very first call to WPADProbe() which will often be part of the WPAD library itself, as well as ignoring the call that comes from KPADRead() itself. We don't want to mess with the extension byte this early, because KPAD relies on knowing the real extension to handle reading the Classic Controller. That's why we jump in after KPAD is done for this frame to start patching extension checks.

However, a lot of games don't use WPADProbe() directly to grab the extension byte. They might grab it out of the KPADStatus struct or anywhere else that the extension byte has previously been copied to outside of either. Another approach that's sometimes decent is to set a breakpoint at the start of KPADRead() and explore the parent function to see if there's any cmpwi rX, 1s within the function after KPADRead() runs. Again, no guarantees, but sometimes that's a handy way to find extension checks. You can set a breakpoint on that compare and make sure that it's coming in as 2. If you want to be extra sure, you can change the extension in the controller settings and see if it changes on the next break as well--keep in mind, Dolphin spends a few frames reporting that the extension was removed and such before it actually updates to the new extension type.

If neither of those work, you start getting into the really heavy duty stuff, basically:
  1. Switch extension to Nunchuk in the Dolphin settings

  2. Hold down a button or button combo that you know the button values for
    • e.g. A+B together is 0x0C00

  3. Breakpoint the start of read_kpad_button()

  4. Take the address from r3 and paste that into the Memory tab
    • This is a pointer to KPADStatus

  5. Set a read breakpoint on the first word
    • It should contain the buttons you're holding; if not, you're in the wrong place

  6. Follow where the button values get copied to
    • Usually 3+ times within KPADRead() itself, possibly some more copies after that before they start being read for gameplay purposes

  7. In the case we're talking about here, where buttons aren't registering because the game wants a Nunchuk connected, you should eventually find some code that's doing a compare against 1 and skipping a section if it's not equal
    • If you think you've found it, breakpoint it, switch back to Classic and see if you're right

This is normal Dolphin behavior. As far as I understand it, turning off a Gecko code in Dolphin means "stop writing this piece of code into memory." However, it doesn't un-write the code, so any code that you've already inserted/replaced this session is still being applied, unless or until the game itself writes over that memory. As a general rule, nothing ever writes to the area of memory where the binary is held, so patches to code like we're doing are essentially "permanent" for as long as the current session lasts.

Also, if you add a new code or modify an existing one, you'll need to toggle it off and on again to get Dolphin to update its cached instructions. If your PC is beefy enough, you won't notice any difference, but performance in theory tanks while Dolphin is regenerating the instruction cache, so if you toggle your code off and on and the game runs slow for a couple of seconds, that's a good sign that it worked and your updated codes are now active.

If you need to test from a clean slate multiple times, it can be useful to disable all your codes (from the right click -> Properties menu, before launching the game), run the game up to a sensible test point, e.g. gameplay, using regular Wiimote/Nunchuk controls, create a save state in Dolphin (Emulation -> Save State), then enable your codes in Dolphin. This way, you can load state to get the game back to its original unmodified condition (basically, what you were aiming for by turning your codes off originally). Note that you will need to toggle your codes off and on again in this situation to get them running, because they weren't enabled when you saved state and even though they're still checked in the menu, they're not enabled any more once you load state.


That is inside read_kpad_button(). In my experience it's absolutely always 0x9FFF. This code is specifically separating out the Nunchuk buttons C and Z (the two highest bits, 0x4000 and 0x2000 in hex) from the rest of the bits (0x9FFF) so that there's a register that's holding only the lower 14 bits which represent the Wiimote's buttons (plus three empty spaces where buttons theoretically could be but aren't). If it's not doing that, you might be looking at the wrong place.


read_kpad_ext() is basically the same thing as read_kpad_stick(), it's found in the same place and does mostly the same stuff. They just renamed it in some later SDK versions, probably in line with adding some extra functionality or something. I haven't actually looked into it, but technically there are other things that plug into the EXT port on the base of the Wiimote, so maybe a new accessory launched and they expanded the functionality of read_kpad_stick() and renamed it in the process. Nothing about how we interact with it changes, because we're just messing with the analog sticks, not any of the later additions.

It's also worth mentioning that I'm like 70% guessing whether I call it read_kpad_stick() or read_kpad_ext() for each hack. Basically if a game is relatively late in the Wii's lifespan I say ext, otherwise stick. I guarantee there are times where I've incorrectly guessed what the function was called internally as I go through labelling what I'm looking at, but they're basically synonymous so it's not very important to know which is which.

I haven't done much remapping of original game controls besides Mario Kart Wii which was Classic Controller, but the idea would essentially be that you'd want to build your remapped layout in another register then move it back into the register you read the real button values from. So I think you'd want something like this ...
Code:
; KPADRead
; r4 holds extType
; r7 holds wiimote bitfield
; r8 holds wiimote+nunchuk bitfield
; r9 holds classic bitfield
  li r7, 0  ; blank out real wiimote buttons

    WIIMOTE_HOME:
      andi. r0, r8, 0x8000
      beq- WIIMOTE_UP
      ori r7, r7, 0x8000    ; home

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

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

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

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

    WIIMOTE_A:
      andi. r0, r8, 0x800
      beq- WIIMOTE_B
      ori r7, r7, 0x800     ; a

    WIIMOTE_B:
      andi. r0, r8, 0x400
      beq- WIIMOTE_1
      ori r7, r7, 0x400     ; b

    WIIMOTE_1:
      andi. r0, r8, 0x200
      beq- WIIMOTE_2
      ori r7, r7, 0x200     ; 1

    WIIMOTE_2:
      andi. r0, r8, 0x100
      beq- WIIMOTE_PLUS
      ori r7, r7, 0x100     ; 2

    WIIMOTE_PLUS:
      andi. r0, r8, 0x10
      beq- WIIMOTE_MINUS
      ori r7, r7, 0x10      ; plus

    WIIMOTE_MINUS:
      andi. r0, r8, 0x1000
      beq- NUNCHUK_C
      ori r7, r7, 0x1000    ; minus

    NUNCHUK_C:
      andi. r0, r8, 0x4000
      beq- NUNCHUK_Z
      ori r7, r7, 0x4000    ; c

    NUNCHUK_Z:
      andi. r0, r8, 0x2000
      beq- WIIMOTE_DONE
      ori r7, r7, 0x2000    ; z

    WIIMOTE_DONE:
      mr r8, r7

RETURN:
  andi. r0, r7, 0x9FFF
This is completely untested, expect typos or anything going on here, but ideally it should work basically the way the injector you're used to does. In the above snippet every button is just mapped back to itself, so the code does literally nothing, but you can rearrange the buttons (e.g. ori r7, r7, 0x800 ; a to change which button they virtually press. For newer games you'd need to adjust the registers (r7/r8 would be r6/r7 in read_kpad_button(), and the same rules apply to the garbage register as usual. If the first argument to the andi. where you're injecting the code is a different number than r0, you need to replace all the r0s with that register.


Yeah, that is definitely something that would be more complicated and not something you could do via just KPAD hacks. You'd need to find where the individual game handles its control scheme and decouple the camera and pointer as you mention. The way we're handling the pointer in these hacks is basically just tricking the games into thinking we're pointing the Wii Remote, so we can't do anything that a real pointer can't do. It would definitely be possible, but it's not something I know how to do or would be much help with.


I definitely keep quality in mind as a metric for which games to look at (except when I don't; Flip's Twisted World), but there's a lot of other factors that go into it as well. For example, the previous game I did was by Incinerator Studio, so I decided to stick with that developer for the next game, just in the hope that I could recognize some similarities while the previous game was fresh in my memory--ultimately, I didn't, but that was the plan. :D

Cars 1 is definitely one I would like to come back to. I suspect it will be quite similar to Mater-National (moreso than Race-o-Rama was), so hopefully I can apply some of that knowledge to the original game.


Neat, this is another one I've never heard of, sounds like a pretty cool game though. Depending on the complexity of the motions needed, it might be a tough one, but I'll definitely add it to my investigation list.



View attachment 481584

For the final game in the Nicktoons Unite!/SpongeBob SquarePants and Friends quadrilogy of co-op action games, our friends at Incinerator Studios once again took over development. The new studio created a game that aimed to fuse the combat and platforming from the previous entries into a title with a bit more variety. Incinerator ended up with what kind of amounts to another light action-platform-puzzler in the style of the TT Lego games. With a healthy dose of Nicktoons characters and worlds including SpongeBob, Jimmy Neutron, Tak and all the others that I definitely recognize, Globs is a solid crossover that doesn't break any new ground. Instead, it's content to be a goofy team-up of Nicktoons heroes and villains that's, you know, fine. It's also very easy.
I did not figure out the motion controls for this game.

Use the Skip Gadget Combo Motion Controls code to bypass these screens.

USAEUR (En,Fr)EUR (De,Es,It)SCNKOR

  1. Code:
    Classic Controller Support [Vague Rant]
    C20C2138 00000002
    28000001 41820008
    28000002 00000000
    C20C2C3C 00000002
    28000001 41820008
    28000002 00000000
    C20EC900 00000002
    28000001 41820008
    28000002 00000000
    0414F6A4 41820034
    C2086874 00000028
    90010024 2C040000
    40820134 8803005C
    2C000002 40820128
    2C0F0001 408200E4
    48000021 80097D5C
    3FAAAAAB 3D4CCCCD
    00000000 00000000
    3DCCCCCD 3F800000
    7CA802A6 90A1000C
    5727083C 38E7000C
    C0030074 FC000210
    C0230078 FC200A10
    FC00082A C0450014
    FC001040 4080001C
    7CC53AAE 28060000
    408100C4 80030000
    70000800 4182000C
    38C0012C 48000008
    38C6FFFF 7CC53B2E
    38C00002 98C3005E
    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 C0250018
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    0408772C 7FC3F378
    04087E18 60000000
    C2087E1C 0000001F
    4800000D 00000000
    00000000 7C6802A6
    5760083C 7C630214
    2809FFFF 4082000C
    A1230000 48000014
    2C040002 408200C4
    38800001 B1230000
    71200800 41820008
    61088000 71200001
    41820008 61080008
    71204000 41820008
    61080004 71200002
    41820008 61080001
    71208000 41820008
    61080002 71200010
    41820008 61080800
    71200040 41820008
    61080800 71200008
    41820008 61084000
    71200020 41820008
    61080400 71202000
    41820008 61081000
    71200200 41820008
    61081000 71200080
    41820008 61080001
    71200004 41820008
    61082000 71200400
    41820008 61080010
    71201000 41820008
    61081000 7CE74378
    70E09FFF 00000000
    Code:
    Skip Gadget Combo Motion Controls [Vague Rant]
    063324C8 00000014
    806DC928 38000001
    98030011 98030012
    48000078 00000000
  2. Code:
    Classic Controller Support [Vague Rant]
    C20C1B04 00000002
    28000001 41820008
    28000002 00000000
    C20C2684 00000002
    28000001 41820008
    28000002 00000000
    C20EBC4C 00000002
    28000001 41820008
    28000002 00000000
    0414F22C 48000038
    C2086874 00000028
    90010024 2C040000
    40820134 8803005C
    2C000002 40820128
    2C0F0001 408200E4
    48000021 80097D5C
    3FAAAAAB 3D4CCCCD
    00000000 00000000
    3DCCCCCD 3F800000
    7CA802A6 90A1000C
    5727083C 38E7000C
    C0030074 FC000210
    C0230078 FC200A10
    FC00082A C0450014
    FC001040 4080001C
    7CC53AAE 28060000
    408100C4 80030000
    70000800 4182000C
    38C0012C 48000008
    38C6FFFF 7CC53B2E
    38C00002 98C3005E
    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 C0250018
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    0408772C 7FC3F378
    04087E18 60000000
    C2087E1C 0000001F
    4800000D 00000000
    00000000 7C6802A6
    5760083C 7C630214
    2809FFFF 4082000C
    A1230000 48000014
    2C040002 408200C4
    38800001 B1230000
    71200800 41820008
    61088000 71200001
    41820008 61080008
    71204000 41820008
    61080004 71200002
    41820008 61080001
    71208000 41820008
    61080002 71200010
    41820008 61080800
    71200040 41820008
    61080800 71200008
    41820008 61084000
    71200020 41820008
    61080400 71202000
    41820008 61081000
    71200200 41820008
    61081000 71200080
    41820008 61080001
    71200004 41820008
    61082000 71200400
    41820008 61080010
    71201000 41820008
    61081000 7CE74378
    70E09FFF 00000000
    Code:
    Skip Gadget Combo Motion Controls [Vague Rant]
    063325E0 00000014
    806DC948 38000001
    98030011 98030012
    48000078 00000000
  3. Code:
    Classic Controller Support [Vague Rant]
    C20C1B04 00000002
    28000001 41820008
    28000002 00000000
    C20C2684 00000002
    28000001 41820008
    28000002 00000000
    C20EBC4C 00000002
    28000001 41820008
    28000002 00000000
    0414F240 48000038
    C2086874 00000028
    90010024 2C040000
    40820134 8803005C
    2C000002 40820128
    2C0F0001 408200E4
    48000021 80097D5C
    3FAAAAAB 3D4CCCCD
    00000000 00000000
    3DCCCCCD 3F800000
    7CA802A6 90A1000C
    5727083C 38E7000C
    C0030074 FC000210
    C0230078 FC200A10
    FC00082A C0450014
    FC001040 4080001C
    7CC53AAE 28060000
    408100C4 80030000
    70000800 4182000C
    38C0012C 48000008
    38C6FFFF 7CC53B2E
    38C00002 98C3005E
    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 C0250018
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    0408772C 7FC3F378
    04087E18 60000000
    C2087E1C 0000001F
    4800000D 00000000
    00000000 7C6802A6
    5760083C 7C630214
    2809FFFF 4082000C
    A1230000 48000014
    2C040002 408200C4
    38800001 B1230000
    71200800 41820008
    61088000 71200001
    41820008 61080008
    71204000 41820008
    61080004 71200002
    41820008 61080001
    71208000 41820008
    61080002 71200010
    41820008 61080800
    71200040 41820008
    61080800 71200008
    41820008 61084000
    71200020 41820008
    61080400 71202000
    41820008 61081000
    71200200 41820008
    61081000 71200080
    41820008 61080001
    71200004 41820008
    61082000 71200400
    41820008 61080010
    71201000 41820008
    61081000 7CE74378
    70E09FFF 00000000
    Code:
    Skip Gadget Combo Motion Controls [Vague Rant]
    063325F4 00000014
    806DC948 38000001
    98030011 98030012
    48000078 00000000
  4. Code:
    Classic Controller Support [Vague Rant]
    C20C1B04 00000002
    28000001 41820008
    28000002 00000000
    C20C2684 00000002
    28000001 41820008
    28000002 00000000
    C20EBC4C 00000002
    28000001 41820008
    28000002 00000000
    0414F258 48000038
    C2086874 00000028
    90010024 2C040000
    40820134 8803005C
    2C000002 40820128
    2C0F0001 408200E4
    48000021 80097D5C
    3FAAAAAB 3D4CCCCD
    00000000 00000000
    3DCCCCCD 3F800000
    7CA802A6 90A1000C
    5727083C 38E7000C
    C0030074 FC000210
    C0230078 FC200A10
    FC00082A C0450014
    FC001040 4080001C
    7CC53AAE 28060000
    408100C4 80030000
    70000800 4182000C
    38C0012C 48000008
    38C6FFFF 7CC53B2E
    38C00002 98C3005E
    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 C0250018
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    0408772C 7FC3F378
    04087E18 60000000
    C2087E1C 0000001F
    4800000D 00000000
    00000000 7C6802A6
    5760083C 7C630214
    2809FFFF 4082000C
    A1230000 48000014
    2C040002 408200C4
    38800001 B1230000
    71200800 41820008
    61088000 71200001
    41820008 61080008
    71204000 41820008
    61080004 71200002
    41820008 61080001
    71208000 41820008
    61080002 71200010
    41820008 61080800
    71200040 41820008
    61080800 71200008
    41820008 61084000
    71200020 41820008
    61080400 71202000
    41820008 61081000
    71200200 41820008
    61081000 71200080
    41820008 61080001
    71200004 41820008
    61082000 71200400
    41820008 61080010
    71201000 41820008
    61081000 7CE74378
    70E09FFF 00000000
    Code:
    Skip Gadget Combo Motion Controls [Vague Rant]
    0633260C 00000014
    806DC948 38000001
    98030011 98030012
    48000078 00000000
  5. Code:
    Classic Controller Support [Vague Rant]
    C20C2024 00000002
    28000001 41820008
    28000002 00000000
    C20C2BA4 00000002
    28000001 41820008
    28000002 00000000
    C20EC0D8 00000002
    28000001 41820008
    28000002 00000000
    0414F710 41820034
    C2086834 00000028
    90010024 2C040000
    40820134 8803005C
    2C000002 40820128
    2C0F0001 408200E4
    48000021 80097D1C
    3FAAAAAB 3D4CCCCD
    00000000 00000000
    3DCCCCCD 3F800000
    7CA802A6 90A1000C
    5727083C 38E7000C
    C0030074 FC000210
    C0230078 FC200A10
    FC00082A C0450014
    FC001040 4080001C
    7CC53AAE 28060000
    408100C4 80030000
    70000800 4182000C
    38C0012C 48000008
    38C6FFFF 7CC53B2E
    38C00002 98C3005E
    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 C0250018
    FC000800 4180000C
    FC000890 48000014
    FC200850 FC000800
    41810008 FC000890
    4E800020 00000000
    040876EC 7FC3F378
    04087DD8 60000000
    C2087DDC 0000001F
    4800000D 00000000
    00000000 7C6802A6
    5760083C 7C630214
    2809FFFF 4082000C
    A1230000 48000014
    2C040002 408200C4
    38800001 B1230000
    71200800 41820008
    61088000 71200001
    41820008 61080008
    71204000 41820008
    61080004 71200002
    41820008 61080001
    71208000 41820008
    61080002 71200010
    41820008 61080800
    71200040 41820008
    61080800 71200008
    41820008 61084000
    71200020 41820008
    61080400 71202000
    41820008 61081000
    71200200 41820008
    61081000 71200080
    41820008 61080001
    71200004 41820008
    61082000 71200400
    41820008 61080010
    71201000 41820008
    61081000 7CE74378
    70E09FFF 00000000
    Code:
    Skip Gadget Combo Motion Controls [Vague Rant]
    06332CB8 00000014
    806DC948 38000001
    98030011 98030012
    48000078 00000000

Button Mapping​

Wii Remote/NunchukClassic ControllerFunction
Wiimote HomeHome
Remember: Right Stick as pointer
Open/Close Home Menu
Wiimote D-PadD-Pad
ZL
Menus
Navigation
Gameplay
Gadget Combo
Wiimote AA
B
Menus
Confirm
Gameplay
Jump
Wiimote BYMenus
Cancel
Gameplay
Attack
Wiimote 1 & 2Not mappedNot used?
Wiimote PlusPlusGameplay
Pause
Drop In (player 2)
Wiimote MinusMinus
L/R
Gameplay
Switch Character
Drop Out (player 2)
Wiimote PointerRight StickMenus
Navigation
Home Button Menu
Navigation
Nunchuk StickLeft StickGameplay
Movement
Nunchuk CXGameplay
Interact (pull levers, etc.)
Nunchuk ZZRGameplay
Gadget Attack

General Notes​

  • I did not figure out the motion controls for this game. However, I was able to bypass the motion control gameplay entirely and have included a separate code above for this purpose. In the base game, once the Combo Meter is full, you press the Gadget Combo button and the game freezes for a few seconds while you match the on-screen motion prompts. The above code skips this entire phase so that pressing the Gadget Combo button immediately triggers a Gadget Combo.
    • I'm not even sorry, this is better.

  • The button mapping here is mostly cribbed from the PS2 version of the game. The only major change is that the PS2 version used the D-Pad to navigate the menu and toggle characters, while the Wii version uses the D-Pad to navigate the menu and trigger Gadget Combos. Since we can't lose menu navigation, we had to leave the D-Pad as-is and cycling characters is now done with L/R while Gadget Combos are on ZL. I think it's fine, shouldn't bother anybody.

  • This game is infamous for its save corruption bug. If you encounter save corruption while playing this game, it's not because of anything I did. THQ acknowledged the bug and recommended that you never exit the game from the hub world. When you want to stop playing, enter a stage of your choice and shut down/exit from there. I know this sucks, tell THQ. Actually never mind, they went out of business. Stuff like this probably didn't help.

Technical Notes​

This is another one with a symbol map left over on the disc. Thanks, Incinerator.

Code breakdown:
  • C2 in InGameDevicesCheck(): bypass Nunchuk check
  • C2 in AreAllAttachmentsAttached(): bypass Nunchuk check (again)
  • C2 in FormatDeviceMessage(): fffff are you fu--yes, it's another one
  • 04 in Update: read Classic Controller as Nunchuk-type controller
  • C2 in calc_dpd_variable(): simulate IR pointer on Right Stick
  • 04 in read_kpad_stick(): stick redirection
  • 04 and C2 in KPADRead(): dropped connection fix and button injector
Code:
; KPADRead
; button injector
; 80087E1C for USA/EUR (En,Fr)/EUR (De,Es,It)/SCN
; 80087DDC for KOR
; r4 holds extType
; r7 holds wiimote bitfield
; r8 holds wiimote+nunchuk bitfield
; r9 holds classic bitfield

; magic
  bl GRAB
MAGIC:
    HELD:   .double 0
GRAB:
  mflr r3
  slwi r0, r27, 1
  add r3, r3, r0

; check dropped extension
  cmplwi r9, 0xFFFF
  bne- CLASSIC
  lhz r9, HELD-MAGIC(r3)
  b DROPPED_CONNECTION

CLASSIC:
  cmpwi r4, 0x2
  bne- RETURN

  li r4, 0x1            ; i'm a nunchuk
  sth r9, HELD-MAGIC(r3)

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

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

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

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

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

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

    CLASSIC_B:
      andi. r0, r9, 0x40
      beq- CLASSIC_X
      ori r8, r8, 0x800     ; a

    CLASSIC_X:
      andi. r0, r9, 0x8
      beq- CLASSIC_Y
      ori r8, r8, 0x4000    ; c

    CLASSIC_Y:
      andi. r0, r9, 0x20
      beq- CLASSIC_L
      ori r8, r8, 0x400     ; b

    CLASSIC_L:
      andi. r0, r9, 0x2000
      beq- CLASSIC_R
      ori r8, r8, 0x1000    ; minus

    CLASSIC_R:
      andi. r0, r9, 0x200
      beq- CLASSIC_ZL
      ori r8, r8, 0x1000    ; minus

    CLASSIC_ZL:
      andi. r0, r9, 0x80
      beq- CLASSIC_ZR
      ori r8, r8, 0x1       ; left (v) / down (h)

    CLASSIC_ZR:
      andi. r0, r9, 0x4
      beq- CLASSIC_PLUS
      ori r8, r8, 0x2000    ; z

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

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

    CLASSIC_DONE:
      or r7, r7, r8

RETURN:
  andi. r0, r7, 0x9FFF
The debug symbol map was an enormous help in bypassing the motion control sections, there's no chance in hell I could have figured that out otherwise. It's so many layers of stuff from the multiple menu layers, the sounds and graphical effects that are triggered when you open the Gadget Combo menu and the code for performing a Gadget Combo is nowhere near the stuff that manages the Gadget Combo QTE minigames. Extremely fortunate that debug map was available or this one would probaby have been canned.
Don't what going on unable get the Potioner to move at all in the menus in game at all.
Post automatically merged:

Don't what going on unable get the Potioner to move at all in the menus in game at all.
 

Attachments

  • 20250123_111351.jpg
    20250123_111351.jpg
    2.1 MB · Views: 5
  • 20250123_111542.mp4
    8.5 MB

csab6482

Member
Newcomer
Joined
Nov 4, 2024
Messages
21
Trophies
0
Age
23
XP
98
Country
United States
Thank you very much for these codes! I have been patching my games and I used the automated tool from damysteryman. To create my GCT files, I used an online GCT maker from the MKWii community, and when I tried to run the patching tool, I would get an error that said ".GCT not found! Please make sure your .gct file is in the 'gct' folder, and is named .GCT" despite double checking to make sure I did everything right.

I found another user with the same issue, and further down in that thread someone provided an updated .bat file that fixed the issue. The original developer never responded to the fix, but if the first post on this thread could be updated to reflect the fix I'm sure it would be very helpful for anyone else wanting to use the tool.
 
  • Like
Reactions: Vague Rant

Riot20052

Well-Known Member
Newcomer
Joined
Jan 31, 2023
Messages
57
Trophies
0
Age
20
XP
267
Country
United States
Don't what going on unable get the Potioner to move at all in the menus in game at all.
Post automatically merged:
Forget it install the ps2 ver and run at 60fps won't be fixed bug just let is problem with Dophin Android and Odin 2.
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
180
Trophies
0
XP
245
Country
United States
If I ever do get more knowledge regarding PPC assembly, I will def consider pulling a DK with mario sports mix 👍
Not for now though, it seems very complicated.

Re: Excite Trucks: How did you handle that game since it handled KPAD very differently? Im pretty interested in a game that has a debugging map on the disc, but it handles KPAD very differently then usual, so I do not know how to find a button injection address / an andi instruction. Any idea?

Are there any specific functions / symbols that games use for extension errors? I might be lucky and get a direct function to patch already 👍

If i do end up getting lucky, this might be my first game that uses the nunchuk lol
 

piek50

Well-Known Member
Member
Joined
Jun 24, 2019
Messages
709
Trophies
0
XP
2,541
Country
Suriname
That definitely sounds like a complicated one. It would almost certainly be possible to hack it to use the sideways Wiimote control mode which has steering on the D-pad, but that would be pretty unsatisfying compared to using the fully analog GameCube controls. I haven't looked into the PAD library (which handles GameCube controllers) at all, but if I do this game sounds like a strong candidate to look at for the novelty of doing a kind of "reverse Classic Controller hack" to get it to behave like a GameCube controller. Definitely seems like an interesting challenge.



Awesome to hear the game still has fans, it definitely flew under the radar. I hadn't really thought of playing these on Steam Deck, but that does seem nice. Dolphin does support "shake buttons", but my hack is just infinite shaking until you let go of the button, so that's pretty convenient on any traditional controller.

I agree that the motion controls aren't overwhelming at all in this game. The tilting is definitely more precise than what I have in this hack (where the right analog stick is the equivalent of tilting the Wii Remote), but for people who don't want to deal with that or possibly people who want to play on the Wii U GamePad, now the option is (maybe) there. Note: Wario Land hasn't been tested on Wii U as far as I know, certainly not by me. If anybody does, let me know how it goes.

There's a bit of duplicated effort in porting to all the versions (especially Korea, is anybody from Korea ever going to see this post?) but I'm glad people are able to get use out of the alternate versions, especially for a case like Wario where the localization is different between the USA/Europe releases.


That's an interesting one. They do use the pointer quite a lot, which is not as good on an analog stick, but I guess that didn't stop them releasing these games on a bunch of consoles that don't have IR pointers at all. It does use the accelerometer in the Nunchuk which I haven't learned about at all yet, so there are some wrinkles there. Interestingly, it also has a charge move when you tilt the Wiimote upward. Speaking of ...



View attachment 457105

Metroid: Other M is that Metroid game. While it performed pretty well critically, it sold very poorly and many were disappointed by the linear gameplay, the loss of upgrades discovered through exploration, childish characterization, melodramatic story and awkward sideways/upright Wiimote controls. I can help with one of those.

USA (Rev 1) / Europe / Europe (Rev 1) / Japan / Japan (Rev 1)

  1. Same code works on all four tested revisions. Somebody test USA (Rev 0) for me?
    Code:
    Classic Controller and Nunchuk Support [Vague Rant]
    C20F797C 00000005
    881F0028 2C000000
    C03E05C4 41820018
    801E0000 70000080
    C0220000 41820008
    C0229998 00000000
    C20F8AC0 0000001B
    88A40028 2C050002
    408200C4 9421FFF0
    7C0802A6 9001000C
    90610008 3CC08011
    60C681A0 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 3CA3D70A
    3F800000 9421FFC0
    60000000 00000000
    C20F92DC 00000014
    7C0802A6 C0429988
    809EFFA0 80BEFFA4
    80DEFFA8 80FE0024
    39000004 FC001040
    48000049 39000002
    FC011040 4800003D
    FC000050 39000008
    FC001040 4800002D
    FC200850 39000001
    FC011040 4800001D
    909EFFA0 90BEFFA4
    90DEFFA8 90FE0024
    7C0803A6 4E800020
    41800024 7CE34039
    40820008 7CA54378
    7C844378 7D0340F8
    7CC61838 7CE74378
    48000010 7CE34039
    41820008 7CE74278
    4E800020 00000000
    C20F93B8 00000004
    4E800421 C01E0000
    C03E0004 3D80800F
    618C92DC 7D8803A6
    4E800021 00000000
    C20F9470 00000004
    4E800421 C01E000C
    C03E0010 3D80800F
    618C92DC 7D8803A6
    4E800021 00000000
    C20F73A0 0000002F
    2C040001 408200AC
    38C00000 70E08000
    41820008 60C68000
    70E00008 41820008
    60C60002 70E00004
    41820008 60C60001
    70E00001 41820008
    60C60008 70E00002
    41820008 60C60004
    70E00800 41820008
    60C60100 70E00400
    41820008 60C60200
    70E00200 41820008
    60C60880 70E00100
    41820008 60C60880
    70E00010 41820008
    60C60010 70E01000
    41820008 60C61000
    70E04000 41820008
    60C60800 70E02000
    41820008 60C60400
    7CC73378 480000C0
    2C040002 408200B8
    71000800 41820008
    60C68000 71000001
    41820008 60C60002
    71004000 41820008
    60C60001 71000002
    41820008 60C60008
    71008000 41820008
    60C60004 71000010
    41820008 60C60800
    71000040 41820008
    60C60100 71000008
    41820008 60C60880
    71000020 41820008
    60C60200 71002000
    41820008 60C60040
    71000200 41820008
    60C60040 71000080
    41820008 60C60400
    71000004 41820008
    60C60800 71000400
    41820008 60C60010
    71001000 41820008
    60C61000 81230000
    60000000 00000000
    C20F73F8 00000005
    90030004 70000040
    4182001C 8803005E
    68000002 9803005E
    38000000 90030020
    90030024 00000000

Button Mapping​

The "and Nunchuk" code now supports both Classic Controller and Nunchuk input. Go figure. First up, Classic Controller.

Wii RemoteClassic ControllerGame Function
HomeHome
Home Menu works but remember to press L/R to enable the pointer
Open/Close Home Button Menu
D-PadD-Pad
Left Stick
Third-Person
Movement
Sense Move (dodge)
Wiimote AA/ZRThird-Person
Morph Ball
First-Person
Shoot
Wiimote BZLFirst-Person
Free Look/Lock-On
PlusPlusPause
MinusMinusSkip certain scenes
Wiimote 1YShoot
Wiimote 2BThird-Person
Jump
Wiimote TiltXThird-Person
Concentration (recharge)
Wiimote IR PointerL/R (enable/disable)
Left Stick/Right Stick
First-Person
Aiming


Now, on to the Wiimote and Nunchuk control scheme.

Wii RemoteWiimote and NunchukGame Function
HomeHome
Home Menu works but remember that Nunchuk C is your A button
Open/Close Home Button Menu
D-PadWiimote D-Pad
Nunchuk Stick
Third-Person
Movement
Sense Move (dodge)
Wiimote ANunchuk CThird-Person
Morph Ball
First-Person
Shoot
Wiimote BNunchuk ZFirst-Person
Free Look/Lock-On
PlusPlusPause
MinusMinusSkip certain scenes
Wiimote 1Wiimote BShoot
Wiimote 2Wiimote AThird-Person
Jump
Wiimote TiltWiimote 1/2Third-Person
Concentration (recharge)
Wiimote IR PointerWiimote IR PointerFirst-Person
Aiming

General Notes​

About three weeks ago, I said Metroid: Other M would require somebody who understood Classic Controller hacking better than me to do a CC hack. Three weeks later, I understand Classic Controller hacking better than me, so I did. Highlights for @NestorM and @KelSolaar since they both asked.

I'm the world's biggest non-fan of playing digital games with a stick, but this game might make the exception. Since this hack allows you to use the analog stick as both your movement (third-person) and aiming (first-person) controls, it's actually pretty convenient to just use the analog stick at all times. That said, there are alternative options, e.g. left thumb on the D-pad and right thumb on the right analog stick, or you can even just stick to shooting with the Y (Wiimote 1) button, because that still works even in first-person. Play around, see what you like.

This game changes control schemes whenever you point the Wiimote at the screen, which necessitated some special handling of the pointer. You will need to enable/disable pointer mode by pressing the L or R button. This does result in some occasional weirdness, e.g. an early cutscene requires you to fire a missile at a locked door in the first person mode (press L/R). Another cutscene then plays after the door is unlocked, after which you get back gameplay control, but you'll still need to exit first-person mode by pressing L/R again. There are also scenes which lock you in first-person mode, but remember you still need to press L/R to enable the pointer. The Classic Controller hack doesn't "know" when you need to use the pointer, that's up to you to toggle.

This same hack is compatible with all five versions I tested. The only version which is untested is the USA Rev 0 disc; if you try it on that, let me know. The USA and Europe releases of this game received a second pressing with a game-breaking bug fixed, but the same hack is compatible with the (pre-bugfix) Europe and Japan Rev 0 discs, so there's a good chance it works on USA Rev 0 as well.

Mildly interesting, it's actually not known whether Japan received a second pressing of the game with the bug fixed, as the game Power Bombed in that region. We know Nintendo did prepare a Rev 1 for Japan, because that's the version that was sold on the Wii U eShop, but it's unknown whether that disc exists physically. This hack does work on that version as well if you're able to extract it from the eShop release and convert it back to a usable format.

EDIT: As mentioned below, this hack has been updated with Nunchuk support. The one big caveat of Nunchuk mode is that you need to remember that pointing the Wiimote at the screen will drop you into first-person mode. With an upright Wiimote & Nunchuk setup, there is some risk of this happening just from you naturally resting your hands in a way that points the Wiimote at the TV. My tip: don't do that. It didn't take me long to get used to holding the Wiimote slightly off to the right of the screen while playing. I'd also like to stress that you can shoot with the B button in either first-person or third-person, so feel free to just always shoot with B.

Changelog​

  • "and Nunchuk" code added Nunchuk support and switched to the new button injector

Technical Notes​

There's actually not much new in this one. Pointer support is essentially what was in Tron, Kirby and Wario with the addition of a toggle switch to enable/disable it which I put inside the button injector. This is again done with one of the unused button values of the Wii Remote, so the button with value 0x40 is our "toggle pointer" button, and the button with value 0x80 is our "tilt the Wiimote upward to recharge" button. Speaking of, that function is largely derived from the shaking implementation I used in Wario Land, minus the ... shaking.
Can someone help me please with the controller profile ini on this.
 

newhinton

Member
Newcomer
Joined
Jan 16, 2025
Messages
7
Trophies
0
Age
44
XP
35
Country
Germany
@Vague Rant I did it! Kinda!

I have written a small gecko code to sidestep the nunchuck-check. I found multiple candidates that looked like a check, but none had the desired outcome when changed.

However, at some point i had the idea to not look at the "reader", but the "writer" of the extension-bits, and that lead me back to WPADProbe. I patched this to always return an attached nunchuk. That probably has some undesired sideeffects. (I guess with this gecko code enabled, ONLY classic controllers will be supported. But i'll check that before i post it)

Now to the interesting parts: Since the button-injector works, i want to move on to the movement-controls. In the original game that is handled by the nunchuk.

From what i got in your button-mapper example, i need to write the cc-left-stick values to the register that would normally contain the nunchuck stick values. (You mentioned r7) I'd also need to write C and Z from one of the CLASSIC_?-Button-registers.

How do i do that?

I assume after the injected mapping, r8 contains the pressed buttons from the cc, and r0 should contain some bitfield made from those button-presses (A dummy-register only used to create the flag for the next beq- check?). r6 seems to be the target register for our conversion.

When i breakpoint the next instruction after the injected function returns, all those registers are 0. Is this because the emulation-window does not register my button presses since "clicking" start to step takes over window-focus? Or do i have to do something else?

(In that case, is there an exhaustive wii-assembly-document? I found the powerpc assembly guide helpful, but not quite easy to browse. For example i couldn't figure out what beq- means. Is that a negation for branch-if-equal?)

After i figure out the motion, i will need to figure out the pointer. I assume that will be "easy" in the first step, since i can just reuse the second stick of the cc. In the final version though, i want to emulate the pc-control-scheme. It activates the pointer when the stick moves AND the action-button is pressed, which i quite like.


When i am done, i need to properly document on what i learned, and what i did. I was thinking of using a git-repository for that. Would it make sense to create a shared one where you can collect all of the codes you wrote, their details and issues, guides and so on? It should be rather easy to publish that as a standalone website that is easily browseable. What do you think?
 

NestorM

Well-Known Member
Member
Joined
Feb 19, 2021
Messages
115
Trophies
1
Age
40
XP
1,185
Country
France
Hi. Is anybody have a Nyxquest pal patched wad to share ? The patched tool of jett rocket and alien crush works but the nyxquest tool doesn't. Thanks.
 

Riot20052

Well-Known Member
Newcomer
Joined
Jan 31, 2023
Messages
57
Trophies
0
Age
20
XP
267
Country
United States
Have bug with SpongeBob SquarePants featuring NickToons globs of doom patch try both s23 plus and odin 2 pro right stick don't work most of time every it said to be the pointer could someone go into code and see what hall is going on.
 

awesomeee

Well-Known Member
Member
Joined
Oct 7, 2024
Messages
180
Trophies
0
XP
245
Country
United States
Hi. Is anybody have a Nyxquest pal patched wad to share ? The patched tool of jett rocket and alien crush works but the nyxquest tool doesn't. Thanks.
Thats strange, but please dont share wads, since it would be piracy.
Post automatically merged:

@Vague Rant I did it! Kinda!

I have written a small gecko code to sidestep the nunchuck-check. I found multiple candidates that looked like a check, but none had the desired outcome when changed.

However, at some point i had the idea to not look at the "reader", but the "writer" of the extension-bits, and that lead me back to WPADProbe. I patched this to always return an attached nunchuk. That probably has some undesired sideeffects. (I guess with this gecko code enabled, ONLY classic controllers will be supported. But i'll check that before i post it)

Now to the interesting parts: Since the button-injector works, i want to move on to the movement-controls. In the original game that is handled by the nunchuk.

From what i got in your button-mapper example, i need to write the cc-left-stick values to the register that would normally contain the nunchuck stick values. (You mentioned r7) I'd also need to write C and Z from one of the CLASSIC_?-Button-registers.

How do i do that?

I assume after the injected mapping, r8 contains the pressed buttons from the cc, and r0 should contain some bitfield made from those button-presses (A dummy-register only used to create the flag for the next beq- check?). r6 seems to be the target register for our conversion.

When i breakpoint the next instruction after the injected function returns, all those registers are 0. Is this because the emulation-window does not register my button presses since "clicking" start to step takes over window-focus? Or do i have to do something else?

(In that case, is there an exhaustive wii-assembly-document? I found the powerpc assembly guide helpful, but not quite easy to browse. For example i couldn't figure out what beq- means. Is that a negation for branch-if-equal?)

After i figure out the motion, i will need to figure out the pointer. I assume that will be "easy" in the first step, since i can just reuse the second stick of the cc. In the final version though, i want to emulate the pc-control-scheme. It activates the pointer when the stick moves AND the action-button is pressed, which i quite like.


When i am done, i need to properly document on what i learned, and what i did. I was thinking of using a git-repository for that. Would it make sense to create a shared one where you can collect all of the codes you wrote, their details and issues, guides and so on? It should be rather easy to publish that as a standalone website that is easily browseable. What do you think?
Excellent work! Im also curious about some of this, how do you redirect the CC stick into the Nunchuk stick? Hopefully we get knowledge lol

As for C and Z, the values go into the button assembly, with 2000 being Z, and 4000 being C. We still need knowledge on how to trick the game saying “Im a nunchuk.”
Post automatically merged:

@Vague Rant Good news! I know you arent interested in Twilight Princess and such, so I decided to give it a look. It handles KPAD differently. A lot differently. I checked your Excite Trucks technical notes, and using some of my logic I had, I managed to find where the buttons are injected! Ill keep you updated on the hack 👍

I currently need to learn more knowledge about disabling the Nunchuk check and redirecting the Stick input to the CC stick. This might really be my first complex game!

Additionally, the game has a map leftover on the disc, so I know all the functions im patching. To clarify what I asked before, do you know any symbols that are often involved with Nunchuk checks?

Of course, im not trying to push you into doing a collab code.
 
Last edited by awesomeee,

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
  • BigOnYa @ BigOnYa:
    Been there, done that. Don't feel like using that rash cream for a week again either.
  • K3Nv3 @ K3Nv3:
    Amazon delayed your order over weather
  • BigOnYa @ BigOnYa:
    "Due to Covid, your package delivery is delayed"
  • K3Nv3 @ K3Nv3:
    Neighbor has covid I'm like don't even think about getting in my messages
  • Sicklyboy @ Sicklyboy:
    damn another plane from the US crashed, in canada this time
    +1
  • BigOnYa @ BigOnYa:
    N trump just fired 400 more FAA employees
  • K3Nv3 @ K3Nv3:
    That boeing one?
  • Sicklyboy @ Sicklyboy:
    idk it was a Delta flight that flipped upside down when it landed somehow
  • Sicklyboy @ Sicklyboy:
    planes ain't supposed to do that
  • BigOnYa @ BigOnYa:
    Luckily everyone survived
  • Sicklyboy @ Sicklyboy:
    Needs one of those "If you can read this, flip me over" stickers on its bumper
    +1
  • K3Nv3 @ K3Nv3:
    Turned their world upside down eh?
  • Sicklyboy @ Sicklyboy:
    thought the upside down land was australia smh
  • K3Nv3 @ K3Nv3:
    I don't get why they can't actually make travel safer where they just bounce around instead of explode
  • Xdqwerty @ Xdqwerty:
    @BigOnYa, you sure everyone survived?
  • Xdqwerty @ Xdqwerty:
    @Sicklyboy, and thats the reason why i'm afraid of airplanes; crashes
  • K3Nv3 @ K3Nv3:
    Like make some industrial rubber material where it prevents it on impact
  • Sicklyboy @ Sicklyboy:
    @Xdqwerty, Yeah I hear that, given all of the plane crashes in just the past few weeks I'm not too keen on flying at the moment myself.
    +1
  • Sicklyboy @ Sicklyboy:
    But yes luckily everyone did survive, 8 people with injuries
    +2
  • K3Nv3 @ K3Nv3:
    They have a good series on a plane crash that was back in the 80s can't think of the title
  • K3Nv3 @ K3Nv3:
    Lockerbie: A Search for Truth
  • BigOnYa @ BigOnYa:
    "Ken vs. Kenesha: A Search for Truth" was a decent documentary
  • K3Nv3 @ K3Nv3:
    It has some good coddling in it so it might be up your ally
    +1
  • Xdqwerty @ Xdqwerty:
    I feel lonely
  • K3Nv3 @ K3Nv3:
    Bigonya will hug you
    K3Nv3 @ K3Nv3: Bigonya will hug you