Difference between revisions of "Calculate Height Difference Between Units"
Jump to navigation
Jump to search
(Created page with " 0019b6b0: 90a20048 lbu r2,0x0048(r5) Load Target's Y 0019b6b4: 3c06801a lui r6,0x801a 0019b6b8: 90c601fe lbu r6,0x01fe(r6) Load Map Max X 0019b6bc: 00000000 nop 0019b6...") |
m |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | BATTLE.BIN : Calculate Height Difference Between Units | |
− | 0019b6b0: 90a20048 lbu r2,0x0048(r5) | + | ------------------------------------------------------------------------------------------ |
− | 0019b6b4: 3c06801a lui r6,0x801a | + | Parameters : r4 = Acting unit data pointer |
− | 0019b6b8: 90c601fe lbu r6,0x01fe(r6) | + | r5 = Target Unit data pointer |
− | 0019b6bc: 00000000 nop | + | |
− | 0019b6c0: 00460018 mult r2,r6 | + | Returns : r2 = (Target Height - Acting unit Height)/2 - down rounded |
− | 0019b6c4: 00003812 mflo r7 | + | |
− | 0019b6c8: 90830002 lbu r3,0x0002(r4) | + | ----------------------------------------------------------------------------------------- |
− | 0019b6cc: 94a20048 lhu r2,0x0048(r5) | + | 0019b6b0: 90a20048 lbu r2,0x0048(r5) |{{f/load|Load Target's Y}} |
− | 0019b6d0: 00660018 mult r3,r6 | + | 0019b6b4: 3c06801a lui r6,0x801a | |
− | 0019b6d4: 000213c2 srl r2,r2,0x0f | + | 0019b6b8: 90c601fe lbu r6,0x01fe(r6) |{{f/load|Load Map Max X (AI data)}} {{f/load|801a01fe}} |
− | 0019b6d8: 00021200 sll r2,r2,0x08 | + | 0019b6bc: 00000000 nop | |
− | 0019b6dc: 00471021 addu r2,r2,r7 | + | 0019b6c0: 00460018 mult r2,r6 | |
− | 0019b6e0: 90a30047 lbu r3,0x0047(r5) | + | 0019b6c4: 00003812 mflo r7 |{{f/std|Target Y * Max X}} |
− | 0019b6e4: 3c058019 lui r5,0x8019 | + | 0019b6c8: 90830002 lbu r3,0x0002(r4) |{{f/load|Load Acting Unit's Y}} |
− | 0019b6e8: 24a5f8cc addiu r5,r5, | + | 0019b6cc: 94a20048 lhu r2,0x0048(r5) |{{f/load|Load Target's Y + Map Level}} |
− | 0019b6ec: 00431021 addu r2,r2,r3 | + | 0019b6d0: 00660018 mult r3,r6 | |
− | 0019b6f0: 000210c0 sll r2,r2,0x03 | + | 0019b6d4: 000213c2 srl r2,r2,0x0f |{{f/std|Elevation flag}} |
− | 0019b6f4: 00453021 addu r6,r2,r5 | + | 0019b6d8: 00021200 sll r2,r2,0x08 |{{f/std|Elevation * 256 (Offset of elevated tiles)}} |
− | 0019b6f8: 90830001 lbu r3,0x0001(r4) | + | 0019b6dc: 00471021 addu r2,r2,r7 |{{f/std|TY * Max X + Map Level * 256}} |
− | 0019b6fc: 90840000 lbu r4,0x0000(r4) | + | 0019b6e0: 90a30047 lbu r3,0x0047(r5) |{{f/load|Load Target's X}} |
− | 0019b700: 00031a00 sll r3,r3,0x08 | + | 0019b6e4: 3c058019 lui r5,0x8019 | |
− | 0019b704: 00001012 mflo r2 | + | 0019b6e8: 24a5f8cc addiu r5,r5,-0x0734 |{{f/load|Start of Tiles data pointer}} {{f/std| 8018f8cc}} |
− | 0019b708: 00621821 addu r3,r3,r2 | + | 0019b6ec: 00431021 addu r2,r2,r3 |{{f/std|Tile ID }} {{f/std| (Y coord * Max X) + X coord + (Elevation * 100)}} |
− | 0019b70c: 00641821 addu r3,r3,r4 | + | 0019b6f0: 000210c0 sll r2,r2,0x03 |{{f/std|Tile ID * 8 (offset in Tiles data)}} |
− | 0019b710: 000318c0 sll r3,r3,0x03 | + | 0019b6f4: 00453021 addu r6,r2,r5 |{{f/adr|Target's Tile data pointer}} |
− | 0019b714: 90c20002 lbu r2,0x0002(r6) | + | 0019b6f8: 90830001 lbu r3,0x0001(r4) |{{f/load|Load Acting Unit's Elevation}} |
− | 0019b718: 90c40003 lbu r4,0x0003(r6) | + | 0019b6fc: 90840000 lbu r4,0x0000(r4) |{{f/load|Load Acting Unit's X}} |
− | 0019b71c: 00653021 addu r6,r3,r5 | + | 0019b700: 00031a00 sll r3,r3,0x08 | |
− | 0019b720: 90c30003 lbu r3,0x0003(r6) | + | 0019b704: 00001012 mflo r2 |{{f/std|Acting Unit Y* Max X}} |
− | 0019b724: 00021040 sll r2,r2,0x01 | + | 0019b708: 00621821 addu r3,r3,r2 | |
− | 0019b728: 3084001f andi r4,r4,0x001f | + | 0019b70c: 00641821 addu r3,r3,r4 |{{f/std|Acting unit tile ID}} {{f/std| (Y coord * Max X) + X coord + (Elevation * 100)}} |
− | 0019b72c: 00441021 addu r2,r2,r4 | + | 0019b710: 000318c0 sll r3,r3,0x03 |{{f/std|ID * 8}} |
− | 0019b730: 90c40002 lbu r4,0x0002(r6) | + | 0019b714: 90c20002 lbu r2,0x0002(r6) |{{f/load|Load Target's Tile Height}} |
− | 0019b734: 3063001f andi r3,r3,0x001f | + | 0019b718: 90c40003 lbu r4,0x0003(r6) |{{f/load|Load Target's Tile Halves + Depth}} |
− | 0019b738: 00042040 sll r4,r4,0x01 | + | 0019b71c: 00653021 addu r6,r3,r5 |{{f/adr|<nowiki>r6 = Acting Unit's Tile data pointer</nowiki>}} |
− | 0019b73c: 00832021 addu r4,r4,r3 | + | 0019b720: 90c30003 lbu r3,0x0003(r6) |{{f/load|Load Acting Unit's Tile Halves + Depth}} |
− | 0019b740: 00441023 subu r2,r2,r4 | + | 0019b724: 00021040 sll r2,r2,0x01 |{{f/std|Target Height * 2}} |
− | 0019b744: 00021fc2 srl r3,r2,0x1f | + | 0019b728: 3084001f andi r4,r4,0x001f |{{f/std|Target Halves only}} |
− | 0019b748: 00431021 addu r2,r2,r3 | + | 0019b72c: 00441021 addu r2,r2,r4 |{{f/std|Target Total Height }} {{f/std| Height * 2 + Halves}} |
− | 0019b74c: 03e00008 jr r31 | + | 0019b730: 90c40002 lbu r4,0x0002(r6) |{{f/load|Load Acting Unit's Tile Height}} |
− | 0019b750: 00021043 sra r2,r2,0x01 | + | 0019b734: 3063001f andi r3,r3,0x001f |{{f/std|Actor Halves }} |
+ | 0019b738: 00042040 sll r4,r4,0x01 |{{f/std|Actor height * 2}} | ||
+ | 0019b73c: 00832021 addu r4,r4,r3 |{{f/std|Actor total height}} | ||
+ | 0019b740: 00441023 subu r2,r2,r4 |{{f/std|Delta Height}} | ||
+ | 0019b744: 00021fc2 srl r3,r2,0x1f |{{f/std|1 if negative value}} | ||
+ | 0019b748: 00431021 addu r2,r2,r3 |{{f/std|Add 1 if Target is below Actor --> delta height is rounded down in all cases}} | ||
+ | 0019b74c: 03e00008 jr r31 | | ||
+ | 0019b750: 00021043 sra r2,r2,0x01 |{{f/std|Height Difference / 2}} | ||
+ | ===Return Locations=== | ||
+ | '''BATTLE.BIN''' | ||
+ | 00199280: [[Calculate_Physical%3F_Target]] | ||
+ | 0019b660: [[AI_Depth_Elemental_Monster_Skill_Use_Check_(0019b4f4)]] |
Latest revision as of 12:48, 6 May 2023
BATTLE.BIN : Calculate Height Difference Between Units ------------------------------------------------------------------------------------------ Parameters : r4 = Acting unit data pointer r5 = Target Unit data pointer Returns : r2 = (Target Height - Acting unit Height)/2 - down rounded ----------------------------------------------------------------------------------------- 0019b6b0: 90a20048 lbu r2,0x0048(r5) |Load Target's Y 0019b6b4: 3c06801a lui r6,0x801a | 0019b6b8: 90c601fe lbu r6,0x01fe(r6) |Load Map Max X (AI data) 801a01fe 0019b6bc: 00000000 nop | 0019b6c0: 00460018 mult r2,r6 | 0019b6c4: 00003812 mflo r7 |Target Y * Max X 0019b6c8: 90830002 lbu r3,0x0002(r4) |Load Acting Unit's Y 0019b6cc: 94a20048 lhu r2,0x0048(r5) |Load Target's Y + Map Level 0019b6d0: 00660018 mult r3,r6 | 0019b6d4: 000213c2 srl r2,r2,0x0f |Elevation flag 0019b6d8: 00021200 sll r2,r2,0x08 |Elevation * 256 (Offset of elevated tiles) 0019b6dc: 00471021 addu r2,r2,r7 |TY * Max X + Map Level * 256 0019b6e0: 90a30047 lbu r3,0x0047(r5) |Load Target's X 0019b6e4: 3c058019 lui r5,0x8019 | 0019b6e8: 24a5f8cc addiu r5,r5,-0x0734 |Start of Tiles data pointer 8018f8cc 0019b6ec: 00431021 addu r2,r2,r3 |Tile ID (Y coord * Max X) + X coord + (Elevation * 100) 0019b6f0: 000210c0 sll r2,r2,0x03 |Tile ID * 8 (offset in Tiles data) 0019b6f4: 00453021 addu r6,r2,r5 |Target's Tile data pointer 0019b6f8: 90830001 lbu r3,0x0001(r4) |Load Acting Unit's Elevation 0019b6fc: 90840000 lbu r4,0x0000(r4) |Load Acting Unit's X 0019b700: 00031a00 sll r3,r3,0x08 | 0019b704: 00001012 mflo r2 |Acting Unit Y* Max X 0019b708: 00621821 addu r3,r3,r2 | 0019b70c: 00641821 addu r3,r3,r4 |Acting unit tile ID (Y coord * Max X) + X coord + (Elevation * 100) 0019b710: 000318c0 sll r3,r3,0x03 |ID * 8 0019b714: 90c20002 lbu r2,0x0002(r6) |Load Target's Tile Height 0019b718: 90c40003 lbu r4,0x0003(r6) |Load Target's Tile Halves + Depth 0019b71c: 00653021 addu r6,r3,r5 |r6 = Acting Unit's Tile data pointer 0019b720: 90c30003 lbu r3,0x0003(r6) |Load Acting Unit's Tile Halves + Depth 0019b724: 00021040 sll r2,r2,0x01 |Target Height * 2 0019b728: 3084001f andi r4,r4,0x001f |Target Halves only 0019b72c: 00441021 addu r2,r2,r4 |Target Total Height Height * 2 + Halves 0019b730: 90c40002 lbu r4,0x0002(r6) |Load Acting Unit's Tile Height 0019b734: 3063001f andi r3,r3,0x001f |Actor Halves 0019b738: 00042040 sll r4,r4,0x01 |Actor height * 2 0019b73c: 00832021 addu r4,r4,r3 |Actor total height 0019b740: 00441023 subu r2,r2,r4 |Delta Height 0019b744: 00021fc2 srl r3,r2,0x1f |1 if negative value 0019b748: 00431021 addu r2,r2,r3 |Add 1 if Target is below Actor --> delta height is rounded down in all cases 0019b74c: 03e00008 jr r31 | 0019b750: 00021043 sra r2,r2,0x01 |Height Difference / 2
Return Locations
BATTLE.BIN 00199280: Calculate_Physical?_Target 0019b660: AI_Depth_Elemental_Monster_Skill_Use_Check_(0019b4f4)