Fix All Binds; GCN [Vega] The GCN controller creates the following problems for the Game... 1. C stick left/right is used for Teammate Switching which can accidentally cause you to use your Emergency Blast Wave since that uses the same controller inputs 2. C stick left/right is also used for Camera Left/Right Adjustment which can accidentally cause you to use your Emergency Blast Wave since that uses the same controller inputs Issue #1 is known as Team Bind. Issue #2 is known as Camera Bind. Not only do we have these binds, but whenever you are switching Teammates, you will also be force to switch Camera View. At first thought, it seems that the GCN simply doesn't have enough buttons, but actually this is a Developer mistake. Other than the main menu scrolling, the Analog Stick and Dpad have 100% the same functionality. Anything that can be done on the Analog Stick, can be done with the DPad, and vice versa. So why are we wasting the DPad? We can use it to fix the Binds. Therefore, what we can do is disable the DPad everywhere by default and then set up new button configurations for Teammate switching and Camera Adjustments. This code will setup the following new button configurations... DPad Up = cycle left Teammate DPad Down = cycle right Teammate DPad Left = adjust Camera left DPad Right = adjust Camera Right C stick no longer effects Teammate switching and Camera adjustments. Final NOTE: For this code to work properly. P1's GCN must be in Port 1. P2's (if present) GCN must be i Port 2. Enjoy! NTSC-U C221FD94 00000007 A0010008 A0A10014 3D808000 5404073E 54A6073E 54000036 54A50036 988C03F4 98CC03F6 B0010008 B0A10014 4E800020 60000000 00000000 C2044A90 0000000B 39200001 3D808000 390003F0 817D000C 556B083C 7D6B4214 394B0004 7D4A60AE 7C0A4800 38600000 396B0007 41820010 38000000 7C0B61AE 4800001C 7C0B60AE 2C000001 41820010 38000001 7C0B61AE 38600001 00000000 C2044AB0 00000008 39200002 396B0001 7C0A4800 38600000 41820010 38000000 7C0B61AE 4800001C 7C0B60AE 2C000001 41820010 38000001 7C0B61AE 38600001 60000000 00000000 C20545B8 0000000B 39200008 3D808000 390003F0 817D000C 556B083C 7D6B4214 394B0004 7D4A60AE 7C0A4800 38600000 41820010 38000000 7C0B61AE 4800001C 7C0B60AE 2C000001 41820010 38000001 7C0B61AE 38600001 60000000 00000000 C20545E0 00000008 39200004 396B0001 7C0A4800 38600000 41820010 38000000 7C0B61AE 4800001C 7C0B60AE 2C000001 41820010 38000001 7C0B61AE 38600001 60000000 00000000 Code creator: Vega ----------------------------------- 1st ASM Source (Grab DPad values, Store them somewhere safe, Disable DPad) #Address NTSC-U Launch Ver 8021FD94 #Load Port1 & Port1 #sp + 8 = PADRead dump spot port 1 #sp + 0x14 = PADRead dump spot port 2 #Load Port 1 Regular Buttons lhz r0, 0x8 (sp) lhz r5, 0x14 (sp) #Save the DPad bits to EVA #Remove DPad bits from Dump spot (disable them) lis r12, 0x8000 clrlwi r4, r0, 28 clrlwi r6, r5, 28 clrrwi r0, r0, 4 clrrwi r5, r5, 4 stb r4, 0x3F4 (r12) stb r6, 0x3F6 (r12) sth r0, 0x8 (sp) sth r5, 0x14 (sp) #Original instruction is a blr blr ########## 2nd ASM (Replace C Stick Left for Camera Bind) #Address NTSC-U Launch Ver 80044A90 #Set Dpad Left to Replace C Stick Left li r9, 0x0001 #Set EVA upper lis r12, 0x8000 #Set index offsets li r8, 0x03F0 #Base lwz r11, 0xC (r29) #Use slot (0 v 1) slwi r11, r11, 1 add r11, r11, r8 #Add in mult'd slot #3F0, 3F1 = P1, #3F2, 3F3 = P2 #Load disabled D-Pad bits that were saved from PADRead addi r10, r11, 4 #P1 will have this load using offset 3F4, P2 as 3F6 lbzx r10, r10, r12 #Compare saved DPad value vs DPad left #No need for ANDing, only one DPad value can be present at a time cmpw r10, r9 li r3, 0 #Present false return value for Caller addi r11, r11, 7 #Set P1/P2 camera left status offset, #3F7 for P1, #3F9 for P2 beq- pressed #Mask not pressed, reset button status li r0, 0 stbx r0, r11, r12 b end #r3 still 0 #Button pressed check and adjust status pressed: lbzx r0, r11, r12 cmpwi r0, 1 beq- end #r3 still 0 #Set status, set r3 to 1 li r0, 1 stbx r0, r11, r12 li r3, 1 #Set true return value for Caller #End end: # ######### 3rd ASM (Replace C Stick Right for Camera Bind) #Address NTSC-U Launch Ver 80044AB0 #NOTE r5 thru r12 are kept intact from previous ASM #Set DPad right to replace C Stick Right li r9, 0x0002 #Add 1 to r11 offset, can't collide with Button 1 status addi r11, r11, 1 #Compare saved DPad value vs DPad right #No need for ANDing, only one DPad value can be present at a time cmpw r10, r9 li r3, 0 #Preset false return value for Caller beq- pressed #Mask not pressed, reset button status li r0, 0 stbx r0, r11, r12 #r12 still 0x80000000 b end #Button pressed, check & adjust status pressed: lbzx r0, r11, r12 cmpwi r0, 1 beq- end #r3 still 0 #Set status, set r3 to 1/true li r0, 1 stbx r0, r11, r12 li r3, 1 #Set true return value for Caller #End end: # ################# 4th ASM (Replace C stick left for Team Bind) #Address NTSC-U Launch Ver 800545B8 #r10 thru r12 gets carried over to next ASM!!! they are preserved #Set DPad Up to replace C stick Left li r9, 0x0008 #Set EVA upper lis r12, 0x8000 #Set index offsets li r8, 0x03F0 #Base lwz r11, 0xC (r29) #Use slot (0 v 1) slwi r11, r11, 1 add r11, r11, r8 #Add in mult'd slot #3F0, 3F1 = P1, #3F2, 3F3 = P2 #Load disabled D-Pad bits that were saved from PADRead addi r10, r11, 4 #P1 will have this as 3F4, P2 as 3F6 lbzx r10, r10, r12 #Compare saved DPad value vs DPad up #No need for ANDing, only one DPad value can be present at a time cmpw r10, r9 li r3, 0 #Preset false return value for Caller beq- pressed #Mask not pressed, reset button status li r0, 0 stbx r0, r11, r12 b end #r3 still 0 #Button pressed check and adjust status pressed: lbzx r0, r11, r12 cmpwi r0, 1 beq- end #r3 still 0 #Set status, set r3 to 1 li r0, 1 stbx r0, r11, r12 li r3, 1 #Set true return value for Caller #End end: # ################ 5th ASM (Replace C stick right for Team Bind) #Address NTSC-U Launch Ver 800545E0 #NOTE this carries over info from nearby 1st ASM #r10 = AND result #r11 = offset #r12 = 0x80000000 #Set DPad down to replace C stick Right li r9, 0x0004 #Add 1 to offset, can't collide with Button 1 status addi r11, r11, 1 #Compare saved DPad value vs DPad down #No need for ANDing, only one DPad value can be present at a time cmpw r10, r9 li r3, 0 #Preset false return value for Caller beq- pressed #Mask not pressed, reset button status li r0, 0 stbx r0, r11, r12 b end #r3 still 0 #Button pressed check and adjust status pressed: lbzx r0, r11, r12 cmpwi r0, 1 beq- end #r3 still 0 #Set status, set r3 to 1 li r0, 1 stbx r0, r11, r12 li r3, 1 #Set true return value for Caller #End end: #