Difference between revisions of "AI Initial Targeting Selection"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
'''BATTLE.BIN''' :  - AI_Initial_Targeting_Selection
 +
Initialize Action Tables (used for priority scoring) - Choose AI behavior (might be non native based on Status) - Set AI 0x17fc (selected action)
 +
------------------------------------------------------------------------------------------
 +
Parameter : Nothing
 +
Return : r2 = 0x00 Routine ends as intended
 +
          r2 = -0x01 Routine Aborts on V_Sync alert (memory variable is updated)
 +
------------------------------------------------------------------------------------------
 +
00195d94: 3c02801a lui r2,0x801a            |
 +
00195d98: 90420d7b lbu r2,0x0d7b(r2)        |{{f/load|AI 0x19b7}}
 +
00195d9c: 27bdffe0 addiu r29,r29,-0x0020    |
 +
00195da0: afb20018 sw r18,0x0018(r29)        |
 +
00195da4: 3c12801a lui r18,0x801a            |
 +
00195da8: 2652f3c4 addiu r18,r18,-0x0c3c    |{{f/adr|0x8019f3c4}}
 +
00195dac: afbf001c sw r31,0x001c(r29)        |
 +
00195db0: afb10014 sw r17,0x0014(r29)        |
 
   
 
   
  00195d94: 3c02801a lui r2,0x801a
+
  {{f/sec|<nowiki>=== Return to where the code left off ===</nowiki>}}
00195d98: 90420d7b lbu r2,0x0d7b(r2) load return from 194e50
+
  00195db4: 10400011 beq r2,r0,0x00195dfc     {{f/Cond|If [0x19b7] <> 0x00 : }}
00195d9c: 27bdffe0 addiu r29,r29,0xffe0
+
  00195db8: afb00010 sw r16,0x0010(r29)           |
00195da0: afb20018 sw r18,0x0018(r29)
+
  00195dbc: 3c03801a lui r3,0x801a                 |
00195da4: 3c12801a lui r18,0x801a
+
  00195dc0: 90630031 lbu r3,0x0031(r3)             |{{f/load|AI 0xc6d (this routine memory variable)}} {{f/std|0x801a0031}}
00195da8: 2652f3c4 addiu r18,r18,0xf3c4 r18 = AI data
+
  00195dc4: 34020002 ori r2,r0,0x0002             |
00195dac: afbf001c sw r31,0x001c(r29)
+
  00195dc8: 10620044 beq r3,r2,0x00195edc         {{f/Cond|<nowiki>If [0x0c6d] = 0x02</nowiki>}} {{f/loc|Return to non native AI run like a rabbit section}}
00195db0: afb10014 sw r17,0x0014(r29)
+
  00195dcc: 28620003 slti r2,r3,0x0003             |
  00195db4: 10400011 beq r2,r0,0x00195dfc branch if ?? = 0
+
  00195dd0: 10400005 beq r2,r0,0x00195de8         {{f/Cond|If AI 0xc6d < 0x02}}
  00195db8: afb00010 sw r16,0x0010(r29)
+
  00195dd4: 00000000 nop                               |
  00195dbc: 3c03801a lui r3,0x801a
+
  00195dd8: 1060001a beq r3,r0,0x00195e44             {{f/Cond|<nowiki>If AI 0xc6d = 0x00</nowiki>}} {{f/loc|Return to checking status affecting behavior}}
  00195dc0: 90630031 lbu r3,0x0031(r3) ???
+
  00195ddc: 00000000 nop                               |
  00195dc4: 34020002 ori r2,r0,0x0002
+
  00195de0: 080657cc j 0x00195f30                     {{f/jump|<nowiki>Else AI 0xc6d = 0x01</nowiki>}} {{f/loc|Return to Non specific behavior routine (should not happen)}}
  00195dc8: 10620044 beq r3,r2,0x00195edc branch if ?? = 0xff
+
  00195de4: 00000000 nop                               |
  00195dcc: 28620003 slti r2,r3,0x0003
+
                                                  '''Else : 0xc6d > 0x02'''
  00195dd0: 10400005 beq r2,r0,0x00195de8 skip if ?? < 3
+
00195de8: 34020003 ori r2,r0,0x0003                  |
  00195dd4: 00000000 nop
+
00195dec: 10620047 beq r3,r2,0x00195f0c              {{f/Cond|<nowiki>If [0x0c6d] = 0x03</nowiki>}} {{f/loc|Return to Native Auto-Battle routine}}
  00195dd8: 1060001a beq r3,r0,0x00195e44 jump to AI status
+
00195df0: 00000000 nop                              |
  00195ddc: 00000000 nop
+
00195df4: 080657cc j 0x00195f30                      {{f/jump|Else >0x03 (0x07)}} {{f/loc|Return to Non specific behavior routine}}
  00195de0: 080657cc j 0x00195f30
+
00195df8: 00000000 nop                              |
  00195de4: 00000000 nop
 
 
   
 
   
  00195de8: 34020003 ori r2,r0,0x0003
+
  {{f/sec|<nowiki>=== Start from beginning ===</nowiki>}}
00195dec: 10620047 beq r3,r2,0x00195f0c
+
  00195dfc: 00008021 addu r16,r0,r0           |{{f/std|Initialize loop counter}}
00195df0: 00000000 nop
+
  00195e00: 34110054 ori r17,r0,0x0054         |
00195df4: 080657cc j 0x00195f30
 
00195df8: 00000000 nop
 
Initialization
 
  00195dfc: 00008021 addu r16,r0,r0
 
  00195e00: 34110054 ori r17,r0,0x0054
 
00195e04: 0c0657db jal 0x00195f6c [[Initialize some AI Data (mount, base hit %)]]
 
00195e08: 02512021 addu r4,r18,r17
 
00195e0c: 26100001 addiu r16,r16,0x0001
 
00195e10: 2a020008 slti r2,r16,0x0008
 
00195e14: 1440fffb bne r2,r0,0x00195e04 perform 8 times?
 
00195e18: 26310020 addiu r17,r17,0x0020
 
00195e1c: 0c0657db jal 0x00195f6c [[Initialize some AI Data (mount, base hit %)]]
 
00195e20: 26440014 addiu r4,r18,0x0014
 
00195e24: 0c0657db jal 0x00195f6c [[Initialize some AI Data (mount, base hit %)]]
 
00195e28: 26440034 addiu r4,r18,0x0034
 
00195e2c: 0c0657db jal 0x00195f6c [[Initialize some AI Data (mount, base hit %)]]
 
00195e30: 26440154 addiu r4,r18,0x0154 AI data + 0x154?
 
00195e34: 0c0657db jal 0x00195f6c [[Initialize some AI Data (mount, base hit %)]]
 
00195e38: 264417fc addiu r4,r18,0x17fc AI data + 0x17fc?
 
Decision Stuff
 
00195e3c: 0c0665c7 jal 0x0019971c [[Check for good units to target (based on distance,status,coordinate)]]
 
00195e40: 00000000 nop
 
00195e44: 0c065c6e jal 0x001971b8 [[Set chosen ability/target for AI status]]
 
00195e48: 00000000 nop
 
00195e4c: 00408021 addu r16,r2,r0
 
00195e50: 2402ffff addiu r2,r0,0xffff
 
00195e54: 16020003 bne r16,r2,0x00195e64 branch if 0xffff not returned
 
00195e58: 00000000 nop
 
00195e5c: 080657d4 j 0x00195f50 jump to end
 
00195e60: a2400c6d sb r0,0x0c6d(r18)
 
 
   
 
   
  00195e64: 1600003a bne r16,r0,0x00195f50              go to end if anything returned from AI status routine
+
                  {{f/sec|--- Initialize Action Data ---}}
  00195e68: 00001021 addu r2,r0,r0
+
                                            {{f/bloop|LOOP 8 times - initialize Action from 0x54 to 0x134 (used to preserve best action)}}
  00195e6c: 8e4417f8 lw r4,0x17f8(r18) load acting units data
+
  00195e04: 0c0657db jal 0x00195f6c                |{{f/jal|Initialize some AI Data (mount, base hit %)|Initialize some AI Data (mount, base hit %)}} {{f/std|Initialize Action data}}
  00195e70: 00000000 nop
+
  00195e08: 02512021 addu r4,r18,r17              |{{f/adr|Dynamic pointer to Action data 8019f3c4 + 0x0054 + 0x20 each iteration}}
00195e74: 9082005a lbu r2,0x005a(r4) load status
+
  00195e0c: 26100001 addiu r16,r16,0x0001          |{{f/std|counter + 1}}
  00195e78: 00000000 nop
+
  00195e10: 2a020008 slti r2,r16,0x0008            |
00195e7c: 30420003 andi r2,r2,0x0003
+
  00195e14: 1440fffb bne r2,r0,0x00195e04      {{f/eloop|Loop 8 times}}
  00195e80: 10400006 beq r2,r0,0x00195e9c branch if not frog/critical
+
  00195e18: 26310020 addiu r17,r17,0x0020          |{{f/std|Offset for Dynamic pointer + 0x20 each iteration}}
  00195e84: 3c034000 lui r3,0x4000
+
  00195e1c: 0c0657db jal 0x00195f6c            |{{f/jal|Initialize some AI Data (mount, base hit %)|Initialize some AI Data (mount, base hit %)}} {{f/std|initialize Action Table at 0x14 (temporary data while testing action)}}
  00195e88: 8e420cb4 lw r2,0x0cb4(r18) load ??
+
  00195e20: 26440014 addiu r4,r18,0x0014      |
  00195e8c: 00000000 nop
+
  00195e24: 0c0657db jal 0x00195f6c            |{{f/jal|Initialize some AI Data (mount, base hit %)|Initialize some AI Data (mount, base hit %)}} {{f/std|initialize Action Table at 0x34 (temporary data)}}
00195e90: 00431024 and r2,r2,r3
+
  00195e28: 26440034 addiu r4,r18,0x0034      |
  00195e94: 1440000d bne r2,r0,0x00195ecc
+
  00195e2c: 0c0657db jal 0x00195f6c            |{{f/jal|Initialize some AI Data (mount, base hit %)|Initialize some AI Data (mount, base hit %)}} {{f/std|initialize Action Table at 0x154 (score for moving only)}}
00195e98: 00000000 nop
+
  00195e30: 26440154 addiu r4,r18,0x0154      |{{f/std|AI data + 0x154?}}
00195e9c: 9082005c lbu r2,0x005c(r4) load status
+
  00195e34: 0c0657db jal 0x00195f6c            |{{f/jal|Initialize some AI Data (mount, base hit %)|Initialize some AI Data (mount, base hit %)}} {{f/std|Initialize Selected Action data}}
  00195ea0: 00000000 nop
+
  00195e38: 264417fc addiu r4,r18,0x17fc      |{{f/std|AI data + 0x17fc?}}
00195ea4: 30420004 andi r2,r2,0x0004
+
  00195e3c: 0c0665c7 jal 0x0019971c            |{{f/jal|Check for good units to target (based on distance,status,coordinate)|Check for good units to target (based on distance,status,coordinate)}} {{f/std|Fill AI 0xc8d (List of targtable unit) and AI 0x174 (proximity score)}}
  00195ea8: 10400018 beq r2,r0,0x00195f0c branch if not don't act
+
  00195e40: 00000000 nop                       |
00195eac: 00000000 nop
 
00195eb0: 8e420e34 lw r2,0x0e34(r18) load acting unit Decision data
 
00195eb4: 00000000 nop
 
00195eb8: 90420004 lbu r2,0x0004(r2)
 
  00195ebc: 00000000 nop
 
00195ec0: 30420040 andi r2,r2,0x0040
 
  00195ec4: 10400011 beq r2,r0,0x00195f0c branch if not focus on target
 
  00195ec8: 00000000 nop
 
00195ecc: 2644197c addiu r4,r18,0x197c
 
  00195ed0: 8e450e34 lw r5,0x0e34(r18) load acting units decision data
 
00195ed4: 0c066ac2 jal 0x0019ab08 [[Transfer Halfword Values]]
 
00195ed8: 34060010 ori r6,r0,0x0010
 
00195edc: 0c066398 jal 0x00198e60 [[00198e60 - 00199058]]
 
  00195ee0: 00000000 nop
 
00195ee4: 2403ffff addiu r3,r0,0xffff
 
00195ee8: 14430003 bne r2,r3,0x00195ef8 branch if 0xff returned
 
00195eec: 2645197c addiu r5,r18,0x197c
 
00195ef0: 080657d2 j 0x00195f48
 
00195ef4: 34020002 ori r2,r0,0x0002
 
 
   
 
   
  00195ef8: 8e440e34 lw r4,0x0e34(r18)
+
                  {{f/sec|--- Check and run non Native behavior (status - critical) ---}}
  00195efc: 0c066ac2 jal 0x0019ab08 [[Transfer Halfword Values]]
+
00195e44: 0c065c6e jal 0x001971b8            |{{f/jal|Set chosen ability/target for AI status|Set chosen ability/target for AI status}} {{f/std| Check if Acting Unit has some changing behavior status}}
  00195f00: 34060010 ori r6,r0,0x0010
+
00195e48: 00000000 nop                      |
  00195f04: 080657d4 j 0x00195f50
+
00195e4c: 00408021 addu r16,r2,r0            |{{f/std|Preserve returned Value}}
  00195f08: 00001021 addu r2,r0,r0
+
00195e50: 2402ffff addiu r2,r0,-0x0001      |
 +
00195e54: 16020003 bne r16,r2,0x00195e64    {{f/Cond|If returned Value is -0x0001}} {{f/std|V_Sync alert (time to refresh animations) ?}}
 +
00195e58: 00000000 nop                          |
 +
00195e5c: 080657d4 j 0x00195f50                  |{{f/loc|<nowiki>Set Memory variable = 0x00 then Exit</nowiki>}} {{f/Returns|Return -0x01}} {{f/std|AI 0xc6d}}
 +
00195e60: a2400c6d sb r0,0x0c6d(r18)            |
 +
                                              ''''''
 +
00195e64: 1600003a bne r16,r0,0x00195f50    {{f/Cond|If Acting Unit is  under status influence :}} {{f/loc|Exit}} {{f/Returns|Return 0x00}} {{f/std| Special status behavior is done}}
 +
00195e68: 00001021 addu r2,r0,r0            |
 +
00195e6c: 8e4417f8 lw r4,0x17f8(r18)        |{{f/adr|Acting unit battle data pointer}}
 +
00195e70: 00000000 nop                      |
 +
00195e74: 9082005a lbu r2,0x005a(r4)        |{{f/load|Acting Unit current Status 3}}
 +
00195e78: 00000000 nop                      |
 +
00195e7c: 30420003 andi r2,r2,0x0003        |
 +
00195e80: 10400006 beq r2,r0,0x00195e9c      {{f/Cond|If Acting unit has [Frog] or [Critical]}}
 +
00195e84: 3c034000 lui r3,0x4000                |
 +
00195e88: 8e420cb4 lw r2,0x0cb4(r18)            |{{f/load|Load AI 0xcb4 }} {{f/std|Labeled as AI processing order}}
 +
00195e8c: 00000000 nop                          |
 +
00195e90: 00431024 and r2,r2,r3                  |
 +
00195e94: 1440000d bne r2,r0,0x00195ecc          {{f/Cond|If Caster is not the last standing Unit in his team}} {{f/loc|go to Run Away section}} {{f/std|If last man standing, die quickly please}}
 +
00195e98: 00000000 nop                          |
 +
00195e9c: 9082005c lbu r2,0x005c(r4)        |{{f/load|Acting Unit Current  Status 5}}
 +
00195ea0: 00000000 nop                      |
 +
00195ea4: 30420004 andi r2,r2,0x0004        |
 +
00195ea8: 10400018 beq r2,r0,0x00195f0c      {{f/Cond|If Acting unit do not have  [Don't Act] : branch to }} {{f/loc|Native Behavior}}
 +
00195eac: 00000000 nop                      |
 +
                                              '''Else : Caster has don't Act'''
 +
00195eb0: 8e420e34 lw r2,0x0e34(r18)        |{{f/adr|Pointer to Acting Unit Decision (8019f3c4 + 0x182c)}}
 +
00195eb4: 00000000 nop                          |
 +
00195eb8: 90420004 lbu r2,0x0004(r2)            |{{f/load|Decision Byte 0x04}}
 +
00195ebc: 00000000 nop                          |
 +
00195ec0: 30420040 andi r2,r2,0x0040            |
 +
00195ec4: 10400011 beq r2,r0,0x00195f0c          {{f/Cond|If Unit do not have [Focus Unit] flag}} {{f/loc|Avoid Non Native Run Away section}}
 +
00195ec8: 00000000 nop                          |
 +
 +
                                            {{f/sec|--- Non Native Run Away  ( Frog , critical or Don't Act with [Focus Unit] setting )---}}
 +
00195ecc: 2644197c addiu r4,r18,0x197c      |{{f/adr|Pointer to AI 0x197c}}
 +
00195ed0: 8e450e34 lw r5,0x0e34(r18)        |{{f/adr|Pointer to Acting Unit Decision (8019f3c4 + 0x182c)}}
 +
00195ed4: 0c066ac2 jal 0x0019ab08            |{{f/jal|Transfer Halfword Values|Transfer Halfword Values}} {{f/std|Transfer 0x10 byte from Caster 0x182c to AI 0x197c (preserve behavior data ?)}}
 +
00195ed8: 34060010 ori r6,r0,0x0010          |
 +
00195edc: 0c066398 jal 0x00198e60            |{{f/jal|AI_Critical_or_Run_Like_Rabbit|AI_Critical_or_Run_Like_Rabbit}}
 +
00195ee0: 00000000 nop                      |
 +
00195ee4: 2403ffff addiu r3,r0,-0x0001      |
 +
00195ee8: 14430003 bne r2,r3,0x00195ef8      {{f/Cond|<nowiki>If Returned Value = -0x01 </nowiki>}} {{f/std|(Abort on V_Sync alert)}}
 +
00195eec: 2645197c addiu r5,r18,0x197c      |{{f/adr|Pointer to AI 0x197c}}
 +
00195ef0: 080657d2 j 0x00195f48                  |{{f/loc|Set Memory Variable to 0x02 then exit}} {{f/Returns|Returns -0x01}} {{f/std|AI 0xc6d}}
 +
00195ef4: 34020002 ori r2,r0,0x0002              |
 +
  00195ef8: 8e440e34 lw r4,0x0e34(r18)         |{{f/adr|Pointer to Acting Unit Decision (8019f3c4 + 0x182c)}}
 +
  00195efc: 0c066ac2 jal 0x0019ab08           |{{f/jal|Transfer Halfword Values|Transfer Halfword Values}} {{f/std|Restore Caster AI 0x182c }}
 +
  00195f00: 34060010 ori r6,r0,0x0010         |
 +
  00195f04: 080657d4 j 0x00195f50             |{{f/loc|Exit}} {{f/Returns|Returns 0x00}} {{f/std|Behavior done}}
 +
  00195f08: 00001021 addu r2,r0,r0             |
 +
 +
                  {{f/sec|--- Check and do Native AI Behavior ---}}
 +
00195f0c: 0c065fc5 jal 0x00197f14            |{{f/jal|Auto_Battle_Handling|Auto_Battle_Handling}} {{f/std|Handles special behavior}}
 +
00195f10: 00000000 nop                      |
 +
00195f14: 00408021 addu r16,r2,r0            |{{f/std|Preserves returned value}}
 +
00195f18: 2402ffff addiu r2,r0,-0x0001      |
 +
00195f1c: 1202000a beq r16,r2,0x00195f48    {{f/Cond|<nowiki>If Returned Value = -0x01 : </nowiki>}} {{f/loc|Set Memory Variable (AI 0xc6d) to 0x03 then exit}} {{f/Returns|Returns -0x0001}}
 +
00195f20: 34020003 ori r2,r0,0x0003          |
 +
00195f24: 1600000a bne r16,r0,0x00195f50    {{f/Cond|If Returned Value <> 0x00}} {{f/loc|Exit}} {{f/Returns|Returns 0x00}} {{f/std|Auto Battle is done}}
 +
00195f28: 00001021 addu r2,r0,r0            |
 +
 +
                                            {{f/sec|<nowiki>Else  : proceed to non specific auto-battle (returned value = 0x00)</nowiki>}}
 +
00195f2c: a24019b7 sb r0,0x19b7(r18)        |{{f/store|Reset AI 0x19b7}}
 +
00195f30: 0c065867 jal 0x0019619c            |{{f/jal|Non-Specific_AI_AutoBattle_(Enemies)|Non-Specific_AI_AutoBattle_(Enemies)}} {{f/std|Return selected action in AI 0x17fc}}
 +
00195f34: 00000000 nop                      |
 +
00195f38: 2403ffff addiu r3,r0,-0x0001      |
 +
00195f3c: 14430004 bne r2,r3,0x00195f50      {{f/Cond|If Returned Value <> -0x0001}} {{f/loc|Exit}} {{f/Returns|Returns 0x00}}
 +
00195f40: 00001021 addu r2,r0,r0            |
 +
00195f44: 34020007 ori r2,r0,0x0007          |{{f/std|<nowiki>Else : r2 = -0x0001</nowiki>}} {{f/loc|Store 0x07 in AI 0x0c6d and}} {{f/Returns|Returns -0x0001}}
 +
 +
{{f/sec|<nowiki>=== Update memory variable and abort section ===</nowiki>}}
 +
00195f48: a2420c6d sb r2,0x0c6d(r18)        |{{f/store|Update Memory variable (Ai 0xc6d)}}
 +
00195f4c: 2402ffff addiu r2,r0,-0x0001      |{{f/Returns|Returns -0x01}}
 
   
 
   
00195f0c: 0c065fc5 jal 0x00197f14 [[Auto Battle Handling]]
 
00195f10: 00000000 nop
 
00195f14: 00408021 addu r16,r2,r0
 
00195f18: 2402ffff addiu r2,r0,0xffff
 
00195f1c: 1202000a beq r16,r2,0x00195f48
 
00195f20: 34020003 ori r2,r0,0x0003
 
00195f24: 1600000a bne r16,r0,0x00195f50
 
00195f28: 00001021 addu r2,r0,r0
 
Non-Specific AI AutoBattle (enemies)
 
00195f2c: a24019b7 sb r0,0x19b7(r18)
 
00195f30: 0c065867 jal 0x0019619c [[0019619c - 0019629c]]
 
00195f34: 00000000 nop
 
00195f38: 2403ffff addiu r3,r0,0xffff
 
00195f3c: 14430004 bne r2,r3,0x00195f50
 
00195f40: 00001021 addu r2,r0,r0
 
00195f44: 34020007 ori r2,r0,0x0007
 
00195f48: a2420c6d sb r2,0x0c6d(r18)
 
00195f4c: 2402ffff addiu r2,r0,0xffff
 
 
  00195f50: 8fbf001c lw r31,0x001c(r29)
 
  00195f50: 8fbf001c lw r31,0x001c(r29)
 
  00195f54: 8fb20018 lw r18,0x0018(r29)
 
  00195f54: 8fb20018 lw r18,0x0018(r29)
Line 126: Line 145:
 
  00195f64: 03e00008 jr r31
 
  00195f64: 03e00008 jr r31
 
  00195f68: 00000000 nop
 
  00195f68: 00000000 nop
</font>
+
===Return locations===
 +
'''BATTLE.BIN'''
 +
  00194070: [[Main_AI_action_setup]]

Latest revision as of 15:28, 26 June 2024

BATTLE.BIN :  - AI_Initial_Targeting_Selection
Initialize Action Tables (used for priority scoring) - Choose AI behavior (might be non native based on Status) - Set AI 0x17fc (selected action)
------------------------------------------------------------------------------------------
Parameter : Nothing
Return : r2 = 0x00 Routine ends as intended
         r2 = -0x01 Routine Aborts on V_Sync alert (memory variable is updated)
------------------------------------------------------------------------------------------
00195d94: 3c02801a lui r2,0x801a             |
00195d98: 90420d7b lbu r2,0x0d7b(r2)         |AI 0x19b7
00195d9c: 27bdffe0 addiu r29,r29,-0x0020     |
00195da0: afb20018 sw r18,0x0018(r29)        |
00195da4: 3c12801a lui r18,0x801a            |
00195da8: 2652f3c4 addiu r18,r18,-0x0c3c     |0x8019f3c4
00195dac: afbf001c sw r31,0x001c(r29)        |
00195db0: afb10014 sw r17,0x0014(r29)        |

=== Return to where the code left off ===
00195db4: 10400011 beq r2,r0,0x00195dfc      #If [0x19b7] <> 0x00 : 
00195db8: afb00010 sw r16,0x0010(r29)            |
00195dbc: 3c03801a lui r3,0x801a                 |
00195dc0: 90630031 lbu r3,0x0031(r3)             |AI 0xc6d (this routine memory variable) 0x801a0031
00195dc4: 34020002 ori r2,r0,0x0002              |
00195dc8: 10620044 beq r3,r2,0x00195edc          #If [0x0c6d] = 0x02 Return to non native AI run like a rabbit section
00195dcc: 28620003 slti r2,r3,0x0003             |
00195dd0: 10400005 beq r2,r0,0x00195de8          #If AI 0xc6d < 0x02
00195dd4: 00000000 nop                               |
00195dd8: 1060001a beq r3,r0,0x00195e44              #If AI 0xc6d = 0x00 Return to checking status affecting behavior
00195ddc: 00000000 nop                               |
00195de0: 080657cc j 0x00195f30                      >>Else AI 0xc6d = 0x01 Return to Non specific behavior routine (should not happen)
00195de4: 00000000 nop                               |
                                                 Else : 0xc6d > 0x02
00195de8: 34020003 ori r2,r0,0x0003                  |
00195dec: 10620047 beq r3,r2,0x00195f0c              #If [0x0c6d] = 0x03 Return to Native Auto-Battle routine
00195df0: 00000000 nop                               |
00195df4: 080657cc j 0x00195f30                      >>Else >0x03 (0x07) Return to Non specific behavior routine
00195df8: 00000000 nop                               |

=== Start from beginning ===
00195dfc: 00008021 addu r16,r0,r0            |Initialize loop counter
00195e00: 34110054 ori r17,r0,0x0054         |

                  --- Initialize Action Data ---
                                            @LOOP  8 times - initialize Action from 0x54 to 0x134 (used to preserve best action)
00195e04: 0c0657db jal 0x00195f6c                |-->Initialize some AI Data (mount, base hit %) Initialize Action data
00195e08: 02512021 addu r4,r18,r17               |Dynamic pointer to Action data 8019f3c4 + 0x0054 + 0x20 each iteration
00195e0c: 26100001 addiu r16,r16,0x0001          |counter + 1
00195e10: 2a020008 slti r2,r16,0x0008            |
00195e14: 1440fffb bne r2,r0,0x00195e04      Λ Loop 8 times
00195e18: 26310020 addiu r17,r17,0x0020          |Offset for Dynamic pointer + 0x20 each iteration
00195e1c: 0c0657db jal 0x00195f6c            |-->Initialize some AI Data (mount, base hit %) initialize Action Table at 0x14 (temporary data while testing action)
00195e20: 26440014 addiu r4,r18,0x0014       |
00195e24: 0c0657db jal 0x00195f6c            |-->Initialize some AI Data (mount, base hit %) initialize Action Table at 0x34 (temporary data)
00195e28: 26440034 addiu r4,r18,0x0034       |
00195e2c: 0c0657db jal 0x00195f6c            |-->Initialize some AI Data (mount, base hit %) initialize Action Table at 0x154 (score for moving only)
00195e30: 26440154 addiu r4,r18,0x0154       |AI data + 0x154?
00195e34: 0c0657db jal 0x00195f6c            |-->Initialize some AI Data (mount, base hit %) Initialize Selected Action data
00195e38: 264417fc addiu r4,r18,0x17fc       |AI data + 0x17fc?
00195e3c: 0c0665c7 jal 0x0019971c            |-->Check for good units to target (based on distance,status,coordinate) Fill AI 0xc8d (List of targtable unit) and AI 0x174 (proximity score)
00195e40: 00000000 nop                       |

                  --- Check and run non Native behavior (status - critical) ---
00195e44: 0c065c6e jal 0x001971b8            |-->Set chosen ability/target for AI status  Check if Acting Unit has some changing behavior status
00195e48: 00000000 nop                       |
00195e4c: 00408021 addu r16,r2,r0            |Preserve returned Value
00195e50: 2402ffff addiu r2,r0,-0x0001       |
00195e54: 16020003 bne r16,r2,0x00195e64     #If returned Value is -0x0001 V_Sync alert (time to refresh animations) ?
00195e58: 00000000 nop                           |
00195e5c: 080657d4 j 0x00195f50                  |Set Memory variable = 0x00 then Exit Return -0x01 AI 0xc6d
00195e60: a2400c6d sb r0,0x0c6d(r18)             |
                                             '
00195e64: 1600003a bne r16,r0,0x00195f50     #If Acting Unit is  under status influence : Exit Return 0x00  Special status behavior is done
00195e68: 00001021 addu r2,r0,r0             |
00195e6c: 8e4417f8 lw r4,0x17f8(r18)         |Acting unit battle data pointer
00195e70: 00000000 nop                       |
00195e74: 9082005a lbu r2,0x005a(r4)         |Acting Unit current Status 3
00195e78: 00000000 nop                       |
00195e7c: 30420003 andi r2,r2,0x0003         |
00195e80: 10400006 beq r2,r0,0x00195e9c      #If Acting unit has [Frog] or [Critical]
00195e84: 3c034000 lui r3,0x4000                 |
00195e88: 8e420cb4 lw r2,0x0cb4(r18)             |Load AI 0xcb4  Labeled as AI processing order
00195e8c: 00000000 nop                           |
00195e90: 00431024 and r2,r2,r3                  |
00195e94: 1440000d bne r2,r0,0x00195ecc          #If Caster is not the last standing Unit in his team go to Run Away section If last man standing, die quickly please
00195e98: 00000000 nop                           |
00195e9c: 9082005c lbu r2,0x005c(r4)         |Acting Unit Current  Status 5
00195ea0: 00000000 nop                       |
00195ea4: 30420004 andi r2,r2,0x0004         |
00195ea8: 10400018 beq r2,r0,0x00195f0c      #If Acting unit do not have  [Don't Act] : branch to  Native Behavior
00195eac: 00000000 nop                       |
                                             Else : Caster has don't Act
00195eb0: 8e420e34 lw r2,0x0e34(r18)         |Pointer to Acting Unit Decision (8019f3c4 + 0x182c)
00195eb4: 00000000 nop                           |
00195eb8: 90420004 lbu r2,0x0004(r2)             |Decision Byte 0x04
00195ebc: 00000000 nop                           |
00195ec0: 30420040 andi r2,r2,0x0040             |
00195ec4: 10400011 beq r2,r0,0x00195f0c          #If Unit do not have [Focus Unit] flag Avoid Non Native Run Away section
00195ec8: 00000000 nop                           |

                                            --- Non Native Run Away  ( Frog , critical or Don't Act with [Focus Unit] setting )---
00195ecc: 2644197c addiu r4,r18,0x197c       |Pointer to AI 0x197c
00195ed0: 8e450e34 lw r5,0x0e34(r18)         |Pointer to Acting Unit Decision (8019f3c4 + 0x182c)
00195ed4: 0c066ac2 jal 0x0019ab08            |-->Transfer Halfword Values Transfer 0x10 byte from Caster 0x182c to AI 0x197c (preserve behavior data ?)
00195ed8: 34060010 ori r6,r0,0x0010          |
00195edc: 0c066398 jal 0x00198e60            |-->AI_Critical_or_Run_Like_Rabbit
00195ee0: 00000000 nop                       |
00195ee4: 2403ffff addiu r3,r0,-0x0001       |
00195ee8: 14430003 bne r2,r3,0x00195ef8      #If Returned Value = -0x01  (Abort on V_Sync alert)
00195eec: 2645197c addiu r5,r18,0x197c       |Pointer to AI 0x197c
00195ef0: 080657d2 j 0x00195f48                  |Set Memory Variable to 0x02 then exit Returns -0x01 AI 0xc6d
00195ef4: 34020002 ori r2,r0,0x0002              |
00195ef8: 8e440e34 lw r4,0x0e34(r18)         |Pointer to Acting Unit Decision (8019f3c4 + 0x182c)
00195efc: 0c066ac2 jal 0x0019ab08            |-->Transfer Halfword Values Restore Caster AI 0x182c 
00195f00: 34060010 ori r6,r0,0x0010          |
00195f04: 080657d4 j 0x00195f50              |Exit Returns 0x00 Behavior done
00195f08: 00001021 addu r2,r0,r0             |

                  --- Check and do Native AI Behavior ---
00195f0c: 0c065fc5 jal 0x00197f14            |-->Auto_Battle_Handling Handles special behavior
00195f10: 00000000 nop                       |
00195f14: 00408021 addu r16,r2,r0            |Preserves returned value
00195f18: 2402ffff addiu r2,r0,-0x0001       |
00195f1c: 1202000a beq r16,r2,0x00195f48     #If Returned Value = -0x01 :  Set Memory Variable (AI 0xc6d) to 0x03 then exit Returns -0x0001
00195f20: 34020003 ori r2,r0,0x0003          |
00195f24: 1600000a bne r16,r0,0x00195f50     #If Returned Value <> 0x00 Exit Returns 0x00 Auto Battle is done
00195f28: 00001021 addu r2,r0,r0             |

                                            Else  : proceed to non specific auto-battle (returned value = 0x00)
00195f2c: a24019b7 sb r0,0x19b7(r18)         |Reset AI 0x19b7
00195f30: 0c065867 jal 0x0019619c            |-->Non-Specific_AI_AutoBattle_(Enemies) Return selected action in AI 0x17fc
00195f34: 00000000 nop                       |
00195f38: 2403ffff addiu r3,r0,-0x0001       |
00195f3c: 14430004 bne r2,r3,0x00195f50      #If Returned Value <> -0x0001 Exit Returns 0x00
00195f40: 00001021 addu r2,r0,r0             |
00195f44: 34020007 ori r2,r0,0x0007          |Else : r2 = -0x0001 Store 0x07 in AI 0x0c6d and Returns -0x0001

=== Update memory variable and abort section ===
00195f48: a2420c6d sb r2,0x0c6d(r18)         |Update Memory variable (Ai 0xc6d)
00195f4c: 2402ffff addiu r2,r0,-0x0001       |Returns -0x01

00195f50: 8fbf001c lw r31,0x001c(r29)
00195f54: 8fb20018 lw r18,0x0018(r29)
00195f58: 8fb10014 lw r17,0x0014(r29)
00195f5c: 8fb00010 lw r16,0x0010(r29)
00195f60: 27bd0020 addiu r29,r29,0x0020
00195f64: 03e00008 jr r31
00195f68: 00000000 nop

Return locations

BATTLE.BIN
 00194070: Main_AI_action_setup