Force Character Selection [Vega] This code will allow you to choose the character that you will be forced to select for 1P & 2P/COM. Code allows you to pick a different forced character between 1P & 2P/COM. You will see on the Character Selection screen that you can only select said character. Works everywhere. XX = Character to force for 1P YY = Character to force for 2P/COM NTSC-U C202A7A4 0000000A 81CD93B8 2C0E0000 4182000C 81CE0560 4800000C 81CD94B0 81CE09B0 7C0E9000 3BA000XX 41820008 3BA000YY 38000069 7C0903A6 3BC00000 7FBFEB78 BFB00000 3A100024 4200FFF8 B9C10008 00000000 Code creator: Vega Source~ #START ASSEMBLY #Address #NTSC-U = 8002A7A4 #Register Notes #r0, r14 thru r31 safe before original instruction #r16 = Points to start of character section of writeup table (could be 1P or 2P/COM's section) #r18 = Points to start of character section of lookup table #Load up Single/Ultimate-Training Exact Character Lookup Pointer for later pointer check lwz r14, -0x6C48 (r13) #Check for null pointer. If so, we are on Team/DP cmpwi r14, 0 beq- team_dp #We're on Single Battle or Ultimate Training, continue with the loads lwz r14, 0x0560 (r14) b check_pointers #We're on Team/DP, re-do the pointer loading to get Exact 1P Character Writeup Pointer team_dp: lwz r14, -0x6B50 (r13) lwz r14, 0x09B0 (r14) #Check loaded r4 pointer vs what's in r18 check_pointers: cmpw r14, r18 #Preset 1P's forced character before Branch li r29, 0x36 #SS4 Gogeta used for compilation, adjust this accordingly. #Branch. If taken, then we were on 1P. beq- setup_loop #We're on 2P/COM, set User's forced character for 2P/COM li r29, 0x93 #Omega Shenron used for compilation, adjust this accordingly. #Set Loop Amount to 105 due to 105 total character slots (15 rows x 7) setup_loop: li r0, 105 mtctr r0 #Set Amount of Sub Characters, we will make it 0 (which is 1 sub character, 0 transformations) to keep code short as possible since we will only need 1 sub character per main character li r30, 0 #Copy over r29 to r31 for stmw usage and that Main Character must be same as Sub Character 1. mr r31, r29 #Loop #Write Main Character & Write Sub Character Amount & Write Sub Character 1 (same value as Main character, no transformations) #Increment r3 to move onto next character loop: stmw r29, 0 (r16) addi r16, r16, 0x24 bdnz+ loop #Original Instruction lmw r14, 0x0008 (sp) #NOTE: Since we are rewriting to the table after it is written to by the game and since we are NOT nulling out the rest of the sub characters, there are leftover data in the character table. Not a big deal, it won't effect anything in game, just wanted to note this down. #Final NOTE: I was gonna hook this at 0x8002A4A8, but the game will do other writes later on (such as 0xA4 on slots 0x1 and 0x2 of final character row for 1P only (?)) and other possible unkown writes. Therefore, it's hooked at function epilogue. #END ASSEMBLY