Difference between revisions of "AI Depth Elemental Monster Skill Use Check (0019b4f4)"
Jump to navigation
Jump to search
(Updated documentation) |
m |
||
(One intermediate revision by the same user not shown) | |||
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, | + | 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, | + | 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) | + | 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) | + | 0019b548: 00001012 mflo r2 | |
− | 0019b564: 00000000 nop | + | 0019b54c: 00441021 addu r2,r2,r4 | |
− | 0019b568: 00021142 srl r2,r2,0x05 | + | 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 | + | 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) | + | 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 | + | 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 | + | 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) | + | 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 | + | 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) | + | 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 | + | 0019b5b4: 00009821 addu r19,r0,r0 | |
− | 0019b5d4: 00000000 nop | + | '''Else : [Monster skill]''' |
− | 0019b5d8: 92020092 lbu r2,0x0092(r16) | + | 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 | + | 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) | + | 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 | + | 0019b5d4: 00000000 nop | |
− | 0019b5fc: 02002021 addu r4,r16,r0 | + | 0019b5d8: 92020092 lbu r2,0x0092(r16) |{{f/load|Load Support 4}} |
− | 0019b600: 0c01786c jal 0x0005e1b0 | + | 0019b5dc: 00000000 nop | |
− | 0019b604: 34050004 ori r5,r0,0x0004 | + | 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) | + | 0019b5ec: 920201ba lbu r2,0x01ba(r16) |{{f/load|load modified ENTD flags}} |
− | 0019b614: 92220000 lbu r2,0x0000(r17) | + | 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 | + | 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) | + | 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) | + | 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 | + | 0019b618: 00000000 nop | |
− | 0019b640: 00831021 addu r2,r4,r3 | + | 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 | + | 0019b624: 00000000 nop | |
− | 0019b64c: 28420002 slti r2,r2,0x0002 | + | 0019b628: 00042023 subu r4,r0,r4 | |
− | 0019b650: 10400007 beq r2,r0,0x0019b670 | + | 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 | + | 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 | + | 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 | + | 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 |
Latest revision as of 12:24, 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