AI Ability Outcome Evaluation

From Final Fantasy Hacktics Wiki
Revision as of 19:40, 15 June 2024 by Orkney (talk | contribs)
Jump to navigation Jump to search
BATTLE.BIN :  - AI_ability_use_control_routine                 Alternative version : AI_ability_use_control_routine
Evaluate an Ability outcome. Depends on Targeting type (Map - Tile specific - Unit specific). Best simualtion results are saved in AI 0x54 to AI 0x154.
------------------------------------------------------------------------------------------
Parameter : Nothing
Return : r2 = 0x00 Default (Priority evaluated or not)
         r2 = -0x01 Routine Aborts (AI 0xc70 updated depending on section)
------------------------------------------------------------------------------------------
0019af18: 3c02801a lui r2,0x801a             |
0019af1c: 90420d7b lbu r2,0x0d7b(r2)         |AI 0x19b7 801a0d7b
0019af20: 27bdffd8 addiu r29,r29,-0x0028     |
0019af24: afb20018 sw r18,0x0018(r29)        |
0019af28: 3c12801a lui r18,0x801a            |
0019af2c: 2652f3c4 addiu r18,r18,-0x0c3c     |0x8019f3c4
0019af30: afbf0020 sw r31,0x0020(r29)        |
0019af34: afb3001c sw r19,0x001c(r29)        |
0019af38: afb10014 sw r17,0x0014(r29)        |
0019af3c: 1040000d beq r2,r0,0x0019af74      #if AI 0x19b7 <> 0x00 - check control variable and return where this routine stops
0019af40: afb00010 sw r16,0x0010(r29)            |
0019af44: 3c03801a lui r3,0x801a                 |
0019af48: 90630034 lbu r3,0x0034(r3)             |This routine variable AI 0xc70 (This contains previous decisions made in this very routine)
0019af4c: 00000000 nop                           |
0019af50: 2c620009 sltiu r2,r3,0x0009            |
0019af54: 104000da beq r2,r0,0x0019b2c0          #if Routine Variable is invalid : branch to  to Tile specific priority evaluation
0019af58: 00031080 sll r2,r3,0x02                |
0019af5c: 3c018019 lui r1,0x8019                 |
0019af60: 00220821 addu r1,r1,r2                 |
0019af64: 8c223db0 lw r2,0x3db0(r1)              |Load Jump Addresses 80193db0 + Variable offset (word)
0019af68: 00000000 nop                           |
0019af6c: 00400008 jr r2                         >>jump to dedicated section Return where this routine stops ? 
0019af70: 00000000 nop                           |

                  AI 0xc70 = 0x07
0019af74: 0c0076ea jal 0x0001dba8                |-->VSync_call
0019af78: 34040001 ori r4,r0,0x0001              |
0019af7c: 284201b9 slti r2,r2,0x01b9             |
0019af80: 104000d4 beq r2,r0,0x0019b2d4          #If returned value > 0x1b8 : Set AI 0xc70 to 0x07 and Exit return -0x01
0019af84: 34020007 ori r2,r0,0x0007              |
0019af88: 8e42000c lw r2,0x000c(r18)             |Ability AI behavior Flags 1 to 4
0019af8c: 00000000 nop                           |
0019af90: 044100d5 bgez r2,0x0019b2e8            # if not Usable by the AI (0x80000000 makes it negative) Exit return 0x00
0019af94: a24019b7 sb r0,0x19b7(r18)             |0x19b7 = 0x00
                                                 Else : Ability is usable by AI
0019af98: 30420800 andi r2,r2,0x0800             |
0019af9c: 1040000e beq r2,r0,0x0019afd8          #If Ability has [Random Use]
0019afa0: 00000000 nop                               |
0019afa4: 925019b8 lbu r16,0x19b8(r18)               |Load Acting Unit Random Ability Mod (# of random hits abilities128 / number of usable abilities)
0019afa8: 0c0088c3 jal 0x0002230c                    |-->Random Number Generator returns r2 drm(0…7fff)
0019afac: 00000000 nop                               |
0019afb0: 00401821 addu r3,r2,r0                     |
0019afb4: 04610003 bgez r3,0x0019afc4                #If Rdm is negative
0019afb8: 000211c3 sra r2,r2,0x07                    |Rdm / 128
0019afbc: 2462007f addiu r2,r3,0x007f                    |Do shit if rdm was negative (can't be)
0019afc0: 000211c3 sra r2,r2,0x07                        |
0019afc4: 000211c0 sll r2,r2,0x07                    |Rdm * 128 (7 low bits cleared)
0019afc8: 00621023 subu r2,r3,r2                     |Keep only the 7 low bits of rdm (rdm between 0 …7f)
0019afcc: 0202102a slt r2,r16,r2                     |0x1 if Rdm Mod < Rdm(0..7f) The more Rdm use ability in usable Ability, the more likely to be true (100% true if only random used abilities)
0019afd0: 144000c6 bne r2,r0,0x0019b2ec              #if Rdm Mod < Rdm Nb  Exit routine Returns 0x00
0019afd4: 00001021 addu r2,r0,r0                     |
0019afd8: 92420000 lbu r2,0x0000(r18)            |Load Skillset 8019f3c4 + 0x00
0019afdc: 96430002 lhu r3,0x0002(r18)            |Load Ability ID 8019f3c4 + 0x02
0019afe0: 92440006 lbu r4,0x0006(r18)            |Load Item ID 8019f3c4 + 0x06
0019afe4: 00008021 addu r16,r0,r0                |Initialize Unit counter
0019afe8: a242001d sb r2,0x001d(r18)             |Save as Current considered Skillset 8019f3c4 + 0x1d
0019afec: a643001e sh r3,0x001e(r18)             |Save as Current  considered Ability  8019f3c4 + 0x1e
0019aff0: a2440024 sb r4,0x0024(r18)             |Save as Current Considered Item Destroyed/Stolen 8019f3c4 + 0x24
0019aff4: 02501021 addu r2,r18,r16               |AI pointer + Unit offset (1 byte)

0019aff8: 90430c78 lbu r3,0x0c78(r2)                 |Load This Unit targetable flag  Dynamic pointer 8019f3c4 + 0x0c78 + Unit offset
0019affc: 26100001 addiu r16,r16,0x0001              |Unit counter + 1
0019b000: a0430c8d sb r3,0x0c8d(r2)                  |Save inTargetable list copy Dynamic pointer 8019f3c4 + 0x0c8d + Unit offset
0019b004: 2a020015 slti r2,r16,0x0015                |
0019b008: 1440fffb bne r2,r0,0x0019aff8          Λ Do for all units
0019b00c: 02501021 addu r2,r18,r16                   |AI pointer + unit offset
0019b010: 8e43000c lw r3,0x000c(r18)             |Ability AI behavior Flags 1 to 4
0019b014: 00000000 nop                           |
0019b018: 30628000 andi r2,r3,0x8000             |

=== [Target Map] ===
0019b01c: 10400024 beq r2,r0,0x0019b0b0          #If This ability has [Target Map] flag 
0019b020: 30624000 andi r2,r3,0x4000             |Get Reflect Flag
0019b024: 92440e2e lbu r4,0x0e2e(r18)                |r4 = Acting Unit ID
0019b028: 92420e2d lbu r2,0x0e2d(r18)                |AI 0xe2d Offset for Coordinates consideration (toward or away from target)
0019b02c: 34030006 ori r3,r0,0x0006                  |
0019b030: a2430026 sb r3,0x0026(r18)                 |Set Current Action Targeting type to 0x06 (unit specific) 8019f3c4 + 0x26   //  AI 0x1c + 0x0a
0019b034: 00021080 sll r2,r2,0x02                    |Word offset based on 0x2ed
0019b038: 00521021 addu r2,r2,r18                    |
0019b03c: a2440027 sb r4,0x0027(r18)                 |Save Acting Unit ID
0019b040: 8c420cc4 lw r2,0x0cc4(r2)                  |Pointer to considered coordinate (always destination ?) 8019f3c4 + 0xcc4 + [0xe2d] Offset
0019b044: 0c066ec8 jal 0x0019bb20                    |-->AI_Check_if_Unit_is_a_Crystal/Treasure_(0019bb20)  set 801a0083
0019b048: ae420018 sw r2,0x0018(r18)                 |Save Target Unit AI Pointer
0019b04c: 92420000 lbu r2,0x0000(r18)                |Load considered Skillset
0019b050: 3c018006 lui r1,0x8006                     |
0019b054: 00220821 addu r1,r1,r2                     |
0019b058: 90235cb4 lbu r3,0x5cb4(r1)                 |Get Skillset Action Menu
0019b05c: 34020003 ori r2,r0,0x0003                  |
0019b060: 14620008 bne r3,r2,0x0019b084              #If  [Mathematics]
0019b064: 00000000 nop                                   |
                  AI 0xc70 = 0x06
0019b068: 0c066eef jal 0x0019bbbc                        |-->Math Skill Targeting Not investigated
0019b06c: 00000000 nop                                   |
0019b070: 2403ffff addiu r3,r0,-0x0001                   |
0019b074: 1443009c bne r2,r3,0x0019b2e8                  #If this routine returns -0x01
0019b078: 34020006 ori r2,r0,0x0006                          |
0019b07c: 08066cb6 j 0x0019b2d8                              >>Set Variable to 0x06 and Exit Return -0x01
0019b080: a2420c70 sb r2,0x0c70(r18)                         |Set Variable to 0x06 
0019b084: 0c067950 jal 0x0019e540                    |-->See_if_any_unit_decided_to_use_an_ability Update 0xcd8 list keeping only best Targets
0019b088: 00000000 nop                               |
0019b08c: 10400097 beq r2,r0,0x0019b2ec              #If This ability is useless Exit Return 0x00
0019b090: 00001021 addu r2,r0,r0                     |
                  AI 0xc70 = 0x08
0019b094: 0c065bbd jal 0x00196ef4                    |-->Check_if_map_allows_use_and_find_Highest_Target_(00196ef4) Not investigated (probably simulation and priority calculation)
0019b098: 00000000 nop                               |
0019b09c: 2403ffff addiu r3,r0,-0x0001               |
0019b0a0: 1443008f bne r2,r3,0x0019b2e0              #If this routine returns anything but -0x01 Evaluate outcome (save it if good)
0019b0a4: 34020008 ori r2,r0,0x0008                  |
0019b0a8: 08066cb6 j 0x0019b2d8                      >>Else : is this routine returns -0x01 : Set Variable to 0x08 and Exit Return -0x01
0019b0ac: a2420c70 sb r2,0x0c70(r18)                 |Set Variable to 0x08

=== NOT [Target Map] ===
0019b0b0: 10400008 beq r2,r0,0x0019b0d4          #If This Ability is reflectable : 
0019b0b4: 00000000 nop                               |
                  AI 0xc70 = 0x00
0019b0b8: 0c066dee jal 0x0019b7b8                    |-->AI_Targeting_Matrix_Analysis_(0019b7b8) Not investiged
0019b0bc: 00000000 nop                               |
0019b0c0: 2403ffff addiu r3,r0,-0x0001               |
0019b0c4: 14430003 bne r2,r3,0x0019b0d4              #If Routine returns -0x01
0019b0c8: 2402ffff addiu r2,r0,-0x0001                   |
0019b0cc: 08066cbb j 0x0019b2ec                          >>Set Variable to 0x00 and Exit Return -0x01
0019b0d0: a2400c70 sb r0,0x0c70(r18)                     |Set Variable to 0x00
0019b0d4: 0c067950 jal 0x0019e540                |-->See_if_any_unit_decided_to_use_an_ability Update 0xc8d list keeping only best Targets
0019b0d8: 00000000 nop                           |
0019b0dc: 10400083 beq r2,r0,0x0019b2ec          #If This ability is useless Exit Return 0x00
0019b0e0: 00001021 addu r2,r0,r0                 |
0019b0e4: 92420e2e lbu r2,0x0e2e(r18)            |Load Acting Unit's ID
0019b0e8: 00000000 nop                           |
0019b0ec: 02421021 addu r2,r18,r2                |
0019b0f0: 90420c8d lbu r2,0x0c8d(r2)             |Get isTargetable 0x8019f3c4 + 0xc8d + Acting Unit offset
0019b0f4: 00000000 nop                           |
0019b0f8: 10400006 beq r2,r0,0x0019b114          #If This Ability is can / should be used on Acting Unit
0019b0fc: 00000000 nop                               |
                  AI 0xc70 = 0x01
0019b100: 0c066cc3 jal 0x0019b30c                    |-->Check_if_any_units_are_in_range_(0019b30c)
0019b104: 00000000 nop                               |
0019b108: 2403ffff addiu r3,r0,-0x0001               |
0019b10c: 10430071 beq r2,r3,0x0019b2d4              #If returns -0x01 set AI 0xc70 == 0x01 Exit Return -0x01
0019b110: 34020001 ori r2,r0,0x0001                  |
                                                 '
0019b114: 92440e2e lbu r4,0x0e2e(r18)            |Send Acting Unit's ID
0019b118: 0c067976 jal 0x0019e5d8                |-->AI_Ability_Use_Decisions returns r2 = 0x1 if Ability is usable and usefull on Acting Unit
0019b11c: 34050001 ori r5,r0,0x0001              |Check if Ability is usable and usefull
0019b120: 8e43000c lw r3,0x000c(r18)             |Load AI behavior Flags 1 to 4
0019b124: 00000000 nop                           |
0019b128: 30631000 andi r3,r3,0x1000             |

=== NOT [Target map] - Check CT/Target    (Unit specific targeting ?) ===
0019b12c: 10600056 beq r3,r0,0x0019b288          #If Ability has [Check CT/Target] Same as follow Target ?
0019b130: a2420e4c sb r2,0x0e4c(r18)             |Save Current Ability effect on acting unit (0 = Cannot Effect Unit, 1 = usable, 2 = Adverse effect)
0019b134: 34020006 ori r2,r0,0x0006                  |
0019b138: a2420026 sb r2,0x0026(r18)                 |06 = Ability Follows Unit (instead of Panel)  8019f3c4 + 0x26
0019b13c: 8e42000c lw r2,0x000c(r18)                 |Load AI behavior Flags 1 to 4
0019b140: 3c030100 lui r3,0x0100                     |
0019b144: 00431024 and r2,r2,r3                      |
0019b148: 1040000c beq r2,r0,0x0019b17c              #If Ability has [AI 0x0c - flag 0x01000000]  -> Simple priority evaluation
0019b14c: 3c030200 lui r3,0x0200                         |
0019b150: 8e420cb4 lw r2,0x0cb4(r18)                     |AI 0xcb4 aka AI processing order
0019b154: 00000000 nop                                   |
0019b158: 00431025 or r2,r2,r3                           |
0019b15c: ae420cb4 sw r2,0x0cb4(r18)                     |Enable 0x02000000 at AI 0xcb4
                  AI 0xc70 = 0x02
0019b160: 0c066fcb jal 0x0019bf2c                        |-->Find_Highest_Target_Priority_in_Ability_Range_(0019bf2c)
0019b164: 00000000 nop                                   |
0019b168: 2403ffff addiu r3,r0,-0x0001                   |
0019b16c: 14430042 bne r2,r3,0x0019b278                  #If not returning -0x01 : branch and End of Unit specific section
0019b170: 34020002 ori r2,r0,0x0002                      |
0019b174: 08066cb6 j 0x0019b2d8                          >>Else :  Set AI 0xc70 == 0x02 Exit Return -0x01
0019b178: a2420c70 sb r2,0x0c70(r18)                     |Set AI 0xc70 to 0x02
                                                     Else : Ability has [Check CT/Target] but not [AI 0x0c - flag 0x01000000] --> double priority evaluation
0019b17c: 00008021 addu r16,r0,r0                        |Initialize Unit counter
0019b180: 02508821 addu r17,r18,r16                      |Prepare Dynamic 0x8019f3c4 pointer
                                                        @LOOP -Preserves and update 0xc8d (Based on CT)
0019b184: 92220c8d lbu r2,0x0c8d(r17)                        |load isTargetable Is a good Target 
0019b188: 92230c8d lbu r3,0x0c8d(r17)                        |load isTargetable Is a good Target 
0019b18c: 00000000 nop                                       |
0019b190: 10600006 beq r3,r0,0x0019b1ac                      #If Unit Targetable flag is OFF : branch to  Next Unit
0019b194: a2220ca2 sb r2,0x0ca2(r17)                         |Save isTargetable at AI 0xca2
0019b198: 0c067c36 jal 0x0019f0d8                            |-->See_if_ability_should_be_used_based_on_CT returns 0x00 if Ability will land before Unit next active turn
0019b19c: 02002021 addu r4,r16,r0                            |Send Unit ID
0019b1a0: 14400002 bne r2,r0,0x0019b1ac                      #If Ability CT will end before unit next active turn
0019b1a4: 00000000 nop                                           |
0019b1a8: a2200c8d sb r0,0x0c8d(r17)                             |Disable Unit Flag in 0xc8d Table
0019b1ac: 26100001 addiu r16,r16,0x0001                      |Unit counter + 1
0019b1b0: 2a020015 slti r2,r16,0x0015                        |
0019b1b4: 1440fff3 bne r2,r0,0x0019b184                  Λ Do for all units
0019b1b8: 02508821 addu r17,r18,r16                          |Dynamic pointer to 0x8019f3c4
0019b1bc: 8e420cb4 lw r2,0x0cb4(r18)                     |AI 0xcb4
0019b1c0: 3c030200 lui r3,0x0200                         |
0019b1c4: 00431025 or r2,r2,r3                           |
0019b1c8: ae420cb4 sw r2,0x0cb4(r18)                     |Enable 0x02000000 at AI 0xcb4
                  AI 0xc70 = 0x03
0019b1cc: 0c066fcb jal 0x0019bf2c                        |-->Find_Highest_Target_Priority_in_Ability_Range_(0019bf2c) Check all destination and targetable tiles (best result is saved in AI 0x34)
0019b1d0: 00000000 nop                                   |
0019b1d4: 2403ffff addiu r3,r0,-0x0001                   |
0019b1d8: 14430003 bne r2,r3,0x0019b1e8                  #If Routine returns -0x01
0019b1dc: 00008021 addu r16,r0,r0                            |
0019b1e0: 08066cb5 j 0x0019b2d4                              >> set AI 0xc70 == 0x03 Exit Return -0x01
0019b1e4: 34020003 ori r2,r0,0x0003                              |
0019b1e8: 34130001 ori r19,r0,0x0001                     |Prepares Flag
0019b1ec: 02508821 addu r17,r18,r16                      |Prepares dynamic pointer to 8019f3c4
                                                        @LOOP - Restore updated 0xc8d (based on CT)
0019b1f0: 92220ca2 lbu r2,0x0ca2(r17)                        |Load Preserved 0xc8d  Flag
0019b1f4: 00000000 nop                                       |
0019b1f8: 10400008 beq r2,r0,0x0019b21c                      #If Flag is OFF branch to  Next Unit
0019b1fc: 00000000 nop                                           |
0019b200: 0c067c36 jal 0x0019f0d8                            |-->See if ability should be used based on CT returns 0x00 if Ability will land before Unit next active turn
0019b204: 02002021 addu r4,r16,r0                            |
0019b208: 10400003 beq r2,r0,0x0019b218                      #If Target will act before end of Ability CT
0019b20c: 00000000 nop                                           |
0019b210: 08066c87 j 0x0019b21c                                  >>Jump to  Next Unit
0019b214: a2200c8d sb r0,0x0c8d(r17)                             |Disable AI 0xc8d
                                                             Else : Ability CT ends before Unit Turns
0019b218: a2330c8d sb r19,0x0c8d(r17)                            |Enable Unit  AI 0xc8d
0019b21c: 26100001 addiu r16,r16,0x0001                      |Unit Counter+1
0019b220: 2a020015 slti r2,r16,0x0015                        |
0019b224: 1440fff2 bne r2,r0,0x0019b1f0                  Λ Do for all units
0019b228: 02508821 addu r17,r18,r16                          |Dynamic pointer to 0x8019f3c4 (+1 Byte each iteration)
0019b22c: 3c03fdff lui r3,0xfdff                         |
0019b230: 8e420cb4 lw r2,0x0cb4(r18)                     |Load AI 0xcb4
0019b234: 3463ffff ori r3,r3,0xffff                      |
0019b238: 00431024 and r2,r2,r3                          |
0019b23c: ae420cb4 sw r2,0x0cb4(r18)                     |Disable 0x02000000 at AI 0xcb4
                  AI 0xc70 = 0x04
0019b240: 0c066fcb jal 0x0019bf2c                        |-->Find_Highest_Target_Priority_in_Ability_Range_(0019bf2c) Check all destination and targetable tiles (best result is saved in AI 0x34)
0019b244: 00000000 nop                                   |
0019b248: 2403ffff addiu r3,r0,-0x0001                   |
0019b24c: 14430003 bne r2,r3,0x0019b25c                  #If Routine didn't return -0x01 : branch  and check AoE
0019b250: 00008021 addu r16,r0,r0                        |Initialize Unit counter
0019b254: 08066cb5 j 0x0019b2d4                          >> Else : if r2 = -0x01 set AI 0xc70 == 0x04 Exit Return -0x01
0019b258: 34020004 ori r2,r0,0x0004                      |
0019b25c: 02501021 addu r2,r18,r16                       |
                                                        @LOOP - Restore AI 0xc8d
0019b260: 90430ca2 lbu r3,0x0ca2(r2)                         |Preserved Flag
0019b264: 26100001 addiu r16,r16,0x0001                      |
0019b268: a0430c8d sb r3,0x0c8d(r2)                          |Save isTarget
0019b26c: 2a020015 slti r2,r16,0x0015                        |
0019b270: 1440fffb bne r2,r0,0x0019b260                  Λ Do for all units
0019b274: 02501021 addu r2,r18,r16                       |

                                                    << Check CT/Target Both cases : CHECK AoE >>
0019b278: 92420005 lbu r2,0x0005(r18)                |Considered Ability AoE
0019b27c: 00000000 nop                               |
0019b280: 10400017 beq r2,r0,0x0019b2e0              #If No AoE : Branch to  Evaluate outcome (save it if good)
0019b284: 00000000 nop                               |
                                                     Else : Simulate action with Tile targeting type

====  NOT [Target map] and { NOT [check CT/Target] or [AoE > 0] )     --- (Tile specific targeting ?) ====
0019b288: 0c067c07 jal 0x0019f01c                |-->Set_unit_untargetable_based_on_19f0d8_routine Update 0xc8d List (may disable some enemy Target)
0019b28c: 00000000 nop                           |
0019b290: 10400013 beq r2,r0,0x0019b2e0          #If There is no Targets left :  Evaluate outcome (save it if good)
0019b294: 34020005 ori r2,r0,0x0005              |
0019b298: a2420026 sb r2,0x0026(r18)             |Set Targeting type to 0x05  (Target Tile type)
0019b29c: 8e42000c lw r2,0x000c(r18)             |Load AI behavior Flags 1 to 4
0019b2a0: 3c030100 lui r3,0x0100                 |
0019b2a4: 00431024 and r2,r2,r3                  |
0019b2a8: 10400005 beq r2,r0,0x0019b2c0          #If This Ability has [AI 0x0c 0x01000000 flag]
0019b2ac: 3c030200 lui r3,0x0200                     |
0019b2b0: 8e420cb4 lw r2,0x0cb4(r18)                 |AI 0xcb4 Processing order ?
0019b2b4: 00000000 nop                               |
0019b2b8: 00431025 or r2,r2,r3                       |
0019b2bc: ae420cb4 sw r2,0x0cb4(r18)                 |Enable flag 0x02000000 at AI 0xcb4
                  AI 0xc70 = 0x05
0019b2c0: 0c066fcb jal 0x0019bf2c                |-->Find_Highest_Target_Priority_in_Ability_Range_(0019bf2c) Check all destination and targetable tiles (best result is saved in AI 0x34)
0019b2c4: 00000000 nop                           |
0019b2c8: 2403ffff addiu r3,r0,-0x0001           |
0019b2cc: 14430004 bne r2,r3,0x0019b2e0          #If returned value is not -0x01 : branch to  Priority evaluation
0019b2d0: 34020005 ori r2,r0,0x0005              |

=== ABORT section - Update AI 0xc70  and exit ===
0019b2d4: a2420c70 sb r2,0x0c70(r18)             |Update AI 0xc70
0019b2d8: 08066cbb j 0x0019b2ec                  |Exit Return -0x01
0019b2dc: 2402ffff addiu r2,r0,-0x0001           |

=== PRIOTITY EVALUATION ===
0019b2e0: 0c065bf1 jal 0x00196fc4            |-->Compare_Set_Highest_Unit_Target_Priority_(00196fc4)
0019b2e4: 00000000 nop
0019b2e8: 00001021 addu r2,r0,r0
0019b2ec: 8fbf0020 lw r31,0x0020(r29)
0019b2f0: 8fb3001c lw r19,0x001c(r29)
0019b2f4: 8fb20018 lw r18,0x0018(r29)
0019b2f8: 8fb10014 lw r17,0x0014(r29)
0019b2fc: 8fb00010 lw r16,0x0010(r29)
0019b300: 27bd0028 addiu r29,r29,0x0028
0019b304: 03e00008 jr r31
0019b308: 00000000 nop

Notes

    RAM    | Jump Address  |Section
-----------|---------------|-------------------------------------------------------------------------------------------------
0x80193db0 | 0x8019b0b8    |0x00 - Jump (return ?) to start of default section : relfect evaluation
0x80193db4 | 0x8019b100    |0x01 - Jump (return ?) to start of default section : caster targeting evaluation
0x80193db8 | 0x8019b160    |0x02 - Jump (return ?) to Unit specific priority evaluation (AI 0x0c flag 0x01000000 sub section)
0x80193dbc | 0x8019b1cc    |0x03 - Jump (return ?) to Unit specific priority evaluation (Not AI 0x0c flag 0x01000000 sub section)  1st evaluation
0x80193dc0 | 0x8019b240    |0x04 - Jump (return ?) to Unit specific priority evaluation (Not AI 0x0c flag 0x01000000 sub section)  2nd evaluation
0x80193dc4 | 0x8019b2c0    |0x05 - Jump (return ?) to Tile specific priority evaluation
0x80193dc8 | 0x8019b068    |0x06 - Jump (return ?) to math skill evaluation
0x80193dcc | 0x8019af74    |0x07 - Jump (return ?) to start of default section
0x80193dd0 | 0x8019b094    |0x08 - Jump (return ?) to Target Map ability simulation

Return locations

BATTLE.BIN
 00197ed0: Chose_Move_from_Move_List?
 00198a44: Evaluate_Cancel_Status_Ability_(0019881c)