@Vague Rant I played a little bit with Excite Trucks CC Hack, because I wanted to remap some buttons, but now I have two actions on one button and I don't know how to fix it. Here is my idea: Accelerate with Y, Turbo stays at ZR and Brake on ZL. It would make the air tricks easier. So I changed the code of the europe version to this:
Now I have Brake and Turbo on ZL at the same time. I can't find the solution in the code. Is there another trick to this or should I create a new line for that? Thanks a lot
I have some good and bad news about Fluidity.
The good news: It seems more then possible to be done, the ice form and water work great! (Emulated on dolphin)
The bad news: The cloud seems the hardest one to do. I tried it but it just seems confusing, and i forgot the controls it uses, but i know one included shaking to drain the cloud.
It might use that low level motion data you were talking about (possibly) Although its not from next level games, i have a small feeling it does, I dont think it does though since the motion is used a lot, so it wouldnt be low level.
@Vague Rant Kirby Return To Dreamland already have a cc hack but needs a gameconfig.txt file stored on sd card to work. So it can't be played as inject with wii u gamepad. Do you think it's possible to make a new cc hack without the needing of this gameconfig.txt file ? Thanks.
@Vague Rant Kirby Return To Dreamland already have a cc hack but needs a gameconfig.txt file stored on sd card to work. So it can't be played as inject with wii u gamepad. Do you think it's possible to make a new cc hack without the needing of this gameconfig.txt file ? Thanks.
@Vague Rant Lmao remember how you could freeze fish in the ice form? That was funny to do! (In fluidity)
(There hasnt been much jokes here, and i know these hacks can be tiring, so i want to start showing funny things to cheer you up!)
@Vague Rant
for reference, several games support the analog triggers of the original (non-pro) classic controller. This is especially superior in the case of racing sims, where the accelerator pedal is begging for an smooth change. It would be great if you could pull the code from one of the games listed in that post and apply it to your mods.
Seeing your codes above, I always wanted to try to play Mario Kart like many other racing games, with R/L as Accelerate/Brake, I should try toying with it on Dolphin.
I've just edited the Mario Kart Wii post to add a full remapping assembly hack as I mentioned in a previous post. This hack remaps every button to the button that it already is, i.e. it does absolutely nothing by default. You can edit this any way you like and plug it into CodeWrite to get a custom button mapping.
@Vague Rant I followed your tutorial and I was able to (partially) make a CC hack for Mario Super Sluggers. I picked that game to practice because it doesn't have a "Connect the nunchuk" message, and I don't have any experience with making gecko codes or working with ASM so I don't know how to make a code to skip that. I was able to make the game recognize the Classic Controller thanks to your guide, though I still haven't managed to emulate the motion controls (shake wiimote, tilt, etc). Thank you soo much! I'm still happy with what I managed to do. I will keep practicing!
I was gonna ask, could you explain how to remove or skip the "nunchuk" error message? Because I wanna try that with Project Zero 2: Wii Edition (PAL). I know that the method might vary depending on what game it is, but any explanation will be useful!
That's awesome, congrats on the progress! Especially impressive without having any prior experience, great work. I don't really have a "generic" way to trigger motion controls across different games since they all tend to have different setups for their motion controls, so I generally have to write a different hack for each game that needs accelerometer stuff. It would be hard to really write up a tutorial on that because it's different for each game. The general idea is that inside read_kpad_acc() you need to force the game to load some specific accelerometer data instead of the real data whenever a certain button is pressed.
My usual trick for doing this is to map various accelerometer functions as buttons 0x80, 0x40 and 0x20 on the Wii Remote in the button injector. These are all unused bits on the Wiimote, i.e. technically possible button values which simply don't exist on the Wiimote. Then inside read_kpad_acc(), I'll write a routine which checks if the user pressed one of those fake buttons and load fake data in before calc_acc() (the function which processes that data) can run. calc_acc() is pretty easy to find because it always runs three times in a row, once for each axis. Before each function call will be an lfs f1, 0xXXX(r30) which is reading in the real accelerometer data, so that's the ideal place to insert some code to replace the real data.
For fixing Nunchuk errors, usually I will load the game up in Dolphin and let it run until it reaches some kind of Nunchuk error screen. Then in the Memory tab I will switch the search type to ASCII and search for the text that shows up in the Nunchuk error (e.g. "Please connect the Nunchuk to the Wii Remote" type of thing). If it is able to locate the error text, I can then set a read breakpoint (check the Read only button, then right click where the error text is located in memory and Toggle Breakpoint) on that text and find the code where the text is loaded.
From there, you want to use the Callstack in the Code tab to trace your way backward through the code trying to find where the actual Nunchuk check occurred which caused the game to display the error. I mostly do this part via trial and error, I'll go back one or two calls and set an execute breakpoint there (click in the left column of the disassembler in the Code tab) then switch to the Nunchuk in Dolphin settings and see whether that code is still running.
What you want to find is the point where different code paths are taken depending on which controller is connected. The extension types important to us are 0 (none), 1 (Nunchuk) and 2 (Classic Controller). So eventually you should reach a point where there's code which only runs if a specific value is not equal to 1. The extension check will generally look something like cmpwi rX, 0x1, but it's important to note that checking if something equals 1 is very generic code that's used all over the place, so finding a cmpwi rX, 0x1 doesn't mean you've found the Nunchuk check.
If you suspect you have found the Nunchuk check, set a breakpoint on that instruction and try letting the game run with no extension, Nunchuk and Classic Controller. If the register that gets checked matches the values I mentioned above based on which controller you have connected, you can be reasonably sure that it is checking the extension type. If that check fails (is not equal to 1), it means the current connected controller is not a Nunchuk. At that point, you can change this check to also accept Classic Controller, usually looking something like this in assembly which you can paste into CodeWrite:
Code:
cmpwi r0, 0x1
beq- RETURN
cmpwi r0, 0x2
RETURN:
This isn't doing anything too complex: instead of just checking if the value is 1, this checks if it's 1, then checks if it's 2. That way, whatever behavior the game was going to run if the extension type was 1 (like skipping over running the Nunchuk error) will also run if the extension type is 2. A lot of the exact process for how the Nunchuk is checked for varies wildly from game to game, but the extension type values are part of the SDK, so they're something reliable to look for.
@Vague Rant I played a little bit with Excite Trucks CC Hack, because I wanted to remap some buttons, but now I have two actions on one button and I don't know how to fix it. Here is my idea: Accelerate with Y, Turbo stays at ZR and Brake on ZL. It would make the air tricks easier.
Now I have Brake and Turbo on ZL at the same time. I can't find the solution in the code. Is there another trick to this or should I create a new line for that? Thanks a lot
Ah, yeah, that one is a bit more difficult to edit. In a couple of my early hacks I was trying to optimize the button injector down to be as small as possible by checking multiple buttons at the same time. You can see me doing that in instructions like 70A42082. This is checking buttons 0x2000, 0x80 and 0x2 (2082) all at once, so the lines like that are where your problem is occurring, since the buttons are already mapped there. In later hacks I decided to stop optimizing the button checks just so they'd be easier to edit exactly for this reason. I should come back to Excite Truck to add IR pointer support anyway, since I made that one before I knew how to do that, so if you don't mind the wait I'll "modernize" the button injector when I do that, otherwise yeah, it will be a bit tougher to change the button values.
@Vague Rant Kirby Return To Dreamland already have a cc hack but needs a gameconfig.txt file stored on sd card to work. So it can't be played as inject with wii u gamepad. Do you think it's possible to make a new cc hack without the needing of this gameconfig.txt file ? Thanks.
Yeah, I think it should be possible to convert crediar's existing Metafortress fixes into IPS patches which can apply to the main.dol. I don't know what the format of gameconfig.txt files is like but I think it's just a list of patches to the binary, which is essentially what an IPS is as well. I'm definitely not sure of this though, that's just roughly how I think it works.
I think the easiest way to do this would be to edit the code yourself. It's somewhat complex for this game due to the different pointer modes, so I'll put my (and crediar's, this button injector is based on crediar's work) original assembly in a spoiler below:
Code:
; 803BF784 for USA
; 803BF9EC for USA (Rev 1)
; 803BF5D4 for EUR
; 803BF83C for EUR (Rev 1)
; 803BF928 for JPN (Rev 1)
; 803C8330 for KOR (Rev 1)
stw r0, 0x68(r31)
INJECTOR:
; held
lwz r8, 0x60(r31)
bl TRANSLATOR
lwz r6, 0x0(r31)
or r8, r8, r6
stw r8, 0x0(r31)
; released
not r8, r8
lwz r6, 0x8(r31)
and r8, r6, r8
stw r8, 0x8(r31)
; pressed
lwz r8, 0x64(r31)
bl TRANSLATOR
lwz r6, 0x4(r31)
or r8, r8, r6
stw r8, 0x4(r31)
; enable pointer
andi. r6, r8, 0x40 ; enable
beq- TOGGLE
li r6, 0x2
stb r6, 0x5E(r31)
b RETURN
TOGGLE:
; toggle pointer
andi. r6, r8, 0x80 ; toggle
beq- RETURN
lbz r6, 0x5E(r31)
xori r6, r6, 0x2
stb r6, 0x5E(r31)
b RETURN
TRANSLATOR:
li r7, 0x0
BTN_HOME:
andi. r6, r8, 0x800
beq- BTN_UP
ori r7, r7, 0x8000 ; Home
BTN_UP:
andi. r6, r8, 0x1
beq- BTN_DOWN
ori r7, r7, 0x8 ; up
BTN_DOWN:
andi. r6, r8, 0x4000
beq- BTN_LEFT
ori r7, r7, 0x4 ; down
BTN_LEFT:
andi. r6, r8, 0x2
beq- BTN_RIGHT
ori r7, r7, 0x1 ; left
BTN_RIGHT:
andi. r6, r8, 0x8000
beq- BTN_A
ori r7, r7, 0x2 ; right
BTN_A:
andi. r6, r8, 0x10
beq- BTN_B
ori r7, r7, 0x800 ; A
BTN_B:
andi. r6, r8, 0x40
beq- BTN_X
ori r7, r7, 0x400 ; B
BTN_X:
andi. r6, r8, 0x8
beq- BTN_Y
ori r7, r7, 0x1080 ; - and toggle pointer
BTN_Y:
andi. r6, r8, 0x20
beq- BTN_L
ori r7, r7, 0x180 ; 2 and toggle pointer
BTN_L:
andi. r6, r8, 0x2000
beq- BTN_R
ori r7, r7, 0x80 ; toggle pointer
BTN_R:
andi. r6, r8, 0x200
beq- BTN_ZL
ori r7, r7, 0x2000 ; Z
BTN_ZL:
andi. r6, r8, 0x80
beq- BTN_ZR
ori r7, r7, 0x1040 ; - and enable pointer
BTN_ZR:
andi. r6, r8, 0x4
beq- BTN_PLUS
ori r7, r7, 0x50 ; + and enable pointer
b BTN_PLUS
BTN_PLUS:
andi. r6, r8, 0x400
beq- BTN_MINUS
ori r7, r7, 0x90 ; + and toggle pointer
BTN_MINUS:
andi. r6, r8, 0x1000
beq- DONE
ori r7, r7, 0x200 ; 1
DONE:
mr r8, r7
blr
RETURN:
The ; comments at the start are the addresses to insert the code which you can paste into CodeWrite along with the assembly to get a Gecko code of the same, and from there you can adjust it however you see fit. I know it's pretty daunting to look at, but the parts you want to change are the lines that go ori r7, r7, 0xXXXX. They have comments after them like ; 1 to indicate what button that number means. Some of them are pressing multiple buttons simultaneously, like 0x90 means 0x80 (toggle pointer) plus 0x10 (the Wiimote Plus button).
Yeah, Fluidity does seem like a bit of a complicated one overall. I still haven't looked into it yet, but it's a game I really like, so definitely one I'll make an attempt at. Whether that will be fruitful, who knows; there's plenty of games I've looked into but haven't been successful in hacking, with those games falling onto kind of a spectrum from "I want to keep trying on that one" to "I'll die if I look at that game for one more second."
@Vague Rant
for reference, several games support the analog triggers of the original (non-pro) classic controller. This is especially superior in the case of racing sims, where the accelerator pedal is begging for an smooth change. It would be great if you could pull the code from one of the games listed in that post and apply it to your mods.
That is definitely a cool feature, but sorry, not likely to be something I can do. That would require an understanding of how each individual game handles acceleration and braking, since that's all game-specific code. Finding how it works in a one game wouldn't really help me to understand how/where vehicle movement is handled in a different game entirely. I think the case where it would be most likely to be achievable by me would be if there's games that support using the right analog stick to accelerate/brake. It would probably be possible to reconfigure the analog shoulder input to handle existing right stick accelerating/braking, and it would have to be truly analog already--unlike Mario Kart Wii where the right stick behaves like two buttons rather than the analog values being meaningful.
I'll die if I look at this game for one more second.
Epic Mickey is somehow another paint-based 3D platformer developed by a third-party which broke through Nintendo's stranglehold on the Wii. Developed exclusively for the console by Warren Spector's Junction Point Studios, Epic Mickey features the gameplay hook of an interactive world that Mickey can change at will using paint or thinner. With an RPG-influenced quest system, the player's choices also affect Mickey's appearance and skill growth. Lauded for its creative design and reimagining of Disney history, the game was also derided for its poor camera and complex controls. A recent HD remake saw much improved review scores, but ... here's this one!
There is one motion input which I did not solve here: when you simultaneously shake both the Wii Remote and Nunchuk, Mickey fires off all three Guardians (Tint/Turp spirits) at once. You won't be able to do that move with this hack; instead, you'll have to fire off all three individually using separate Nunchuk shakes (R button). It would be nice, but it's entirely playable without it.
The accelerometer in the Nunchuk is probably the single part of KPAD that I understand the least. I started looking at this game about seven weeks ago. This is the closest I've gotten to understanding how the Nunchuk works, which was just barely enough to get a generic Nunchuk waggle working.
The total number of different inputs in this game is more than the number of buttons on a Classic Controller. Epic Mickey uses 8 buttons and four motion inputs, plus the infra-red pointer. The Classic Controller has 10 buttons and a Right Stick to cover all of that. I had to sacrifice the D-Pad to get some extra inputs, hence having L+Right Stick emulate the D-Pad.
Epic Mickey already has an infamously difficult camera; losing direct camera control here would not be great, so D-Pad Left/Right are intact for lateral camera movements in addition to the L+Right Stick method. However, for looking up/down, only the L+Right Stick method is available here. This can occasionally be awkward because L is also your lock-on button when near enemies. This does mean you may have trouble moving the camera up/down when enemies are nearby, but you'll usually only need to do this during platforming segments, not combat.
Controls here are a mix of the remake and just mapping button-for-button. As mentioned, this game has a lot of inputs and mapping everything like the remake would make things like the menus completely incomprehensible (e.g. I can't really move the Plus and Minus buttons because when the game shows a button prompt in the menu it will be completely wrong and confusing). This is also why the A (confirm/jump) button is double-mapped on both A and B, so that menu and interaction prompts which want you to press A will work normally, but you still jump with B like a normal game. The one thing to be careful of is that when a prompt wants you to press B to cancel, that's ZR.
Technical Notes
Codes:
C2: bypass Nunchuk check
C2, C2 and C2 in read_kpad_acc(): Wiimote shakes and tilts; forcing the Nunchuk accelerometer to be "read" even when the extension controller type is Classic Controller; injecting fake Nunchuk accelerometer data before processing
these changes will overwrite memory where actual Classic Controller input is normally stored, so this needs to be backed up
C2 in calc_dpd_variable(): infra-red pointer emulation
04, 04 and C2 in read_kpad_ext(): redirect left stick into Nunchuk analog stick; redirect right stick into (hopefully) free memory so it isn't erased by accelerometer; right stick D-pad emulation
@Vague Rant FORCE Classic controller mode in UWUVCI / Teconmoons injector uses GetExtTypePatcher. Thats the tool that somehow allows Super sluggers to work with the gamepad. It patches wiivc titles to work with classic controller for more info, but thats more details
It patches to the main.dol
There is one motion input which I did not solve here: when you simultaneously shake both the Wii Remote and Nunchuk, Mickey fires off all three Guardians (Tint/Turp spirits) at once. You won't be able to do that move with this hack
I've just edited the Mario Kart Wii post to add a full remapping assembly hack as I mentioned in a previous post. This hack remaps every button to the button that it already is, i.e. it does absolutely nothing by default. You can edit this any way you like and plug it into CodeWrite to get a custom button mapping.
That's awesome, congrats on the progress! Especially impressive without having any prior experience, great work. I don't really have a "generic" way to trigger motion controls across different games since they all tend to have different setups for their motion controls, so I generally have to write a different hack for each game that needs accelerometer stuff. It would be hard to really write up a tutorial on that because it's different for each game. The general idea is that inside read_kpad_acc() you need to force the game to load some specific accelerometer data instead of the real data whenever a certain button is pressed.
My usual trick for doing this is to map various accelerometer functions as buttons 0x80, 0x40 and 0x20 on the Wii Remote in the button injector. These are all unused bits on the Wiimote, i.e. technically possible button values which simply don't exist on the Wiimote. Then inside read_kpad_acc(), I'll write a routine which checks if the user pressed one of those fake buttons and load fake data in before calc_acc() (the function which processes that data) can run. calc_acc() is pretty easy to find because it always runs three times in a row, once for each axis. Before each function call will be an lfs f1, 0xXXX(r30) which is reading in the real accelerometer data, so that's the ideal place to insert some code to replace the real data.
For fixing Nunchuk errors, usually I will load the game up in Dolphin and let it run until it reaches some kind of Nunchuk error screen. Then in the Memory tab I will switch the search type to ASCII and search for the text that shows up in the Nunchuk error (e.g. "Please connect the Nunchuk to the Wii Remote" type of thing). If it is able to locate the error text, I can then set a read breakpoint (check the Read only button, then right click where the error text is located in memory and Toggle Breakpoint) on that text and find the code where the text is loaded.
From there, you want to use the Callstack in the Code tab to trace your way backward through the code trying to find where the actual Nunchuk check occurred which caused the game to display the error. I mostly do this part via trial and error, I'll go back one or two calls and set an execute breakpoint there (click in the left column of the disassembler in the Code tab) then switch to the Nunchuk in Dolphin settings and see whether that code is still running.
What you want to find is the point where different code paths are taken depending on which controller is connected. The extension types important to us are 0 (none), 1 (Nunchuk) and 2 (Classic Controller). So eventually you should reach a point where there's code which only runs if a specific value is not equal to 1. The extension check will generally look something like cmpwi rX, 0x1, but it's important to note that checking if something equals 1 is very generic code that's used all over the place, so finding a cmpwi rX, 0x1 doesn't mean you've found the Nunchuk check.
If you suspect you have found the Nunchuk check, set a breakpoint on that instruction and try letting the game run with no extension, Nunchuk and Classic Controller. If the register that gets checked matches the values I mentioned above based on which controller you have connected, you can be reasonably sure that it is checking the extension type. If that check fails (is not equal to 1), it means the current connected controller is not a Nunchuk. At that point, you can change this check to also accept Classic Controller, usually looking something like this in assembly which you can paste into CodeWrite:
Code:
cmpwi r0, 0x1
beq- RETURN
cmpwi r0, 0x2
RETURN:
This isn't doing anything too complex: instead of just checking if the value is 1, this checks if it's 1, then checks if it's 2. That way, whatever behavior the game was going to run if the extension type was 1 (like skipping over running the Nunchuk error) will also run if the extension type is 2. A lot of the exact process for how the Nunchuk is checked for varies wildly from game to game, but the extension type values are part of the SDK, so they're something reliable to look for.
Ah, yeah, that one is a bit more difficult to edit. In a couple of my early hacks I was trying to optimize the button injector down to be as small as possible by checking multiple buttons at the same time. You can see me doing that in instructions like 70A42082. This is checking buttons 0x2000, 0x80 and 0x2 (2082) all at once, so the lines like that are where your problem is occurring, since the buttons are already mapped there. In later hacks I decided to stop optimizing the button checks just so they'd be easier to edit exactly for this reason. I should come back to Excite Truck to add IR pointer support anyway, since I made that one before I knew how to do that, so if you don't mind the wait I'll "modernize" the button injector when I do that, otherwise yeah, it will be a bit tougher to change the button values.
Yeah, I think it should be possible to convert crediar's existing Metafortress fixes into IPS patches which can apply to the main.dol. I don't know what the format of gameconfig.txt files is like but I think it's just a list of patches to the binary, which is essentially what an IPS is as well. I'm definitely not sure of this though, that's just roughly how I think it works.
I think the easiest way to do this would be to edit the code yourself. It's somewhat complex for this game due to the different pointer modes, so I'll put my (and crediar's, this button injector is based on crediar's work) original assembly in a spoiler below:
Code:
; 803BF784 for USA
; 803BF9EC for USA (Rev 1)
; 803BF5D4 for EUR
; 803BF83C for EUR (Rev 1)
; 803BF928 for JPN (Rev 1)
; 803C8330 for KOR (Rev 1)
stw r0, 0x68(r31)
INJECTOR:
; held
lwz r8, 0x60(r31)
bl TRANSLATOR
lwz r6, 0x0(r31)
or r8, r8, r6
stw r8, 0x0(r31)
; released
not r8, r8
lwz r6, 0x8(r31)
and r8, r6, r8
stw r8, 0x8(r31)
; pressed
lwz r8, 0x64(r31)
bl TRANSLATOR
lwz r6, 0x4(r31)
or r8, r8, r6
stw r8, 0x4(r31)
; enable pointer
andi. r6, r8, 0x40 ; enable
beq- TOGGLE
li r6, 0x2
stb r6, 0x5E(r31)
b RETURN
TOGGLE:
; toggle pointer
andi. r6, r8, 0x80 ; toggle
beq- RETURN
lbz r6, 0x5E(r31)
xori r6, r6, 0x2
stb r6, 0x5E(r31)
b RETURN
TRANSLATOR:
li r7, 0x0
BTN_HOME:
andi. r6, r8, 0x800
beq- BTN_UP
ori r7, r7, 0x8000 ; Home
BTN_UP:
andi. r6, r8, 0x1
beq- BTN_DOWN
ori r7, r7, 0x8 ; up
BTN_DOWN:
andi. r6, r8, 0x4000
beq- BTN_LEFT
ori r7, r7, 0x4 ; down
BTN_LEFT:
andi. r6, r8, 0x2
beq- BTN_RIGHT
ori r7, r7, 0x1 ; left
BTN_RIGHT:
andi. r6, r8, 0x8000
beq- BTN_A
ori r7, r7, 0x2 ; right
BTN_A:
andi. r6, r8, 0x10
beq- BTN_B
ori r7, r7, 0x800 ; A
BTN_B:
andi. r6, r8, 0x40
beq- BTN_X
ori r7, r7, 0x400 ; B
BTN_X:
andi. r6, r8, 0x8
beq- BTN_Y
ori r7, r7, 0x1080 ; - and toggle pointer
BTN_Y:
andi. r6, r8, 0x20
beq- BTN_L
ori r7, r7, 0x180 ; 2 and toggle pointer
BTN_L:
andi. r6, r8, 0x2000
beq- BTN_R
ori r7, r7, 0x80 ; toggle pointer
BTN_R:
andi. r6, r8, 0x200
beq- BTN_ZL
ori r7, r7, 0x2000 ; Z
BTN_ZL:
andi. r6, r8, 0x80
beq- BTN_ZR
ori r7, r7, 0x1040 ; - and enable pointer
BTN_ZR:
andi. r6, r8, 0x4
beq- BTN_PLUS
ori r7, r7, 0x50 ; + and enable pointer
b BTN_PLUS
BTN_PLUS:
andi. r6, r8, 0x400
beq- BTN_MINUS
ori r7, r7, 0x90 ; + and toggle pointer
BTN_MINUS:
andi. r6, r8, 0x1000
beq- DONE
ori r7, r7, 0x200 ; 1
DONE:
mr r8, r7
blr
RETURN:
The ; comments at the start are the addresses to insert the code which you can paste into CodeWrite along with the assembly to get a Gecko code of the same, and from there you can adjust it however you see fit. I know it's pretty daunting to look at, but the parts you want to change are the lines that go ori r7, r7, 0xXXXX. They have comments after them like ; 1 to indicate what button that number means. Some of them are pressing multiple buttons simultaneously, like 0x90 means 0x80 (toggle pointer) plus 0x10 (the Wiimote Plus button).
Yeah, Fluidity does seem like a bit of a complicated one overall. I still haven't looked into it yet, but it's a game I really like, so definitely one I'll make an attempt at. Whether that will be fruitful, who knows; there's plenty of games I've looked into but haven't been successful in hacking, with those games falling onto kind of a spectrum from "I want to keep trying on that one" to "I'll die if I look at that game for one more second."
That is definitely a cool feature, but sorry, not likely to be something I can do. That would require an understanding of how each individual game handles acceleration and braking, since that's all game-specific code. Finding how it works in a one game wouldn't really help me to understand how/where vehicle movement is handled in a different game entirely. I think the case where it would be most likely to be achievable by me would be if there's games that support using the right analog stick to accelerate/brake. It would probably be possible to reconfigure the analog shoulder input to handle existing right stick accelerating/braking, and it would have to be truly analog already--unlike Mario Kart Wii where the right stick behaves like two buttons rather than the analog values being meaningful.
I'll die if I look at this game for one more second.
Epic Mickey is somehow another paint-based 3D platformer developed by a third-party which broke through Nintendo's stranglehold on the Wii. Developed exclusively for the console by Warren Spector's Junction Point Studios, Epic Mickey features the gameplay hook of an interactive world that Mickey can change at will using paint or thinner. With an RPG-influenced quest system, the player's choices also affect Mickey's appearance and skill growth. Lauded for its creative design and reimagining of Disney history, the game was also derided for its poor camera and complex controls. A recent HD remake saw much improved review scores, but ... here's this one!
There is one motion input which I did not solve here: when you simultaneously shake both the Wii Remote and Nunchuk, Mickey fires off all three Guardians (Tint/Turp spirits) at once. You won't be able to do that move with this hack; instead, you'll have to fire off all three individually using separate Nunchuk shakes (R button). It would be nice, but it's entirely playable without it.
The accelerometer in the Nunchuk is probably the single part of KPAD that I understand the least. I started looking at this game about seven weeks ago. This is the closest I've gotten to understanding how the Nunchuk works, which was just barely enough to get a generic Nunchuk waggle working.
The total number of different inputs in this game is more than the number of buttons on a Classic Controller. Epic Mickey uses 8 buttons and four motion inputs, plus the infra-red pointer. The Classic Controller has 10 buttons and a Right Stick to cover all of that. I had to sacrifice the D-Pad to get some extra inputs, hence having L+Right Stick emulate the D-Pad.
Epic Mickey already has an infamously difficult camera; losing direct camera control here would not be great, so D-Pad Left/Right are intact for lateral camera movements in addition to the L+Right Stick method. However, for looking up/down, only the L+Right Stick method is available here. This can occasionally be awkward because L is also your lock-on button when near enemies. This does mean you may have trouble moving the camera up/down when enemies are nearby, but you'll usually only need to do this during platforming segments, not combat.
Controls here are a mix of the remake and just mapping button-for-button. As mentioned, this game has a lot of inputs and mapping everything like the remake would make things like the menus completely incomprehensible (e.g. I can't really move the Plus and Minus buttons because when the game shows a button prompt in the menu it will be completely wrong and confusing). This is also why the A (confirm/jump) button is double-mapped on both A and B, so that menu and interaction prompts which want you to press A will work normally, but you still jump with B like a normal game. The one thing to be careful of is that when a prompt wants you to press B to cancel, that's ZR.
Technical Notes
Codes:
C2: bypass Nunchuk check
C2, C2 and C2 in read_kpad_acc(): Wiimote shakes and tilts; forcing the Nunchuk accelerometer to be "read" even when the extension controller type is Classic Controller; injecting fake Nunchuk accelerometer data before processing
these changes will overwrite memory where actual Classic Controller input is normally stored, so this needs to be backed up
C2 in calc_dpd_variable(): infra-red pointer emulation
04, 04 and C2 in read_kpad_ext(): redirect left stick into Nunchuk analog stick; redirect right stick into (hopefully) free memory so it isn't erased by accelerometer; right stick D-pad emulation
Thanks. That was the clue. I changed 2082 to 2002 and the Turbo action was gone from ZL. The only downside now is that I have the back button on ZL in the menu instead of B, but that's just a little thing to keep in mind.
Hi guys. I have a tip for people who have injected little king's story on Wii u.
When you press home button or when you lose Wii u signal, you can't reconnecting gamepad.
All you gotta do is download wiiscrubber, extract the main.dol of your iso, open it in HxD, search 4BFFE7E1 line on hexadecimal research tool, and replace it with 60000000. Then replace the original main.dol with this modified main.dol and inject your new modified iso.
You'll still need to shutdown Wii u for leaving the game but this tip avoid the gamepad reconnection issue.
Found this tip on wiivc injector compatibility list (issue related for nascar kart racing).
So i managed to apply this method for little king's story, and it works !
Hi guys. I have a tip for people who have injected little king's story on Wii u.
When you press home button or when you lose Wii u signal, you can't reconnecting gamepad.
All you gotta do is download wiiscrubber, extract the main.dol of your iso, open it in HxD, search 4BFFE7E1 line on hexadecimal research tool, and replace it with 60000000. Then replace the original main.dol with this modified main.dol and inject your new modified iso.
You'll still need to shutdown Wii u for leaving the game but this tip avoid the gamepad reconnection issue.
Found this tip on wiivc injector compatibility list (issue related for nascar kart racing).
So i managed to apply this method for little king's story, and it works !
Have you tried the deflicker filter option as well? I would love to play this game on the wii u gamepad, but it's just too much blur for my eyes. Maybe it's possible to integrate the deactivated deflicker to the main.dol just like in super mario galaxy. @Vague Rant do you know if the deflicker code of super mario galaxy will also work on little king's story?
It wasn't too long ago we saw our first glimpse of Courage Reborn, another Twilight Princess PC port in the works based on last year's decompilation efforts. With...
After much speculation, Nintendo has finally followed their competitors in announcing price increases for their hardware.
You can find a breakdown of what's changing...
Seemingly out of nowhere a PC port for Pokemon Platinum has surfaced online, bundled alongside the source code for those interested in building and developing it for...
Airing last night with very little in the way of warning, a brand new Nintendo Direct was aired. Running for 15 minutes in total, it took a moment to celebrate the...
Known more widely for their unusual stock price in modern times, GameStop has seen a steady decline as the go-to retail space for US gamers. In what feels like an...
With very little in the way of announcement, Valve has today increased the price of the Steam Deck but some fairly considerable margins. Both of the available models...
As a part of their Financial Results Briefing for the previous year, Nintendo president Shuntaro Furukawa took to the floor to answer key questions around the Switch...
Earlier this year, Sony announced major price increases for the PS5, PS5 Pro, and PlayStation Portal. Now the company is raising prices again, this time for...
We are once again here to tell you about a game leaking before its release, but for once, it's not one published by Nintendo. The game files for Microsoft's upcoming...
Continuing with the great news of Pokémon Platinum getting a native unofficial PC port just a few days ago, today, yet another classic title from the franchise has...
It wasn't too long ago we saw our first glimpse of Courage Reborn, another Twilight Princess PC port in the works based on last year's decompilation efforts. With...
With very little in the way of announcement, Valve has today increased the price of the Steam Deck but some fairly considerable margins. Both of the available models...
After much speculation, Nintendo has finally followed their competitors in announcing price increases for their hardware.
You can find a breakdown of what's changing...
Airing last night with very little in the way of warning, a brand new Nintendo Direct was aired. Running for 15 minutes in total, it took a moment to celebrate the...
Known more widely for their unusual stock price in modern times, GameStop has seen a steady decline as the go-to retail space for US gamers. In what feels like an...
Seemingly out of nowhere a PC port for Pokemon Platinum has surfaced online, bundled alongside the source code for those interested in building and developing it for...
Earlier this year, Sony announced major price increases for the PS5, PS5 Pro, and PlayStation Portal. Now the company is raising prices again, this time for...
As a part of their Financial Results Briefing for the previous year, Nintendo president Shuntaro Furukawa took to the floor to answer key questions around the Switch...
The latest in a growing number of native PC ports, Paper Mario ReCut got its first pre-release build earlier this week. Based on the N64 recompilation toolchain, the...
For the first time in 13 years, the Call of Duty series will again return to Nintendo's consoles. Set to launch on the 23rd of October, the latest release, Modern...