Set type of target for all targets
Jump to navigation
Jump to search
BATTLE.BIN : Set type of target for all targets ------------------------------------------------------------------------------------------------------- Parameters : Nothing Returns : r2 = 0x00 if AI_End_of_turn,_in_between_turn,_etc. returns -0x01 then flag 0x01000000 at [0x801a0078] if OFF (aka 8019f3c4 + 0xcb4) r2 = -0x01 if AI_End_of_turn,_in_between_turn,_etc. does'nt return -0x01 then flag 0x01000000 at [0x801a0078] is untouched (ON ?) (aka 8019f3c4 + 0xcb4) Set Some AI decision flags for all units --------------------------------------------------------------------------------------------------------- 00194314: 3c02801a lui r2,0x801a | 00194318: 90420d7b lbu r2,0x0d7b(r2) |Load Action decision flag 0019431c: 27bdffd8 addiu r29,r29,-0x0028 | 00194320: afb3001c sw r19,0x001c(r29) | 00194324: 3c13801a lui r19,0x801a | 00194328: 2673f3c4 addiu r19,r19,0xf3c4 |Start AI Data Pointer 0019432c: afbf0024 sw r31,0x0024(r29) | 00194330: afb40020 sw r20,0x0020(r29) | 00194334: afb20018 sw r18,0x0018(r29) | 00194338: afb10014 sw r17,0x0014(r29) | 0019433c: 14400077 bne r2,r0,0x0019451c #If Action is not decided 00194340: afb00010 sw r16,0x0010(r29) | 00194344: 00009021 addu r18,r0,r0 |Initialize Unit Counter (Used as Unit ID in the loop) 00194348: 0000a021 addu r20,r0,r0 |Unit battle data offset (+0x1c0 each iteration) 0019434c: 3c028019 lui r2,0x8019 @LOOP 00194350: 244208cc addiu r2,r2,0x08cc #Start of Unit Battle Data pointer 00194354: 02828821 addu r17,r20,r2 |This iteration Unit's Data Pointer 00194358: 00121100 sll r2,r18,0x04 |Unit ID * 16 0019435c: 2442182c addiu r2,r2,0x182c | 00194360: 02628021 addu r16,r19,r2 |This iteration AI Decision Data Pointer 8019f3c4 + 0x182c + Unit offset 00194364: 0c065b3a jal 0x00196ce8 |-->Check if Unit can be Targeted (Cryst/Trea/Mount/Trans) r2 = 0x00 if unit is targetable 00194368: 02402021 addu r4,r18,r0 |r4 = Unit ID 0019436c: 10400006 beq r2,r0,0x00194388 #If Unit is not Targetable 00194370: 00000000 nop | 00194374: 92020007 lbu r2,0x0007(r16) |Load Unit AI Targeting Flags 00194378: 00000000 nop | 0019437c: 34420010 ori r2,r2,0x0010 |Enable [Can't Be Targeted] 00194380: 0806513c j 0x001944f0 >>Jump to next Unit 00194384: a2020007 sb r2,0x0007(r16) |Store updated Flags Else - Unit is Targetable 00194388: 92620e2e lbu r2,0x0e2e(r19) |Load Acting Unit's ID 0019438c: 00000000 nop | 00194390: 12420008 beq r18,r2,0x001943b4 #If Unit is not Acting unit 00194394: 00000000 nop | 00194398: 922201ba lbu r2,0x01ba(r17) |Load Unit's Modified ENTD Flags 0019439c: 92630e39 lbu r3,0x0e39(r19) |Load Acting Unit's Team 001943a0: 30420030 andi r2,r2,0x0030 |Check This Unit [Team] 001943a4: 10430003 beq r2,r3,0x001943b4 #If This Unit is not in Acting Unit Team 001943a8: 34020001 ori r2,r0,0x0001 |r2 = 0x1 001943ac: 080650ee j 0x001943b8 >>Avoid Ally Team section 001943b0: a2020008 sb r2,0x0008(r16) |Store Enemy Flag = True Else - This Unit is acting unit or is in the team of Acting Unit 001943b4: a2000008 sb r0,0x0008(r16) |Store Enemy Flag = False 001943b8: 92020007 lbu r2,0x0007(r16) |Load AI Targeting Flags 001943bc: 00000000 nop | 001943c0: 3043000c andi r3,r2,0x000c |Preserve [Save CT] and [Allied Target?] flags 001943c4: a2030007 sb r3,0x0007(r16) |Erase all flags but [Save CT] and [Allied Target] 001943c8: 92220058 lbu r2,0x0058(r17) |Load Unit's Current Statuses 1 001943cc: 00000000 nop | 001943d0: 30420020 andi r2,r2,0x0020 |Check [Dead] 001943d4: 10400008 beq r2,r0,0x001943f8 #If Unit is Dead 001943d8: 00000000 nop | 001943dc: 9222005a lbu r2,0x005a(r17) |Load Unit's Current Statuses 3 001943e0: 00000000 nop | 001943e4: 30420020 andi r2,r2,0x0020 |Check [Reraise] 001943e8: 14400002 bne r2,r0,0x001943f4 #If Unit do not have reraise 001943ec: 34620040 ori r2,r3,0x0040 |Enable Dead Unit with Reraise 001943f0: 34620020 ori r2,r3,0x0020 |Enable Dead Unit without Reraise 001943f4: a2020007 sb r2,0x0007(r16) |Store new AI Targeting Flags (Dead w/o Reraise) 001943f8: 9622002a lhu r2,0x002a(r17) |Load Max HP 001943fc: 96230028 lhu r3,0x0028(r17) |Load Current HP 00194400: 00021042 srl r2,r2,0x01 |Max HP / 2 00194404: 0062182b sltu r3,r3,r2 | 00194408: 10600005 beq r3,r0,0x00194420 #If Unit HP has Less than 50% of HP 0019440c: 00000000 nop | 00194410: 92020007 lbu r2,0x0007(r16) |Load AI Targeting Flags 00194414: 00000000 nop | 00194418: 34420001 ori r2,r2,0x0001 |Enable Low HP Unit 0019441c: a2020007 sb r2,0x0007(r16) |Enable Low HP Unit in AI Targeting Flags 00194420: 9202000b lbu r2,0x000b(r16) |Load MP Usage Mod (Based on Nb of available Abilities using MP) 00194424: 00000000 nop | 00194428: 10400019 beq r2,r0,0x00194490 #If Unit uses some abilities with MP 0019442c: 00000000 nop | 00194430: 9622002e lhu r2,0x002e(r17) |Load Max MP 00194434: 9623002c lhu r3,0x002c(r17) |Load Current MP 00194438: 00021042 srl r2,r2,0x01 |Max MP / 2 0019443c: 0062182b sltu r3,r3,r2 | 00194440: 10600005 beq r3,r0,0x00194458 #If Unit HP has Less than 50% of MP 00194444: 00000000 nop | 00194448: 92020007 lbu r2,0x0007(r16) |Load AI Targeting Flags 0019444c: 00000000 nop | 00194450: 34420002 ori r2,r2,0x0002 |Enable Low MP Unit 00194454: a2020007 sb r2,0x0007(r16) |Enable Low MP Unit in AI Targeting Flags 00194458: 92620e39 lbu r2,0x0e39(r19) |Load Acting Unit's Team 0019445c: 00000000 nop | 00194460: 1040000b beq r2,r0,0x00194490 #If Unit is not in Player Team 00194464: 00000000 nop | 00194468: 9622002c lhu r2,0x002c(r17) |Load Unit's Current MP 0019446c: 92030009 lbu r3,0x0009(r16) |Load Highest MP Cost 00194470: 00000000 nop | 00194474: 0043102b sltu r2,r2,r3 | 00194478: 10400005 beq r2,r0,0x00194490 #If Unit lack of MP to cast is Higher MP ability 0019447c: 00000000 nop | 00194480: 92020007 lbu r2,0x0007(r16) |Load AI Targeting Flags 00194484: 00000000 nop | 00194488: 34420002 ori r2,r2,0x0002 |Enable Low MP Unit 0019448c: a2020007 sb r2,0x0007(r16) |Store new AI Targeting Flags 00194490: 92020007 lbu r2,0x0007(r16) |Load AI Targeting Flags 00194494: 00000000 nop | 00194498: 3045007f andi r5,r2,0x007f |Disable 0x80 (already done above with AND 0x0c) 0019449c: a2050007 sb r5,0x0007(r16) |Store new AI Targeting Flags 001944a0: 96230028 lhu r3,0x0028(r17) |Load Unit's Current HP 001944a4: 9624002a lhu r4,0x002a(r17) |Load Unit's Max HP 001944a8: 00031880 sll r3,r3,0x02 |Current * 4 001944ac: 00041080 sll r2,r4,0x02 |Max * 4 001944b0: 00441023 subu r2,r2,r4 |Max * 3 001944b4: 0062182a slt r3,r3,r2 |Check Current *4 Vs Max*3 001944b8: 10600002 beq r3,r0,0x001944c4 #If Unit has less than 75% HP 001944bc: 34a20080 ori r2,r5,0x0080 |Enable Critical HP Unit (?) 001944c0: a2020007 sb r2,0x0007(r16) |Store new AI Targeting Flags 001944c4: 92020004 lbu r2,0x0004(r16) |Load AI Behavior Flags (from Battle 0x167) 001944c8: 92030008 lbu r3,0x0008(r16) |Load Enemy Flag 001944cc: 3044007f andi r4,r2,0x007f |Disable [0x80] Take in consideration ? (AI ignores unit without this flag) 001944d0: 10600005 beq r3,r0,0x001944e8 #If Unit is an enemy 001944d4: a2040004 sb r4,0x0004(r16) |Disable 0x80 001944d8: 9223015d lbu r3,0x015d(r17) |Load Current Ability CT 001944dc: 340200ff ori r2,r0,0x00ff |r2 = 0xff (not doing anything) 001944e0: 10620003 beq r3,r2,0x001944f0 #Branch if CT = 0xFF and Unit is an enemy (keeping flag 0x80 off) No proof of life so far ? 001944e4: 00000000 nop | Else : Ally or enemy charging/performing something 001944e8: 34820080 ori r2,r4,0x0080 |Enable Charging/Performing 001944ec: a2020004 sb r2,0x0004(r16) |Enable [0x80] (Take in consideration ?) 001944f0: 26520001 addiu r18,r18,0x0001 |Unit counter + 1 001944f4: 2a420015 slti r2,r18,0x0015 |Check limit 001944f8: 1440ff94 bne r2,r0,0x0019434c Λ Loop 0x15 Time 001944fc: 269401c0 addiu r20,r20,0x01c0 |Pointer Mod += 0x1c0 00194500: 34020001 ori r2,r0,0x0001 |r2 = 0x1 00194504: a2620014 sb r2,0x0014(r19) |Store 0x1 at 0x8019f3d8 8019f3c4 + 0x14 00194508: 8e620cb4 lw r2,0x0cb4(r19) |Load [ 801a0078 ] 8019f3c4 + 0xcb4 0019450c: 3c030100 lui r3,0x0100 | 00194510: a260001d sb r0,0x001d(r19) |Reset Skillset of last Attack 8019f3c4 + 0x1d 00194514: 00431025 or r2,r2,r3 | 00194518: ae620cb4 sw r2,0x0cb4(r19) |Enable flag 0x01000000 at 0x801a0078 Flag 0x01 at 801a007b 0019451c: 0c0674df jal 0x0019d37c |-->AI_End_of_turn,_in_between_turn,_etc. returns r2 00194520: 00000000 nop | 00194524: 2403ffff addiu r3,r0,-0x0001 | 00194528: 10430007 beq r2,r3,0x00194548 #If returned value is not -0x01 0019452c: 3c04feff lui r4,0xfeff | 00194530: 3484ffff ori r4,r4,0xffff |r4 = 0xfeffffff 00194534: 8e630cb4 lw r3,0x0cb4(r19) |Load [ 801a0078 ] 00194538: 00001021 addu r2,r0,r0 |returns r2 = 0x00 0019453c: 00641824 and r3,r3,r4 |Remove flag 0x01000000 00194540: 08065153 j 0x0019454c | 00194544: ae630cb4 sw r3,0x0cb4(r19) |Disable flag 0x01000000 at 0x801a0078 Else : returned value is -0x0001 00194548: 2402ffff addiu r2,r0,-0x0001 |Returns r2 = -0x01 0019454c: 8fbf0024 lw r31,0x0024(r29) END 00194550: 8fb40020 lw r20,0x0020(r29) 00194554: 8fb3001c lw r19,0x001c(r29) 00194558: 8fb20018 lw r18,0x0018(r29) 0019455c: 8fb10014 lw r17,0x0014(r29) 00194560: 8fb00010 lw r16,0x0010(r29) 00194564: 27bd0028 addiu r29,r29,0x0028 00194568: 03e00008 jr r31 0019456c: 00000000 nop
Return Locations
BATTLE.BIN 00193ff8: Main_AI_action_setup