Difference between revisions of "Check Horizontal Jump option"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with "<font face='Courier New'> 0017622c: 0080c021 addu r24,r4,r0 00176230: 340d007f ori r13,r0,0x007f 00176234: 00006021 addu r12,r0,r0 00176238: 3c0f8019 lui r15,0x8019 001...")
 
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
BATTLE.BIN : Check Horizontal Jump option
 +
----------------------------------------------------------------
 +
Parameters : r4 : Destination Tile ID (X-Y) without elevation
 +
              r5 : Origin exit side slope type (Opposite destination side slope type)
 +
              r6 : Destination Entry side slope type
 +
              r7 : Origin Exit side Height
 +
 
 +
Returns r2 = 0x00 if Jump is possible
 +
        r2 = 0x01 if Acting Unit cannot jump above destination (tile/unit in the way)
 
   
 
   
  0017622c: 0080c021 addu r24,r4,r0
+
  Note : Im' sick of these tedious height check. I don't get the details (and <span style=color:red>'''notes might be inaccurate'''</span>)
00176230: 340d007f ori r13,r0,0x007f
+
        But with the context of the calling routine. I assume this routine checks Horizontal Jumpability.
  00176234: 00006021 addu r12,r0,r0
+
        Loop 4 Times : both elevation - Empty / Occupied Tile
00176238: 3c0f8019 lui r15,0x8019
+
  ------------------------------------------------------------------------------------------------------------
0017623c: 8deff4f0 lw r15,-0x0b10(r15)
+
  0017622c: 0080c021 addu r24,r4,r0          |
00176240: 3c098019 lui r9,0x8019
+
  00176230: 340d007f ori r13,r0,0x007f        |
00176244: 8d29f4e4 lw r9,-0x0b1c(r9)
+
  00176234: 00006021 addu r12,r0,r0          |{{f/std|Initialize counter}}
00176248: 3c028019 lui r2,0x8019
+
  00176238: 3c0f8019 lui r15,0x8019           |
0017624c: 8c42f4e0 lw r2,-0x0b20(r2)
+
  0017623c: 8deff4f0 lw r15,-0x0b10(r15)      |{{f/adr|Pointer to Scratch Pad (0x1f800200)}}
00176250: 3c0e8019 lui r14,0x8019
+
  00176240: 3c098019 lui r9,0x8019            |
00176254: 8dcef4e8 lw r14,-0x0b18(r14)
+
  00176244: 8d29f4e4 lw r9,-0x0b1c(r9)        |{{f/adr|Pointer to Scratch Pad (0x1f800180)}}
00176258: 9042001b lbu r2,0x001b(r2)
+
  00176248: 3c028019 lui r2,0x8019            |
0017625c: 30eb00ff andi r11,r7,0x00ff
+
  0017624c: 8c42f4e0 lw r2,-0x0b20(r2)        |{{f/adr|Pointer to Scratch Pad (0x1f800000)}}
00176260: a1220053 sb r2,0x0053(r9)
+
  00176250: 3c0e8019 lui r14,0x8019          |
00176264: 000c17c2 srl r2,r12,0x1f
+
00176254: 8dcef4e8 lw r14,-0x0b18(r14)      |{{f/adr|Poiter to Other units Scratchpad ( 0x1f800080 )}}
00176268: 01821021 addu r2,r12,r2
+
00176258: 9042001b lbu r2,0x001b(r2)       |{{f/load|Acting Unit Size}}
0017626c: 00021043 sra r2,r2,0x01
+
  0017625c: 30eb00ff andi r11,r7,0x00ff      |
  00176270: 00021200 sll r2,r2,0x08
+
  00176260: a1220053 sb r2,0x0053(r9)        |{{f/store|Store acting unit size}}
  00176274: 00582021 addu r4,r2,r24
+
                                            {{f/bloop|LOOP - 4 Times}}
  00176278: 000418c0 sll r3,r4,0x03
+
  00176264: 000c17c2 srl r2,r12,0x1f              |
  0017627c: 3c028019 lui r2,0x8019
+
  00176268: 01821021 addu r2,r12,r2              |
  00176280: 2442f8cc addiu r2,r2,0xf8cc
+
  0017626c: 00021043 sra r2,r2,0x01              |{{f/std|Counter/2}}
  00176284: 00624021 addu r8,r3,r2
+
  00176270: 00021200 sll r2,r2,0x08              |{{f/std|Elevation Offset (0 / 0 / 0x100 / 0x100)}}
  00176288: 31820001 andi r2,r12,0x0001
+
  00176274: 00582021 addu r4,r2,r24              |{{f/std|Tile ID}} {{f/std| 2 times low elevation, 2 times high elevation}}
  0017628c: 1040002b beq r2,r0,0x0017633c
+
  00176278: 000418c0 sll r3,r4,0x03              |{{f/std|Tile ID * 8}}
  00176290: 01e41021 addu r2,r15,r4
+
  0017627c: 3c028019 lui r2,0x8019                |
  00176294: 90420000 lbu r2,0x0000(r2)
+
  00176280: 2442f8cc addiu r2,r2,-0x0734          |
  00176298: 34030004 ori r3,r0,0x0004
+
  00176284: 00624021 addu r8,r3,r2                |{{f/adr|Pointer : This iteration Tile data (8018f8cc)}}
  0017629c: 3042000c andi r2,r2,0x000c
+
  00176288: 31820001 andi r2,r12,0x0001          |{{f/std|Uneven counter flag}}
  001762a0: 14430082 bne r2,r3,0x001764ac
+
  0017628c: 1040002b beq r2,r0,0x0017633c        {{f/Cond|If 2nd Loop on Low or High Elevation}}
  001762a4: 00041080 sll r2,r4,0x02
+
  00176290: 01e41021 addu r2,r15,r4              |{{f/adr|Pointer to this Tile S-Pad 0x200 data}}
  001762a8: 00441021 addu r2,r2,r4
+
  00176294: 90420000 lbu r2,0x0000(r2)               |{{f/load|Load Tile Flag}}
  001762ac: 3c018019 lui r1,0x8019
+
  00176298: 34030004 ori r3,r0,0x0004                |
  001762b0: 00220821 addu r1,r1,r2
+
  0017629c: 3042000c andi r2,r2,0x000c                |{{f/std|Keep only 0x08 and 0x04}}
  001762b4: 90222dda lbu r2,0x2dda(r1)
+
  001762a0: 14430082 bne r2,r3,0x001764ac             {{f/Cond|If Flags 0x08 and 0x04 are ON /Else branch to}} {{f/loc| Next iteration }} {{f/std|Ally Unit with stepping stone }}
  001762b8: 00000000 nop
+
  001762a4: 00041080 sll r2,r4,0x02                      |
  001762bc: a1220050 sb r2,0x0050(r9)
+
  001762a8: 00441021 addu r2,r2,r4                        |{{f/std|Tile ID * 5}}
  001762c0: 91230050 lbu r3,0x0050(r9)
+
  001762ac: 3c018019 lui r1,0x8019                        |
  001762c4: 00000000 nop
+
  001762b0: 00220821 addu r1,r1,r2                        |{{f/adr|Part of Pointer to Grid Data}}
001762c8: 000310c0 sll r2,r3,0x03
+
  001762b4: 90222dda lbu r2,0x2dda(r1)                    |{{f/load|Grid 0x02 - ID of unit on tile}}
  001762cc: 00431023 subu r2,r2,r3
+
  001762b8: 00000000 nop                                 |
  001762d0: 004e1821 addu r3,r2,r14
+
  001762bc: a1220050 sb r2,0x0050(r9)                     |{{f/store|Store Unit ID}}
  001762d4: 90620003 lbu r2,0x0003(r3)
+
  001762c0: 91230050 lbu r3,0x0050(r9)                    |{{f/load|Unit ID}}
  001762d8: 00000000 nop
+
001762c4: 00000000 nop                                 |
  001762dc: 30420040 andi r2,r2,0x0040
+
  001762c8: 000310c0 sll r2,r3,0x03                      |
  001762e0: 10400072 beq r2,r0,0x001764ac
+
  001762cc: 00431023 subu r2,r2,r3                       |{{f/std|Id *7}}
  001762e4: 00000000 nop
+
  001762d0: 004e1821 addu r3,r2,r14                      |{{f/adr|Pointer : Destination Unit data in S-Pad 0x80}}
001762e8: 90640005 lbu r4,0x0005(r3)
+
  001762d4: 90620003 lbu r2,0x0003(r3)                    |{{f/load|Unit Flag + ID}}
  001762ec: 00000000 nop
+
  001762d8: 00000000 nop                                 |
  001762f0: 24880003 addiu r8,r4,0x0003
+
  001762dc: 30420040 andi r2,r2,0x0040                    |
  001762f4: 310300ff andi r3,r8,0x00ff
+
  001762e0: 10400072 beq r2,r0,0x001764ac                {{f/Cond|If Unit is  an Ally / Else branch to}} {{f/loc| Next iteration }}
  001762f8: 0163102b sltu r2,r11,r3
+
  001762e4: 00000000 nop                                      |
  001762fc: 10400007 beq r2,r0,0x0017631c
+
  001762e8: 90640005 lbu r4,0x0005(r3)                       |{{f/load|Destination Unit Height}}
00176300: 00000000 nop
+
  001762ec: 00000000 nop                                      |
  00176304: 91220053 lbu r2,0x0053(r9)
+
  001762f0: 24880003 addiu r8,r4,0x0003                      |{{f/std|Unit Height + 3}}
  00176308: 00000000 nop
+
  001762f4: 310300ff andi r3,r8,0x00ff                        |
  0017630c: 01621021 addu r2,r11,r2
+
001762f8: 0163102b sltu r2,r11,r3                          |
  00176310: 0062102a slt r2,r3,r2
+
001762fc: 10400007 beq r2,r0,0x0017631c                    {{f/Cond|If Origin Height < Unit Height + 3}}
  00176314: 1440006e bne r2,r0,0x001764d0
+
00176300: 00000000 nop                                          |
  00176318: 34020001 ori r2,r0,0x0001
+
00176304: 91220053 lbu r2,0x0053(r9)                            |{{f/load|Acting Unit Size}}
  0017631c: 91230050 lbu r3,0x0050(r9)
+
00176308: 00000000 nop                                          |
00176320: 00000000 nop
+
0017630c: 01621021 addu r2,r11,r2                              |{{f/std|Origin + Acting unit size}}
  00176324: 000310c0 sll r2,r3,0x03
+
00176310: 0062102a slt r2,r3,r2                                |{{f/std|1 UH+3 < O+AUS}}
  00176328: 00431023 subu r2,r2,r3
+
00176314: 1440006e bne r2,r0,0x001764d0                        {{f/Cond|If Destination Unit Height + 3 < Origin Height + Unit size : branch to}} {{f/loc| End - returns 0x01}}
  0017632c: 004e1021 addu r2,r2,r14
+
00176318: 34020001 ori r2,r0,0x0001                                |
  00176330: 90480006 lbu r8,0x0006(r2)
+
0017631c: 91230050 lbu r3,0x0050(r9)                        |{{f/load|Unit ID}}
  00176334: 0805d90a j 0x00176428
+
00176320: 00000000 nop                                      |
  00176338: 308300ff andi r3,r4,0x00ff
+
00176324: 000310c0 sll r2,r3,0x03                          |
  0017633c: 90430000 lbu r3,0x0000(r2)
+
00176328: 00431023 subu r2,r2,r3                            |{{f/std|ID*7}}
  00176340: 00000000 nop
+
0017632c: 004e1021 addu r2,r2,r14                          |{{f/adr|Pointer : Destination Unit data in S-Pad 0x80}}
  00176344: 30620080 andi r2,r3,0x0080
+
00176330: 90480006 lbu r8,0x0006(r2)                        |{{f/load|Destination Unit Height + Size}}
  00176348: 10400005 beq r2,r0,0x00176360
+
00176334: 0805d90a j 0x00176428                            {{f/jump|Jump to check some height data (Lower height is Tile height, Higher is Unit Height)}}
  0017634c: 30620004 andi r2,r3,0x0004
+
00176338: 308300ff andi r3,r4,0x00ff                        |{{f/std|Destination Unit Height}}
  00176350: 10400056 beq r2,r0,0x001764ac
+
                                                '''Else : 1st Loop on Low/High elevation Tile'''
  00176354: 34020001 ori r2,r0,0x0001
+
0017633c: 90430000 lbu r3,0x0000(r2)                |{{f/load|Tile's flags}}
  00176358: 0805d934 j 0x001764d0
+
00176340: 00000000 nop                              |
  0017635c: 00000000 nop
+
00176344: 30620080 andi r2,r3,0x0080                |
  00176360: 91020002 lbu r2,0x0002(r8)
+
00176348: 10400005 beq r2,r0,0x00176360            {{f/Cond|If Tile is Unselectable}}
  00176364: 00000000 nop
+
0017634c: 30620004 andi r2,r3,0x0004                    |
  00176368: 00021040 sll r2,r2,0x01
+
00176350: 10400056 beq r2,r0,0x001764ac                {{f/Cond|If Archangel is on Tile / Else branch to}} {{f/loc| Next iteration }} {{f/std| 0x04 is Unit on Tile - Archangel enables 0x80}}
  0017636c: a1220050 sb r2,0x0050(r9)
+
00176354: 34020001 ori r2,r0,0x0001                        |
  00176370: 91020003 lbu r2,0x0003(r8)
+
00176358: 0805d934 j 0x001764d0                            {{f/jump|Jump to }} {{f/loc| End - returns 0x01}}
  00176374: 00000000 nop
+
  0017635c: 00000000 nop                                     |
  00176378: 3042001f andi r2,r2,0x001f
+
                                                    '''Else : Tile is Selectable'''
  0017637c: a1220051 sb r2,0x0051(r9)
+
  00176360: 91020002 lbu r2,0x0002(r8)                    |{{f/load|Tile Height}}
00176380: 91020004 lbu r2,0x0004(r8)
+
  00176364: 00000000 nop                                  |
  00176384: 00000000 nop
+
  00176368: 00021040 sll r2,r2,0x01                      |
  00176388: a1220052 sb r2,0x0052(r9)
+
  0017636c: a1220050 sb r2,0x0050(r9)                    |{{f/store|Store Destination Height * 2}}
  0017638c: 91230052 lbu r3,0x0052(r9)
+
  00176370: 91020003 lbu r2,0x0003(r8)                    |{{f/load|Tile Halves + Depth}}
  00176390: 91240051 lbu r4,0x0051(r9)
+
  00176374: 00000000 nop                                  |
  00176394: 00a31007 srav r2,r3,r5
+
  00176378: 3042001f andi r2,r2,0x001f                    |
  00176398: 30420003 andi r2,r2,0x0003
+
  0017637c: a1220051 sb r2,0x0051(r9)                     |{{f/store|Store Destination Halves}}
  0017639c: 00820018 mult r4,r2
+
  00176380: 91020004 lbu r2,0x0004(r8)                    |{{f/load|Destination Slope Type}}
  001763a0: 00001012 mflo r2
+
  00176384: 00000000 nop                                  |
  001763a4: 00c31807 srav r3,r3,r6
+
  00176388: a1220052 sb r2,0x0052(r9)                     |{{f/store|Store Destination Slope Type}}
  001763a8: 30630003 andi r3,r3,0x0003
+
  0017638c: 91230052 lbu r3,0x0052(r9)                   |{{f/load|Destination Slope Type}}
  001763ac: 00830018 mult r4,r3
+
  00176390: 91240051 lbu r4,0x0051(r9)                    |{{f/load|Destination Halves}}
  001763b0: 91230050 lbu r3,0x0050(r9)
+
  00176394: 00a31007 srav r2,r3,r5                        |{{f/std|Opposite Side Slope}}
  001763b4: 00000000 nop
+
  00176398: 30420003 andi r2,r2,0x0003                    |
  001763b8: 00625021 addu r10,r3,r2
+
  0017639c: 00820018 mult r4,r2                          |
  001763bc: 00001012 mflo r2
+
  001763a0: 00001012 mflo r2                             |{{f/std|Destination opposite Side Slope height}}
  001763c0: 00622021 addu r4,r3,r2
+
  001763a4: 00c31807 srav r3,r3,r6                        |{{f/std|Destination Entry side Slope}}
  001763c4: 314300ff andi r3,r10,0x00ff
+
  001763a8: 30630003 andi r3,r3,0x0003                    |
  001763c8: 308200ff andi r2,r4,0x00ff
+
  001763ac: 00830018 mult r4,r3                           |
  001763cc: 0043102b sltu r2,r2,r3
+
  001763b0: 91230050 lbu r3,0x0050(r9)                    |
  001763d0: 1040000c beq r2,r0,0x00176404
+
  001763b4: 00000000 nop                                  |
  001763d4: 00000000 nop
+
001763b8: 00625021 addu r10,r3,r2                       |{{f/std|Destination opposite side Height}}
  001763d8: 91020005 lbu r2,0x0005(r8)
+
  001763bc: 00001012 mflo r2                             |{{f/std|Destination entry Side Slope height}}
  001763dc: 91030003 lbu r3,0x0003(r8)
+
  001763c0: 00622021 addu r4,r3,r2                        |{{f/std|Destination entry side Height}}
  001763e0: 3042001f andi r2,r2,0x001f
+
  001763c4: 314300ff andi r3,r10,0x00ff                  |{{f/std|Opposite side}}
  001763e4: 00021040 sll r2,r2,0x01
+
  001763c8: 308200ff andi r2,r4,0x00ff                    |{{f/std|Entry side}}
  001763e8: 00824023 subu r8,r4,r2
+
  001763cc: 0043102b sltu r2,r2,r3                        |
  001763ec: 00031942 srl r3,r3,0x05
+
001763d0: 1040000c beq r2,r0,0x00176404                {{f/Cond|If Entry Side is below Opposite side}}
  001763f0: 00031840 sll r3,r3,0x01
+
  001763d4: 00000000 nop                                     |
  001763f4: a1280050 sb r8,0x0050(r9)
+
  001763d8: 91020005 lbu r2,0x0005(r8)                        |{{f/load|Destination 0x05}}
  001763f8: 91240050 lbu r4,0x0050(r9)
+
001763dc: 91030003 lbu r3,0x0003(r8)                        |{{f/load|Destination Halves + Depth}}
  001763fc: 0805d909 j 0x00176424
+
  001763e0: 3042001f andi r2,r2,0x001f                        |
  00176400: 01434021 addu r8,r10,r3
+
  001763e4: 00021040 sll r2,r2,0x01                          |{{f/std|Thickness * 2}}
  00176404: 91020003 lbu r2,0x0003(r8)
+
001763e8: 00824023 subu r8,r4,r2                           |{{f/std|Entry height - Thickness}} {{f/std| Lower - Thickness}}
  00176408: 91030005 lbu r3,0x0005(r8)
+
  001763ec: 00031942 srl r3,r3,0x05                          |{{f/std|Depth}}
  0017640c: 00021142 srl r2,r2,0x05
+
  001763f0: 00031840 sll r3,r3,0x01                          |{{f/std|Depth * 2}}
  00176410: 00021040 sll r2,r2,0x01
+
  001763f4: a1280050 sb r8,0x0050(r9)                        |{{f/store|Store Ceiling Height}}
  00176414: 00824021 addu r8,r4,r2
+
  001763f8: 91240050 lbu r4,0x0050(r9)                        |{{f/load|Load Ceiling}}
  00176418: 3063001f andi r3,r3,0x001f
+
  001763fc: 0805d909 j 0x00176424                            |
  0017641c: 00031840 sll r3,r3,0x01
+
  00176400: 01434021 addu r8,r10,r3                          |{{f/std|Opposite Side + depth}} {{f/std| Higher + depth}}
  00176420: 01432023 subu r4,r10,r3
+
  00176424: 308300ff andi r3,r4,0x00ff
+
00176404: 91020003 lbu r2,0x0003(r8)                       |{{f/load|Destination Halves + Depth}}
  00176428: 31a200ff andi r2,r13,0x00ff
+
  00176408: 91030005 lbu r3,0x0005(r8)                       |{{f/load|Destination 0x05}}
  0017642c: 0062102b sltu r2,r3,r2
+
  0017640c: 00021142 srl r2,r2,0x05                          |
  00176430: 10400002 beq r2,r0,0x0017643c
+
  00176410: 00021040 sll r2,r2,0x01                           |{{f/std|Depth*2}}
  00176434: 0163102b sltu r2,r11,r3
+
  00176414: 00824021 addu r8,r4,r2                           |{{f/std|Entry height + depth}}
  00176438: 00806821 addu r13,r4,r0
+
  00176418: 3063001f andi r3,r3,0x001f                        |
  0017643c: 10400007 beq r2,r0,0x0017645c
+
  0017641c: 00031840 sll r3,r3,0x01                           |{{f/std|Thickness * 2}}
  00176440: 00000000 nop
+
  00176420: 01432023 subu r4,r10,r3                          |{{f/std|Opposite Height - Thickness}}
00176444: 91220053 lbu r2,0x0053(r9)
+
  00176424: 308300ff andi r3,r4,0x00ff                    |{{f/std|Ceiling}}
  00176448: 00000000 nop
+
  {{f/sec|--- 2nd section jump here }}
  0017644c: 01621021 addu r2,r11,r2
+
  00176428: 31a200ff andi r2,r13,0x00ff                  |{{f/std|0x7f}}
  00176450: 0062102a slt r2,r3,r2
+
  0017642c: 0062102b sltu r2,r3,r2                        |
  00176454: 1440001e bne r2,r0,0x001764d0
+
  00176430: 10400002 beq r2,r0,0x0017643c                {{f/Cond|If Ceiling < 0x7f}} {{f/std|Or Low elevation Height}}
  00176458: 34020001 ori r2,r0,0x0001
+
  00176434: 0163102b sltu r2,r11,r3                          |
  0017645c: 310300ff andi r3,r8,0x00ff
+
  00176438: 00806821 addu r13,r4,r0                          |{{f/std|r13 Becomes ceiling or lower height}}
  00176460: 0163102b sltu r2,r11,r3
+
  0017643c: 10400007 beq r2,r0,0x0017645c                {{f/Cond|If Origin Exit Side Height < Ceiling}}
  00176464: 10400008 beq r2,r0,0x00176488
+
  00176440: 00000000 nop                                      |
  00176468: 308200ff andi r2,r4,0x00ff
+
  00176444: 91220053 lbu r2,0x0053(r9)                        |{{f/load|Acting Unit Size}}
  0017646c: 91220053 lbu r2,0x0053(r9)
+
00176448: 00000000 nop                                      |
  00176470: 00000000 nop
+
  0017644c: 01621021 addu r2,r11,r2                          |{{f/std|Origin Heigt + Acting Unit Size}}
  00176474: 01621021 addu r2,r11,r2
+
  00176450: 0062102a slt r2,r3,r2                            |
  00176478: 0062102a slt r2,r3,r2
+
  00176454: 1440001e bne r2,r0,0x001764d0                    {{f/Cond|If Ceiling < Origin Height + Acting Unit Size}} {{f/loc| Exit and returns 0x01
  0017647c: 14400014 bne r2,r0,0x001764d0
+
  00176458: 34020001 ori r2,r0,0x0001                            |
  00176480: 34020001 ori r2,r0,0x0001
+
  0017645c: 310300ff andi r3,r8,0x00ff                    |{{f/std|Higher height + depth}}
  00176484: 308200ff andi r2,r4,0x00ff
+
  00176460: 0163102b sltu r2,r11,r3                       |
  00176488: 0162102b sltu r2,r11,r2
+
  00176464: 10400008 beq r2,r0,0x00176488                {{f/Cond|If Origin Height < Destination Height + depth}}
  0017648c: 14400007 bne r2,r0,0x001764ac
+
  00176468: 308200ff andi r2,r4,0x00ff                        |
  00176490: 310200ff andi r2,r8,0x00ff
+
  0017646c: 91220053 lbu r2,0x0053(r9)                       |{{f/load|Acting Unit Size}}
  00176494: 91230053 lbu r3,0x0053(r9)
+
  00176470: 00000000 nop                                     |
  00176498: 00000000 nop
+
  00176474: 01621021 addu r2,r11,r2                           |{{f/std|Origin Height + Acting Unit Size}}
  0017649c: 01631821 addu r3,r11,r3
+
  00176478: 0062102a slt r2,r3,r2                             |{{f/std|1 if destination < Origin}}
  001764a0: 0043102a slt r2,r2,r3
+
  0017647c: 14400014 bne r2,r0,0x001764d0                     {{f/Cond|If Destination height + depth  < Origin Height + Acting Unit Size}} {{f/loc| Exit and returns 0x01
001764a4: 1040000a beq r2,r0,0x001764d0
+
  00176480: 34020001 ori r2,r0,0x0001                             |
001764a8: 34020001 ori r2,r0,0x0001
+
  00176484: 308200ff andi r2,r4,0x00ff                   |{{f/std|Lower Destination / Ceiling}}
001764ac: 258c0001 addiu r12,r12,0x0001
+
  00176488: 0162102b sltu r2,r11,r2                      |
001764b0: 29820004 slti r2,r12,0x0004
+
  0017648c: 14400007 bne r2,r0,0x001764ac                {{f/Cond|If Origin Height >  Lower destination Height}}
001764b4: 1440ff6b bne r2,r0,0x00176264
+
  00176490: 310200ff andi r2,r8,0x00ff                       |
001764b8: 31a400ff andi r4,r13,0x00ff
+
  00176494: 91230053 lbu r3,0x0053(r9)                       |{{f/load|Acting Unit Size}}
001764bc: 3403007f ori r3,r0,0x007f
+
  00176498: 00000000 nop                                     |
001764c0: 10830003 beq r4,r3,0x001764d0
+
  0017649c: 01631821 addu r3,r11,r3                          |{{f/std|Origin Height  + Acting Unit Size}}
001764c4: 00001021 addu r2,r0,r0
+
  001764a0: 0043102a slt r2,r2,r3                             |
001764c8: 30e200ff andi r2,r7,0x00ff
+
  001764a4: 1040000a beq r2,r0,0x001764d0                     {{f/Cond|If Destination Height  > Origin Height + Acting unit size}} {{f/loc| Exit and returns 0x01
  001764cc: 0044102b sltu r2,r2,r4
+
  001764a8: 34020001 ori r2,r0,0x0001                             |
 +
  001764ac: 258c0001 addiu r12,r12,0x0001        |{{f/std|Counter +1}}
 +
  001764b0: 29820004 slti r2,r12,0x0004          |
 +
  001764b4: 1440ff6b bne r2,r0,0x00176264    {{f/eloop|Loop 4 times}}
 +
  001764b8: 31a400ff andi r4,r13,0x00ff           |
 +
  001764bc: 3403007f ori r3,r0,0x007f            |
 +
  001764c0: 10830003 beq r4,r3,0x001764d0    {{f/Cond|If There is no ceiling (still max value)}} {{f/loc| Exit and returns 0x00
 +
  001764c4: 00001021 addu r2,r0,r0                |
 +
  001764c8: 30e200ff andi r2,r7,0x00ff           |
 +
  001764cc: 0044102b sltu r2,r2,r4           |{{f/std|Returns 0x01 if Origin Height < Ceiling}}
 
  001764d0: 03e00008 jr r31
 
  001764d0: 03e00008 jr r31
 
  001764d4: 00000000 nop
 
  001764d4: 00000000 nop
</font>
+
=== Return Location ===
 +
'''BATTLE.BIN'''
 +
001765e8: [[001764d8_-_001766b0]]
 +
00177d7c: [[00177c08_-_00177e60]]

Latest revision as of 19:06, 30 May 2023

BATTLE.BIN : Check Horizontal Jump option
----------------------------------------------------------------
Parameters : r4 : Destination Tile ID (X-Y) without elevation
             r5 : Origin exit side slope type (Opposite destination side slope type)
             r6 : Destination Entry side slope type
             r7 : Origin Exit side Height
  
Returns r2 = 0x00 if Jump is possible
        r2 = 0x01 if Acting Unit cannot jump above destination (tile/unit in the way)

Note : Im' sick of these tedious height check. I don't get the details (and notes might be inaccurate)
       But with the context of the calling routine. I assume this routine checks Horizontal Jumpability.
       Loop 4 Times : both elevation - Empty / Occupied Tile
------------------------------------------------------------------------------------------------------------
0017622c: 0080c021 addu r24,r4,r0           |
00176230: 340d007f ori r13,r0,0x007f        |
00176234: 00006021 addu r12,r0,r0           |Initialize counter
00176238: 3c0f8019 lui r15,0x8019           |
0017623c: 8deff4f0 lw r15,-0x0b10(r15)      |Pointer to Scratch Pad (0x1f800200)
00176240: 3c098019 lui r9,0x8019            |
00176244: 8d29f4e4 lw r9,-0x0b1c(r9)        |Pointer to Scratch Pad (0x1f800180)
00176248: 3c028019 lui r2,0x8019            |
0017624c: 8c42f4e0 lw r2,-0x0b20(r2)        |Pointer to Scratch Pad (0x1f800000)
00176250: 3c0e8019 lui r14,0x8019           |
00176254: 8dcef4e8 lw r14,-0x0b18(r14)      |Poiter to Other units Scratchpad ( 0x1f800080 )
00176258: 9042001b lbu r2,0x001b(r2)        |Acting Unit Size
0017625c: 30eb00ff andi r11,r7,0x00ff       |
00176260: a1220053 sb r2,0x0053(r9)         |Store acting unit size
                                            @LOOP - 4 Times
00176264: 000c17c2 srl r2,r12,0x1f              |
00176268: 01821021 addu r2,r12,r2               |
0017626c: 00021043 sra r2,r2,0x01               |Counter/2
00176270: 00021200 sll r2,r2,0x08               |Elevation Offset (0 / 0 / 0x100 / 0x100)
00176274: 00582021 addu r4,r2,r24               |Tile ID  2 times low elevation, 2 times high elevation
00176278: 000418c0 sll r3,r4,0x03               |Tile ID * 8
0017627c: 3c028019 lui r2,0x8019                |
00176280: 2442f8cc addiu r2,r2,-0x0734          |
00176284: 00624021 addu r8,r3,r2                |Pointer : This iteration Tile data (8018f8cc)
00176288: 31820001 andi r2,r12,0x0001           |Uneven counter flag
0017628c: 1040002b beq r2,r0,0x0017633c         #If 2nd Loop on Low or High Elevation
00176290: 01e41021 addu r2,r15,r4               |Pointer to this Tile S-Pad 0x200 data
00176294: 90420000 lbu r2,0x0000(r2)                |Load Tile Flag
00176298: 34030004 ori r3,r0,0x0004                 |
0017629c: 3042000c andi r2,r2,0x000c                |Keep only 0x08 and 0x04
001762a0: 14430082 bne r2,r3,0x001764ac             #If Flags 0x08 and 0x04 are ON /Else branch to  Next iteration  Ally Unit with stepping stone 
001762a4: 00041080 sll r2,r4,0x02                       |
001762a8: 00441021 addu r2,r2,r4                        |Tile ID * 5
001762ac: 3c018019 lui r1,0x8019                        |
001762b0: 00220821 addu r1,r1,r2                        |Part of Pointer to Grid Data
001762b4: 90222dda lbu r2,0x2dda(r1)                    |Grid 0x02 - ID of unit on tile
001762b8: 00000000 nop                                  |
001762bc: a1220050 sb r2,0x0050(r9)                     |Store Unit ID
001762c0: 91230050 lbu r3,0x0050(r9)                    |Unit ID
001762c4: 00000000 nop                                  |
001762c8: 000310c0 sll r2,r3,0x03                       |
001762cc: 00431023 subu r2,r2,r3                        |Id *7
001762d0: 004e1821 addu r3,r2,r14                       |Pointer : Destination Unit data in S-Pad 0x80
001762d4: 90620003 lbu r2,0x0003(r3)                    |Unit Flag + ID
001762d8: 00000000 nop                                  |
001762dc: 30420040 andi r2,r2,0x0040                    |
001762e0: 10400072 beq r2,r0,0x001764ac                 #If Unit is  an Ally / Else branch to  Next iteration 
001762e4: 00000000 nop                                      |
001762e8: 90640005 lbu r4,0x0005(r3)                        |Destination Unit Height
001762ec: 00000000 nop                                      |
001762f0: 24880003 addiu r8,r4,0x0003                       |Unit Height + 3
001762f4: 310300ff andi r3,r8,0x00ff                        |
001762f8: 0163102b sltu r2,r11,r3                           |
001762fc: 10400007 beq r2,r0,0x0017631c                     #If Origin Height < Unit Height + 3
00176300: 00000000 nop                                          |
00176304: 91220053 lbu r2,0x0053(r9)                            |Acting Unit Size
00176308: 00000000 nop                                          |
0017630c: 01621021 addu r2,r11,r2                               |Origin + Acting unit size
00176310: 0062102a slt r2,r3,r2                                 |1 UH+3 < O+AUS
00176314: 1440006e bne r2,r0,0x001764d0                         #If Destination Unit Height + 3 < Origin Height + Unit size : branch to  End - returns 0x01
00176318: 34020001 ori r2,r0,0x0001                                 |
0017631c: 91230050 lbu r3,0x0050(r9)                        |Unit ID
00176320: 00000000 nop                                      |
00176324: 000310c0 sll r2,r3,0x03                           |
00176328: 00431023 subu r2,r2,r3                            |ID*7
0017632c: 004e1021 addu r2,r2,r14                           |Pointer : Destination Unit data in S-Pad 0x80
00176330: 90480006 lbu r8,0x0006(r2)                        |Destination Unit Height + Size
00176334: 0805d90a j 0x00176428                             >>Jump to check some height data (Lower height is Tile height, Higher is Unit Height)
00176338: 308300ff andi r3,r4,0x00ff                        |Destination Unit Height
                                                Else : 1st Loop on Low/High elevation Tile
0017633c: 90430000 lbu r3,0x0000(r2)                |Tile's flags
00176340: 00000000 nop                              |
00176344: 30620080 andi r2,r3,0x0080                |
00176348: 10400005 beq r2,r0,0x00176360             #If Tile is Unselectable
0017634c: 30620004 andi r2,r3,0x0004                    |
00176350: 10400056 beq r2,r0,0x001764ac                 #If Archangel is on Tile / Else branch to  Next iteration   0x04 is Unit on Tile - Archangel enables 0x80
00176354: 34020001 ori r2,r0,0x0001                         |
00176358: 0805d934 j 0x001764d0                             >>Jump to   End - returns 0x01
0017635c: 00000000 nop                                      |
                                                    Else : Tile is Selectable
00176360: 91020002 lbu r2,0x0002(r8)                    |Tile Height
00176364: 00000000 nop                                  |
00176368: 00021040 sll r2,r2,0x01                       |
0017636c: a1220050 sb r2,0x0050(r9)                     |Store Destination Height * 2
00176370: 91020003 lbu r2,0x0003(r8)                    |Tile Halves + Depth
00176374: 00000000 nop                                  |
00176378: 3042001f andi r2,r2,0x001f                    |
0017637c: a1220051 sb r2,0x0051(r9)                     |Store Destination Halves
00176380: 91020004 lbu r2,0x0004(r8)                    |Destination Slope Type
00176384: 00000000 nop                                  |
00176388: a1220052 sb r2,0x0052(r9)                     |Store Destination Slope Type
0017638c: 91230052 lbu r3,0x0052(r9)                    |Destination Slope Type
00176390: 91240051 lbu r4,0x0051(r9)                    |Destination Halves
00176394: 00a31007 srav r2,r3,r5                        |Opposite Side Slope
00176398: 30420003 andi r2,r2,0x0003                    |
0017639c: 00820018 mult r4,r2                           |
001763a0: 00001012 mflo r2                              |Destination opposite Side Slope height
001763a4: 00c31807 srav r3,r3,r6                        |Destination Entry side Slope
001763a8: 30630003 andi r3,r3,0x0003                    |
001763ac: 00830018 mult r4,r3                           |
001763b0: 91230050 lbu r3,0x0050(r9)                    |
001763b4: 00000000 nop                                  |
001763b8: 00625021 addu r10,r3,r2                       |Destination opposite side Height
001763bc: 00001012 mflo r2                              |Destination entry Side Slope height
001763c0: 00622021 addu r4,r3,r2                        |Destination entry side Height
001763c4: 314300ff andi r3,r10,0x00ff                   |Opposite side
001763c8: 308200ff andi r2,r4,0x00ff                    |Entry side
001763cc: 0043102b sltu r2,r2,r3                        |
001763d0: 1040000c beq r2,r0,0x00176404                 #If Entry Side is below Opposite side
001763d4: 00000000 nop                                      |
001763d8: 91020005 lbu r2,0x0005(r8)                        |Destination 0x05
001763dc: 91030003 lbu r3,0x0003(r8)                        |Destination Halves + Depth
001763e0: 3042001f andi r2,r2,0x001f                        |
001763e4: 00021040 sll r2,r2,0x01                           |Thickness * 2
001763e8: 00824023 subu r8,r4,r2                            |Entry height - Thickness  Lower - Thickness
001763ec: 00031942 srl r3,r3,0x05                           |Depth
001763f0: 00031840 sll r3,r3,0x01                           |Depth * 2
001763f4: a1280050 sb r8,0x0050(r9)                         |Store Ceiling Height
001763f8: 91240050 lbu r4,0x0050(r9)                        |Load Ceiling
001763fc: 0805d909 j 0x00176424                             |
00176400: 01434021 addu r8,r10,r3                           |Opposite Side + depth  Higher + depth

00176404: 91020003 lbu r2,0x0003(r8)                        |Destination Halves + Depth
00176408: 91030005 lbu r3,0x0005(r8)                        |Destination 0x05
0017640c: 00021142 srl r2,r2,0x05                           |
00176410: 00021040 sll r2,r2,0x01                           |Depth*2
00176414: 00824021 addu r8,r4,r2                            |Entry height + depth
00176418: 3063001f andi r3,r3,0x001f                        |
0017641c: 00031840 sll r3,r3,0x01                           |Thickness * 2
00176420: 01432023 subu r4,r10,r3                           |Opposite Height - Thickness
00176424: 308300ff andi r3,r4,0x00ff                    |Ceiling
--- 2nd section jump here 
00176428: 31a200ff andi r2,r13,0x00ff                   |0x7f
0017642c: 0062102b sltu r2,r3,r2                        |
00176430: 10400002 beq r2,r0,0x0017643c                 #If Ceiling < 0x7f Or Low elevation Height
00176434: 0163102b sltu r2,r11,r3                           |
00176438: 00806821 addu r13,r4,r0                           |r13 Becomes ceiling or lower height
0017643c: 10400007 beq r2,r0,0x0017645c                 #If Origin Exit Side Height < Ceiling
00176440: 00000000 nop                                      |
00176444: 91220053 lbu r2,0x0053(r9)                        |Acting Unit Size
00176448: 00000000 nop                                      |
0017644c: 01621021 addu r2,r11,r2                           |Origin Heigt + Acting Unit Size
00176450: 0062102a slt r2,r3,r2                             |
00176454: 1440001e bne r2,r0,0x001764d0                     #If Ceiling < Origin Height + Acting Unit Size {{f/loc| Exit and returns 0x01
00176458: 34020001 ori r2,r0,0x0001                             |
0017645c: 310300ff andi r3,r8,0x00ff                    |Higher height + depth
00176460: 0163102b sltu r2,r11,r3                       |
00176464: 10400008 beq r2,r0,0x00176488                 #If Origin Height < Destination Height + depth
00176468: 308200ff andi r2,r4,0x00ff                        |
0017646c: 91220053 lbu r2,0x0053(r9)                        |Acting Unit Size
00176470: 00000000 nop                                      |
00176474: 01621021 addu r2,r11,r2                           |Origin Height + Acting Unit Size
00176478: 0062102a slt r2,r3,r2                             |1 if destination < Origin
0017647c: 14400014 bne r2,r0,0x001764d0                     #If Destination height + depth  < Origin Height + Acting Unit Size {{f/loc| Exit and returns 0x01
00176480: 34020001 ori r2,r0,0x0001                             |
00176484: 308200ff andi r2,r4,0x00ff                    |Lower Destination / Ceiling
00176488: 0162102b sltu r2,r11,r2                       |
0017648c: 14400007 bne r2,r0,0x001764ac                 #If Origin Height >  Lower destination Height
00176490: 310200ff andi r2,r8,0x00ff                        |
00176494: 91230053 lbu r3,0x0053(r9)                        |Acting Unit Size
00176498: 00000000 nop                                      |
0017649c: 01631821 addu r3,r11,r3                           |Origin Height  + Acting Unit Size
001764a0: 0043102a slt r2,r2,r3                             |
001764a4: 1040000a beq r2,r0,0x001764d0                     #If Destination Height  > Origin Height + Acting unit size {{f/loc| Exit and returns 0x01
001764a8: 34020001 ori r2,r0,0x0001                             |
001764ac: 258c0001 addiu r12,r12,0x0001         |Counter +1
001764b0: 29820004 slti r2,r12,0x0004           |
001764b4: 1440ff6b bne r2,r0,0x00176264     Λ Loop 4 times
001764b8: 31a400ff andi r4,r13,0x00ff           |
001764bc: 3403007f ori r3,r0,0x007f             |
001764c0: 10830003 beq r4,r3,0x001764d0     #If There is no ceiling (still max value) {{f/loc| Exit and returns 0x00
001764c4: 00001021 addu r2,r0,r0                |
001764c8: 30e200ff andi r2,r7,0x00ff            |
001764cc: 0044102b sltu r2,r2,r4            |Returns 0x01 if Origin Height < Ceiling
001764d0: 03e00008 jr r31
001764d4: 00000000 nop

Return Location

BATTLE.BIN
001765e8: 001764d8_-_001766b0
00177d7c: 00177c08_-_00177e60