Difference between revisions of "AI Depth Elemental Monster Skill Use Check (0019b4f4)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Updated documentation)
Line 1: Line 1:
  0019b4f4: 3c02801a lui r2,0x801a
+
'''BATTLE.BIN''' :  - AI Depth Elemental Monster Skill Use Check
  0019b4f8: 90420d7d lbu r2,0x0d7d(r2)
+
------------------------------------------------------------------------------------------
  0019b4fc: 27bdffd8 addiu r29,r29,0xffd8
+
Parameter : r4 = Pointer to some coordinates (see return locations)
  0019b500: afb10014 sw r17,0x0014(r29)
+
Return : r2 = 0x01 if considered Ability is usable
  0019b504: 00808821 addu r17,r4,r0
+
          r2 = 0x00 if not usable
  0019b508: afb40020 sw r20,0x0020(r29)
+
------------------------------------------------------------------------------------------
  0019b50c: 3c14801a lui r20,0x801a
+
  0019b4f4: 3c02801a lui r2,0x801a             |
  0019b510: 2694f3c4 addiu r20,r20,0xf3c4
+
  0019b4f8: 90420d7d lbu r2,0x0d7d(r2)         |{{f/load|AI 0x19b7}}
  0019b514: afbf0024 sw r31,0x0024(r29)
+
  0019b4fc: 27bdffd8 addiu r29,r29,-0x0028    |
  0019b518: afb3001c sw r19,0x001c(r29)
+
  0019b500: afb10014 sw r17,0x0014(r29)       |
  0019b51c: afb20018 sw r18,0x0018(r29)
+
  0019b504: 00808821 addu r17,r4,r0           |{{f/adr|Analyzed coordinates pointer}}
  0019b520: 10400015 beq r2,r0,0x0019b578
+
  0019b508: afb40020 sw r20,0x0020(r29)       |
  0019b524: afb00010 sw r16,0x0010(r29)
+
  0019b50c: 3c14801a lui r20,0x801a           |
  0019b528: 92230002 lbu r3,0x0002(r17)
+
  0019b510: 2694f3c4 addiu r20,r20,-0x0c3c    |{{f/adr|0x8019f3c4}}
  0019b52c: 3c02801a lui r2,0x801a
+
  0019b514: afbf0024 sw r31,0x0024(r29)       |
  0019b530: 904201fe lbu r2,0x01fe(r2)         max x
+
  0019b518: afb3001c sw r19,0x001c(r29)       |
  0019b534: 00000000 nop
+
  0019b51c: afb20018 sw r18,0x0018(r29)       |
  0019b538: 00620018 mult r3,r2
+
  0019b520: 10400015 beq r2,r0,0x0019b578     {{f/Cond|If AI 0x19b7 <> 0x00}}
  0019b53c: 92230001 lbu r3,0x0001(r17)
+
  0019b524: afb00010 sw r16,0x0010(r29)           |
  0019b540: 92240000 lbu r4,0x0000(r17)
+
  0019b528: 92230002 lbu r3,0x0002(r17)           |{{f/load|Y coordinates}}
  0019b544: 00031a00 sll r3,r3,0x08
+
  0019b52c: 3c02801a lui r2,0x801a                 |
  0019b548: 00001012 mflo r2
+
  0019b530: 904201fe lbu r2,0x01fe(r2)             |{{f/load|Map Max X}}
  0019b54c: 00441021 addu r2,r2,r4
+
  0019b534: 00000000 nop                           |
  0019b550: 00431021 addu r2,r2,r3
+
  0019b538: 00620018 mult r3,r2                   |
  0019b554: 000210c0 sll r2,r2,0x03
+
  0019b53c: 92230001 lbu r3,0x0001(r17)           |{{f/load|Elevation}}
  0019b558: 3c018019 lui r1,0x8019
+
  0019b540: 92240000 lbu r4,0x0000(r17)           |{{f/load|X coordinates}}
  0019b55c: 00220821 addu r1,r1,r2
+
  0019b544: 00031a00 sll r3,r3,0x08               |{{f/std|Elevation offset}}
  0019b560: 9022f8cf lbu r2,-0x0731(r1) Load Tile Depth
+
  0019b548: 00001012 mflo r2                       |
  0019b564: 00000000 nop
+
  0019b54c: 00441021 addu r2,r2,r4                 |
  0019b568: 00021142 srl r2,r2,0x05 Depth / 20
+
  0019b550: 00431021 addu r2,r2,r3                 |{{f/std|(Y*Max X) + X + Elevation offset}}
  0019b56c: 28420002 slti r2,r2,0x0002
+
  0019b554: 000210c0 sll r2,r2,0x03               |{{f/std|8 bytes per Tiles}}
  0019b570: 10400046 beq r2,r0,0x0019b68c Exit if Tile is Water Depth 2 or greater (Can't act)
+
  0019b558: 3c018019 lui r1,0x8019                 |
  0019b574: 00001021 addu r2,r0,r0
+
  0019b55c: 00220821 addu r1,r1,r2                 |
  0019b578: 92820000 lbu r2,0x0000(r20)
+
  0019b560: 9022f8cf lbu r2,-0x0731(r1)           |{{f/load|Load Tile Depth}} {{f/adr|8018f8cc + Tile Offset + 0x03}}
  0019b57c: 3c018006 lui r1,0x8006
+
  0019b564: 00000000 nop                           |
  0019b580: 00220821 addu r1,r1,r2
+
  0019b568: 00021142 srl r2,r2,0x05               |{{f/std|Keep Depht Only (0x20 -> 0x01)}}
  0019b584: 90235cb4 lbu r3,0x5cb4(r1)       load action menu
+
  0019b56c: 28420002 slti r2,r2,0x0002             |{{f/std|0x1 if Depht < 2}}
  0019b588: 34020004 ori r2,r0,0x0004
+
  0019b570: 10400046 beq r2,r0,0x0019b68c         {{f/Cond|If Depht > 1 then }} {{f/loc|Exit routine}} {{f/Returns|Returns 0x00}}
  0019b58c: 14620005 bne r3,r2,0x0019b5a4     branch if elemental
+
  0019b574: 00001021 addu r2,r0,r0                 |
  0019b590: 3c030800 lui r3,0x0800
+
                                              '''<nowiki>Else  : AI 0x19b7 = 0x00  / Or Depth is OK</nowiki>'''
  0019b594: 0c066dd5 jal 0x0019b754 Check if Elemental can be used
+
  0019b578: 92820000 lbu r2,0x0000(r20)           |{{f/load|Considered Ability's skillset}}
  0019b598: 02202021 addu r4,r17,r0
+
  0019b57c: 3c018006 lui r1,0x8006                 |
  0019b59c: 08066da3 j 0x0019b68c
+
  0019b580: 00220821 addu r1,r1,r2                 |
  0019b5a0: 00000000 nop
+
  0019b584: 90235cb4 lbu r3,0x5cb4(r1)             |{{f/load|Considered Action Menu}}
 
+
  0019b588: 34020004 ori r2,r0,0x0004             |
  0019b5a4: 8e82000c lw r2,0x000c(r20)         load usage type
+
  0019b58c: 14620005 bne r3,r2,0x0019b5a4         {{f/Cond|If Action Menu is [Elements]}}
  0019b5a8: 00000000 nop
+
  0019b590: 3c030800 lui r3,0x0800                     |
  0019b5ac: 00431024 and r2,r2,r3
+
  0019b594: 0c066dd5 jal 0x0019b754                   |{{f/jal|See_if_elemental_ability_can_be_used|See_if_elemental_ability_can_be_used}}
  0019b5b0: 10400035 beq r2,r0,0x0019b688       Exit and return success if skill does not require Monster Skill
+
  0019b598: 02202021 addu r4,r17,r0                   |{{f/std|Send Coordinates}}
  0019b5b4: 00009821 addu r19,r0,r0
+
  0019b59c: 08066da3 j 0x0019b68c                     |{{f/loc|Exit routine}}
  0019b5b8: 00009021 addu r18,r0,r0
+
  0019b5a0: 00000000 nop                                   |
  0019b5bc: 3c028019 lui r2,0x8019
+
                                                  '''Else : NOT [Elements]'''
  0019b5c0: 244208cc addiu r2,r2,0x08cc
+
  0019b5a4: 8e82000c lw r2,0x000c(r20)                 |{{f/load|Ability AI behaviors flags 1 to 4}}
  0019b5c4: 02428021 addu r16,r18,r2
+
  0019b5a8: 00000000 nop                               |
  0019b5c8: 92030001 lbu r3,0x0001(r16) Load Unit ID
+
  0019b5ac: 00431024 and r2,r2,r3                     |
  0019b5cc: 340200ff ori r2,r0,0x00ff
+
  0019b5b0: 10400035 beq r2,r0,0x0019b688             {{f/Cond|If This skill do NOT requires [Monster Skill]}} {{f/loc|Exit routine}} {{f/Returns|Returns 0x01}}
  0019b5d0: 10620027 beq r3,r2,0x0019b670 Branch if Unit doesn't exist
+
  0019b5b4: 00009821 addu r19,r0,r0                   |
  0019b5d4: 00000000 nop
+
                                                      '''Else : [Monster skill]'''
  0019b5d8: 92020092 lbu r2,0x0092(r16) Load Support 4
+
  0019b5b8: 00009021 addu r18,r0,r0                       |{{f/std|Initialize Battle data dynamic offset}}
  0019b5dc: 00000000 nop
+
                                                        {{f/bloop|LOOP - through all units (seek form monster skill support)}}
  0019b5e0: 30420080 andi r2,r2,0x0080
+
  0019b5bc: 3c028019 lui r2,0x8019                             |
  0019b5e4: 10400022 beq r2,r0,0x0019b670         branch if not monster skill
+
  0019b5c0: 244208cc addiu r2,r2,0x08cc                       |
  0019b5e8: 00000000 nop
+
  0019b5c4: 02428021 addu r16,r18,r2                           |{{f/adr|Dynamic pointer to Unit Battle data}}
  0019b5ec: 920201ba lbu r2,0x01ba(r16)           load modified ENTD flags
+
  0019b5c8: 92030001 lbu r3,0x0001(r16)                       |{{f/load|Load Unit ID}}
  0019b5f0: 92830e39 lbu r3,0x0e39(r20)
+
  0019b5cc: 340200ff ori r2,r0,0x00ff                         |
  0019b5f4: 30420030 andi r2,r2,0x0030
+
  0019b5d0: 10620027 beq r3,r2,0x0019b670                     {{f/Cond|If Unit doesn't exist}} {{f/loc|Go to Next Unit}}
  0019b5f8: 1443001d bne r2,r3,0x0019b670         branch if enemy
+
  0019b5d4: 00000000 nop                                       |
  0019b5fc: 02002021 addu r4,r16,r0
+
  0019b5d8: 92020092 lbu r2,0x0092(r16)                       |{{f/load|Load Support 4}}
  0019b600: 0c01786c jal 0x0005e1b0                 status checks
+
  0019b5dc: 00000000 nop                                       |
  0019b604: 34050004 ori r5,r0,0x0004 Check if unit can react
+
  0019b5e0: 30420080 andi r2,r2,0x0080                         |
  0019b608: 14400019 bne r2,r0,0x0019b670
+
  0019b5e4: 10400022 beq r2,r0,0x0019b670                     {{f/Cond|If Unit do not have [Monster Skill]}} {{f/loc|Go to Next Unit}}
  0019b60c: 00000000 nop
+
  0019b5e8: 00000000 nop                                       |
  0019b610: 92030047 lbu r3,0x0047(r16)           Target X
+
  0019b5ec: 920201ba lbu r2,0x01ba(r16)                       |{{f/load|load modified ENTD flags}}
  0019b614: 92220000 lbu r2,0x0000(r17) Caster Y
+
  0019b5f0: 92830e39 lbu r3,0x0e39(r20)                       |
  0019b618: 00000000 nop
+
  0019b5f4: 30420030 andi r2,r2,0x0030                         |
  0019b61c: 00622023 subu r4,r3,r2
+
  0019b5f8: 1443001d bne r2,r3,0x0019b670                     {{f/Cond|If Acting Unit and This Unit are enemies}} {{f/loc|Go to Next Unit}}
  0019b620: 04810002 bgez r4,0x0019b62c Get X Distance
+
  0019b5fc: 02002021 addu r4,r16,r0                           |
  0019b624: 00000000 nop
+
  0019b600: 0c01786c jal 0x0005e1b0                           |{{f/jal|Status_Checks_(r5_%3D_set_to_check)|Status_Checks_(r5_%3D_set_to_check)}}
  0019b628: 00042023 subu r4,r0,r4
+
  0019b604: 34050004 ori r5,r0,0x0004                         |{{f/std|Check if unit can react}}
  0019b62c: 92030048 lbu r3,0x0048(r16)             Target Y
+
  0019b608: 14400019 bne r2,r0,0x0019b670                     {{f/Cond|If This unit is disabled }} {{f/loc|Go to Next Unit}}
  0019b630: 92220002 lbu r2,0x0002(r17) Caster Y
+
  0019b60c: 00000000 nop                                           |
  0019b634: 00000000 nop
+
  0019b610: 92030047 lbu r3,0x0047(r16)                       |{{f/load|Target X}}
  0019b638: 00621823 subu r3,r3,r2
+
  0019b614: 92220000 lbu r2,0x0000(r17)                       |{{f/load|CasterX}}
  0019b63c: 04610003 bgez r3,0x0019b64c Get Y Distance
+
  0019b618: 00000000 nop                                       |
  0019b640: 00831021 addu r2,r4,r3 Get Absolute Distance
+
  0019b61c: 00622023 subu r4,r3,r2                             |{{f/std|Delta X}}
  0019b644: 00031823 subu r3,r0,r3
+
  0019b620: 04810002 bgez r4,0x0019b62c                       {{f/Cond|Make Delta X positive if needed}}
  0019b648: 00831021 addu r2,r4,r3 Get Absolute Distance
+
  0019b624: 00000000 nop                                       |
  0019b64c: 28420002 slti r2,r2,0x0002
+
  0019b628: 00042023 subu r4,r0,r4                             |
  0019b650: 10400007 beq r2,r0,0x0019b670 Branch if out of range of Monster Skill Aura (1 range)
+
  0019b62c: 92030048 lbu r3,0x0048(r16)                       |{{f/load|Target Y}}
  0019b654: 02202021 addu r4,r17,r0
+
  0019b630: 92220002 lbu r2,0x0002(r17)                       |{{f/load|Caster Y}}
  0019b658: 0c066dac jal 0x0019b6b0 Calculate Height difference as well
+
  0019b634: 00000000 nop                                       |
  0019b65c: 02002821 addu r5,r16,r0
+
  0019b638: 00621823 subu r3,r3,r2                             |{{f/std|Delta Y}}
  0019b660: 24420002 addiu r2,r2,0x0002
+
  0019b63c: 04610003 bgez r3,0x0019b64c                       {{f/Cond|Make Delta Y positive if needed}}
  0019b664: 2c420005 sltiu r2,r2,0x0005
+
  0019b640: 00831021 addu r2,r4,r3                             |
  0019b668: 14400008 bne r2,r0,0x0019b68c Select this unit if Height > 4
+
  0019b644: 00031823 subu r3,r0,r3                             |
  0019b66c: 34020001 ori r2,r0,0x0001
+
  0019b648: 00831021 addu r2,r4,r3                             |{{f/std|Get Absolute Distance}}
  0019b670: 26730001 addiu r19,r19,0x0001
+
  0019b64c: 28420002 slti r2,r2,0x0002                         |
  0019b674: 2a620015 slti r2,r19,0x0015
+
  0019b650: 10400007 beq r2,r0,0x0019b670                     {{f/Cond|If Acting Unit is out of this Unit Monster Skill Aura}} {{f/loc|Go to Next Unit}}
  0019b678: 1440ffd0 bne r2,r0,0x0019b5bc                 check if any unit with monster skill is nearby
+
  0019b654: 02202021 addu r4,r17,r0                           |
  0019b67c: 265201c0 addiu r18,r18,0x01c0
+
  0019b658: 0c066dac jal 0x0019b6b0                           |{{f/jal|Calculate_Height_Difference_Between_Units|Calculate_Height_Difference_Between_Units}}
  0019b680: 08066da3 j 0x0019b68c
+
  0019b65c: 02002821 addu r5,r16,r0                           |
  0019b684: 00001021 addu r2,r0,r0
+
  0019b660: 24420002 addiu r2,r2,0x0002                       |{{f/std|Delta Z +2}}
 
+
  0019b664: 2c420005 sltiu r2,r2,0x0005                       |
 +
  0019b668: 14400008 bne r2,r0,0x0019b68c                     {{f/Cond|If Delta Z < 5 : Everything is good !}} {{f/loc|Exit routine}} {{f/Returns|Returns 0x01}}
 +
  0019b66c: 34020001 ori r2,r0,0x0001                         |
 +
  0019b670: 26730001 addiu r19,r19,0x0001                     |{{f/std|Unit counter +1}}
 +
  0019b674: 2a620015 slti r2,r19,0x0015                       |
 +
  0019b678: 1440ffd0 bne r2,r0,0x0019b5bc                 {{f/eloop|Check All Units}}
 +
  0019b67c: 265201c0 addiu r18,r18,0x01c0                     |{{f/std|Battle data offset (0x1c0 eahc iteration)}}
 +
  0019b680: 08066da3 j 0x0019b68c                         |{{f/loc|Exit routine}}
 +
  0019b684: 00001021 addu r2,r0,r0                         |{{f/Returns|Returns 0x00 (Monster skill not usable)}}
 
  0019b688: 34020001 ori r2,r0,0x0001
 
  0019b688: 34020001 ori r2,r0,0x0001
 
  0019b68c: 8fbf0024 lw r31,0x0024(r29)
 
  0019b68c: 8fbf0024 lw r31,0x0024(r29)
Line 112: Line 120:
 
  0019b6a8: 03e00008 jr r31
 
  0019b6a8: 03e00008 jr r31
 
  0019b6ac: 00000000 nop
 
  0019b6ac: 00000000 nop
 +
===Return locations===
 +
'''BATTLE.BIN'''
 +
  00196f38: [[Check_if_map_allows_use_and_find_Highest_Target_(00196ef4)]]  8019f3c4 + 0x0e30
 +
  00196f80: [[Check_if_map_allows_use_and_find_Highest_Target_(00196ef4)]]  8019f3c4 + 0x0018
 +
  0019775c: [[Store_ability/skillset_data,_set_AI_settings_for_ability%3F]]    8019f3c4 + 0x0c74
 +
  0019b470: [[Check_if_any_units_are_in_range_(0019b30c)]]                  8019f3c4 + 0x0e30
 +
  0019ba4c: [[AI_Targeting_Matrix_Analysis_(0019b7b8)]]                      8019f3c4 + 0x0e30
 +
  0019bc2c: [[Math_Skill_Targeting]]                                        8019f3c4 + 0x0e30

Revision as of 12:22, 26 April 2024

BATTLE.BIN :  - AI Depth Elemental Monster Skill Use Check
------------------------------------------------------------------------------------------
Parameter : r4 = Pointer to some coordinates (see return locations)
Return : r2 = 0x01 if considered Ability is usable
         r2 = 0x00 if not usable
------------------------------------------------------------------------------------------
0019b4f4: 3c02801a lui r2,0x801a             |
0019b4f8: 90420d7d lbu r2,0x0d7d(r2)         |AI 0x19b7
0019b4fc: 27bdffd8 addiu r29,r29,-0x0028     |
0019b500: afb10014 sw r17,0x0014(r29)        |
0019b504: 00808821 addu r17,r4,r0            |Analyzed coordinates pointer
0019b508: afb40020 sw r20,0x0020(r29)        |
0019b50c: 3c14801a lui r20,0x801a            |
0019b510: 2694f3c4 addiu r20,r20,-0x0c3c     |0x8019f3c4
0019b514: afbf0024 sw r31,0x0024(r29)        |
0019b518: afb3001c sw r19,0x001c(r29)        |
0019b51c: afb20018 sw r18,0x0018(r29)        |
0019b520: 10400015 beq r2,r0,0x0019b578      #If AI 0x19b7 <> 0x00
0019b524: afb00010 sw r16,0x0010(r29)            |
0019b528: 92230002 lbu r3,0x0002(r17)            |Y coordinates
0019b52c: 3c02801a lui r2,0x801a                 |
0019b530: 904201fe lbu r2,0x01fe(r2)             |Map Max X
0019b534: 00000000 nop                           |
0019b538: 00620018 mult r3,r2                    |
0019b53c: 92230001 lbu r3,0x0001(r17)            |Elevation
0019b540: 92240000 lbu r4,0x0000(r17)            |X coordinates
0019b544: 00031a00 sll r3,r3,0x08                |Elevation offset
0019b548: 00001012 mflo r2                       |
0019b54c: 00441021 addu r2,r2,r4                 |
0019b550: 00431021 addu r2,r2,r3                 |(Y*Max X) + X + Elevation offset
0019b554: 000210c0 sll r2,r2,0x03                |8 bytes per Tiles
0019b558: 3c018019 lui r1,0x8019                 |
0019b55c: 00220821 addu r1,r1,r2                 |
0019b560: 9022f8cf lbu r2,-0x0731(r1)            |Load Tile Depth 8018f8cc + Tile Offset + 0x03
0019b564: 00000000 nop                           |
0019b568: 00021142 srl r2,r2,0x05                |Keep Depht Only (0x20 -> 0x01)
0019b56c: 28420002 slti r2,r2,0x0002             |0x1 if Depht < 2
0019b570: 10400046 beq r2,r0,0x0019b68c          #If Depht > 1 then  Exit routine Returns 0x00
0019b574: 00001021 addu r2,r0,r0                 |
                                             Else  : AI 0x19b7 = 0x00  / Or Depth is OK
0019b578: 92820000 lbu r2,0x0000(r20)            |Considered Ability's skillset
0019b57c: 3c018006 lui r1,0x8006                 |
0019b580: 00220821 addu r1,r1,r2                 |
0019b584: 90235cb4 lbu r3,0x5cb4(r1)             |Considered Action Menu
0019b588: 34020004 ori r2,r0,0x0004              |
0019b58c: 14620005 bne r3,r2,0x0019b5a4          #If Action Menu is [Elements]
0019b590: 3c030800 lui r3,0x0800                     |
0019b594: 0c066dd5 jal 0x0019b754                    |-->See_if_elemental_ability_can_be_used
0019b598: 02202021 addu r4,r17,r0                    |Send Coordinates
0019b59c: 08066da3 j 0x0019b68c                      |Exit routine
0019b5a0: 00000000 nop                                   |
                                                 Else : NOT [Elements]
0019b5a4: 8e82000c lw r2,0x000c(r20)                 |Ability AI behaviors flags 1 to 4
0019b5a8: 00000000 nop                               |
0019b5ac: 00431024 and r2,r2,r3                      |
0019b5b0: 10400035 beq r2,r0,0x0019b688              #If This skill do NOT requires [Monster Skill] Exit routine Returns 0x01
0019b5b4: 00009821 addu r19,r0,r0                    |
                                                     Else : [Monster skill]
0019b5b8: 00009021 addu r18,r0,r0                        |Initialize Battle data dynamic offset
                                                        @LOOP - through all units (seek form monster skill support)
0019b5bc: 3c028019 lui r2,0x8019                             |
0019b5c0: 244208cc addiu r2,r2,0x08cc                        |
0019b5c4: 02428021 addu r16,r18,r2                           |Dynamic pointer to Unit Battle data
0019b5c8: 92030001 lbu r3,0x0001(r16)                        |Load Unit ID
0019b5cc: 340200ff ori r2,r0,0x00ff                          |
0019b5d0: 10620027 beq r3,r2,0x0019b670                      #If Unit doesn't exist Go to Next Unit
0019b5d4: 00000000 nop                                       |
0019b5d8: 92020092 lbu r2,0x0092(r16)                        |Load Support 4
0019b5dc: 00000000 nop                                       |
0019b5e0: 30420080 andi r2,r2,0x0080                         |
0019b5e4: 10400022 beq r2,r0,0x0019b670                      #If Unit do not have [Monster Skill] Go to Next Unit
0019b5e8: 00000000 nop                                       |
0019b5ec: 920201ba lbu r2,0x01ba(r16)                        |load modified ENTD flags
0019b5f0: 92830e39 lbu r3,0x0e39(r20)                        |
0019b5f4: 30420030 andi r2,r2,0x0030                         |
0019b5f8: 1443001d bne r2,r3,0x0019b670                      #If Acting Unit and This Unit are enemies Go to Next Unit
0019b5fc: 02002021 addu r4,r16,r0                            |
0019b600: 0c01786c jal 0x0005e1b0                            |-->Status_Checks_(r5_%3D_set_to_check)
0019b604: 34050004 ori r5,r0,0x0004                          |Check if unit can react
0019b608: 14400019 bne r2,r0,0x0019b670                      #If This unit is disabled  Go to Next Unit
0019b60c: 00000000 nop                                           |
0019b610: 92030047 lbu r3,0x0047(r16)                        |Target X
0019b614: 92220000 lbu r2,0x0000(r17)                        |CasterX
0019b618: 00000000 nop                                       |
0019b61c: 00622023 subu r4,r3,r2                             |Delta X
0019b620: 04810002 bgez r4,0x0019b62c                        #Make Delta X positive if needed
0019b624: 00000000 nop                                       |
0019b628: 00042023 subu r4,r0,r4                             |
0019b62c: 92030048 lbu r3,0x0048(r16)                        |Target Y
0019b630: 92220002 lbu r2,0x0002(r17)                        |Caster Y
0019b634: 00000000 nop                                       |
0019b638: 00621823 subu r3,r3,r2                             |Delta Y
0019b63c: 04610003 bgez r3,0x0019b64c                        #Make Delta Y positive if needed
0019b640: 00831021 addu r2,r4,r3                             |
0019b644: 00031823 subu r3,r0,r3                             |
0019b648: 00831021 addu r2,r4,r3                             |Get Absolute Distance
0019b64c: 28420002 slti r2,r2,0x0002                         |
0019b650: 10400007 beq r2,r0,0x0019b670                      #If Acting Unit is out of this Unit Monster Skill Aura Go to Next Unit
0019b654: 02202021 addu r4,r17,r0                            |
0019b658: 0c066dac jal 0x0019b6b0                            |-->Calculate_Height_Difference_Between_Units
0019b65c: 02002821 addu r5,r16,r0                            |
0019b660: 24420002 addiu r2,r2,0x0002                        |Delta Z +2
0019b664: 2c420005 sltiu r2,r2,0x0005                        |
0019b668: 14400008 bne r2,r0,0x0019b68c                      #If Delta Z < 5 : Everything is good ! Exit routine Returns 0x01
0019b66c: 34020001 ori r2,r0,0x0001                          |
0019b670: 26730001 addiu r19,r19,0x0001                      |Unit counter +1
0019b674: 2a620015 slti r2,r19,0x0015                        |
0019b678: 1440ffd0 bne r2,r0,0x0019b5bc                  Λ Check All Units
0019b67c: 265201c0 addiu r18,r18,0x01c0                      |Battle data offset (0x1c0 eahc iteration)
0019b680: 08066da3 j 0x0019b68c                          |Exit routine
0019b684: 00001021 addu r2,r0,r0                         |Returns 0x00 (Monster skill not usable)
0019b688: 34020001 ori r2,r0,0x0001
0019b68c: 8fbf0024 lw r31,0x0024(r29)
0019b690: 8fb40020 lw r20,0x0020(r29)
0019b694: 8fb3001c lw r19,0x001c(r29)
0019b698: 8fb20018 lw r18,0x0018(r29)
0019b69c: 8fb10014 lw r17,0x0014(r29)
0019b6a0: 8fb00010 lw r16,0x0010(r29)
0019b6a4: 27bd0028 addiu r29,r29,0x0028
0019b6a8: 03e00008 jr r31
0019b6ac: 00000000 nop

Return locations

BATTLE.BIN
 00196f38: Check_if_map_allows_use_and_find_Highest_Target_(00196ef4)   8019f3c4 + 0x0e30
 00196f80: Check_if_map_allows_use_and_find_Highest_Target_(00196ef4)   8019f3c4 + 0x0018
 0019775c: Store_ability/skillset_data,_set_AI_settings_for_ability?    8019f3c4 + 0x0c74
 0019b470: Check_if_any_units_are_in_range_(0019b30c)                   8019f3c4 + 0x0e30
 0019ba4c: AI_Targeting_Matrix_Analysis_(0019b7b8)                      8019f3c4 + 0x0e30
 0019bc2c: Math_Skill_Targeting                                         8019f3c4 + 0x0e30