Transform Into Whoever & Whenever [Vega] The ultimate transformation code! Features: Press Activator(s) whenever you want to do the transformation(s) Choose whichever character(s) you want to transform to Choose whether or not the transformation(s) occur for you (P1) or the opponent (P2/COM) Choose the Transformation Animation Type (Power Up or Power Down) Non-transformable characters can now transform! Normal (legit) transformations remain completely functional Helpful Tip: When choosing your activator(s), you don't want to use any button that is use for a move such as charging power or blocking. The game only allows transformations to occur when you are in some form of idle. So for example, if you are using GCN, Y and the D-Pad buttons work great, but Z and X button cause issues (code will simply not execute). Code creator: Vega XXXX = Controller Address ZZZZ = Button Activator Link to X,Y,Z values - https://mariokartwii.com/nonmkwcodes/dbzbt3/bt3gecko.txt KK = Character List of Character values - https://mariokartwii.com/nonmkwcodes/dbzbt3/values.txt P = Player 1 or Player 2/COM 0 = P1 1 = P2/COM T = Transformation Animation Type 0 = Power Up 3 = Power Down NTSC-U (1 option) 0405727C 2C1F0000 283BXXXX YYYYZZZZ C205727C 00000007 3860000P 3C008004 60002A68 7C0903A6 4E800421 2C030000 41A2FFFC 7C03E800 4082000C 39801234 3BE0000T 2C1F0000 60000000 00000000 E0000000 80008000 C20572CC 00000003 2C0C1234 40820008 38600001 2C030000 60000000 00000000 C20D71B4 00000003 88630098 2C0C1234 40820008 386000KK 60000000 00000000 Here are multi option configurations. Obviously there are extra set(s) of XXXX, YYYY, ZZZZ, P, T, & KK for filling in another diiferent activator for a different transformation type and character ID. NTSC-U (2 options) 04000CD0 00000000 283BXXXX YYYYZZZZ 04000CD0 0P000TKK E0000000 80008000 283BXXXX YYYYZZZZ 04000CD0 0P000TKK E0000000 80008000 C205727C 00000009 3D808000 816C0CD0 2C0B0000 41820030 886C0CD0 3C008004 60002A68 7C0903A6 4E800421 2C030000 41A2FFFC 7C03E800 4082000C 8BEC0CD2 39801234 2C1F0000 60000000 00000000 C20572CC 00000003 2C0C1234 40820008 38600001 2C030000 60000000 00000000 C20D71B4 00000003 88630098 2C0C1234 4082000C 3C608000 88630CD3 00000000 NTSC-U (3 options) 04000CD0 00000000 283BXXXX YYYYZZZZ 04000CD0 0P000TKK E0000000 80008000 283BXXXX YYYYZZZZ 04000CD0 0P000TKK E0000000 80008000 283BXXXX YYYYZZZZ 04000CD0 0P000TKK E0000000 80008000 C205727C 00000009 3D808000 816C0CD0 2C0B0000 41820030 886C0CD0 3C008004 60002A68 7C0903A6 4E800421 2C030000 41A2FFFC 7C03E800 4082000C 8BEC0CD2 39801234 2C1F0000 60000000 00000000 C20572CC 00000003 2C0C1234 40820008 38600001 2C030000 60000000 00000000 C20D71B4 00000003 88630098 2C0C1234 4082000C 3C608000 88630CD3 00000000 To add even more options, just add more instances of... 283BXXXX YYYYZZZZ 04000CD0 0P000TKK E0000000 80008000 ...underneath 04000CD0 00000000. Code creator: Vega =============== Sources for Single Options 'Source for RAM Write on Single Option' It rewrites the Original Instruction at the address, so that way if the C2 gets called and the activator is not being pressed after that, the C2 Hook will be overwritten thus not allowing the code to execute anymore. --- 1st ASM #START ASSEMBLY #Notes: When user chooses to do Single Option, this ASM is auto deactivated via a RAM Write (writing the original instruction) then an if-statement then this ASM (followed by a final terminator ofc) #Address #NTSC-U = 8005727C #r0 = safe #r3 thru r6 = safe #CTR = safe #LR = safe #r29 = Current Master Pointer #Set User Slot aka r3 arg li r3, 0 #1P used for compilation, adjust this accordingly #Call GetMasterPointer, r0, r3 thru r6, CTR, and LR get used only #All registers are safe to use without backup lis r0, 0x8004 ori r0, r0, 0x2A68 mtctr r0 bctrl #Check return value. If null (should never be), loop forever infi_loop: cmpwi r3, 0 beq- infi_loop #Check returned Master Pointer vs current Master Pointer in r29 cmpw r3, r29 bne- original_instruction #Master pointers are match! #Set custom Magic ID for later checks in the other two ASM codes li r12, 0x1234 #r12's value remains intact by the time the other two ASM codes need to read it #Set T value #T value (r31) is checked constantly #T value of -1 = Do NOT transform (this occurs for any instance you are not transforming in the game, which is most of the time) #T value of 0 = 1st tranformation. T value of 1 = 2nd transformatino if applicable. T value of 2 = 3rd transformatino if applicable. #T value of 3 = Power Down animatino (goes to normal character base state under legit conditions) #For using this code for 'Power Up' transformations, we can simply set T to 0 regardless of what transformation will result, we don't need to worry about values 1 and 2. li r31, 0 #0 value simply used for compilation, adjust this accordingly #Original Instruction #Game checks if r31 is 0 or higher. If not (-1) none of the child functions for checking transformation validity and doing the transformation are executed original_instruction: cmpwi r31, 0 #END ASSEMBLY --- 2nd ASM #START ASSEMBLY #Before the game calls the child function to actually do the transformation, it calls an earlier child function to do some sort of sanity/validity checks. From what I've seen under normal conditions, if the transformation is legit, the 'sanity/validity' checks always passed. But just in case, let's be safe and allow the game to do the proepr checks whenever the code (1st ASM) did not start a hacked transformation #Address #NTSC-U = 800572CC #Check Magic ID that was set by 1st ASM Code cmpwi r12, 0x1234 bne- original_instruction #Set r3 to tell parent function that child function was a success #The child function does basic checks of various aspects fo the transformation before actually doing the transformation #If r3 = 1, then this tells the game to then go ahead and call the next child function which actually does the transformation execution li r3, 1 #Original Instruction original_instruction: cmpwi r3, 0 #END ASSEMBLY --- 3rd ASM #START ASSEMBLY #Address #NTSC-U = 800D71B4 #Original Instruction; load the Character ID (to transform to) from Memory lbz r3, 0x0098 (r3) #Check Magic ID. Fyi Magic ID will reset itself. cmpwi r12, 0x1234 bne- end_code #Magic ID was found, set custom Character ID to transform to. Overwrite the legit one that was previously loaded from memory li r3, 0xKK #Fill in KK before compiling #End Code end_code: #END ASSEMBLY ======================== Sources for Multi Option 'Source' for RAM Writes on EVA Top RAM Write is to rewrite null word at 0x80000CD0. This is prevent 1st ASM from executing if button activator(s) are not pressed. 'Source' for Button Activator'd RAM Write This will fill in PPPP, T, and KK that the other ASM Codes will utilize. Since null word is no longer here, the transformation will occur (once PPPP is a match). --- 1st ASM #START ASSEMBLY #Notes: Unlike the single option 1st ASM source, this ASM is not preceded in the GCT/Cheat-File with a RAM Write of the Original Instruction. This is because activation is done via reading/writing to the EVA. #Address #NTSC-U = 8005727C #r0 = safe #r3 thru r6 = safe #CTR = safe #LR = safe #r29 = Current Master Pointer #Check for Null word at EVA spot to see if User activated code or not (null = not activated) lis r12, 0x8000 lwz r11, 0x0CD0 (r12) cmpwi r11, 0 beq- original_instruction #User has activated code. Load User Slot (aka r3 arg) from EVA lbz r3, 0x0CD0 (r12) #Call GetMasterPointer, r0, r3 thru r6, CTR, and LR get used only #All registers are safe to use without backup lis r0, 0x8004 ori r0, r0, 0x2A68 mtctr r0 bctrl #Check return value. If null (should never be), loop forever infi_loop: cmpwi r3, 0 beq- infi_loop #Check returned Master Pointer vs current Master Pointer in r29 cmpw r3, r29 bne- original_instruction #Master Pointers are a match, time to transform. Load T value from EVA into r31 lbz r31, 0xCD2 (r12) #Set Magic ID for the other two ASM codes to read li r12, 0x1234 #Original Instruction original_instruction: cmpwi r31, 0 #END ASSEMBLY -- 3rd ASM. 2nd ASM is the exact same for both single and multi option versions of the code, no need to list it again. #START ASSEMBLY #Address #NTSC-U = 800D71B4 #Original Instruction, load character ID from memory lbz r3, 0x0098 (r3) #Check Magic ID. Fyi Magic ID will reset itself cmpwi r12, 0x1234 bne- end_code #Load custom Character ID from EVA lis r3, 0x8000 lbz r3, 0x0CD3 (r3) #End Code end_code: #END ASSEMBLY