AI Ability Data Setting

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
AI Ability Data Setting : reset and set some data in 0x8019f3c4 section. Bugs and hard coded things (see notes)
----------------------------------------------------------------------------------------------------------------
Parameters : r4 - Ability data pointer (used to load data)

Returns nothing
----------------------------------------------------------------------------------------
00195878: 27bdffc8 addiu r29,r29,-0x0038    |
0019587c: afb40020 sw r20,0x0020(r29)       |
00195880: 0080a021 addu r20,r4,r0           |r20 = Ability pointer in AI Unit's Move List  801a02b4
00195884: afb00010 sw r16,0x0010(r29)       |
00195888: 3c10801a lui r16,0x801a           |
0019588c: 2610f3c4 addiu r16,r16,-0xc3c     |Start of AI Used/processed Ability Data pointer 0x8019f3c4 - 8019f3c4
00195890: 02002021 addu r4,r16,r0           |
00195894: 34050014 ori r5,r0,0x0014         |Nb of byte to delete in routine below
00195898: afbf0030 sw r31,0x0030(r29)       |
0019589c: afb7002c sw r23,0x002c(r29)       |
001958a0: afb60028 sw r22,0x0028(r29)       |
001958a4: afb50024 sw r21,0x0024(r29)       |
001958a8: afb3001c sw r19,0x001c(r29)       |
001958ac: afb20018 sw r18,0x0018(r29)       |
001958b0: 0c066ade jal 0x0019ab78           |-->Word_Nulling Nullify 5 Words from 0x8019f3c4 to 0x8019f3d7  (Some ability data - see notes)
001958b4: afb10014 sw r17,0x0014(r29)       |
001958b8: 26040020 addiu r4,r16,0x0020      |Calculator Type Ability ID
001958bc: 0c066ade jal 0x0019ab78           |-->Word_Nulling Nullify calculator related data
001958c0: 34050004 ori r5,r0,0x0004         |
001958c4: 92820002 lbu r2,0x0002(r20)       |Load Ability skillset ID
001958c8: 00000000 nop                      |
001958cc: a2020000 sb r2,0x0000(r16)        |Store Skillset ID
001958d0: 96830000 lhu r3,0x0000(r20)       |Byte 00 and 01 (both needed to find Ability ID)
001958d4: 3c048019 lui r4,0x8019            |
001958d8: 248408cc addiu r4,r4,0x08cc       |Start of unit data
001958dc: 306303ff andi r3,r3,0x03ff        |Ability ID mask  (+flag 0x2 of byte 0x00 ?)
001958e0: 00608821 addu r17,r3,r0           |/r17 = Ability ID 
001958e4: 3c01801a lui r1,0x801a            |
001958e8: a423f3c6 sh r3,-0x0c3a(r1)        |Store Ability ID at 0x8019f3c6  0x8019f3c4 - 0x02
001958ec: 96820000 lhu r2,0x0000(r20)       |Byte 00 and 01 (both needed to find Ability ID)
001958f0: 92830002 lbu r3,0x0002(r20)       |Load Ability skillset ID
001958f4: 00021400 sll r2,r2,0x10           |Pass halfword in upper registery
001958f8: 0002ae83 sra r21,r2,0x1a          |/Unit ID (from 0x801a02b4) Right shift destroying low byte and 2nd byte flag 0x1 and 0x2 (keep just Unit ID)
001958fc: 001510c0 sll r2,r21,0x03          |Unit ID * 8
00195900: 00551023 subu r2,r2,r21           |Unit ID * 7
00195904: 00021180 sll r2,r2,0x06           |Unid ID * 0x1c0 
00195908: 3c018006 lui r1,0x8006            |
0019590c: 00230821 addu r1,r1,r3            |0x80060000 + Ability's skillset ID
00195910: 90375cb4 lbu r23,0x5cb4(r1)       |r23 = Ability's Skillset's Action menu
00195914: 00449021 addu r18,r2,r4           |r18 = Unit Battle Data Pointer
00195918: 26e3ffff addiu r3,r23,-0x0001     |
0019591c: 2c62000a sltiu r2,r3,0x000a       |r2 = 0x1 if Action menu is between 0x1 and 0xa    (not default, defend, equip change, unknown nor blank)
00195920: 104000b7 beq r2,r0,0x00195c00     #Branch to   Default section  if the action menu don't have a jump pointer address
00195924: 0000b021 addu r22,r0,r0           |r22 = 0x00 (will be used to store inflicted status in some section)
00195928: 00031080 sll r2,r3,0x02               |Action menu offset (word)
0019592c: 3c018019 lui r1,0x8019                |
00195930: 00220821 addu r1,r1,r2                |
00195934: 8c223d48 lw r2,0x3d48(r1)             |Load Action menu jump Adress (Table details)
00195938: 00000000 nop                          |
0019593c: 00400008 jr r2                        |jump to specific action menu section
00195940: 00000000 nop                          |

    ----Attack / Charge ---- Code jumps backward from charge section after setting CT
00195944: 02151021 addu r2,r16,r21          |8019f3c4 + Unit ID
00195948: 9042198c lbu r2,0x198c(r2)        |Load Unit Battle ID   0x801a0d50
0019594c: 00000000 nop                      |
00195950: 000210c0 sll r2,r2,0x03           |Unit ID * 8
00195954: 24421778 addiu r2,r2,0x1778       |
00195958: 02021821 addu r3,r16,r2           |Unit AI Weapon Attack data pointer  0x801a0b3c + Unit ID *8  
0019595c: 90620000 lbu r2,0x0000(r3)        |Load Unit Attack range
00195960: 00000000 nop                      |
00195964: a2020004 sb r2,0x0004(r16)        |Store attack range in AI used ability data  8019f3c4 - 0x04
00195968: 90620005 lbu r2,0x0005(r3)        |Load unit Attack's element  (weapon elements ? And if dual ?)
0019596c: 00000000 nop                      |
00195970: a2020010 sb r2,0x0010(r16)        |Store Element in AI used ability data
    ----Attack / Charge / Jump---- Code jumps backward from jump section after setting CT and range
00195974: 90620004 lbu r2,0x0004(r3)        |Load Unit's Weapon ID
00195978: 00000000 nop                      |
0019597c: a2020006 sb r2,0x0006(r16)        |Store Weapon ID in AI used ability data (Item considered)  8019f3c4 - 0x06
00195980: 90620001 lbu r2,0x0001(r3)        |Load Ability AI behavior flags 1
00195984: 00000000 nop                      |
00195988: a202000c sb r2,0x000c(r16)        |Store AI behavior flags 1 in AI used abilty data
0019598c: 90620002 lbu r2,0x0002(r3)        |Load Ability AI behavior flags 2
00195990: 00000000 nop                      |
00195994: a202000d sb r2,0x000d(r16)        |Store AI behavior flags 2 in AI used abilty data
00195998: 90620003 lbu r2,0x0003(r3)        |Load Ability AI behavior flags 3
0019599c: 00000000 nop                      |
001959a0: a202000e sb r2,0x000e(r16)        |Store AI behavior flags 3 in AI used abilty data
001959a4: 92820003 lbu r2,0x0003(r20)       |Load Ability AI behavior flags 3 (again)
001959a8: 00000000 nop                      |
001959ac: a202000f sb r2,0x000f(r16)        |Store AI behavior flags 3 in AI used abilty data (tagged as AI4 ? Action menu specific ?)
001959b0: 34020009 ori r2,r0,0x0009         |
001959b4: 16e200eb bne r23,r2,0x00195d64    #If Action menu is Jump  / Else jump to  END
001959b8: 2403fffe addiu r3,r0,-0x0002          |r3 = 0xfffffffe
001959bc: 8e02000c lw r2,0x000c(r16)            |Load AI used ability data AI flags 1
001959c0: 00000000 nop                          |
001959c4: 34420002 ori r2,r2,0x0002             |Enable Target enemy flag (flag 0x02)
001959c8: 00431024 and r2,r2,r3                 |Cancel Target Allies (flag 0x01)
001959cc: 08065759 j 0x00195d64                 >>Jump to  END
001959d0: ae02000c sw r2,0x000c(r16)            |Store AI behavior flags 13 in AI used abilty data 0x0c with Target enemy flag ON

    ----Item inventory ---- 
001959d4: 2622fe90 addiu r2,r17,-0x0170     |Item ID (Ability ID - 0x170 (Potion = 0x00))  Hard coded
001959d8: 00021840 sll r3,r2,0x01           |Item ID * 2
001959dc: 00621821 addu r3,r3,r2            |Item ID * 3
001959e0: 92420091 lbu r2,0x0091(r18)       |Load Unit 3rd Support set
001959e4: 3c018006 lui r1,0x8006            |
001959e8: 00230821 addu r1,r1,r3            |
001959ec: 90363f9a lbu r22,0x3f9a(r1)       |Load Item Inflicted status  0x80063f98 - 0x02 + Item offset
001959f0: 30420008 andi r2,r2,0x0008        |Check for throw item in 3rd set of support
001959f4: 10400004 beq r2,r0,0x00195a08     #If Unit uses throw item
001959f8: 34020001 ori r2,r0,0x0001             |
001959fc: 9242003a lbu r2,0x003a(r18)           |Load Unit's Move stat / BUG : should be 0x4
00195a00: 08065683 j 0x00195a0c                 >>Jump to preserve range value
00195a04: a2020004 sb r2,0x0004(r16)            |Store it as range in AI used ability data
                                            #Else : Unit do not use throw item
00195a08: a2020004 sb r2,0x0004(r16)            |Force range to 0x1 in AI used ability data
00195a0c: a2000005 sb r0,0x0005(r16)        |Nullify AoE 
00195a10: 3c018006 lui r1,0x8006            |
00195a14: 00310821 addu r1,r1,r17           |
00195a18: 90220ea0 lbu r2,0x0ea0(r1)        |Load Ability's used item  (0x80061010 +for potion(ID is 0x170))
00195a1c: 08065700 j 0x00195c00             >>Jump to default section
00195a20: a2020006 sb r2,0x0006(r16)        |Store used item ID in AI used ability data (as item considered)

    ----Katana inventory ---- 
00195a24: 2622ffda addiu r2,r17,-0x0026     |r2 = Katana ID (Ability ID - 0x26) Hardcoded - 0x26 if the gap between first draw out Ability ID and first katana ID
00195a28: 08065700 j 0x00195c00             >>Jump to default section
00195a2c: a2020006 sb r2,0x0006(r16)        |Store used katana ID in AI used ability data (as item considered)

    ----Weapon inventory ----  For throw r17 is Threw Weapon ID ? 
00195a30: 2622ff86 addiu r2,r17,0xff86      |Used Weapon ID - 0x7A
00195a34: 2c420003 sltiu r2,r2,0x0003       |Check if Weapon ID is between 0x7A and 0x7C (shurikens)
00195a38: 14400005 bne r2,r0,0x00195a50     #If Not a Shuriken
00195a3c: 3402017e ori r2,r0,0x017e         |r2 = 0x17e (Throw shuriken ability ID)
00195a40: 2622ff83 addiu r2,r17,0xff83          |Used weapon ID - 0x7D
00195a44: 2c420003 sltiu r2,r2,0x0003           |Check if used weapon ID is between 0x7D and 0x7F (Ball)
00195a48: 10400009 beq r2,r0,0x00195a70         #If Used Weapon is a Ball
00195a4c: 34020189 ori r2,r0,0x0189                 |Set Ability ID to 0x189
00195a50: a6020002 sh r2,0x0002(r16)        #E      | Store Ability ID in AI used ability Data 0x02 (Ability ID)
00195a54: 001110c0 sll r2,r17,0x03                  |Used weapon ID * 8
00195a58: a2110006 sb r17,0x0006(r16)               |Store Used Weapon ID as item considered
00195a5c: 3c018006 lui r1,0x8006                    |
00195a60: 00220821 addu r1,r1,r2                    |0x80060000 + Item offset (8 bytes per item)
00195a64: 90223abe lbu r2,0x3abe(r1)                |Load Weapon Element (0x80063ab8 - 0x06)
00195a68: 080656a0 j 0x00195a80                     >>Jump - Avoid normal weapon section
00195a6c: a2020010 sb r2,0x0010(r16)                |
                                                #Else - Not a Shuriken nor a ball
00195a70: 96020e14 lhu r2,0x0e14(r16)               |Load chosen Throw ability ID
00195a74: 92030e16 lbu r3,0x0e16(r16)               |Load chosen Weapon ID
00195a78: a6020002 sh r2,0x0002(r16)                |Store Ability ID in AI used ability data 0x02
00195a7c: a2030006 sb r3,0x0006(r16)                |Store Weapon ID in AI used ability
00195a80: 9242003a lbu r2,0x003a(r18)       |Load unit's move
00195a84: 86110002 lh r17,0x0002(r16)       |Load Ability ID (from AI data) in r17
00195a88: 08065700 j 0x00195c00             >>Jump to default section
00195a8c: a2020004 sb r2,0x0004(r16)        |Store Unit's move as Ability range

    ----Jump ---- 
00195a90: 92020e2e lbu r2,0x0e2e(r16)       |Load acting unit ID
00195a94: 00000000 nop                      |
00195a98: 16a2000e bne r21,r2,0x00195ad4    #If Acting unit ID = Unit ID (AI data 0xe2e Vs ID from AI move list)
00195a9c: 34020064 ori r2,r0,0x0064             |100
00195aa0: 8e0317f8 lw r3,0x17f8(r16)            |Load acting unit data pointer
00195aa4: 00000000 nop                          |
00195aa8: 90640039 lbu r4,0x0039(r3)            |Load Acting unit CT
00195aac: 90630038 lbu r3,0x0038(r3)            |Load Acting unit Speed
00195ab0: 00441023 subu r2,r2,r4                |100 - Acting unit CT
00195ab4: 0043001a div r2,r3                    |(100-CT)/Speed
00195ab8: 00001012 mflo r2                      |
00195abc: 00000000 nop                          |
00195ac0: 00021fc2 srl r3,r2,0x1f               |
00195ac4: 00431021 addu r2,r2,r3                |rounded up if needed
00195ac8: 00021043 sra r2,r2,0x01               |((100 - CT) / Speed) / 2
00195acc: 080656d7 j 0x00195b5c                 |
00195ad0: a2020001 sb r2,0x0001(r16)            |Store (100-CT/Speed)/2 in AI used Ability CT
                                            #Else : Unit is not acting unit (?)
00195ad4: 92450039 lbu r5,0x0039(r18)           |Unit CT (ID from Move list)
00195ad8: 00000000 nop                          |
00195adc: 2ca20065 sltiu r2,r5,0x0065           |
00195ae0: 14400005 bne r2,r0,0x00195af8         #If unit CT > 100
00195ae4: 34040064 ori r4,r0,0x0064             |100
00195ae8: a2000001 sb r0,0x0001(r16)                |Nullify AI used Ability CT
00195aec: 92420039 lbu r2,0x0039(r18)               |Load unit's CT
00195af0: 080656cb j 0x00195b2c                     >>Jump after the other CT section
00195af4: 2444ff9c addiu r4,r2,-0x0064              |r4 = Unit CT - 100
                                                #Else CT < 100
00195af8: 92430038 lbu r3,0x0038(r18)               |Load unit's speed
00195afc: 00851023 subu r2,r4,r5                    |100 - CT
00195b00: 0043001a div r2,r3                        |(100-CT)/Speed Nb of turn before acting ?
00195b04: 00001012 mflo r2                          |
00195b08: 00000000 nop                              |
00195b0c: a2020001 sb r2,0x0001(r16)                |Store (100-CT)/Speed As Ability CT
00195b10: 92430039 lbu r3,0x0039(r18)               |Unit's CT
00195b14: 92420038 lbu r2,0x0038(r18)               |Unit's Speed
00195b18: 00832023 subu r4,r4,r3                    |100 - CT
00195b1c: 0082001a div r4,r2                        |(100-CT)/Speed Nb of turn before acting ?
00195b20: 00001810 mfhi r3                          |remainder 
00195b24: 00000000 nop                              |
00195b28: 00432023 subu r4,r2,r3                    |Speed - Remainder CT above 100 when acting ? 
00195b2c: 34020064 ori r2,r0,0x0064                 |100
00195b30: 92430038 lbu r3,0x0038(r18)               |Unit's speed
00195b34: 00441023 subu r2,r2,r4                    |100 * Extra CT Remaining CT before next turn
00195b38: 0043001a div r2,r3                        |Remaing CT / Speed
00195b3c: 00001012 mflo r2                          |
00195b40: 00000000 nop                              |
00195b44: 00021fc2 srl r3,r2,0x1f                   |
00195b48: 00431021 addu r2,r2,r3                    |rounded up  if needed
00195b4c: 92030001 lbu r3,0x0001(r16)               |Load Nb of turn before acting
00195b50: 00021043 sra r2,r2,0x01                   |
00195b54: 00621821 addu r3,r3,r2                    |Nb of turns before second turn ? 
00195b58: a2030001 sb r3,0x0001(r16)                |Store Nb of turns before second turn as AI used Ability CT
00195b5c: 16200003 bne r17,r0,0x00195b6c    #If Ability ID = 0x00 ?
00195b60: 2622fe76 addiu r2,r17,-0x018a     |r2 = Ability ID - 0x18A (jump2 = 0)
00195b64: 080656df j 0x00195b7c                 >>Jump and force range to 0x01
00195b68: 34020001 ori r2,r0,0x0001             |r2 = 0x01
                                            #Else : Ability ID <> 0x00
00195b6c: 00021040 sll r2,r2,0x01               |Jump Ability ID*2
00195b70: 3c018006 lui r1,0x8006                |
00195b74: 00220821 addu r1,r1,r2                |
00195b78: 9022102c lbu r2,0x102c(r1)            |Load Jump Ability Range
00195b7c: 00000000 nop                      |
00195b80: a2020004 sb r2,0x0004(r16)        |Store Range
00195b84: 02151021 addu r2,r16,r21          |0x8019f3c4 + Unit ID
00195b88: 9042198c lbu r2,0x198c(r2)        |Load Unit's Battle ID (0xff if not used)
00195b8c: 00000000 nop                      |
00195b90: 000210c0 sll r2,r2,0x03           |Unit ID*8
00195b94: 24421778 addiu r2,r2,0x1778       |
00195b98: 0806565d j 0x00195974             >>Jump at the end of the default attack section
00195b9c: 02021821 addu r3,r16,r2           |Unit Weapon flag (in AI table) 0x8019f3c4 + 0x1778 + Unit battle ID * 8

    ---- Charge ---- 
00195ba0: 2622fe6a addiu r2,r17,-0x0196     |Ability ID - 0x196 (Charge +1 = 0)
00195ba4: 00021040 sll r2,r2,0x01           |Charge ID * 2
00195ba8: 3c018006 lui r1,0x8006            |
00195bac: 00220821 addu r1,r1,r2            |
00195bb0: 90221044 lbu r2,0x1044(r1)        |Load Charge's ability CT
00195bb4: 08065651 j 0x00195944             >>Jump to Attack section
00195bb8: a2020001 sb r2,0x0001(r16)        |Store Charge's CT as AI used ability CT 

    ---- Arithmeticks ---- 
00195bbc: 340300ff ori r3,r0,0x00ff         |
00195bc0: 34040004 ori r4,r0,0x0004         |Counter set for 5 loops
00195bc4: 26020004 addiu r2,r16,0x0004      |Pointer to AI used ability 5th set of status infliction 
                                            @LOOP - Enables all status infliction flags
00195bc8: a0430007 sb r3,0x0007(r2)             |Store 0xff in AI used ability Status infliction (all statuses ON)
00195bcc: 2484ffff addiu r4,r4,-0x0001          |counter -1
00195bd0: 0481fffd bgez r4,0x00195bc8       Λ Loop while counter >= 0
00195bd4: 2442ffff addiu r2,r2,-0x0001          |pointer -1
00195bd8: 340200fc ori r2,r0,0x00fc             |
00195bdc: a202000c sb r2,0x000c(r16)        |Store 0xfc in AI behavior 1  (everything but target allies / enemies)
00195be0: 92820003 lbu r2,0x0003(r20)       |Load Ability usage type (from AI moves list)  801a02b4 - 0x03
00195be4: 00000000 nop                      |
00195be8: a202000f sb r2,0x000f(r16)        |Store usage as AI used ability extra behaviors flags
00195bec: 8e02000c lw r2,0x000c(r16)        |Load All AI behaviors flags
00195bf0: 00000000 nop                      |
00195bf4: 34428000 ori r2,r2,0x8000         |Enable Ignore range
00195bf8: 08065759 j 0x00195d64             >>Jump to  >>!!END!!
00195bfc: ae02000c sw r2,0x000c(r16)        |Update AI behavior flags (ignore range)

    ----Default (direct) and  Weapon Katana Item----
00195c00: 2604000c addiu r4,r16,0x000c      |Pointer to AI used ability behaviors flags 1
00195c04: 001198c0 sll r19,r17,0x03         |Ability ID * 8
00195c08: 3c058006 lui r5,0x8006            |
00195c0c: 24a5ebf4 addiu r5,r5,0xebf4       |
00195c10: 02652821 addu r5,r19,r5           |Pointer to Ability behaviors flags 1 0x8006ebf0 - 0x04 + Ability offset (8 bytes)
00195c14: 0c066ac2 jal 0x0019ab08           |-->Transfer_Halfword_Values Transfer AI behavior flags 1,2,3,4 from SCUS Ability Table to AI used Ability Behaviors flags
00195c18: 34060004 ori r6,r0,0x0004         |Limit for routine 
00195c1c: 26e2ffff addiu r2,r23,-0x0001     |Action menu -0x1
00195c20: 2c420002 sltiu r2,r2,0x0002       |Check for  Item or Weapon inventory
00195c24: 10400005 beq r2,r0,0x00195c3c     #If Action menu is Item or weapon inventory
00195c28: 3c030040 lui r3,0x0040                |
00195c2c: 8e02000c lw r2,0x000c(r16)            |Load All AI used ability behaviors flags
00195c30: 00000000 nop                          |
00195c34: 00431025 or r2,r2,r3                  |Enable Direct attack flag
00195c38: ae02000c sw r2,0x000c(r16)            |Store updated behavior flags
00195c3c: 92820003 lbu r2,0x0003(r20)       |Load Usage flags from AI moves list
00195c40: 00000000 nop                      |
00195c44: a202000f sb r2,0x000f(r16)        |Store Usage flags as extra behavior flags
00195c48: 2a220170 slti r2,r17,0x0170       |Check if Ability has a second table (Before potion)
00195c4c: 1040002f beq r2,r0,0x00195d0c     #If Ability has a second table
00195c50: 02711023 subu r2,r19,r17              |Ability ID*7
00195c54: 00021040 sll r2,r2,0x01               |ID*14
00195c58: 3c038006 lui r3,0x8006                |
00195c5c: 2463fbf0 addiu r3,r3,0xfbf0           |
00195c60: 00431821 addu r3,r2,r3                |Ability Table 2 pointer (SCUS) 8006fbf0 + Ability offset (14 bytes)
00195c64: 9062000c lbu r2,0x000c(r3)            |Load Ability CT
00195c68: 9076000b lbu r22,0x000b(r3)           |Load Ability Inflict status
00195c6c: a2020001 sb r2,0x0001(r16)            |Store CT in AI used ability data
00195c70: 90620007 lbu r2,0x0007(r3)            |Load Ability Element
00195c74: 00000000 nop                          |
00195c78: a2020010 sb r2,0x0010(r16)            |Store ability element in AI data
00195c7c: 9062000d lbu r2,0x000d(r3)            |Load Ability MP cost
00195c80: 00000000 nop                          |
00195c84: a2020011 sb r2,0x0011(r16)            |Store MP cost in AI data
00195c88: 92420090 lbu r2,0x0090(r18)           |Load Unit 2nd set of Support 
00195c8c: 00000000 nop                          |
00195c90: 30420080 andi r2,r2,0x0080            |Check for Half of MP
00195c94: 10400005 beq r2,r0,0x00195cac         #If Unit has Half of MP
00195c98: 00000000 nop                              |
00195c9c: 92020011 lbu r2,0x0011(r16)               |Load MP cost from AI data
00195ca0: 00000000 nop                              |
00195ca4: 00021042 srl r2,r2,0x01                   |MP Cost/2
00195ca8: a2020011 sb r2,0x0011(r16)                |Store updated MP cost
00195cac: 90620003 lbu r2,0x0003(r3)            |Load Ability Flags 1
00195cb0: 00000000 nop                          |
00195cb4: 30420020 andi r2,r2,0x0020            |check for Weapon range
00195cb8: 10400009 beq r2,r0,0x00195ce0         #If Ability is weapon ranged
00195cbc: 02151021 addu r2,r16,r21                  |0x8019f3c4 + Unit ID
00195cc0: 9042198c lbu r2,0x198c(r2)                |Load Unit's battle ID  801a0d50 + Unit offset
00195cc4: 00000000 nop                              |
00195cc8: 000210c0 sll r2,r2,0x03                   |Unit ID*8
00195ccc: 02021021 addu r2,r16,r2                   |
00195cd0: 90421778 lbu r2,0x1778(r2)                |Load Weapon range from  AI Weapon data  801a0b3c + Unit offset (8 bytes)
00195cd4: a2000005 sb r0,0x0005(r16)                |Nullify AoE in AI data
00195cd8: 0806573e j 0x00195cf8                     >>Avoid the not weapon ranged section
00195cdc: a2020004 sb r2,0x0004(r16)                |Store Weapon range 
                                                 #Else : Ability is not weapon ranged                                          
00195ce0: 90620000 lbu r2,0x0000(r3)                |Load Ability range (SCUS)
00195ce4: 00000000 nop                              |
00195ce8: a2020004 sb r2,0x0004(r16)                |Store ability range in AI data
00195cec: 90620001 lbu r2,0x0001(r3)                |Load AoE
00195cf0: 00000000 nop                              |
00195cf4: a2020005 sb r2,0x0005(r16)                |Store AoE
00195cf8: 90620005 lbu r2,0x0005(r3)            |Load Flags 3
00195cfc: 00000000 nop                          |
00195d00: 30420004 andi r2,r2,0x0004            |Check for persevere
00195d04: 1440000f bne r2,r0,0x00195d44         #If persevere flag is OFF
00195d08: 26040007 addiu r4,r16,0x0007          |pointer to AI used ability status infliction 1
00195d0c: 92430092 lbu r3,0x0092(r18)       #E      | Load Unit Support 4
00195d10: 00000000 nop                              |
00195d14: 30620080 andi r2,r3,0x0080                |Check for Monster skill / BUG : Should be 0x08 (short charge)
00195d18: 10400006 beq r2,r0,0x00195d34             #If Unit has Monster skill (Instead of short charge)
00195d1c: 30620040 andi r2,r3,0x0040                |Check for Defend / BUG : Should be 0x04 (Non-Charge)
00195d20: 92020001 lbu r2,0x0001(r16)                   |Load AI used Ability CT
00195d24: 00000000 nop                                  |
00195d28: 00021042 srl r2,r2,0x01                       |CT/2
00195d2c: 08065750 j 0x00195d40                         >>Avoid the intended Non-Charge section 
00195d30: a2020001 sb r2,0x0001(r16)                    |Store New CT
00195d34: 10400003 beq r2,r0,0x00195d44             #Else : if Unit Has Defend (instead of Non-Charge)
00195d38: 26040007 addiu r4,r16,0x0007              |pointer to AI used ability status infliction 1
00195d3c: a2000001 sb r0,0x0001(r16)                    |Nullify Ability CT
00195d40: 26040007 addiu r4,r16,0x0007                  |pointer to AI used ability status infliction 1
00195d44: 00162840 sll r5,r22,0x01          |Inflict status ID * 2 (from item or ability)
00195d48: 00b62821 addu r5,r5,r22           |ID*3
00195d4c: 00052840 sll r5,r5,0x01           |Status ID * 6
00195d50: 3c028006 lui r2,0x8006            |
00195d54: 24423fc5 addiu r2,r2,0x3fc5       |
00195d58: 00a22821 addu r5,r5,r2            |Pointer to Inflicted Status ID 1st set of status
00195d5c: 0c066ad2 jal 0x0019ab48           |-->Transfer_Byte_Values Transfer 5 set of status infliction form SCUS status table to AI used ability data
00195d60: 34060005 ori r6,r0,0x0005         |Limit (5 set of status)
00195d64: 8fbf0030 lw r31,0x0030(r29)       END
00195d68: 8fb7002c lw r23,0x002c(r29)
00195d6c: 8fb60028 lw r22,0x0028(r29)
00195d70: 8fb50024 lw r21,0x0024(r29)
00195d74: 8fb40020 lw r20,0x0020(r29)
00195d78: 8fb3001c lw r19,0x001c(r29)
00195d7c: 8fb20018 lw r18,0x0018(r29)
00195d80: 8fb10014 lw r17,0x0014(r29)
00195d84: 8fb00010 lw r16,0x0010(r29)
00195d88: 27bd0038 addiu r29,r29,0x0038
00195d8c: 03e00008 jr r31
00195d90: 00000000 nop

Notes

Used AI section
 - Fill 0x8019f3c4                 8019f3c4 
 - Load data from 0x801a0b3c       801a0b3c / 8019f3c4 + 0x1778
 - Load data from 0x801a02b4       801a02b4 / 8019f3c4 + 0x0ef0
 - Load ID from 0x801a0d50         801a0d50 / 8019f3c4 + 0x198c
 - Load ID from 0x801a0e2e         801a01f0 / 8019f3c4 + 0x0e2e

Hard-coded mechanics
 - Item invetory : Link between Ability ID and item
 - Katana inventory : Link Between Ability ID and katanas
 - Weapon inventory : shurikens and ball (? to be confirmed)
 - Jump is forced as hostile
 - AoE nullified for Item inventory, default section is ability is weapon ranged, Left to 0x00 for Jump/Charge/Attack
 - Item inventory and weapon inventory direct flag is forced ON
 
BUGS 
 - Throw item is move instead of 4
 - Short CT is not correctly checked (0x80 instead of 0x08)
 - No CT is not correctly checked (0x40 instead of 0x04)

Return location

Battle.bin
00194f80: Set_AI_ability_considerations_for_all_units_and_self
001954c0: Set_AI_ability_considerations_for_all_units_and_self
001972a8: Set_chosen_ability/target_for_AI_status
0019745c: Set_chosen_ability/target_for_AI_status
00197ec8: Chose_Move_from_Move_List?
0019894c: Evaluate_Cancel_Status_Ability_(0019881c)
00198fb0: 00198e60_-_00199058
00199fac: Usable_Ability_Setting/ENTD_AI_Calculations