BATTLE.BIN System Functions
Jump to navigation
Jump to search
Alternate documentation here: 00141b0c - 00142504
00141b0c: 27bdffc8 addiu r29,r29,0xffc8 # 00141b10: afb20018 sw r18,0x0018(r29) # 00141b14: 00809021 addu r18,r4,r0 #r18 = r4 ? 00141b18: afb3001c sw r19,0x001c(r29) # 00141b1c: 00a09821 addu r19,r5,r0 #r19 = r5 ?? 00141b20: afb60028 sw r22,0x0028(r29) # 00141b24: 00c0b021 addu r22,r6,r0 #r22 = r6 (Unit ID?) 00141b28: afb10014 sw r17,0x0014(r29) # 00141b2c: 00e08821 addu r17,r7,r0 #r17 = r7 ??? 00141b30: afb40020 sw r20,0x0020(r29) # 00141b34: 8fb40048 lw r20,0x0048(r29) #r20 = Something from Stack? 00141b38: afb7002c sw r23,0x002c(r29) # 00141b3c: 8fb7004c lw r23,0x004c(r29) #r23 = Some pointer from Stack?? 00141b40: 3c028016 lui r2,0x8016 # 00141b44: 24426b10 addiu r2,r2,0x6b10 #r2 = 0x80166b10 (Menu Data pointer?) 00141b48: 3c018017 lui r1,0x8017 # 00141b4c: ac223cb8 sw r2,0x3cb8(r1) #Store r2 to 0x80173cb8 00141b50: 2402ffff addiu r2,r0,0xffff #r2 = -1 00141b54: afbf0030 sw r31,0x0030(r29) # 00141b58: afb50024 sw r21,0x0024(r29) # 00141b5c: afb00010 sw r16,0x0010(r29) # 00141b60: 3c018016 lui r1,0x8016 # 00141b64: ac225f84 sw r2,0x5f84(r1) #Store r2 to 0x80165f84 (Menu/Message display byte) 00141b68: 3c018015 lui r1,0x8015 # 00141b6c: a020d324 sb r0,-0x2cdc(r1) #Clear 0x8014d324 (No Ability Selected?) 00141b70: 0c0602bf jal 0x00180afc #Get Unit's Data Pointer 00141b74: 02c02021 addu r4,r22,r0 #r4 = r22 (Unit ID?) 00141b78: 00408021 addu r16,r2,r0 #r16 = Unit's Data Pointer 00141b7c: 34020008 ori r2,r0,0x0008 #r3 = 8
00141b80: 164200a9 bne r18,r2,0x00141e28 #If r18 (initial parameter r4) = 0x08 /Else Branch 00141b84: 00000000 nop # 00141b88: 0c04ed64 jal 0x0013b590 #Get Script Variable 00141b8c: 34040027 ori r4,r0,0x0027 #r4 = 0x27 (Current Event variable) 00141b90: 00408821 addu r17,r2,r0 #r17 = Current Event ID 00141b94: 2622fe66 addiu r2,r17,0xfe66 #r2 = Current Event ID - 19A 00141b98: 2c420010 sltiu r2,r2,0x0010 #Tutorial check? 00141b9c: 10400005 beq r2,r0,0x00141bb4 #If not Tutorial Event? /Else Branch 00141ba0: 34020002 ori r2,r0,0x0002 #r2 = 2 00141ba4: 1262024c beq r19,r2,0x001424d8 #If r19 (initial parameter r5) is NOT 2 /Else Branch to END 00141ba8: 34020001 ori r2,r0,0x0001 #r2 = 1 00141bac: 0805078c j 0x00141e30 #Jump 00141bb0: 00000000 nop # 00141bb4: 3c028016 lui r2,0x8016 # 00141bb8: 94425ff6 lhu r2,0x5ff6(r2) #r2 = ?? 00141bbc: 00000000 nop # 00141bc0: 10400005 beq r2,r0,0x00141bd8 #If ?? is NOT 0 /Else Branch 00141bc4: 34020002 ori r2,r0,0x0002 #r2 = 2 00141bc8: 12620243 beq r19,r2,0x001424d8 #If r19 (initial parameter r5) is NOT 2 /Else Branch to END 00141bcc: 34020001 ori r2,r0,0x0001 #r2 = 1 00141bd0: 0805078c j 0x00141e30 #Jump 00141bd4: 00000000 nop # 00141bd8: 34020001 ori r2,r0,0x0001 #r2 = 1 00141bdc: 12620094 beq r19,r2,0x00141e30 #If r19 (initial parameter r5) is NOT 1 /Else Branch 00141be0: 00000000 nop # 00141be4: 0c053325 jal 0x0014cc94 #Check Thread Running Status 00141be8: 34040001 ori r4,r0,0x0001 #r4 = 1 (Thread ID for Events) 00141bec: 10400009 beq r2,r0,0x00141c14 #If Event is already running /Else Branch 00141bf0: 00009021 addu r18,r0,r0 #r18 = 0 00141bf4: 34040007 ori r4,r0,0x0007 #r4 = 7 00141bf8: 0c01127e jal 0x000449f8 #000449f8 - 000449fc Null Routine 00141bfc: 34050003 ori r5,r0,0x0003 #r5 = 3 00141c00: 34020002 ori r2,r0,0x0002 #r2 = 2 00141c04: 12620234 beq r19,r2,0x001424d8 #If r19 (initial parameter r5) is 2 /Else Branch to END 00141c08: 34020001 ori r2,r0,0x0001 #r2 = 1 00141c0c: 0805078c j 0x00141e30 #Jump 00141c10: 00000000 nop # 00141c14: 3c018015 lui r1,0x8015 # 00141c18: ac36d304 sw r22,-0x2cfc(r1) #Store r22 (Unit ID?) to 0x8014d304 00141c1c: 00002021 addu r4,r0,r0 #r4 = 0 (kind of a counter) 00141c20: 2414fffd addiu r20,r0,0xfffd #r20 = -3 #Loop Start: 00141c24: 24900001 addiu r16,r4,0x0001 #r16 = r4 + 1 00141c28: 0c0602cb jal 0x00180b2c #Check Base Class | Ramza Causes Game Over 00141c2c: 02002021 addu r4,r16,r0 # 00141c30: 14540002 bne r2,r20,0x00141c3c #If Ramza is Crystal/Treasure/othwise disabled? (Petrified?) 00141c34: 02002021 addu r4,r16,r0 # 00141c38: 26520001 addiu r18,r18,0x0001 #Increment r18 if Ramza (any Chapter) is Crystal/Treasure/othwise disabled 00141c3c: 28820003 slti r2,r4,0x0003 #Check Ramza classes only 00141c40: 1440fff8 bne r2,r0,0x00141c24 #Loop 00141c44: 00000000 nop # 00141c48: 0c060cdd jal 0x00183374 #Check Battle Outcome | Gameover by party incapacitated 00141c4c: 00000000 nop # 00141c50: 04400003 bltz r2,0x00141c60 #If battle has NOT been lost /Else Branch 00141c54: 00000000 nop # 00141c58: 12400018 beq r18,r0,0x00141cbc #If Ramza is Crystal/Treasure/othwise disabled /Else Branch 00141c5c: 00000000 nop # #Defeated 00141c60: 0c04ed64 jal 0x0013b590 #Get Script Variable 00141c64: 340401fd ori r4,r0,0x01fd #r4 = 0x01fd (Battle has not yet begun?) 00141c68: 14400014 bne r2,r0,0x00141cbc #If Battle has NOT begun? /Else Branch 00141c6c: 34020002 ori r2,r0,0x0002 #r2 = 2 00141c70: 12620010 beq r19,r2,0x00141cb4 #If r19 (initial parameter r5) is NOT 2 /Else Branch 00141c74: 34040027 ori r4,r0,0x0027 #r4 = 0x27 (Current Event Variable ID) 00141c78: 0c04ed91 jal 0x0013b644 #Set Script Variable 00141c7c: 34050190 ori r5,r0,0x0190 #r5 = 0x0190 (Random Battle Setup ID) 00141c80: 00002021 addu r4,r0,r0 #r4 = 0 00141c84: 340500ff ori r5,r0,0x00ff #r5 = 0xff 00141c88: 0c04f58d jal 0x0013d634 #Store unit names and some event block data 00141c8c: 340600ff ori r6,r0,0x00ff #r6 = 0xff 00141c90: 34020001 ori r2,r0,0x0001 #r2 = 1 00141c94: 3c018016 lui r1,0x8016 # 00141c98: a4226048 sh r2,0x6048(r1) #Store 1 at 0x80166048 (freezes control to go to next event?) 00141c9c: 3c018017 lui r1,0x8017 # 00141ca0: a4223cb0 sh r2,0x3cb0(r1) #Store 1 at 0x80173cb0 (??) 00141ca4: 0c04fcff jal 0x0013f3fc #0013f3fc - 0013f49c 00141ca8: 00000000 nop # 00141cac: 08050936 j 0x001424d8 #Jump to END 00141cb0: 34020002 ori r2,r0,0x0002 #r2 = 2 00141cb4: 08050782 j 0x00141e08 #Jump 00141cb8: 34020190 ori r2,r0,0x0190 #r2 = 0x0190 (Random Battle Setup Event ID) #Not Defeated 00141cbc: 3c028017 lui r2,0x8017 # 00141cc0: 84423cb0 lh r2,0x3cb0(r2) #r2 = Value at 0x80173cb0 (??) 00141cc4: 00000000 nop # 00141cc8: 1040001e beq r2,r0,0x00141d44 #If ?? is NOT 0 /Else Branch 00141ccc: 00000000 nop # 00141cd0: 0c05096c jal 0x001425b0 #Process Scenario Conditionals 00141cd4: 00000000 nop # 00141cd8: 10400016 beq r2,r0,0x00141d34 #If an Event should be run /Else Branch 00141cdc: 34020002 ori r2,r0,0x0002 #r2 = 2 00141ce0: 1262000b beq r19,r2,0x00141d10 #If r19 (initial parameter r5) is NOT 2 /Else Branch 00141ce4: 00002021 addu r4,r0,r0 #r4 = 0 00141ce8: 340500ff ori r5,r0,0x00ff #r5 = 0xff 00141cec: 0c04f58d jal 0x0013d634 #Store unit names and some event block data 00141cf0: 340600ff ori r6,r0,0x00ff #r6 = 0xff 00141cf4: 34020001 ori r2,r0,0x0001 #r2 = 1 00141cf8: 3c018016 lui r1,0x8016 # 00141cfc: a4226048 sh r2,0x6048(r1) #Store 1 to 0x80166048 (freezes control to go to next event?) 00141d00: 0c04fcff jal 0x0013f3fc #0013f3fc - 0013f49c 00141d04: 00000000 nop # 00141d08: 08050936 j 0x001424d8 #Jump to END 00141d0c: 34020002 ori r2,r0,0x0002 #r2 = 2 00141d10: 0c04ed64 jal 0x0013b590 #Get Script Variable 00141d14: 34040027 ori r4,r0,0x0027 #r4 = 0x27 (Current Event Variable ID) 00141d18: 3c018017 lui r1,0x8017 # 00141d1c: ac223c74 sw r2,0x3c74(r1) #Store 2 to 0x80173c74 (Next Event?) 00141d20: 34040027 ori r4,r0,0x0027 #r4 = 0x27 (Current Event Variable ID) 00141d24: 0c04ed91 jal 0x0013b644 #Set Script Variable 00141d28: 02202821 addu r5,r17,r0 #r5 = r17 (initial parameter r7 ???) 00141d2c: 08050936 j 0x001424d8 #Jump to END 00141d30: 34020002 ori r2,r0,0x0002 #r2 = 2 00141d34: 126201e8 beq r19,r2,0x001424d8 #If r19 (initial parameter r5) is NOT 2 /Else Branch to END 00141d38: 34020001 ori r2,r0,0x0001 #r2 = 1 00141d3c: 0805078c j 0x00141e30 #Jump 00141d40: 00000000 nop # 00141d44: 0c04ed64 jal 0x0013b590 #Get Script Variable 00141d48: 340401fd ori r4,r0,0x01fd #r4 = 0x01fd (Battle has not yet begun?) 00141d4c: 10400018 beq r2,r0,0x00141db0 #If Battle has begun? /Else Branch 00141d50: 34020002 ori r2,r0,0x0002 #r2 = 2 00141d54: 12620014 beq r19,r2,0x00141da8 #If r19 (initial parameter r5) is NOT 2 /Else Branch 00141d58: 00002021 addu r4,r0,r0 #r4 = 0 00141d5c: 340500ff ori r5,r0,0x00ff #r5 = 0xff 00141d60: 0c04f58d jal 0x0013d634 #Store unit names and some event block data 00141d64: 340600ff ori r6,r0,0x00ff #r6 = 0xff 00141d68: 34020001 ori r2,r0,0x0001 #r2 = 1 00141d6c: 3c018016 lui r1,0x8016 # 00141d70: a4226048 sh r2,0x6048(r1) #Store 1 to 0x80166048 (freezes control to go to next event?) 00141d74: 0c04ed64 jal 0x0013b590 #Get Script Variable 00141d78: 340401fe ori r4,r0,0x01fe #r4 = 0x01fe (Next Random is World Debug Battle Style?) 00141d7c: 10400003 beq r2,r0,0x00141d8c #If Next Random is World Debug Battle Style? /Else Branch 00141d80: 34040027 ori r4,r0,0x0027 #r4 = 0x27 (Current Event Variable ID) 00141d84: 08050764 j 0x00141d90 #Jump 00141d88: 34050193 ori r5,r0,0x0193 #r5 = 0x0193 (DO NOT USE script?) 00141d8c: 34050191 ori r5,r0,0x0191 #r5 = 0x0191 (Random Battle Initiate Event ID) 00141d90: 0c04ed91 jal 0x0013b644 #Set Script Variable 00141d94: 00000000 nop # 00141d98: 0c04fcff jal 0x0013f3fc #0013f3fc - 0013f49c 00141d9c: 00000000 nop # 00141da0: 08050936 j 0x001424d8 #Jump to END 00141da4: 34020002 ori r2,r0,0x0002 #r2 = 2 00141da8: 08050782 j 0x00141e08 #Jump 00141dac: 34020191 ori r2,r0,0x0191 #r2 = 0x0191 (Random Battle Initiate Event ID) #Victorious 00141db0: 0c060cdd jal 0x00183374 #Check Battle Outcome | Gameover by party incapacitated 00141db4: 00000000 nop # 00141db8: 14400017 bne r2,r0,0x00141e18 #If Battle outcome is Victory /Else Branch 00141dbc: 34020002 ori r2,r0,0x0002 #r2 = 2 00141dc0: 12620010 beq r19,r2,0x00141e04 #If r19 (initial parameter r5) is NOT 2 /Else Branch 00141dc4: 00002021 addu r4,r0,r0 #r4 = 0 00141dc8: 340500ff ori r5,r0,0x00ff #r5 = 0xff 00141dcc: 0c04f58d jal 0x0013d634 #Store unit names and some event block data 00141dd0: 340600ff ori r6,r0,0x00ff #r6 = 0xff 00141dd4: 34040027 ori r4,r0,0x0027 #r4 = 0x27 (Current Event Variable ID) 00141dd8: 34100001 ori r16,r0,0x0001 #r16 = 1 00141ddc: 3c018016 lui r1,0x8016 # 00141de0: a4306048 sh r16,0x6048(r1) #Store 1 to 0x80166048 (freezes control to go to next event?) 00141de4: 0c04ed91 jal 0x0013b644 #Set Script Variable 00141de8: 34050192 ori r5,r0,0x0192 #r5 = 0x0192 (Random Battle Victory Event ID) 00141dec: 3c018017 lui r1,0x8017 # 00141df0: a4303cb0 sh r16,0x3cb0(r1) #Store 1 to 0x80173cb0 (??) 00141df4: 0c04fcff jal 0x0013f3fc #0013f3fc - 0013f49c 00141df8: 00000000 nop # 00141dfc: 08050936 j 0x001424d8 #Jump to END 00141e00: 34020002 ori r2,r0,0x0002 #r2 = 2 00141e04: 34020192 ori r2,r0,0x0192 #r2 = 0x0192 (Random Battle Victory Event ID) 00141e08: 3c018017 lui r1,0x8017 # 00141e0c: ac223c74 sw r2,0x3c74(r1) #Store r2 to 0x80173c74 (Next Event?) 00141e10: 08050936 j 0x001424d8 #Jump to END 00141e14: 34020002 ori r2,r0,0x0002 #r2 = 2 00141e18: 126201af beq r19,r2,0x001424d8 #If r19 (initial parameter r5) is NOT 2 /Else Branch to END 00141e1c: 34020001 ori r2,r0,0x0001 #r2 = 1 00141e20: 0805078c j 0x00141e30 #Jump 00141e24: 00000000 nop #
Don't display menu
00141e28: 16800005 bne r20,r0,0x00141e40 #If Something from Stack? is 0 /Else Branch 00141e2c: 34140001 ori r20,r0,0x0001 #r20 = 0x01 00141e30: 0c050595 jal 0x00141654 #00141654 - 0014169c (also the branch destination for section way above) 00141e34: 34040008 ori r4,r0,0x0008 #r4 = {close} (no menu) 00141e38: 08050936 j 0x001424d8 #Jump to END 00141e3c: 34020001 ori r2,r0,0x0001 #r2 = 1
00141e40: 16540026 bne r18,r20,0x00141edc #If r18 = 0x01 /Else Branch 00141e44: 34030002 ori r3,r0,0x0002 #r3 = 0x02 00141e48: 3c038015 lui r3,0x8015 # 00141e4c: 8c63d314 lw r3,-0x2cec(r3) #r3 = Value at 0x8014d314 (Autobattle Setting?) 00141e50: 00000000 nop # 00141e54: 10600004 beq r3,r0,0x00141e68 #If Autobattle is on /Else Branch 00141e58: 34110008 ori r17,r0,0x0008 #r17 = {close} (do not display menu) 00141e5c: 34020019 ori r2,r0,0x0019 #r2 = 0x19 00141e60: 14620006 bne r3,r2,0x00141e7c #If Autobattle setting = 0x19 (???) /Else Branch 00141e64: 00000000 nop # 00141e68: 34020002 ori r2,r0,0x0002 #r2 = 2 00141e6c: 166200d1 bne r19,r2,0x001421b4 #If r19 (initial parameter r5) is 2 /Else Branch 00141e70: 34110007 ori r17,r0,0x0007 #r17 = status/auto battle/end 00141e74: 0805086d j 0x001421b4 #Jump 00141e78: 34110031 ori r17,r0,0x0031 #r17 = no place to move 00141e7c: 14720008 bne r3,r18,0x00141ea0 #If Autobattle setting = r18 /Else Branch 00141e80: 3402000c ori r2,r0,0x000c #r2 = 0x0c 00141e84: 34020001 ori r2,r0,0x0001 #r2 = 1 00141e88: 3c018015 lui r1,0x8015 # 00141e8c: a022d324 sb r2,-0x2cdc(r1) #Store 1 to 0x8014d324 (Ability is Selected?) 00141e90: 167200c8 bne r19,r18,0x001421b4 #If r19 (initial parameter r5) = r18 /Else Branch 00141e94: 34110006 ori r17,r0,0x0006 #r17 = Protect allies 00141e98: 0805086d j 0x001421b4 #Jump 00141e9c: 34110029 ori r17,r0,0x0029 #r17 = no targetable panels 00141ea0: 14620003 bne r3,r2,0x00141eb0 #If Autobattle setting = Fight for your life /Else Branch 00141ea4: 3402000e ori r2,r0,0x000e #r2 = 0x0e 00141ea8: 0805086d j 0x001421b4 #Jump 00141eac: 34110014 ori r17,r0,0x0014 #r17 = "select unit to attack" 00141eb0: 14620003 bne r3,r2,0x00141ec0 #If Autobattle setting = Protect Allies /Else Branch 00141eb4: 34020002 ori r2,r0,0x0002 #r2 = 2 00141eb8: 0805086d j 0x001421b4 #Jump 00141ebc: 34110015 ori r17,r0,0x0015 #r17 = "select unit to protect" 00141ec0: 3c038015 lui r3,0x8015 # 00141ec4: 8c63d30c lw r3,-0x2cf4(r3) #r3 = Value at 0x8014d30c (Used Skillset?) 00141ec8: 00000000 nop # 00141ecc: 146200b9 bne r3,r2,0x001421b4 #If Used Skillset = Defend? /Else Branch 00141ed0: 00000000 nop # 00141ed4: 0805086d j 0x001421b4 #Jump 00141ed8: 3411001c ori r17,r0,0x001c #r17 = battle menus out of bound index?
Confirm move destination
00141edc: 16430017 bne r18,r3,0x00141f3c #If r18 = 0x02 /Else Branch 00141ee0: 34150003 ori r21,r0,0x0003 #r21 = 0x03 00141ee4: 0c04b747 jal 0x0012dd1c #0012dd1c - 0012dd2c 00141ee8: 00000000 nop # 00141eec: 1260016d beq r19,r0,0x001424a4 #If r19 (initial parameter r5) is NOT 0 /Else Branch 00141ef0: 00000000 nop # 00141ef4: 16740005 bne r19,r20,0x00141f0c #If r19 (initial parameter r5) is 1 /Else Branch 00141ef8: 34020004 ori r2,r0,0x0004 #r2 = 4 00141efc: 0c050595 jal 0x00141654 #00141654 - 0014169c 00141f00: 00002021 addu r4,r0,r0 #r4 = Ride chocobo confirmation 00141f04: 08050932 j 0x001424c8 #Jump 00141f08: 34020001 ori r2,r0,0x0001 #r2 = 1 00141f0c: 16620005 bne r19,r2,0x00141f24 #If r19 (initial parameter r5) is 4 /Else Branch 00141f10: 00000000 nop # 00141f14: 0c050595 jal 0x00141654 #00141654 - 0014169c 00141f18: 34040030 ori r4,r0,0x0030 #r4 = move confirmation; inherit crystal 00141f1c: 08050932 j 0x001424c8 #Jump 00141f20: 34020001 ori r2,r0,0x0001 #r2 = 1 00141f24: 0c04b756 jal 0x0012dd58 #0012dd58 - 0012dd68 00141f28: 00000000 nop # 00141f2c: 0c050595 jal 0x00141654 #00141654 - 0014169c 00141f30: 2664000d addiu r4,r19,0x000d #r4 = r19 + 0x0d (select within moveable range (r19 = 2) OR move confirmation (r19 = 3) 00141f34: 08050932 j 0x001424c8 #Jump 00141f38: 34020001 ori r2,r0,0x0001 #r2 = 1
Show wait instructions
00141f3c: 1655000f bne r18,r21,0x00141f7c #If r18 = 0x03 /Else Branch 00141f40: 34020004 ori r2,r0,0x0004 #r2 = 0x04 00141f44: 3c028015 lui r2,0x8015 # 00141f48: 8c42d318 lw r2,-0x2ce8(r2) #r2 = Value at 0x8014d318 (Function Setting 1?) 00141f4c: 00000000 nop # 00141f50: 14430006 bne r2,r3,0x00141f6c #If Function Setting 1 = 4? /Else Branch 00141f54: 00000000 nop # 00141f58: 3c028015 lui r2,0x8015 # 00141f5c: 8c42d31c lw r2,-0x2ce4(r2) #r2 = Value at 0x8014d31c (Function Setting 2?) 00141f60: 00000000 nop # 00141f64: 1054014f beq r2,r20,0x001424a4 #If Function Setting 2 is NOT 1 /Else Branch 00141f68: 00000000 nop # 00141f6c: 0c050595 jal 0x00141654 #00141654 - 0014169c 00141f70: 34040001 ori r4,r0,0x0001 #r4 = Wait instructions 00141f74: 08050932 j 0x001424c8 #Jump 00141f78: 34020001 ori r2,r0,0x0001 #r2 = 1
Target selection
00141f7c: 16420029 bne r18,r2,0x00142024 #If r18 = 0x04 /Else Branch 00141f80: 34020005 ori r2,r0,0x0005 #r2 = 0x05 00141f84: 12620022 beq r19,r2,0x00142010 #If r19 is NOT out of firing range /Else Branch 00141f88: 3411002f ori r17,r0,0x002f #r17 = out of firing range 00141f8c: 12740020 beq r19,r20,0x00142010 #If r19 is NOT "can follow, tile has target" /Else Branch 00141f90: 3411000b ori r17,r0,0x000b #r17 = 0x0b <- "ability will be centred on target tile"? 00141f94: 12630003 beq r19,r3,0x00141fa4 #If r19 is NOT "can/can't follow, no target" /Else Branch 00141f98: 3402fffe ori r2,r0,0xfffe #r2 = -2 00141f9c: 1672000f bne r19,r18,0x00141fdc #If r19 = "can't follow, tile has target" /Else Branch 00141fa0: 00000000 nop # 00141fa4: 3c038015 lui r3,0x8015 # 00141fa8: 8c63d310 lw r3,-0x2cf0(r3) #r3 = Value at 0x8014d310 (Used Item?) 00141fac: 00000000 nop # 00141fb0: 10620006 beq r3,r2,0x00141fcc #If Used Item is valid? /Else Branch 00141fb4: 3411002d ori r17,r0,0x002d #r17 = 0x2d 00141fb8: 3c028015 lui r2,0x8015 # 00141fbc: 8c42d320 lw r2,-0x2ce0(r2) #r2 = Value at 0x8014d320 (Ability CT?) 00141fc0: 00000000 nop # 00141fc4: 14400003 bne r2,r0,0x00141fd4 #If Ability CT = 0? /Else Branch 00141fc8: 00000000 nop # 00141fcc: 08050805 j 0x00142014 #Jump 00141fd0: 34020001 ori r2,r0,0x0001 #r2 = 1 00141fd4: 08050804 j 0x00142010 #Jump 00141fd8: 3411000c ori r17,r0,0x000c #r17 = 0x0c r19 = auto target (3)/err case (0) 00141fdc: 3c038015 lui r3,0x8015 # 00141fe0: 8c63d310 lw r3,-0x2cf0(r3) #r3 = Value at 0x8014d310 (Used Item?) 00141fe4: 00000000 nop # 00141fe8: 14620006 bne r3,r2,0x00142004 #If Used Item is valid? /Else Branch 00141fec: 3411002e ori r17,r0,0x002e #r17 = 0x2e 00141ff0: 3c028015 lui r2,0x8015 # 00141ff4: 8c42d320 lw r2,-0x2ce0(r2) #r2 = Value at 0x8014d320 (Ability CT?) 00141ff8: 00000000 nop # 00141ffc: 14400003 bne r2,r0,0x0014200c #If Ability CT = 0? /Else Branch 00142000: 00000000 nop # 00142004: 08050805 j 0x00142014 #Jump 00142008: 34020001 ori r2,r0,0x0001 #r2 = 1 0014200c: 3411000d ori r17,r0,0x000d #r17 = 0x0d 00142010: 34020001 ori r2,r0,0x0001 #r2 = 1 00142014: 3c018015 lui r1,0x8015 # 00142018: a022d324 sb r2,-0x2cdc(r1) #Store 1 to 0x8014d324 (Ability is Selected?) 0014201c: 0805086d j 0x001421b4 #Jump 00142020: 00000000 nop #
Spell quotes
00142024: 16420011 bne r18,r2,0x0014206c #If r18 = 0x05 /Else Branch 00142028: 34020007 ori r2,r0,0x0007 #r2 = 0x07 0014202c: 96e20002 lhu r2,0x0002(r23) #r2 = used ability ID 00142030: 3c058014 lui r5,0x8014 # 00142034: 24a5bdcc addiu r5,r5,0xbdcc #r5 = 00142038: 304201ff andi r2,r2,0x01ff #r2 = ability ID - 0x200 flag 0014203c: 3c018015 lui r1,0x8015 # 00142040: ac22d308 sw r2,-0x2cf8(r1) #Store Used Ability for Spell Quotes 00142044: 0c053228 jal 0x0014c8a0 #Initialize Thread 00142048: 34040004 ori r4,r0,0x0004 #r4 = 4 0014204c: 34040004 ori r4,r0,0x0004 #r4 = 4 00142050: 02c02821 addu r5,r22,r0 #r5 = Unit ID 00142054: 3c068015 lui r6,0x8015 # 00142058: 8cc6d308 lw r6,-0x2cf8(r6) #r6 = Used Ability 0014205c: 0c05328e jal 0x0014ca38 #Store Thread Function Parameters 00142060: 00003821 addu r7,r0,r0 #r7 = 0 00142064: 08050932 j 0x001424c8 #Jump 00142068: 34020001 ori r2,r0,0x0001 #r2 = 1
Display action name
0014206c: 16420037 bne r18,r2,0x0014214c #If r18 = 0x07 /Else Branch 00142070: 34020006 ori r2,r0,0x0006 #r2 = 0x06 00142074: 0c04ebb7 jal 0x0013aedc #0013aedc - 0013aee8 00142078: 3404003c ori r4,r0,0x003c #r4 = 0x3c 0014207c: 9202016f lbu r2,0x016f(r16) #r2 = Skillset of Last Attack Used 00142080: 3c018006 lui r1,0x8006 # 00142084: 00220821 addu r1,r1,r2 #r1 = Skillset Data 00142088: 90225cb4 lbu r2,0x5cb4(r1) #r2 = Skillset's Action Menu 0014208c: 00000000 nop # 00142090: 14550014 bne r2,r21,0x001420e4 #If Skillset's Action Menu = 3 (Math) /Else Branch 00142094: 34020006 ori r2,r0,0x0006 #r2 = 6 00142098: 86020174 lh r2,0x0174(r16) #r2 = Calculator Multiplier Ability ID 0014209c: 00000000 nop # 001420a0: 24427000 addiu r2,r2,0x7000 #r2 = Calculator Multiplier Ability ID + 0x7000 (ability names, [ability]) (?? mult ??) 001420a4: 3c018016 lui r1,0x8016 # 001420a8: ac225ef8 sw r2,0x5ef8(r1) #Store r2 to 0x80165ef8 001420ac: 86020172 lh r2,0x0172(r16) #r2 = Calculator Type Ability ID 001420b0: 00000000 nop # 001420b4: 24427000 addiu r2,r2,0x7000 #r2 = Calculator Type Ability ID + 0x7000 (ability names, [ability]) (stat mult ??) 001420b8: 3c018016 lui r1,0x8016 # 001420bc: ac225ef4 sw r2,0x5ef4(r1) #Store r2 to 0x80165ef4 001420c0: 86020170 lh r2,0x0170(r16) #r2 = Last Attack Used ID 001420c4: 00000000 nop # 001420c8: 24427000 addiu r2,r2,0x7000 #r2 = Last Attack Used ID + 0x7000 (ability names, [ability]) (stat mult spell) 001420cc: 3c018016 lui r1,0x8016 # 001420d0: ac225efc sw r2,0x5efc(r1) #Store r2 to 0x80165efc 001420d4: 0c050595 jal 0x00141654 #00141654 - 0014169c 001420d8: 3404002c ori r4,r0,0x002c #r4 = used action display name (calculator) 001420dc: 08050932 j 0x001424c8 #Jump 001420e0: 34020001 ori r2,r0,0x0001 #r2 = 1 001420e4: 92e30001 lbu r3,0x0001(r23) #r3 = used skillset 001420e8: 00000000 nop # 001420ec: 10620004 beq r3,r2,0x00142100 #If used skillset = item /Else Branch 001420f0: 00000000 nop # 001420f4: 34020014 ori r2,r0,0x0014 #r2 = 0x14 001420f8: 14620004 bne r3,r2,0x0014210c #If used skillset = throw /Else Branch 001420fc: 00000000 nop # 00142100: 92e20008 lbu r2,0x0008(r23) #r2 = used Item ID 00142104: 0805084d j 0x00142134 #Jump 00142108: 24423800 addiu r2,r2,0x3800 #r2 = used item ID + 0x3800 (item names, [item]) 0014210c: 96e20002 lhu r2,0x0002(r23) #r2 = used ability ID 00142110: 00000000 nop # 00142114: 305101ff andi r17,r2,0x01ff #r17 = used ability ID without 0x200 flag (just, makes sure fall damage doesn't try to index something? lol) 00142118: 2622ffc4 addiu r2,r17,0xffc4 #r2 = ability ID - 0x3c 0014211c: 2c42001a sltiu r2,r2,0x001a #Set if r2 is summon or draw out 00142120: 10400003 beq r2,r0,0x00142130 # 00142124: 3402b7c4 ori r2,r0,0xb7c4 #r2 = 0xb7c4 (skillset names (but indexed EXTREMELY far out of bounds. probably happens to point to entry 23: summon/draw out)) 00142128: 0805084d j 0x00142134 #Jump 0014212c: 02221021 addu r2,r17,r2 #r2 = summon/draw out specific text entry 00142130: 26227000 addiu r2,r17,0x7000 #r2 = ability id + 0x7000 (ability names, [ability]) 00142134: 3c018016 lui r1,0x8016 # 00142138: ac225ef4 sw r2,0x5ef4(r1) #Store r2 to 0x80165ef4 0014213c: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142140: 3404000a ori r4,r0,0x000a #r4 = used action display name 00142144: 08050932 j 0x001424c8 #Jump 00142148: 34020001 ori r2,r0,0x0001 #r2 = 1
0014214c: 124200d5 beq r18,r2,0x001424a4 #If r18 = 0x06 /Else Branch 00142150: 34020009 ori r2,r0,0x0009 #r2 = 0x09 00142154: 1642001b bne r18,r2,0x001421c4 #If r18 = 0x09 /Else Branch 00142158: 00000000 nop # 0014215c: 16740003 bne r19,r20,0x0014216c
AI setting error messages
00142160: 34110008 ori r17,r0,0x0008 00142164: 0805086d j 0x001421b4 #Jump 00142168: 34110016 ori r17,r0,0x0016 r17 = can't be aggressive to ally 0014216c: 16630003 bne r19,r3,0x0014217c 00142170: 00000000 nop 00142174: 0805086d j 0x001421b4 #Jump 00142178: 34110017 ori r17,r0,0x0017 r17 = can't protect an enemy 0014217c: 16750003 bne r19,r21,0x0014218c 00142180: 3402000c ori r2,r0,0x000c 00142184: 0805086d j 0x001421b4 #Jump 00142188: 34110020 ori r17,r0,0x0020 r17 = can't target panel, select unit 0014218c: 3c038015 lui r3,0x8015 00142190: 8c63d314 lw r3,-0x2cec(r3) 00142194: 00000000 nop 00142198: 14620003 bne r3,r2,0x001421a8 0014219c: 3402000e ori r2,r0,0x000e 001421a0: 0805086d j 0x001421b4 #Jump 001421a4: 3411001a ori r17,r0,0x001a r17 = aggressive confirmation 001421a8: 14620002 bne r3,r2,0x001421b4 001421ac: 00000000 nop 001421b0: 3411001b ori r17,r0,0x001b r17 = protect confirmation 001421b4: 0c050595 jal 0x00141654 #00141654 - 0014169c 001421b8: 02202021 addu r4,r17,r0 001421bc: 08050932 j 0x001424c8 #Jump 001421c0: 34020001 ori r2,r0,0x0001 #r2 = 1 001421c4: 3402000a ori r2,r0,0x000a
001421c8: 1642000f bne r18,r2,0x00142208 #If r18 = 0x0a /Else Branch 001421cc: 3402000b ori r2,r0,0x000b #r2 = 0x0b 001421d0: 3c028004 lui r2,0x8004 001421d4: 8c4273ac lw r2,0x73ac(r2) 001421d8: 3c030018 lui r3,0x0018 001421dc: 00431024 and r2,r2,r3 001421e0: 144000b0 bne r2,r0,0x001424a4 001421e4: 322200ff andi r2,r17,0x00ff 001421e8: 3c018017 lui r1,0x8017 001421ec: a4339506 sh r19,-0x6afa(r1) 001421f0: 3c018016 lui r1,0x8016 001421f4: ac225ef4 sw r2,0x5ef4(r1) 001421f8: 0c050595 jal 0x00141654 #00141654 - 0014169c 001421fc: 3404001d ori r4,r0,0x001d r4 = ? 00142200: 08050932 j 0x001424c8 #Jump 00142204: 34020001 ori r2,r0,0x0001 #r2 = 1
Learn Blue Magic
00142208: 16420008 bne r18,r2,0x0014222c #If r18 = 0x0b /Else Branch 0014220c: 3402000c ori r2,r0,0x000c #r2 = 0x0c 00142210: 26627000 addiu r2,r19,0x7000 00142214: 3c018016 lui r1,0x8016 00142218: ac225ef4 sw r2,0x5ef4(r1) 0014221c: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142220: 3404001e ori r4,r0,0x001e r4 = blue magic confirmation 00142224: 08050932 j 0x001424c8 #Jump 00142228: 34020001 ori r2,r0,0x0001 #r2 = 1
Open OPTION.BIN
0014222c: 16420005 bne r18,r2,0x00142244 #If r18 = 0x0c /Else Branch 00142230: 3402000d ori r2,r0,0x000d #r2 = 0x0d 00142234: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142238: 3404001f ori r4,r0,0x001f #opens OPTION.BIN, then runs it 0014223c: 08050932 j 0x001424c8 #Jump 00142240: 34020001 ori r2,r0,0x0001 #r2 = 1
?
00142244: 16420005 bne r18,r2,0x0014225c #If r18 = 0x0d /Else Branch 00142248: 3402000e ori r2,r0,0x000e #r2 = 0x0e 0014224c: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142250: 34040021 ori r4,r0,0x0021 r4 = move confirmation 00142254: 08050932 j 0x001424c8 #Jump 00142258: 34020001 ori r2,r0,0x0001 #r2 = 1
stepped on trap
0014225c: 16420005 bne r18,r2,0x00142274 #If r18 = 0x0e /Else Branch 00142260: 3402000f ori r2,r0,0x000f #r2 = 0x0f 00142264: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142268: 26640022 addiu r4,r19,0x0022 r4 = trap (r19 = trap ID, 0 to 3) 0014226c: 08050932 j 0x001424c8 #Jump 00142270: 34020001 ori r2,r0,0x0001 #r2 = 1
Recieve item from MFI
00142274: 16420030 bne r18,r2,0x00142338 #If r18 = 0x0f /Else Branch 00142278: 34020010 ori r2,r0,0x0010 #r2 = 0x10 0014227c: 326400ff andi r4,r19,0x00ff #r4 = r19 without 0x100 flag 00142280: 0c0178a2 jal 0x0005e288 #Get Total Equipment Quantity (Equip Change/Formation Screen?) 00142284: 34050001 ori r5,r0,0x0001 #r5 = 1 00142288: 34030063 ori r3,r0,0x0063 #r3 = 0x63 (99) 0014228c: 1443001a bne r2,r3,0x001422f8 #If Item quantity = 99 /Else Branch 00142290: 00000000 nop # 00142294: 0c016a21 jal 0x0005a884 #Get Item Data Pointer 00142298: 02602021 addu r4,r19,r0 0014229c: 3c018016 lui r1,0x8016 001422a0: ac335ef4 sw r19,0x5ef4(r1) 001422a4: 3c018016 lui r1,0x8016 001422a8: ac335ef8 sw r19,0x5ef8(r1) 001422ac: 0c016a21 jal 0x0005a884 #Get Item Data Pointer 001422b0: 02602021 addu r4,r19,r0 001422b4: 00408021 addu r16,r2,r0 #r16 = Item Data Pointer 001422b8: 96020008 lhu r2,0x0008(r16) 001422bc: 00000000 nop 001422c0: 00021082 srl r2,r2,0x02 001422c4: 3c018016 lui r1,0x8016 001422c8: ac225efc sw r2,0x5efc(r1) 001422cc: 0c04ed64 jal 0x0013b590 #Get Script Variable 001422d0: 3404002c ori r4,r0,0x002c #r4 = 0x2c (War Funds Variable ID) 001422d4: 96050008 lhu r5,0x0008(r16) #r5 = Price of Item 001422d8: 3404002c ori r4,r0,0x002c #r4 = 0x2c (War Funds Variable ID) 001422dc: 00052882 srl r5,r5,0x02 #r5 = Price of Item / 4 001422e0: 0c04ed91 jal 0x0013b644 #Set Script Variable 001422e4: 00a22821 addu r5,r5,r2 #r5 = War Funds + (Price of Item / 4) 001422e8: 0c050595 jal 0x00141654 #00141654 - 0014169c 001422ec: 34040026 ori r4,r0,0x0026 r4 = discovered item; full stock 001422f0: 08050932 j 0x001424c8 #Jump 001422f4: 34020001 ori r2,r0,0x0001 001422f8: 0c016a21 jal 0x0005a884 #Get Item Data Pointer 001422fc: 02602021 addu r4,r19,r0 00142300: 3c018016 lui r1,0x8016 00142304: ac335ef4 sw r19,0x5ef4(r1) 00142308: 3c018006 lui r1,0x8006 0014230c: 00330821 addu r1,r1,r19 00142310: 902296e0 lbu r2,-0x6920(r1) #r2 = Quantity of Item owned 00142314: 00000000 nop 00142318: 24420001 addiu r2,r2,0x0001 #r2 = Quantity of Item owned + 1 0014231c: 3c018006 lui r1,0x8006 00142320: 00330821 addu r1,r1,r19 00142324: a02296e0 sb r2,-0x6920(r1) #Store new Quantity of Item owned 00142328: 0c050595 jal 0x00141654 #00141654 - 0014169c 0014232c: 34040027 ori r4,r0,0x0027 #r4 = discovered item 00142330: 08050932 j 0x001424c8 #Jump 00142334: 34020001 ori r2,r0,0x0001 #r2 = 1
00142338: 16420005 bne r18,r2,0x00142350 #If r18 = 0x10 /Else Branch 0014233c: 34020011 ori r2,r0,0x0011 #r2 = 0x11 00142340: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142344: 34040028 ori r4,r0,0x0028 #r4 = 0x28 ? 00142348: 08050932 j 0x001424c8 #Jump 0014234c: 34020001 ori r2,r0,0x0001 #r2 = 1
Speechcraft/theft stat change
00142350: 16420058 bne r18,r2,0x001424b4 #If r18 = 0x11 /Else Branch 00142354: 34040007 ori r4,r0,0x0007 #r2 = 0x07 00142358: 3c058017 lui r5,0x8017 0014235c: 24a596a8 addiu r5,r5,0x96a8 #r5 = 0x801696a8 00142360: 2662ffd9 addiu r2,r19,0xffd9 #r2 = r19 - 0x27 00142364: 2c420007 sltiu r2,r2,0x0007 #Compare to 0x07 00142368: 10400022 beq r2,r0,0x001423f4 #If post effect message is any talk skill (?) 0014236c: 02201821 addu r3,r17,r0 # 00142370: 2662506b addiu r2,r19,0x506b # message type + 0x506b (sets at least message battle menus, 0x6b... general case?) 00142374: 3c018016 lui r1,0x8016 00142378: ac225ef8 sw r2,0x5ef8(r1) 0014237c: 3402002d ori r2,r0,0x002d 00142380: 3c018016 lui r1,0x8016 00142384: ac365ef4 sw r22,0x5ef4(r1) 00142388: 16620004 bne r19,r2,0x0014239c #if post effect message is golem message (?) 0014238c: 32220080 andi r2,r17,0x0080 #check stat change bonus flag 00142390: 10400002 beq r2,r0,0x0014239c 00142394: 34030001 ori r3,r0,0x0001 # 00142398: 34030081 ori r3,r0,0x0081 # reverses bonus flag? 0014239c: 3c048016 lui r4,0x8016 001423a0: 24845efc addiu r4,r4,0x5efc 001423a4: 30620080 andi r2,r3,0x0080 001423a8: 10400005 beq r2,r0,0x001423c0 # check bonus flag 001423ac: ac830000 sw r3,0x0000(r4) 001423b0: 3062007f andi r2,r3,0x007f 001423b4: ac820000 sw r2,0x0000(r4) 001423b8: 080508f1 j 0x001423c4 001423bc: 3402508c ori r2,r0,0x508c # battle menus, stat increment 001423c0: 3402508d ori r2,r0,0x508d # battle menus, stat decrement 001423c4: a4a20002 sh r2,0x0002(r5) # store message ID 001423c8: 34020027 ori r2,r0,0x0027 001423cc: 16620031 bne r19,r2,0x00142494 001423d0: 340200ff ori r2,r0,0x00ff 001423d4: 14620003 bne r3,r2,0x001423e4 001423d8: 3402007f ori r2,r0,0x007f 001423dc: 080508fb j 0x001423ec 001423e0: 3402509a ori r2,r0,0x509a # battle menus, ct100 001423e4: 1462002b bne r3,r2,0x00142494 001423e8: 34025099 ori r2,r0,0x5099 # battle menus, ct00 001423ec: 08050925 j 0x00142494 001423f0: a4a20002 sh r2,0x0002(r5) 001423f4: 3402002e ori r2,r0,0x002e 001423f8: 16620008 bne r19,r2,0x0014241c 001423fc: 34040032 ori r4,r0,0x0032 00142400: 06210002 bgez r17,0x0014240c 00142404: 02201021 addu r2,r17,r0 00142408: 00021023 subu r2,r0,r2 0014240c: 3c018016 lui r1,0x8016 00142410: ac225ef4 sw r2,0x5ef4(r1) 00142414: 0805090f j 0x0014243c 00142418: 3402508f ori r2,r0,0x508f # battle menus, got gil 0014241c: 3402002f ori r2,r0,0x002f 00142420: 1662000c bne r19,r2,0x00142454 # branch if not exp change 00142424: 2662ffe4 addiu r2,r19,0xffe4 00142428: 34040032 ori r4,r0,0x0032 r4 = speechcraft stat change/gil/exp theft 0014242c: 3222007f andi r2,r17,0x007f 00142430: 3c018016 lui r1,0x8016 00142434: ac225ef4 sw r2,0x5ef4(r1) 00142438: 3402508e ori r2,r0,0x508e # battle menus, got exp 0014243c: 3c018017 lui r1,0x8017 00142440: a42296aa sh r2,-0x6956(r1) 00142444: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142448: 00000000 nop 0014244c: 08050932 j 0x001424c8 00142450: 34020001 ori r2,r0,0x0001 00142454: 2c420002 sltiu r2,r2,0x0002 00142458: 10400012 beq r2,r0,0x001424a4 0014245c: 32228000 andi r2,r17,0x8000 00142460: 10400006 beq r2,r0,0x0014247c 00142464: 322200ff andi r2,r17,0x00ff 00142468: 24423800 addiu r2,r2,0x3800 0014246c: 3c018016 lui r1,0x8016 00142470: ac225ef4 sw r2,0x5ef4(r1) 00142474: 08050923 j 0x0014248c 00142478: 3402509b ori r2,r0,0x509b # battle menus, blew item away (?) 0014247c: 26223800 addiu r2,r17,0x3800 00142480: 3c018016 lui r1,0x8016 00142484: ac225ef4 sw r2,0x5ef4(r1) 00142488: 26625074 addiu r2,r19,0x5074 # battle menus, at least message 0x74? another general case? 0014248c: 3c018017 lui r1,0x8017 00142490: a42296aa sh r2,-0x6956(r1) 00142494: 0c050595 jal 0x00141654 #00141654 - 0014169c 00142498: 34040032 ori r4,r0,0x0032 r4 = speechcraft stat change/gil/exp theft 0014249c: 08050932 j 0x001424c8 001424a0: 34020001 ori r2,r0,0x0001 001424a4: 0c050595 jal 0x00141654 #00141654 - 0014169c 001424a8: 34040008 ori r4,r0,0x0008 r4 = {close} (no menu) 001424ac: 08050932 j 0x001424c8 001424b0: 34020001 ori r2,r0,0x0001 #r2 = 1
001424b4: 0c01127e jal 0x000449f8 #000449f8 - 000449fc Null Routine 001424b8: 34050005 ori r5,r0,0x0005 001424bc: 0c050595 jal 0x00141654 #00141654 - 0014169c 001424c0: 34040008 ori r4,r0,0x0008 r4 = {close} (no menu) 001424c4: 00001021 addu r2,r0,r0 #r2 = 0 001424c8: 3c018015 lui r1,0x8015 001424cc: ac32d318 sw r18,-0x2ce8(r1) 001424d0: 3c018015 lui r1,0x8015 001424d4: ac33d31c sw r19,-0x2ce4(r1)
END: 001424d8: 8fbf0030 lw r31,0x0030(r29) 001424dc: 8fb7002c lw r23,0x002c(r29) 001424e0: 8fb60028 lw r22,0x0028(r29) 001424e4: 8fb50024 lw r21,0x0024(r29) 001424e8: 8fb40020 lw r20,0x0020(r29) 001424ec: 8fb3001c lw r19,0x001c(r29) 001424f0: 8fb20018 lw r18,0x0018(r29) 001424f4: 8fb10014 lw r17,0x0014(r29) 001424f8: 8fb00010 lw r16,0x0010(r29) 001424fc: 27bd0038 addiu r29,r29,0x0038 00142500: 03e00008 jr r31 00142504: 00000000 nop
Return locations
00141990: Spell Quote determination 00141a60: System function setup routine