Set AI ability considerations for all units and self

From Final Fantasy Hacktics Wiki
Revision as of 20:13, 21 August 2024 by Orkney (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
BATTLE.BIN :  - Set AI ability considerations for all units and self                        DUPLICATED HERE Units_action_parameter_checking
Set Data in 8019f3c4 + 0x182c for each Unit (from r4 unit perspective), and Set flags in r4 Unit 8019f3c4 + 0xef0 List of ability (from self targeting perspective)
------------------------------------------------------------------------------------------
Parameter : r4 =Active Unit Action Taken [Battle 0x188]
Return : Nothing
         
------------------------------------------------------------------------------------------
00194e58: 27bdff70 addiu r29,r29,-0x0090     |
00194e5c: 340800ff ori r8,r0,0x00ff          |
00194e60: 340700ff ori r7,r0,0x00ff          |
00194e64: afb60080 sw r22,0x0080(r29)        |
00194e68: 3c16801a lui r22,0x801a            |
00194e6c: 26d6f3c4 addiu r22,r22,-0x0c3c     |AI pointer 8019f3c4
00194e70: afb70084 sw r23,0x0084(r29)        |
00194e74: 0000b821 addu r23,r0,r0            |Initialize
00194e78: afbf008c sw r31,0x008c(r29)        |
00194e7c: afbe0088 sw r30,0x0088(r29)        |
00194e80: afb5007c sw r21,0x007c(r29)        |
00194e84: afb40078 sw r20,0x0078(r29)        |
00194e88: afb30074 sw r19,0x0074(r29)        |
00194e8c: afb20070 sw r18,0x0070(r29)        |
00194e90: afb1006c sw r17,0x006c(r29)        |
00194e94: afb00068 sw r16,0x0068(r29)        |
00194e98: afa40010 sw r4,0x0010(r29)         |Preserve Active Unit Action Taken byte [Battle 0x188]
00194e9c: afa00020 sw r0,0x0020(r29)         |Reset Enemy team Harmfull Ability counter
00194ea0: afa00028 sw r0,0x0028(r29)         |Reset Enemy team Magical Attack counter
00194ea4: afa00030 sw r0,0x0030(r29)         |Reset Enemy team Physical Attack counter
00194ea8: afa00038 sw r0,0x0038(r29)         |Reset Enemy Team Reflectable Attack counter
00194eac: afa00040 sw r0,0x0040(r29)         |Reset Enemy Team Earth Attack counter
00194eb0: afa80058 sw r8,0x0058(r29)         |Reset Nb of usable abilities for the unit with the fewest usable abilities
00194eb4: afa70060 sw r7,0x0060(r29)         |Unit ID of 0x58
                  TEST ALL UNITS and ALL ABILITIES and set some AI Unit flags for Acting Unit
                                            @Main  Unit Loop
00194eb8: 0c065b23 jal 0x00196c8c                |-->Check_target_type returns 0x00 if can/worth to be targeted
00194ebc: 02e02021 addu r4,r23,r0                |
00194ec0: 14400142 bne r2,r0,0x001953cc          #If Unit is not worth/able to be targeted : branch to  Next Unit
00194ec4: 00171100 sll r2,r23,0x04               |targets ID*16
00194ec8: 2442182c addiu r2,r2,0x182c            |
00194ecc: 3c08801a lui r8,0x801a                 |
00194ed0: 2508f3c4 addiu r8,r8,-0x0c3c           |
00194ed4: 0102a821 addu r21,r8,r2                |Dynamic pointer to this unit AI 0x182c
00194ed8: 001710c0 sll r2,r23,0x03               |
00194edc: 00571023 subu r2,r2,r23                |
00194ee0: 00021180 sll r2,r2,0x06                |ID * 0x1c0
00194ee4: 3c038019 lui r3,0x8019                 |
00194ee8: 246308cc addiu r3,r3,0x08cc            |
00194eec: 3c04801a lui r4,0x801a                 |
00194ef0: 908401f2 lbu r4,0x01f2(r4)             |Acting Unit ID  801a01f2
00194ef4: 0043a021 addu r20,r2,r3                |Dynamic pointer to Unit Battle data
00194ef8: afa00048 sw r0,0x0048(r29)             |Reset Unit Harmfull Ability counter
00194efc: 16e40003 bne r23,r4,0x00194f0c         #If This Iteration unit is the active Unit
00194f00: afa00050 sw r0,0x0050(r29)             |Reset Unit Helpfull Ability counter
00194f04: 080653c6 j 0x00194f18                      >>Avoid clockticks check
00194f08: afa00018 sw r0,0x0018(r29)                 |Set ClockTicks to 0x00
                                                Else : not active Unit
00194f0c: 0c0666e6 jal 0x00199b98                    |-->calculate clockticks till unit acts returns remaining ticks before next action
00194f10: 02802021 addu r4,r20,r0                    |Send Unit battle pointer
00194f14: afa20018 sw r2,0x0018(r29)                 |store clockticks till unit acts
00194f18: 92a20006 lbu r2,0x0006(r21)            |AI 0x182c - 0x06
00194f1c: 0000f021 addu r30,r0,r0                |reset below loop counter
00194f20: 304200fc andi r2,r2,0x00fc             |clear hp recovery on ally/not direct or arcing attack
00194f24: a2a20006 sb r2,0x0006(r21)             |Update AI 0x182c - 0x06 without flags 0x02 and 0x01
                                                @LOOP - 0x22 times (Each usable Abilities of this unit at 8019f3c4 + 0xef0)
00194f28: 3c07801a lui r7,0x801a                     |
00194f2c: 24e7f3c4 addiu r7,r7,-0x0c3c               |
00194f30: 00f71021 addu r2,r7,r23                    |Dynamic Pointer to AI DATA (1byte per unit)
00194f34: 9043198c lbu r3,0x198c(r2)                 |Load This unit battle ID
00194f38: 00000000 nop                               |
00194f3c: 00031100 sll r2,r3,0x04                    |ID*16
00194f40: 00431021 addu r2,r2,r3                     |ID*17
00194f44: 000210c0 sll r2,r2,0x03                    |ID*136 (0x88)
00194f48: 24420ef0 addiu r2,r2,0x0ef0                |
00194f4c: 00e21021 addu r2,r7,r2                     |Dynamic Pointer to AI Data 0x0ef0 (0x88 bytes) List of usable abilities
00194f50: 001e1880 sll r3,r30,0x02                   |This loop counter *4
00194f54: 00439821 addu r19,r2,r3                    |Dynamic Pointer to AI Data 0x0ef0 (0x88 bytes)  +0x04 Per iteration  (0x22 Iteration per unit)
00194f58: 96620002 lhu r2,0x0002(r19)                |Load skillset and usage
00194f5c: 00000000 nop                               |
00194f60: 30427fff andi r2,r2,0x7fff                 |remove usage flag
00194f64: a6620002 sh r2,0x0002(r19)                 |Update 0x03 =without flag 0x80 (no usage by default)
00194f68: 92630002 lbu r3,0x0002(r19)                |load skillset
00194f6c: 340200ff ori r2,r0,0x00ff                  |
00194f70: 106200f3 beq r3,r2,0x00195340              #If  the code reach the end of the list : Exit loop
00194f74: 00000000 nop                                   |
00194f78: 0c06561e jal 0x00195878                    |-->AI Ability Data Setting Transfer Ability data to 8019f3c4 section
00194f7c: 02602021 addu r4,r19,r0                    |Send Pointer
00194f80: 92c30001 lbu r3,0x0001(r22)                |load CT of ability
00194f84: 9282005a lbu r2,0x005a(r20)                |load target status 3
00194f88: 8fa80018 lw r8,0x0018(r29)                 |load clockticks till unit acts
00194f8c: 86d00002 lh r16,0x0002(r22)                |load ability ID
00194f90: 30420002 andi r2,r2,0x0002                 |
                                            FROG RESTRICTION SECTION - ( Allow only Frog spell and frog Attack if Frog // Disallow Frog Attack if not Frog)
00194f94: 10400008 beq r2,r0,0x00194fb8              #If Considered Target has Frog status
00194f98: 01038821 addu r17,r8,r3                    |r17 = ability CT + clockticks till unit acts
00194f9c: 3402001d ori r2,r0,0x001d                      |
00194fa0: 12020008 beq r16,r2,0x00194fc4                 #If Frog Spell : branch to  Frog test is OK
00194fa4: 3402016f ori r2,r0,0x016f                          |
00194fa8: 12020006 beq r16,r2,0x00194fc4                 #If Frog Attack : branch to Frog test is OK
00194fac: 00000000 nop                                       |
00194fb0: 080654cd j 0x00195334                          >>Since this ability is not ok for Frog  : jump to  Next Ability
00194fb4: 27de0001 addiu r30,r30,0x0001                      |Loop counter +1
                                                    Else : not Frog Target
00194fb8: 3402016f ori r2,r0,0x016f                      |
00194fbc: 120200dc beq r16,r2,0x00195330                 #If This Ability is [Frog Attack] branch to Next Ability
00194fc0: 00000000 nop                                   |
                                            FROG TEST PASSED
00194fc4: 8fa40018 lw r4,0x0018(r29)                 |load clockticks till unit acts
00194fc8: 02802821 addu r5,r20,r0                    |Unit battle data pointer
00194fcc: 0c067bc9 jal 0x0019ef24                    |-->check if status should/can be applied returns r2 = 0x01 if unit has don't act
00194fd0: 34060025 ori r6,r0,0x0025                  |Check don't act
00194fd4: 144000d6 bne r2,r0,0x00195330              #If Unit already has don't act : branch to  Next Ability
00194fd8: 00000000 nop                                   |
00194fdc: 96c2000c lhu r2,0x000c(r22)                |Load this Ability AI flags 1 and 2
00194fe0: 00000000 nop                               |
00194fe4: 30420100 andi r2,r2,0x0100                 |Check [Ignore Silence] Incverted flag in Patcher, it's more likely [silencable]
00194fe8: 10400006 beq r2,r0,0x00195004              #If this Ability is silencable
00194fec: 02202021 addu r4,r17,r0                        |Ability CT + clockticks till unit acts
00194ff0: 02802821 addu r5,r20,r0                        |Unit battle data pointer
00194ff4: 0c067bc9 jal 0x0019ef24                        |-->check if status should/can be applied returns r2 = 0x01 if unit has don't act
00194ff8: 3406000c ori r6,r0,0x000c                      |check if unit has silence
00194ffc: 144000cc bne r2,r0,0x00195330                  #If Unit has silence : branch to  Next Ability This ability is not an issue anymore
00195000: 00000000 nop                                       |
00195004: 96c2000c lhu r2,0x000c(r22)                |Load this Ability AI flags 1 and 2
00195008: 00000000 nop                               |
0019500c: 30420400 andi r2,r2,0x0400                 |Check [Affected by faith]
00195010: 10400006 beq r2,r0,0x0019502c              #If Ability is affected by Faith
00195014: 02202021 addu r4,r17,r0                        |Ability CT + clockticks till unit acts
00195018: 02802821 addu r5,r20,r0                        |Unit battle data pointer
0019501c: 0c067bc9 jal 0x0019ef24                        |-->check if status should/can be applied
00195020: 34060021 ori r6,r0,0x0021                      |check for innocent
00195024: 144000c2 bne r2,r0,0x00195330                  #If Unit has innocent : branch to  Next Ability This ability is not an issue anymore
00195028: 00000000 nop                                   |
0019502c: 92c30011 lbu r3,0x0011(r22)                |Ability MP cost
00195030: 9682002c lhu r2,0x002c(r20)                |Targeted Unit MP
00195034: 00000000 nop                               |
00195038: 0043102b sltu r2,r2,r3                     |
0019503c: 144000bc bne r2,r0,0x00195330              #If Unit has not enough MP to cast this ability : branch to  Next Ability
00195040: 00000000 nop                                   |
00195044: 92620002 lbu r2,0x0002(r19)                |This Ability's skillset
00195048: 3c018006 lui r1,0x8006                     |
0019504c: 00220821 addu r1,r1,r2                     |
00195050: 90235cb4 lbu r3,0x5cb4(r1)                 |This Skillset action menu byte
00195054: 34020001 ori r2,r0,0x0001                  |
00195058: 10620007 beq r3,r2,0x00195078              #If Action Menu is Item iventory : branch to  Inventory section
0019505c: 34020007 ori r2,r0,0x0007                  |
00195060: 10620005 beq r3,r2,0x00195078              #If Action Menu is katana iventory : branch to  Inventory section
00195064: 3402017e ori r2,r0,0x017e                  |
00195068: 12020003 beq r16,r2,0x00195078             #If Ability is Shuriken : branch to  Inventory section
0019506c: 34020189 ori r2,r0,0x0189                  |
00195070: 1602001e bne r16,r2,0x001950ec             #If Ability is Not Ball :   Jump to weapon inventory section
00195074: 34020002 ori r2,r0,0x0002                  |
                                            Item inventory / Katana  / Shuriken / Ball (1 Item ID for 1 ability ID)
00195078: 928201ba lbu r2,0x01ba(r20)                    |Targeted Unit modified ENTD
0019507c: 00000000 nop                                   |
00195080: 30420030 andi r2,r2,0x0030                     |Check Team
00195084: 1440000a bne r2,r0,0x001950b0                  #If Unit is in player Team
00195088: 00000000 nop                                       |
0019508c: 92c20006 lbu r2,0x0006(r22)                        |Load item considered
00195090: 3c018006 lui r1,0x8006                             |
00195094: 00220821 addu r1,r1,r2                             |Part of inventory Pointer
00195098: 902296e0 lbu r2,-0x6920(r1)                        |load item quantity  800596e0 + item ID
0019509c: 00000000 nop                                       |
001950a0: 14400052 bne r2,r0,0x001951ec                      #If item is in inventory : branch to set usage Flag
001950a4: 00000000 nop                                           |
001950a8: 080654cd j 0x00195334                              >>Else (no item)  Jump to  Next Ability
001950ac: 27de0001 addiu r30,r30,0x0001                          |
                                                        Else : Unit  is in AI team
001950b0: 92c30006 lbu r3,0x0006(r22)                        |Load item considered
001950b4: 00000000 nop                                       |
001950b8: 00031040 sll r2,r3,0x01                            |item*2
001950bc: 00431021 addu r2,r2,r3                             |item*3
001950c0: 00021080 sll r2,r2,0x02                            |item*12
001950c4: 3c018006 lui r1,0x8006                             |
001950c8: 00220821 addu r1,r1,r2                             |
001950cc: 90232eba lbu r3,0x2eba(r1)                         |load item required level
001950d0: 92820022 lbu r2,0x0022(r20)                        |load Unit Level
001950d4: 00000000 nop                                       |
001950d8: 0043102b sltu r2,r2,r3                             |
001950dc: 10400043 beq r2,r0,0x001951ec                      #If Unit Lv >= Item Lv : Branch to  set usage Flag
001950e0: 00000000 nop                                           |
001950e4: 080654cd j 0x00195334                              >>If Unit Lv < Item Lv : jump to  Next Ability
001950e8: 27de0001 addiu r30,r30,0x0001                          |
                                            WEAPON INVENTORY (1 Ability for several items)
001950ec: 1462003f bne r3,r2,0x001951ec              #If Action menu is weapon inventory
001950f0: 00000000 nop                                   |
001950f4: 3c02801a lui r2,0x801a                         |
001950f8: 904201f2 lbu r2,0x01f2(r2)                     |load acting unit ID
001950fc: 00000000 nop                                   |
00195100: 16e2008b bne r23,r2,0x00195330                 #If Considered Unit is not the acting Unit : branch to  Next Ability
00195104: 2411ffff addiu r17,r0,0xffff                   |Reset Best Level Value
00195108: 3410017f ori r16,r0,0x017f                     |Loop Counter - Start as Knife Ability ID
0019510c: 34120001 ori r18,r0,0x0001                     |
                                                        @LOOP - Check all Throw Abilities (Find Higher Lv to throw)
00195110: 02e02021 addu r4,r23,r0                            |Send Unit ID
00195114: 92c50000 lbu r5,0x0000(r22)                        |Send Skillset ID
00195118: 0c066a94 jal 0x0019aa50                            |-->load known ability flag
0019511c: 2606fe83 addiu r6,r16,-0x017D                      |Send Ability position in Skillset
00195120: 1040002b beq r2,r0,0x001951d0                      #If Ability is not known : branch to Next Ability
00195124: 00000000 nop                                           |
00195128: 3c018006 lui r1,0x8006                             |
0019512c: 00320821 addu r1,r1,r18                            |Part of Dynamic pointer
00195130: 90261020 lbu r6,0x1020(r1)                         |load throw ability item type 80061020
00195134: 00002021 addu r4,r0,r0                             |
00195138: 00002821 addu r5,r0,r0                             |Loop counter
                                                            @LOOP - Seek best item (on Lv) matching Ability Type
0019513c: 3c018006 lui r1,0x8006                                 |
00195140: 00250821 addu r1,r1,r5                                 |Part of dynamic pointer to item data
00195144: 90222ebd lbu r2,0x2ebd(r1)                             |Load item type 80062eb8 + 0x05
00195148: 00000000 nop                                           |
0019514c: 1446001c bne r2,r6,0x001951c0                          #If this item is not from Ability's item type : branch to  Next Item
00195150: 00000000 nop                                               |
00195154: 3c018006 lui r1,0x8006                                 |
00195158: 00250821 addu r1,r1,r5                                 |Part of dynamic pointer to item data
0019515c: 90232eba lbu r3,0x2eba(r1)                             |This Weapon required level
00195160: 00000000 nop                                           |
00195164: 0071102a slt r2,r3,r17                                 |
00195168: 14400015 bne r2,r0,0x001951c0                          #If This weapon Lv is not the best lv so far : branch to  Next Item
0019516c: 00000000 nop                                               |
00195170: 928201ba lbu r2,0x01ba(r20)                            |Acting Unit modified ETND flags
00195174: 00000000 nop                                           |
00195178: 30420030 andi r2,r2,0x0030                             |
0019517c: 14400006 bne r2,r0,0x00195198                          #If Acting unit is in player Team
00195180: 00000000 nop                                               |
00195184: 3c018006 lui r1,0x8006                                     |
00195188: 00240821 addu r1,r1,r4                                     |Part of pointer to inventory
0019518c: 902296e0 lbu r2,-0x6920(r1)                                |load quantity
00195190: 08065469 j 0x001951a4                                      >>Avoid AI Team section
00195194: 2c420005 sltiu r2,r2,0x0005                                |set if quantity is less than 05
                                                                Else : Acting unit is in AI team
00195198: 92820022 lbu r2,0x0022(r20)                                |Load Acting Unit Level
0019519c: 00000000 nop                                               |
001951a0: 0043102a slt r2,r2,r3                                      |
001951a4: 14400006 bne r2,r0,0x001951c0                          #If [AI Unit Lv is too low] or [Less than 5 items in inventory] : branch to  Next Item
001951a8: 00000000 nop                                               |
001951ac: 00608821 addu r17,r3,r0                                |Preserves this Item Level
001951b0: 3c01801a lui r1,0x801a                                 |
001951b4: a43001d8 sh r16,0x01d8(r1)                             |store chosen ability ID
001951b8: 3c01801a lui r1,0x801a                                 |
001951bc: a02401da sb r4,0x01da(r1)                              |store chosen weapon ID
001951c0: 24840001 addiu r4,r4,0x0001                            |counter + 1
001951c4: 28820100 slti r2,r4,0x0100                             |
001951c8: 1440ffdc bne r2,r0,0x0019513c                      Λ Loop 0x100 times ??  (all items !)
001951cc: 24a5000c addiu r5,r5,0x000c                            |Item data offset
001951d0: 26100001 addiu r16,r16,0x0001                      |Ability ID + 1
001951d4: 2a020189 slti r2,r16,0x0189                        |Loop limit is Ball Ability
001951d8: 1440ffcd bne r2,r0,0x00195110                  Λ check for next ability
001951dc: 26520001 addiu r18,r18,0x0001                      |Offset For Ability data at 80061020
001951e0: 2402ffff addiu r2,r0,0xffff                        |
001951e4: 12220052 beq r17,r2,0x00195330                 #if there is no throwable items : branch to  Next Ability
001951e8: 00000000 nop                                       |
                                            ALL ABILITIES
001951ec: 96620002 lhu r2,0x0002(r19)                |load skillset and usage type
001951f0: 00000000 nop                               |
001951f4: 34428000 ori r2,r2,0x8000                  |
001951f8: a6620002 sh r2,0x0002(r19)                 |Enable flag 0x80 on AI Tableof usable Abilities (0xef0 - 0x03) Can be used
001951fc: 30420800 andi r2,r2,0x0800                 |
00195200: 1440004b bne r2,r0,0x00195330              #If This ability requires monster skill : branch to  Next Ability
00195204: 00000000 nop                                   |
00195208: 92a20008 lbu r2,0x0008(r21)                |Load enemy flag of considered target
0019520c: 00000000 nop                               |
00195210: 10400026 beq r2,r0,0x001952ac              #If Target and Acting Unit are in same Team branch to   Avoid Enemy team section
00195214: 00000000 nop                                   |
00195218: 96c4000c lhu r4,0x000c(r22)                |This Ability AI Flags 1
0019521c: 00000000 nop                               |
00195220: 30820002 andi r2,r4,0x0002                 |
                                            Enemy Team  Harmfull Ability section
00195224: 10400021 beq r2,r0,0x001952ac              #If This Ability has [Target Ennemies] 
00195228: 00000000 nop                                   |
0019522c: 8fa70020 lw r7,0x0020(r29)                     |Enemy team harmfull ability counter
00195230: 96c3000e lhu r3,0x000e(r22)                    |This Ability AI Flags 3
00195234: 24e70001 addiu r7,r7,0x0001                    |
00195238: 30620002 andi r2,r3,0x0002                     |
0019523c: 10400005 beq r2,r0,0x00195254                  #If This Ability is a magic attack
00195240: afa70020 sw r7,0x0020(r29)                     |Increase Enemy team harmfull ability counter
00195244: 8fa80028 lw r8,0x0028(r29)                         |Load Enemy Magical attack counter
00195248: 00000000 nop                                       |
0019524c: 25080001 addiu r8,r8,0x0001                        |
00195250: afa80028 sw r8,0x0028(r29)                         |increase Enemy magic attack counter
00195254: 30620001 andi r2,r3,0x0001                     |
00195258: 10400005 beq r2,r0,0x00195270                  #If This Ability is a physical attack
0019525c: 30824000 andi r2,r4,0x4000                     |r2 = reflectable check
00195260: 8fa70030 lw r7,0x0030(r29)                         |Load Enemy Physical Attack counter
00195264: 00000000 nop                                       |
00195268: 24e70001 addiu r7,r7,0x0001                        |
0019526c: afa70030 sw r7,0x0030(r29)                         |increase Enemy Physical Attack counter physical attack counter
00195270: 10400005 beq r2,r0,0x00195288                  #If This Ability is reflectable
00195274: 00000000 nop                                       |
00195278: 8fa80038 lw r8,0x0038(r29)                         |load reflectable counter
0019527c: 00000000 nop                                       |
00195280: 25080001 addiu r8,r8,0x0001                        |
00195284: afa80038 sw r8,0x0038(r29)                         |Increase Enemy Team reflectable counter
00195288: 92c20010 lbu r2,0x0010(r22)                    |This Ability Elements
0019528c: 00000000 nop                                   |
00195290: 30420008 andi r2,r2,0x0008                     |
00195294: 10400005 beq r2,r0,0x001952ac                  #If This ability has Earth element
00195298: 00000000 nop                                       |
0019529c: 8fa70040 lw r7,0x0040(r29)                         |Load earth element counter
001952a0: 00000000 nop                                       |
001952a4: 24e70001 addiu r7,r7,0x0001                        |
001952a8: afa70040 sw r7,0x0040(r29)                         |Increase enemy Team earth element counter
                                            BOTH TEAM  Section
001952ac: 96c2000c lhu r2,0x000c(r22)                |This Ability AI Flags 1   8019f3c4 - 0x0c
001952b0: 34030081 ori r3,r0,0x0081                  |
001952b4: 30420081 andi r2,r2,0x0081                 |[Target Allies] and [Affect HP]
001952b8: 14430005 bne r2,r3,0x001952d0              #If This Ability is meant to Affect allies HP
001952bc: 00000000 nop                                   |
001952c0: 92a20006 lbu r2,0x0006(r21)                    |Load AI decision data (Table at 0x182c) byte 0x06 (Unit Battle 0x169)
001952c4: 00000000 nop                                   |
001952c8: 34420002 ori r2,r2,0x0002                      |Enable 0x02 Flag
001952cc: a2a20006 sb r2,0x0006(r21)                     |store HP recovery on ally flag
001952d0: 96c2000e lhu r2,0x000e(r22)                |This Ability AI Flags 3  8019f3c4 - 0x0e
001952d4: 00000000 nop                               |
001952d8: 304200c0 andi r2,r2,0x00c0                 |
001952dc: 10400005 beq r2,r0,0x001952f4              #If Ability has [Longbow] or [Stop at obstacle] flag
001952e0: 00000000 nop                                   |
001952e4: 92a20006 lbu r2,0x0006(r21)                    |Load AI decision data 0x06   (8019f3c4 -  0x182c) byte 0x06 (Unit Battle 0x169)
001952e8: 00000000 nop                                   |
001952ec: 34420001 ori r2,r2,0x0001                      |
001952f0: a2a20006 sb r2,0x0006(r21)                     |store abnormal trajectory ability flag
001952f4: 96c3000c lhu r3,0x000c(r22)                |This Ability AI Flags 1 
001952f8: 00000000 nop                               |
001952fc: 30620002 andi r2,r3,0x0002                 |
00195300: 10400005 beq r2,r0,0x00195318              #If This Ability is meant to target Ennemies
00195304: 30620001 andi r2,r3,0x0001                     |
00195308: 8fa80048 lw r8,0x0048(r29)                     |Load Harmfull ability counter
0019530c: 00000000 nop                                   |
00195310: 25080001 addiu r8,r8,0x0001                    |target enemies counter++
00195314: afa80048 sw r8,0x0048(r29)                     |Increase Unit Harmfull Ability counter
00195318: 10400005 beq r2,r0,0x00195330              #If This ability is meant to target Allies
0019531c: 00000000 nop                                   |
00195320: 8fa70050 lw r7,0x0050(r29)                     |Load Helpfull Ability counter
00195324: 00000000 nop                                   |
00195328: 24e70001 addiu r7,r7,0x0001                    |
0019532c: afa70050 sw r7,0x0050(r29)                     |Increase Unit Helpfull ability counter
00195330: 27de0001 addiu r30,r30,0x0001              |Ability  counter++
00195334: 2bc20022 slti r2,r30,0x0022                |Check limit
00195338: 1440fefb bne r2,r0,0x00194f28          Λ Loop through all the Ability list (0x22)
0019533c: 00000000 nop                               |
00195340: 92a20008 lbu r2,0x0008(r21)            |Enemy flag  AI 0x182c - 0x08
00195344: 00000000 nop                           |
                                            ACTING UNIT TEAMMATE
00195348: 14400020 bne r2,r0,0x001953cc          #If Unit is in Acting Unit Team
0019534c: 00000000 nop                               |
00195350: 8fa80050 lw r8,0x0050(r29)                 |Unit Helpfull Abilities counter
00195354: 8fa70048 lw r7,0x0048(r29)                 |Unit Harmfull Abilities counter
00195358: 00000000 nop                               |
0019535c: 01071821 addu r3,r8,r7                     |r3 = sum of abilities with target enemy/ally
00195360: 14600006 bne r3,r0,0x0019537c              #If no Helpfull nor Harmfull abilities
00195364: 000811c0 sll r2,r8,0x07                    |Pass Helpfull counter in upper byte
00195368: 92a20006 lbu r2,0x0006(r21)                    |Load AI Decision 0x06  AI 182c - 0x06 (From Battle 0x169)
0019536c: 00000000 nop                                   |
00195370: 304200fb andi r2,r2,0x00fb                     |remove 0x04 flag
00195374: 080654f3 j 0x001953cc                          >>go to next unit
00195378: a2a20006 sb r2,0x0006(r21)                     |Update AI Decision 0x06 without flag 0x04
                                                    Else : This Ally Unit has some Helpfull or Harmfull usable abilities
0019537c: 0043001a div r2,r3                             |
00195380: 00001812 mflo r3                               |Helpfull abilities * 128 / (Helpfull + Harmfull abilities)
00195384: 00000000 nop                                   |
00195388: 2862004d slti r2,r3,0x004d                     |set if less than 77
0019538c: 14400004 bne r2,r0,0x001953a0                  #If more than 60% of unit's abilities are helpfull
00195390: 00000000 nop                                       |
00195394: 92a20006 lbu r2,0x0006(r21)                        |Load AI Decision 0x06  AI 182c - 0x06 (From Battle 0x169)
00195398: 080654eb j 0x001953ac                              >>Avoid opposite section
0019539c: 34420004 ori r2,r2,0x0004                          |Enable 0x04 flag
                                                        Else : less than 60% of unit abilities are helpfull
001953a0: 92a20006 lbu r2,0x0006(r21)                        |Load AI Decision 0x06  AI 182c - 0x06 (From Battle 0x169)
001953a4: 00000000 nop                                       |
001953a8: 304200fb andi r2,r2,0x00fb                         |remove 0x04 flag
001953ac: a2a20006 sb r2,0x0006(r21)                     |Update AI decision 0x06 with or without flag 0x04 (based on ratio of helpfull abilities)
001953b0: 8fa70058 lw r7,0x0058(r29)                     |Load Abilty counter of unit with the fewest abilities
001953b4: 00000000 nop                                   |
001953b8: 0067102a slt r2,r3,r7                          |set if # of abilities < previous number
001953bc: 10400003 beq r2,r0,0x001953cc                  #If[Helpfull + Harmfull] < Previous entry
001953c0: 00000000 nop                                       |
001953c4: afb70060 sw r23,0x0060(r29)                        |store ID of Unit with the fewest Abilities
001953c8: afa30058 sw r3,0x0058(r29)                         |Store Nb of Abilities of this Unit
001953cc: 26f70001 addiu r23,r23,0x0001          |Loop counter + 1 and dynamic unit counter
001953d0: 2ae20015 slti r2,r23,0x0015            |
001953d4: 1440feb8 bne r2,r0,0x00194eb8      #Do for all units
001953d8: 340200ff ori r2,r0,0x00ff          |

                  SET SOME ACTING UNIT DATA - DISABLE useless Abilities
001953dc: 8fa80060 lw r8,0x0060(r29)         |Load ID of unit with the fewest usable abilities (helpfull and harmfull)
001953e0: 00000000 nop                       |
001953e4: 11020009 beq r8,r2,0x0019540c      #If this is a valid unit ID  Disable AI Decision 0x06 flag 0x04
001953e8: 00009021 addu r18,r0,r0            |reset next loop ability counter
001953ec: 00081900 sll r3,r8,0x04                |ID * 16
001953f0: 3c07801a lui r7,0x801a                 |
001953f4: 24e7f3c4 addiu r7,r7,0xf3c4            |
001953f8: 00e31821 addu r3,r7,r3                 |Part of Pointer to this unit AI Decision data ( AI 0x182c)
001953fc: 90621832 lbu r2,0x1832(r3)             |AI decision data  0x06
00195400: 00000000 nop                           |
00195404: 304200fb andi r2,r2,0x00fb             |remove 0x04 flag
00195408: a0621832 sb r2,0x1832(r3)              |Disable AI decision 0x06 flag 0x04
0019540c: 0000a021 addu r20,r0,r0            |reset next loop counter (Rdm ability)
00195410: 3c02dfff lui r2,0xdfff             |
00195414: 3c15801a lui r21,0x801a            |
00195418: 8eb501f8 lw r21,0x01f8(r21)        |Acting units AI decision pointer  AI 0x0e34
0019541c: 3c03801a lui r3,0x801a             |
00195420: 8c630078 lw r3,0x0078(r3)          |AI 0xcb4 flags (AI processing order ?)
00195424: 8fa40020 lw r4,0x0020(r29)         |Enemy team harmfull abilities counter
00195428: 3442ffff ori r2,r2,0xffff          |r2 = 0xdfffffff
0019542c: 3c01801a lui r1,0x801a             |
00195430: a0200082 sb r0,0x0082(r1)          |Nullifiy 801a0082 AI 0x0cbe
00195434: 00621824 and r3,r3,r2              |remove 0x20000000 flag
00195438: 340200ff ori r2,r0,0x00ff          |
0019543c: 3c01801a lui r1,0x801a             |
00195440: ac230078 sw r3,0x0078(r1)          |Remove 0x20000000 flag from AI 0x0cb4
00195444: a2a2000f sb r2,0x000f(r21)         |store 0xff in closest helpfull ability range
00195448: 04810002 bgez r4,0x00195454        #If Ability counter < 0  security ? 
0019544c: a2a2000e sb r2,0x000e(r21)         |store 0xff in closest harmfull ability range
00195450: 24840007 addiu r4,r4,0x0007                |Forces counter to 0x07
00195454: 000488c3 sra r17,r4,0x03           |Nb of Harmfull abilities / 8 Enemy team counter
00195458: 341e0004 ori r30,r0,0x0004         |Initialize loop counter
0019545c: 3c08801a lui r8,0x801a             |
00195460: 2508f3c4 addiu r8,r8,-0x0c3c       |0x8019f3c4
00195464: 25020004 addiu r2,r8,0x0004        |Part of Dynamic pointer to AI 0x0e44  Status to cancel
                                            @LOOP - reset 5 bytes (will host status to cancel)
00195468: a0400e44 sb r0,0x0e44(r2)              |reset this set of status
0019546c: 27deffff addiu r30,r30,-0x0001         |Counter -1
00195470: 07c1fffd bgez r30,0x00195468       Λ loop backward 4 times
00195474: 2442ffff addiu r2,r2,0xffff            |Pointer offset (-1 each oteration)
00195478: 0000f021 addu r30,r0,r0            |Reset counter
                                            @LOOP - Test All Abilities in 0xfe0 list on acting unit (self targeting)
0019547c: 3c03801a lui r3,0x801a                 |
00195480: 906301f3 lbu r3,0x01f3(r3)             |Acting units battle ID AI 0xe2f
00195484: 3c07801a lui r7,0x801a                 |
00195488: 24e7f3c4 addiu r7,r7,0xf3c4            |
0019548c: 00031100 sll r2,r3,0x04                |ID*16
00195490: 00431021 addu r2,r2,r3                 |ID*17
00195494: 000210c0 sll r2,r2,0x03                |ID*0x88
00195498: 24420ef0 addiu r2,r2,0x0ef0            |
0019549c: 00e21021 addu r2,r7,r2                 |Pointer to Acting Unit list of usable abilities
001954a0: 001e1880 sll r3,r30,0x02               |move list + move counter
001954a4: 00439821 addu r19,r2,r3                |Dynamic pointer to this iteration usable Ability (in Acting unit list)
001954a8: 92630002 lbu r3,0x0002(r19)            |Usable Ability skillset ID
001954ac: 340200ff ori r2,r0,0x00ff              |
001954b0: 1062009b beq r3,r2,0x00195720          #If Loop has reached the end of the list :  Exit loop
001954b4: 00000000 nop                               |
001954b8: 0c06561e jal 0x00195878                |-->AI_Ability_Data_Setting Transfer some data from r4 to 8019f3c4 table
001954bc: 02602021 addu r4,r19,r0                |Send This ability pointer
001954c0: 96620002 lhu r2,0x0002(r19)            |load skillset/usage type
001954c4: 00000000 nop                           |
001954c8: 30428000 andi r2,r2,0x8000             |Test Flag [0x8000]
001954cc: 10400090 beq r2,r0,0x00195710          #If This ability is not usable : branch to  Next Ability Disabled by MP lacking, silence etc…
001954d0: 00000000 nop                               |
001954d4: 8fa80028 lw r8,0x0028(r29)             |Ennemy magic attack counter
001954d8: 00000000 nop                           |
001954dc: 0228102a slt r2,r17,r8                 |True if Ennemy Magical Attack represent at least 12,5% of Attacks  Total/8 < Magical
001954e0: 14400003 bne r2,r0,0x001954f0          #If enemy Harmfull Abilities are mostly physical 
001954e4: 02602021 addu r4,r19,r0                    |Send Ability pointer
001954e8: 0c0655f0 jal 0x001957c0                    |-->Some_type_of_checking_algorithm  If ability only adds shell set it as unusable
001954ec: 3405001b ori r5,r0,0x001b                  |Send Shell ID
001954f0: 8fa70030 lw r7,0x0030(r29)             |load physical attack counter
001954f4: 00000000 nop                           |
001954f8: 0227102a slt r2,r17,r7                 |True if Ennemy Physical Attack represent at least 12,5% of Attacks  Total/8 < Magical
001954fc: 14400003 bne r2,r0,0x0019550c          #If ennemy Harmfull Abilities are mostly magical
00195500: 02602021 addu r4,r19,r0                    |Send Ability pointer
00195504: 0c0655f0 jal 0x001957c0                    |-->Some_type_of_checking_algorithm  If ability only adds protect set it as unusable
00195508: 3405001a ori r5,r0,0x001a                  |Send Protect ID
0019550c: 8fa80038 lw r8,0x0038(r29)             |load reflectable ability counter
00195510: 00000000 nop                           |
00195514: 0228102a slt r2,r17,r8                 |True if Ennemy Reflectable abilities represent at least 12,5% of Abilities  Total/8 < Reflectable
00195518: 14400003 bne r2,r0,0x00195528          #If ennemy Harmfull Abilities are mostly unreflectable
0019551c: 02602021 addu r4,r19,r0                    |Send Ability pointer
00195520: 0c0655f0 jal 0x001957c0                    |-->Some_type_of_checking_algorithm  If ability only adds reflect set it as unusable
00195524: 34050026 ori r5,r0,0x0026                  |Send Reflect ID
00195528: 8fa70040 lw r7,0x0040(r29)             |load earth element ability counter
0019552c: 00000000 nop                           |
00195530: 1ce00003 bgtz r7,0x00195540            #If Ennemy do not use any harmull ability with Earth element
00195534: 02602021 addu r4,r19,r0                    |Send Ability pointer
00195538: 0c0655f0 jal 0x001957c0                    |-->Some_type_of_checking_algorithm  If ability only adds Float set it as unusable
0019553c: 34050011 ori r5,r0,0x0011                  |Send Reflect ID
00195540: 96620002 lhu r2,0x0002(r19)            |load skillset/usage type AI 0xef0 table
00195544: 00000000 nop                           |
00195548: 30428000 andi r2,r2,0x8000             |
0019554c: 10400070 beq r2,r0,0x00195710          #If Flag 0x8000 is OFF (Ability is unusable) : branch to  Next Ability
00195550: 00000000 nop                               |
00195554: 96c2000c lhu r2,0x000c(r22)            |This Ability AI flags 1 and 2 8019f3c4 - 0x0c
00195558: 00000000 nop                           |
0019555c: 30420800 andi r2,r2,0x0800             |
00195560: 10400002 beq r2,r0,0x0019556c          #If This Ability has [Random use]
00195564: 26520001 addiu r18,r18,0x0001          |Usable ability counter?
00195568: 26940001 addiu r20,r20,0x0001              |random hits counter
0019556c: 86c30002 lh r3,0x0002(r22)             |Ability ID
00195570: 3402017b ori r2,r0,0x017b              |
00195574: 14620007 bne r3,r2,0x00195594          #If This Ability is 0x17b (Holy Water)
00195578: 3c032000 lui r3,0x2000                     |
0019557c: 3c02801a lui r2,0x801a                     |
00195580: 8c420078 lw r2,0x0078(r2)                  |Load 0x801a0078 (AI Processing order ?) AI 0xcb4
00195584: 00000000 nop                               |
00195588: 00431025 or r2,r2,r3                       |
0019558c: 3c01801a lui r1,0x801a                     |
00195590: ac220078 sw r2,0x0078(r1)                  |Enable Flag 0x20000000 at 801a0078
00195594: 96c2000c lhu r2,0x000c(r22)            |This Ability AI flags 1 and 2
00195598: 00000000 nop                           |
0019559c: 30420020 andi r2,r2,0x0020             |
001955a0: 1040000e beq r2,r0,0x001955dc          #If This ability has [Cancel status]
001955a4: 00000000 nop                               |
001955a8: 00008021 addu r16,r0,r0                    |Initialize status set counter
001955ac: 3c08801a lui r8,0x801a                     |
001955b0: 2508f3c4 addiu r8,r8,0xf3c4                |
001955b4: 01102021 addu r4,r8,r16                    |Part of Dynamic pointer to 8019f3c4 - 0xe44
                                                    @LOOP through all status sets - transfer status data from AI 0x07 to AI 0xe44
001955b8: 02d01821 addu r3,r22,r16                       |Part of Dynamic pointer to 8019f3c4 
001955bc: 90820e44 lbu r2,0x0e44(r4)                     |Load Status to Cancel  AI 0xe44
001955c0: 90630007 lbu r3,0x0007(r3)                     |Load Ability Status infliction AI 0x007
001955c4: 26100001 addiu r16,r16,0x0001                  |Loop counter + 1
001955c8: 00431025 or r2,r2,r3                           |
001955cc: a0820e44 sb r2,0x0e44(r4)                      |Update status to cancel
001955d0: 2a020005 slti r2,r16,0x0005                    |
001955d4: 1440fff8 bne r2,r0,0x001955b8              Λ Loop   5 times
001955d8: 01102021 addu r4,r8,r16                        |Pointer offset (+1 each iteration)
001955dc: 96c2000c lhu r2,0x000c(r22)            |This Ability AI flags 1 and 2
001955e0: 34030040 ori r3,r0,0x0040              |
001955e4: 30420042 andi r2,r2,0x0042             |
001955e8: 14430003 bne r2,r3,0x001955f8          #If This Ability has [Affect MP] and not [Target enemy]
001955ec: 34020001 ori r2,r0,0x0001                  |
001955f0: 3c01801a lui r1,0x801a                     |
001955f4: a0220082 sb r2,0x0082(r1)                  |store 0x01 at AI 0xcbe  801a0082
001955f8: 92c40004 lbu r4,0x0004(r22)            |This Ability Range 8019f3c4  0x04
001955fc: 92c30005 lbu r3,0x0005(r22)            |This Ability AoE 8019f3c4  0x05
00195600: 96c2000c lhu r2,0x000c(r22)            |This Ability AI flags 1 and 2 8019f3c4  0x0c
00195604: 00000000 nop                           |
00195608: 30420002 andi r2,r2,0x0002             |
0019560c: 10400007 beq r2,r0,0x0019562c          #If this Ability has [Target enemies]
00195610: 00832021 addu r4,r4,r3                 |Range + AoE
00195614: 92a2000e lbu r2,0x000e(r21)                |Load closest range so far Acting Unit 0x182c 0x0e
00195618: 00000000 nop                               |
0019561c: 0082102a slt r2,r4,r2                      |set if ability range < stored Min range
00195620: 10400002 beq r2,r0,0x0019562c              #If this ability has a lower range than previous record
00195624: 00000000 nop                                   |
00195628: a2a4000e sb r4,0x000e(r21)                     |Update closest Harmfull Ability range
0019562c: 96c2000c lhu r2,0x000c(r22)            |This Ability AI flags 1 and 2 8019f3c4  0x0c
00195630: 00000000 nop                           |
00195634: 30420001 andi r2,r2,0x0001             |
00195638: 10400011 beq r2,r0,0x00195680          #If This ability has [Target Allies]
0019563c: 00000000 nop                               |
00195640: 92c20000 lbu r2,0x0000(r22)                |This ability Skillset 8019f3c4
00195644: 3c018006 lui r1,0x8006                     |
00195648: 00220821 addu r1,r1,r2                     |
0019564c: 90235cb4 lbu r3,0x5cb4(r1)                 |This Ability action menu
00195650: 34020001 ori r2,r0,0x0001                  |
00195654: 14620004 bne r3,r2,0x00195668              #If Action menu is [item inventory]   (halve total range)
00195658: 24820001 addiu r2,r4,0x0001                    |r2 = range + 1?
0019565c: 00021fc2 srl r3,r2,0x1f                        |0  range / 2^31..
00195660: 00431021 addu r2,r2,r3                         |
00195664: 00022043 sra r4,r2,0x01                        |Range/2 (rounded up)
00195668: 92a2000f lbu r2,0x000f(r21)                |Load Closest Helpfull Ability range Acting Unit 0x182c 0x0f
0019566c: 00000000 nop                               |
00195670: 0082102a slt r2,r4,r2                      |0x1 if This Helpfull Ability range < Previous entry
00195674: 10400002 beq r2,r0,0x00195680              #If This ability total range exceed previous record
00195678: 00000000 nop                                   |
0019567c: a2a4000f sb r4,0x000f(r21)                     |Store new closest Helpfull Ability range
00195680: 96630002 lhu r3,0x0002(r19)            |This Ability Skillset and usage This Ability AI 0xef0 - 0x02
00195684: 00000000 nop                           |
00195688: 30620200 andi r2,r3,0x0200             |
0019568c: 14400017 bne r2,r0,0x001956ec          #If Usage flag 0x02 is Enabled Forces ability as unusable  Allies are not targeted flag ?
00195690: 34620100 ori r2,r3,0x0100                  |Enable Usage 0x01
00195694: 30620400 andi r2,r3,0x0400                 |
00195698: 14400015 bne r2,r0,0x001956f0          #If Usage 0x04 is Enabled : branch Skip - Do not Update usage flag Weapon ranged ?
0019569c: 00000000 nop                               |
                                                Else Usage 0x02 and 0x04 flags are OFF
001956a0: 92c20001 lbu r2,0x0001(r22)            |This Ability CT
001956a4: 3c03801a lui r3,0x801a                 |
001956a8: 90630213 lbu r3,0x0213(r3)             |Remaining clockticks until next turn
001956ac: 00000000 nop                           |
001956b0: 0043102b sltu r2,r2,r3                 |set if ability CT < remaining clockticks
001956b4: 10400007 beq r2,r0,0x001956d4          #If This Ability CT will end before next unit turn
001956b8: 00000000 nop                               |
001956bc: 3c04801a lui r4,0x801a                     |
001956c0: 908401f2 lbu r4,0x01f2(r4)                 |Load and send Acting Unit ID
001956c4: 0c067976 jal 0x0019e5d8                    |-->AI_Ability_Use_Decisions Check this ability on Acting Unit
001956c8: 34050001 ori r5,r0,0x0001                  |Send 1 (test reflect)
001956cc: 14400004 bne r2,r0,0x001956e0              #If returned value is 0x00 (Unusable ?)
001956d0: 00000000 nop                                   |
001956d4: 96620002 lhu r2,0x0002(r19)                    |load skillset/usage
001956d8: 080655bb j 0x001956ec                          >>Avoid opposite section
001956dc: 34420100 ori r2,r2,0x0100                      |set 0x0100 flag
                                                    Else : r2 != 0x00
001956e0: 96620002 lhu r2,0x0002(r19)                    |load usage flags
001956e4: 00000000 nop                                   |
001956e8: 3042feff andi r2,r2,0xfeff                     |remove 0x0100 flag
001956ec: a6620002 sh r2,0x0002(r19)             |Update flags This ability 8019f3c4 + 0xef0 + 0x02
001956f0: 8fa70010 lw r7,0x0010(r29)             |Load Acting Unit Action Taken byte (Battle 0x188)
001956f4: 00000000 nop                           |
001956f8: 10e00005 beq r7,r0,0x00195710          #If Action is Taken
001956fc: 00000000 nop                               |
00195700: 96620002 lhu r2,0x0002(r19)                |Load Skillset and Usage This ability 8019f3c4 + 0xef0 + 0x02
00195704: 00000000 nop                               |
00195708: 30427fff andi r2,r2,0x7fff                 |remove 0x8000 flag
0019570c: a6620002 sh r2,0x0002(r19)                 |Update flags This ability 8019f3c4 + 0xef0 + 0x02
00195710: 27de0001 addiu r30,r30,0x0001          |Ability counter +1
00195714: 2bc20022 slti r2,r30,0x0022            |check list's limit (0x22 entries)
00195718: 1440ff58 bne r2,r0,0x0019547c      Λ Loop throught all Abilities in list
0019571c: 00000000 nop                       |
00195720: 92a2000e lbu r2,0x000e(r21)        |Closest Harmfull Ability range Acting Unit 8019f3c4 + 0x182c + 0x0e
00195724: 340400ff ori r4,r0,0x00ff          |
00195728: 10440007 beq r2,r4,0x00195748      #If there is an entry (not 0xff)
0019572c: 00000000 nop                           |
00195730: 92a2000e lbu r2,0x000e(r21)            |load lowest range
00195734: 3c03801a lui r3,0x801a                 |
00195738: 906301fc lbu r3,0x01fc(r3)             |load acting units move 8019f3c4 + 0x0e38
0019573c: 00000000 nop                           |
00195740: 00431021 addu r2,r2,r3                 |move + lowest range (max range)
00195744: a2a2000e sb r2,0x000e(r21)             |store Acting Unit move range + closest harmfull ability range + AoE
00195748: 92a2000f lbu r2,0x000f(r21)        |Closest helpfull ability range Acting Unit 8019f3c4 + 0x182c + 0x0f
0019574c: 00000000 nop                       |
00195750: 14440002 bne r2,r4,0x0019575c      #If there is no entry (0xff)
00195754: 00000000 nop                           |
00195758: a2a0000f sb r0,0x000f(r21)             |clear highest range ability
0019575c: 92a2000f lbu r2,0x000f(r21)        |load highest range
00195760: 3c03801a lui r3,0x801a             |
00195764: 906301fc lbu r3,0x01fc(r3)         |load acting units move 8019f3c4 + 0x0e38
00195768: 00000000 nop                       |
0019576c: 00431021 addu r2,r2,r3             |add move to range
00195770: 12400006 beq r18,r0,0x0019578c     #If there is at least one usable ability
00195774: a2a2000f sb r2,0x000f(r21)         |Update highest max range
00195778: 001411c0 sll r2,r20,0x07               |random use ability counter*128
0019577c: 0052001a div r2,r18                    |
00195780: 00001012 mflo r2                       |(Random Ability * 0x80)Nb of usable Abilities
00195784: 3c01801a lui r1,0x801a                 |
00195788: a0220d7c sb r2,0x0d7c(r1)              |store random Ability mod
0019578c: 8fbf008c lw r31,0x008c(r29)
00195790: 8fbe0088 lw r30,0x0088(r29)
00195794: 8fb70084 lw r23,0x0084(r29)
00195798: 8fb60080 lw r22,0x0080(r29)
0019579c: 8fb5007c lw r21,0x007c(r29)
001957a0: 8fb40078 lw r20,0x0078(r29)
001957a4: 8fb30074 lw r19,0x0074(r29)
001957a8: 8fb20070 lw r18,0x0070(r29)
001957ac: 8fb1006c lw r17,0x006c(r29)
001957b0: 8fb00068 lw r16,0x0068(r29)
001957b4: 27bd0090 addiu r29,r29,0x0090
001957b8: 03e00008 jr r31
001957bc: 00000000 nop

Return locations

BATTLE.BIN
 00194028:  Main AI action setup