Cocoto Kart Racer - Weapon/Item Auto-fire
C0000000 00000005
3D60801A 616BD000
A18B0A8C 2C0C0800
41A2000C 2C0C0C00
4C820020 38A00000
B0AB0A94 4E800020
On yet another Wii game, I found a button activator address that when held to 0x0, gives all buttons auto-fire
capabilities.
Searching for the button activator addresses returned 22 results.
In the watch window, one by one, I wrote 0x0 to the addresses and checked to see if pressing the A button gave me auto-fire.
The third address in the list gave me just that.
Rather than using the button write cycle, I wrote a simple C0 code to do the trick.
I used one of the nonauto-fire button activator addresses for the conditionals.
The nonauto-fire button activator address is: 0x801ADA8C
The auto-fire button activator address is: 0x801ADA94
I needed two conditionals. One for when only the fire (A) button is pressed, and the other for when the accelerator (B) button is being pressed also.
#Source
#C0 insert:
lis r11, 0x801A #ASM loads r11 with upper half-word of button activator address(es)
ori r11, r11, 0xD000 #ASM loads r11 lower half-word of button activator address(es)
lhz r12, 0xA8C (r11) #ASM loads r12 with current value at nonauto-fire button address
cmpwi r12, 0x800 #ASM check to see if "A" being pressed
beq+ fire_button_pressed
cmpwi r12, 0xC00 #ASM check to see if "A and B" are being pressed
bnelr- #if not, end C0
fire_button_pressed:
li r5, 0x0 #ASM load r5 with 0x0
sth r5, 0xA94 (r11) #ASM stores 0x0 at auto-fire button activator address
blr #end C0
Works great!!!
C0000000 00000005
3D60801A 616BD000
A18B0A8C 2C0C0800
41A2000C 2C0C0C00
4C820020 38A00000
B0AB0A94 4E800020
On yet another Wii game, I found a button activator address that when held to 0x0, gives all buttons auto-fire
capabilities.
Searching for the button activator addresses returned 22 results.
In the watch window, one by one, I wrote 0x0 to the addresses and checked to see if pressing the A button gave me auto-fire.
The third address in the list gave me just that.
Rather than using the button write cycle, I wrote a simple C0 code to do the trick.
I used one of the nonauto-fire button activator addresses for the conditionals.
The nonauto-fire button activator address is: 0x801ADA8C
The auto-fire button activator address is: 0x801ADA94
I needed two conditionals. One for when only the fire (A) button is pressed, and the other for when the accelerator (B) button is being pressed also.
#Source
#C0 insert:
lis r11, 0x801A #ASM loads r11 with upper half-word of button activator address(es)
ori r11, r11, 0xD000 #ASM loads r11 lower half-word of button activator address(es)
lhz r12, 0xA8C (r11) #ASM loads r12 with current value at nonauto-fire button address
cmpwi r12, 0x800 #ASM check to see if "A" being pressed
beq+ fire_button_pressed
cmpwi r12, 0xC00 #ASM check to see if "A and B" are being pressed
bnelr- #if not, end C0
fire_button_pressed:
li r5, 0x0 #ASM load r5 with 0x0
sth r5, 0xA94 (r11) #ASM stores 0x0 at auto-fire button activator address
blr #end C0
Works great!!!