Difference between revisions of "Set Origin Height Data"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with "<font face='Courier New'> 0017567c: 27bdffe0 addiu r29,r29,0xffe0 00175680: afb20018 sw r18,0x0018(r29) 00175684: 3c128019 lui r18,0x8019 00175688: 8e52f4e0 lw r18,-0x0b...")
 
Line 1: Line 1:
<font face='Courier New'>
+
BATTLE.BIN : Set Origin Height Data
 +
---------------------------------------------------------------------------------------------------------
 +
Parameters : r4 - Preset value (some loop counter from previous routine)
 +
                    0x0 to 0x3 : Tile Path Height (4 directions)
 +
                    0x4 to 0x7 : Check Unit Path (if any)
 +
                    Above 0x8 (context ?) seems to increment height above unit (?)
 
   
 
   
  0017567c: 27bdffe0 addiu r29,r29,0xffe0
+
  Returns  : r2 = 0x00 if AoE of move is not finsihed
00175680: afb20018 sw r18,0x0018(r29)
+
            r2 = 0x04 if AoE ended
  00175684: 3c128019 lui r18,0x8019
+
            r2 = 0x01 when ? (Above 8 section)
  00175688: 8e52f4e0 lw r18,-0x0b20(r18)
+
   
  0017568c: afb10014 sw r17,0x0014(r29)
+
  Multiple Height Check to finaly set some Origin height data in S-Pad 0x180
  00175690: 3c118019 lui r17,0x8019
+
  (0x48 0x49 0x36 0x46 0x1d 0x10)
00175694: 8e31f4f0 lw r17,-0x0b10(r17)
+
  ------------------------------------------------------------------------------------------------------------
00175698: afb00010 sw r16,0x0010(r29)
+
  0017567c: 27bdffe0 addiu r29,r29,-0x0020    |
0017569c: 3c108019 lui r16,0x8019
+
  00175680: afb20018 sw r18,0x0018(r29)       |
001756a0: 8e10f4e4 lw r16,-0x0b1c(r16)
+
  00175684: 3c128019 lui r18,0x8019          |
001756a4: 3c058019 lui r5,0x8019
+
  00175688: 8e52f4e0 lw r18,-0x0b20(r18)      |{{f/adr|Pointer to scratch pad}} (0x1f800000)
001756a8: 8ca5f4e8 lw r5,-0x0b18(r5)
+
  0017568c: afb10014 sw r17,0x0014(r29)      |
001756ac: 28830008 slti r3,r4,0x0008
+
  00175690: 3c118019 lui r17,0x8019          |
001756b0: 10600005 beq r3,r0,0x001756c8
+
  00175694: 8e31f4f0 lw r17,-0x0b10(r17)      |{{f/adr|Pointer to Scratch Pad (0x1f800200)}}
001756b4: afbf001c sw r31,0x001c(r29)
+
  00175698: afb00010 sw r16,0x0010(r29)      |
001756b8: 92020040 lbu r2,0x0040(r16)
+
  0017569c: 3c108019 lui r16,0x8019          |
001756bc: 00000000 nop
+
  001756a0: 8e10f4e4 lw r16,-0x0b1c(r16)      |{{f/adr|Pointer to Scratch Pad (0x1f800180)}}
001756c0: 1040004a beq r2,r0,0x001757ec
+
  001756a4: 3c058019 lui r5,0x8019            |
  001756c4: 00000000 nop
+
  001756a8: 8ca5f4e8 lw r5,-0x0b18(r5)        |{{f/adr|Pointer to scratch pad (0x080)- Non Acting Unit coordinate wil be stored here}}
  001756c8: 8e020008 lw r2,0x0008(r16)
+
  001756ac: 28830008 slti r3,r4,0x0008        |
  001756cc: 00000000 nop
+
  001756b0: 10600005 beq r3,r0,0x001756c8    {{f/Cond|If Counter < 8}}
  001756d0: 90420002 lbu r2,0x0002(r2)
+
  001756b4: afbf001c sw r31,0x001c(r29)          |
  001756d4: 14600020 bne r3,r0,0x00175758
+
001756b8: 92020040 lbu r2,0x0040(r16)           |{{f/load|Load Tile/Unit Path flag}}
  001756d8: a2020041 sb r2,0x0041(r16)
+
  001756bc: 00000000 nop                         |
  001756dc: 92030041 lbu r3,0x0041(r16)
+
  001756c0: 1040004a beq r2,r0,0x001757ec        {{f/Cond|<nowiki>If Path flag = 0 then branch to </nowiki>}} {{f/Cond|{{f/loc| Tile section}}}}
  001756e0: 00000000 nop
+
001756c4: 00000000 nop                              |
  001756e4: 000310c0 sll r2,r3,0x03
+
  001756c8: 8e020008 lw r2,0x0008(r16)       |{{f/adr|Pointer : Tile's data in Targetable grid table}} {{f/std|80192dd8}}
  001756e8: 00431023 subu r2,r2,r3
+
  001756cc: 00000000 nop                      |
  001756ec: 04810002 bgez r4,0x001756f8
+
  001756d0: 90420002 lbu r2,0x0002(r2)       |{{f/load|Unit ID on Tile}}
  001756f0: 00452821 addu r5,r2,r5
+
  001756d4: 14600020 bne r3,r0,0x00175758    {{f/Cond|If Value is between 4 and 7 Branch to}} {{f/Cond|{{f/loc| Unit section}}}}
  001756f4: 24840003 addiu r4,r4,0x0003
+
  001756d8: a2020041 sb r2,0x0041(r16)        |{{f/store|Store Unit ID }}
  001756f8: 92020058 lbu r2,0x0058(r16)
+
                                        {{f/sec|8 or Above}}
  001756fc: 92030044 lbu r3,0x0044(r16)
+
  001756dc: 92030041 lbu r3,0x0041(r16)       |{{f/load|Unit ID}}
  00175700: 00000000 nop
+
  001756e0: 00000000 nop                      |
  00175704: 00621007 srav r2,r2,r3
+
  001756e4: 000310c0 sll r2,r3,0x03          |
  00175708: 92030056 lbu r3,0x0056(r16)
+
  001756e8: 00431023 subu r2,r2,r3           |{{f/std|Unit ID * 7}}
  0017570c: 30420003 andi r2,r2,0x0003
+
  001756ec: 04810002 bgez r4,0x001756f8      {{f/Cond|If Preset value < 0x00}}
  00175710: 00620018 mult r3,r2
+
  001756f0: 00452821 addu r5,r2,r5            |{{f/adr|Pointer to Unit data in S-Pad 0x80}}
00175714: 90a20005 lbu r2,0x0005(r5)
+
  001756f4: 24840003 addiu r4,r4,0x0003          |{{f/std|Value +3}}
  00175718: 00041883 sra r3,r4,0x02
+
001756f8: 92020058 lbu r2,0x0058(r16)      |{{f/load|Load Slope Type}}
  0017571c: 00431021 addu r2,r2,r3
+
001756fc: 92030044 lbu r3,0x0044(r16)       |{{f/load|Load Origin Slope Mod}}
00175720: 2442fffe addiu r2,r2,0xfffe
+
  00175700: 00000000 nop                     |
  00175724: a2020048 sb r2,0x0048(r16)
+
  00175704: 00621007 srav r2,r2,r3           |{{f/std|Side slope}}
  00175728: 9202004c lbu r2,0x004c(r16)
+
  00175708: 92030056 lbu r3,0x0056(r16)      |{{f/load|Load Tile's Halves}}
  0017572c: 00001812 mflo r3
+
  0017570c: 30420003 andi r2,r2,0x0003        |
  00175730: 00431021 addu r2,r2,r3
+
  00175710: 00620018 mult r3,r2              |
  00175734: a2020050 sb r2,0x0050(r16)
+
  00175714: 90a20005 lbu r2,0x0005(r5)       |{{f/load|Unit Height}}
  00175738: 92020048 lbu r2,0x0048(r16)
+
  00175718: 00041883 sra r3,r4,0x02          |{{f/std|Preset Value / 4}}
  0017573c: 92030050 lbu r3,0x0050(r16)
+
  0017571c: 00431021 addu r2,r2,r3            |{{f/std|Unit Total Height + Preset Value/4}}
  00175740: 00000000 nop
+
  00175720: 2442fffe addiu r2,r2,-0x0002      |
  00175744: 0043102b sltu r2,r2,r3
+
  00175724: a2020048 sb r2,0x0048(r16)        |{{f/store|Store Unit Height + PV/4 - 2}}
  00175748: 10400013 beq r2,r0,0x00175798
+
  00175728: 9202004c lbu r2,0x004c(r16)      |{{f/load|Load Origin's Height*2}}
  0017574c: 34020001 ori r2,r0,0x0001
+
  0017572c: 00001812 mflo r3                  |{{f/std|Slope Type * Halves}}
  00175750: 0805d64f j 0x0017593c
+
00175730: 00431021 addu r2,r2,r3            |
  00175754: 00000000 nop
+
  00175734: a2020050 sb r2,0x0050(r16)       |{{f/store|Store Origin exit side's Height}}
00175758: 8602001a lh r2,0x001a(r16)
+
  00175738: 92020048 lbu r2,0x0048(r16)      |{{f/load|Load Unit Total Height}}
  0017575c: 00000000 nop
+
  0017573c: 92030050 lbu r3,0x0050(r16)      |{{f/load|Load Tile's Size height}}
  00175760: 02221021 addu r2,r17,r2
+
  00175740: 00000000 nop                      |
  00175764: 90420000 lbu r2,0x0000(r2)
+
  00175744: 0043102b sltu r2,r2,r3           |
  00175768: 00000000 nop
+
  00175748: 10400013 beq r2,r0,0x00175798    {{f/Cond|If Unit Height + PV mod > Origin Exit Size}} {{f/loc| Branch in section below}}
0017576c: 30420008 andi r2,r2,0x0008
+
  0017574c: 34020001 ori r2,r0,0x0001            |
  00175770: 10400072 beq r2,r0,0x0017593c
+
  00175750: 0805d64f j 0x0017593c            {{f/jump|If not Returns 0x1}}
  00175774: 34020002 ori r2,r0,0x0002
+
  00175754: 00000000 nop                      |
  00175778: 92020041 lbu r2,0x0041(r16)
+
                                        {{f/sec|--- Above Unit Path (Counter 4 to 7) ---}}
  0017577c: 00000000 nop
+
  00175758: 8602001a lh r2,0x001a(r16)       |{{f/load|Load Tile ID}}
00175780: 000218c0 sll r3,r2,0x03
+
  0017575c: 00000000 nop                      |
  00175784: 00621823 subu r3,r3,r2
+
00175760: 02221021 addu r2,r17,r2          |{{f/adr|Tile's data pointer in S-Pad 0x200}}
  00175788: 00651821 addu r3,r3,r5
+
  00175764: 90420000 lbu r2,0x0000(r2)       |{{f/load|Load Tile's flags}}
  0017578c: 90620006 lbu r2,0x0006(r3)
+
  00175768: 00000000 nop                      |
  00175790: 00000000 nop
+
0017576c: 30420008 andi r2,r2,0x0008        |{{f/std|Check 0x08 (Fly - Ally with stepping stone)}}
  00175794: a2020048 sb r2,0x0048(r16)
+
  00175770: 10400072 beq r2,r0,0x0017593c    {{f/Cond|If Flag 0x08 is ON}} {{f/Cond|Else returns 0x2}}
  00175798: 86040026 lh r4,0x0026(r16)
+
  00175774: 34020002 ori r2,r0,0x0002        |{{f/std|0x2}}
  0017579c: 86050028 lh r5,0x0028(r16)
+
  00175778: 92020041 lbu r2,0x0041(r16)           |{{f/load|Load Unit ID}}
  001757a0: 92060044 lbu r6,0x0044(r16)
+
  0017577c: 00000000 nop                          |
  001757a4: 92070048 lbu r7,0x0048(r16)
+
00175780: 000218c0 sll r3,r2,0x03              |{{f/std|ID*8}}
  001757a8: 92020048 lbu r2,0x0048(r16)
+
  00175784: 00621823 subu r3,r3,r2                |{{f/std|ID*7}}
  001757ac: a6000036 sh r0,0x0036(r16)
+
  00175788: 00651821 addu r3,r3,r5                |{{f/adr|Pointer to Unit data in S-Pad 0x80}}
  001757b0: 24e7ffff addiu r7,r7,0xffff
+
  0017578c: 90620006 lbu r2,0x0006(r3)            |{{f/load|Tile Height + unit Size}}
  001757b4: 30e700ff andi r7,r7,0x00ff
+
  00175790: 00000000 nop                          |
  001757b8: 0c05d859 jal 0x00176164
+
00175794: a2020048 sb r2,0x0048(r16)           |{{f/store|Store Height + Size}}
001757bc: a2020049 sb r2,0x0049(r16)
+
                                        {{f/sec|--- > 8 Section Branch here ---}}
  001757c0: 92030041 lbu r3,0x0041(r16)
+
  00175798: 86040026 lh r4,0x0026(r16)            |{{f/load|Tile's X Coord}} {{f/std|(for Jal)}}
001757c4: a2020046 sb r2,0x0046(r16)
+
  0017579c: 86050028 lh r5,0x0028(r16)            |{{f/load|Tile's Y Coord}} {{f/std|(for Jal)}}
  001757c8: 24630200 addiu r3,r3,0x0200
+
  001757a0: 92060044 lbu r6,0x0044(r16)          |{{f/load|Exit Side slope mod}} {{f/std|(for Jal)}}
  001757cc: 00031080 sll r2,r3,0x02
+
  001757a4: 92070048 lbu r7,0x0048(r16)           |{{f/load|Height + Size}} {{f/std|(for Jal)}}
  001757d0: 00431021 addu r2,r2,r3
+
  001757a8: 92020048 lbu r2,0x0048(r16)           |{{f/load|Height + Size}}
  001757d4: a603001e sh r3,0x001e(r16)
+
  001757ac: a6000036 sh r0,0x0036(r16)           |{{f/store|Reset 0x36}}
  001757d8: 3c038019 lui r3,0x8019
+
  001757b0: 24e7ffff addiu r7,r7,-0x0001          |{{f/std|Height - 1}}
  001757dc: 24632dd8 addiu r3,r3,0x2dd8
+
  001757b4: 30e700ff andi r7,r7,0x00ff            |{{f/std|Byte only}}
  001757e0: 00431021 addu r2,r2,r3
+
001757b8: 0c05d859 jal 0x00176164              |{{f/jal|Calculate_Tile_Ceiling|Calculate_Tile_Ceiling}} {{f/std|<nowiki>returns r2 = Ceiling height or 0x7f (Height from unit head here)</nowiki>}}
  001757e4: 0805d649 j 0x00175924
+
  001757bc: a2020049 sb r2,0x0049(r16)            |{{f/store|Store Height + Size}}
001757e8: ae020010 sw r2,0x0010(r16)
+
  001757c0: 92030041 lbu r3,0x0041(r16)          |{{f/load|Unit ID}}
  001757ec: 92020058 lbu r2,0x0058(r16)
+
  001757c4: a2020046 sb r2,0x0046(r16)           |{{f/store|Store Ceiling Height}}
  001757f0: 92030044 lbu r3,0x0044(r16)
+
  001757c8: 24630200 addiu r3,r3,0x0200          |{{f/std|Unit ID + 0x200}}
  001757f4: 00000000 nop
+
  001757cc: 00031080 sll r2,r3,0x02              |
001757f8: 00621007 srav r2,r2,r3
+
  001757d0: 00431021 addu r2,r2,r3               |{{f/adr|Pointer to Unit data in Post-Grid Table}} {{f/std| 801937d8}}
  001757fc: 92030056 lbu r3,0x0056(r16)
+
  001757d4: a603001e sh r3,0x001e(r16)           |{{f/store|Unit Offset in Post-Grid Table}}
  00175800: 30420003 andi r2,r2,0x0003
+
  001757d8: 3c038019 lui r3,0x8019                |
  00175804: 00620018 mult r3,r2
+
  001757dc: 24632dd8 addiu r3,r3,0x2dd8          |{{f/adr|Start of Targetable grid data}}
  00175808: 92020058 lbu r2,0x0058(r16)
+
  001757e0: 00431021 addu r2,r2,r3                |{{f/adr|Unit Data (Offset 0x05) at 801937d8}}
  0017580c: 92030045 lbu r3,0x0045(r16)
+
  001757e4: 0805d649 j 0x00175924                {{f/jump|End section}}
  00175810: 00000000 nop
+
  001757e8: ae020010 sw r2,0x0010(r16)           |{{f/store|Store pointer}}
  00175814: 00621007 srav r2,r2,r3
+
                                        {{f/sec|---- Tile Section ---}}
  00175818: 00003812 mflo r7
+
  001757ec: 92020058 lbu r2,0x0058(r16)           |{{f/load|Load Tile's Slope Type}}
0017581c: 92030056 lbu r3,0x0056(r16)
+
  001757f0: 92030044 lbu r3,0x0044(r16)          |{{f/load|Load Exit Side Slope Mod}}
  00175820: 30420003 andi r2,r2,0x0003
+
001757f4: 00000000 nop                          |
  00175824: 00620018 mult r3,r2
+
001757f8: 00621007 srav r2,r2,r3                |
  00175828: 86040026 lh r4,0x0026(r16)
+
  001757fc: 92030056 lbu r3,0x0056(r16)           |{{f/load|Load Tile's Halves}}
  0017582c: 86050028 lh r5,0x0028(r16)
+
  00175800: 30420003 andi r2,r2,0x0003            |{{f/std|Exit Side Slope mod}}
  00175830: 9202004c lbu r2,0x004c(r16)
+
  00175804: 00620018 mult r3,r2                  |
  00175834: 92060044 lbu r6,0x0044(r16)
+
  00175808: 92020058 lbu r2,0x0058(r16)           |{{f/load|Slope Type}}
  00175838: 00471021 addu r2,r2,r7
+
  0017580c: 92030045 lbu r3,0x0045(r16)           |{{f/load|Opposite Side Slope Mod}}
  0017583c: a2020048 sb r2,0x0048(r16)
+
  00175810: 00000000 nop                          |
  00175840: 9202004c lbu r2,0x004c(r16)
+
  00175814: 00621007 srav r2,r2,r3               |
  00175844: 00001812 mflo r3
+
  00175818: 00003812 mflo r7                      |{{f/std|Exit Side slope mod * Halves}}
  00175848: 00431021 addu r2,r2,r3
+
  0017581c: 92030056 lbu r3,0x0056(r16)           |{{f/load|Tile's Halves}}
0017584c: a2020049 sb r2,0x0049(r16)
+
  00175820: 30420003 andi r2,r2,0x0003            |
  00175850: 92020048 lbu r2,0x0048(r16)
+
  00175824: 00620018 mult r3,r2                  |
  00175854: 92030049 lbu r3,0x0049(r16)
+
  00175828: 86040026 lh r4,0x0026(r16)           |{{f/load|X Coord}} {{f/std|(for Jal)}}
  00175858: 92070048 lbu r7,0x0048(r16)
+
  0017582c: 86050028 lh r5,0x0028(r16)           |{{f/load|Y Coord }} {{f/std|(for Jal)}}
0017585c: 00431023 subu r2,r2,r3
+
  00175830: 9202004c lbu r2,0x004c(r16)          |{{f/load|Tile's Height*2}}
  00175860: 0c05d859 jal 0x00176164
+
  00175834: 92060044 lbu r6,0x0044(r16)           |{{f/load|Exit Side Slope Mod}} {{f/std|(for Jal)}}
  00175864: a6020036 sh r2,0x0036(r16)
+
  00175838: 00471021 addu r2,r2,r7                |
  00175868: 86030036 lh r3,0x0036(r16)
+
  0017583c: a2020048 sb r2,0x0048(r16)            |{{f/store|Store Exit Side Height}} {{f/std| Height * 2 + Halve * Exit Side slope mod (0,1 or 2)}}
  0017586c: 00000000 nop
+
  00175840: 9202004c lbu r2,0x004c(r16)           |{{f/load|Tile's Height*2}}
  00175870: 04600009 bltz r3,0x00175898
+
  00175844: 00001812 mflo r3                      |{{f/std|Opposite Side slope mod * Halves}}
00175874: a2020046 sb r2,0x0046(r16)
+
  00175848: 00431021 addu r2,r2,r3               |{{f/std|Opposite Side Height}}
  00175878: 8602001a lh r2,0x001a(r16)
+
  0017584c: a2020049 sb r2,0x0049(r16)            |{{f/store|Store Opposite Side Height}}
  0017587c: 00000000 nop
+
  00175850: 92020048 lbu r2,0x0048(r16)          |{{f/load|Exit Side Height}}
00175880: 02221021 addu r2,r17,r2
+
  00175854: 92030049 lbu r3,0x0049(r16)           |{{f/load|Opposite Side Height}}
  00175884: 90420000 lbu r2,0x0000(r2)
+
  00175858: 92070048 lbu r7,0x0048(r16)          |{{f/load|Exit Side Height}} {{f/std|(for Jal)}}
  00175888: 00000000 nop
+
  0017585c: 00431023 subu r2,r2,r3                |{{f/std|Delta Height (2 Side)}}
0017588c: 30420040 andi r2,r2,0x0040
+
  00175860: 0c05d859 jal 0x00176164              |{{f/jal|Calculate_Tile_Ceiling|Calculate_Tile_Ceiling}} {{f/std|<nowiki>returns r2 = Ceiling height or 0x7f</nowiki>}}
  00175890: 1440002a bne r2,r0,0x0017593c
+
  00175864: a6020036 sh r2,0x0036(r16)            |{{f/store|Store Height diffences (of the 2 sides)}}
  00175894: 34020003 ori r2,r0,0x0003
+
  00175868: 86030036 lh r3,0x0036(r16)           |{{f/load|Load delta Height}}
00175898: 8e030000 lw r3,0x0000(r16)
+
  0017586c: 00000000 nop                          |
  0017589c: 00000000 nop
+
  00175870: 04600009 bltz r3,0x00175898          {{f/Cond|If Delta height is Valid}}
  001758a0: 90620003 lbu r2,0x0003(r3)
+
  00175874: a2020046 sb r2,0x0046(r16)           |{{f/store|Store ceiling height}}
  001758a4: 00000000 nop
+
  00175878: 8602001a lh r2,0x001a(r16)               |{{f/load|Load Tile ID}}
  001758a8: 304200e0 andi r2,r2,0x00e0
+
  0017587c: 00000000 nop                             |
001758ac: 10400012 beq r2,r0,0x001758f8
+
  00175880: 02221021 addu r2,r17,r2                   |{{f/adr|Pointer to Tile S-Pad 0x200}}
  001758b0: 00000000 nop
+
  00175884: 90420000 lbu r2,0x0000(r2)                |{{f/load|Load Flags}}
001758b4: 9242001c lbu r2,0x001c(r18)
+
  00175888: 00000000 nop                              |
  001758b8: 00000000 nop
+
  0017588c: 30420040 andi r2,r2,0x0040                |{{f/std|Check Unwalkable}}
  001758bc: 304200c0 andi r2,r2,0x00c0
+
  00175890: 1440002a bne r2,r0,0x0017593c            {{f/Cond|If Tile is unWalkable (0x40 if ON) : }} {{f/Cond|{{f/loc| Exit and returns 0x03}}}}
  001758c0: 1040000d beq r2,r0,0x001758f8
+
  00175894: 34020003 ori r2,r0,0x0003                    |
  001758c4: 00000000 nop
+
  00175898: 8e030000 lw r3,0x0000(r16)           |{{f/adr|Load Tile's data pointer ( 8019f8cc Table)}}
001758c8: 90620003 lbu r2,0x0003(r3)
+
  0017589c: 00000000 nop                          |
  001758cc: 92030048 lbu r3,0x0048(r16)
+
  001758a0: 90620003 lbu r2,0x0003(r3)            |{{f/load|Halve + Depth}}
  001758d0: 00021142 srl r2,r2,0x05
+
001758a4: 00000000 nop                          |
  001758d4: 00021040 sll r2,r2,0x01
+
  001758a8: 304200e0 andi r2,r2,0x00e0            |{{f/std|Depth only}}
  001758d8: 00621821 addu r3,r3,r2
+
  001758ac: 10400012 beq r2,r0,0x001758f8        {{f/Cond|If depht > 0x00}}
001758dc: a2030048 sb r3,0x0048(r16)
+
  001758b0: 00000000 nop                              |
  001758e0: 9242001c lbu r2,0x001c(r18)
+
  001758b4: 9242001c lbu r2,0x001c(r18)              |{{f/load|Load Unit's Movement 3}}
  001758e4: 00000000 nop
+
  001758b8: 00000000 nop                              |
  001758e8: 30420040 andi r2,r2,0x0040
+
  001758bc: 304200c0 andi r2,r2,0x00c0                |{{f/std|Check on/in Water}}
  001758ec: 10400002 beq r2,r0,0x001758f8
+
  001758c0: 1040000d beq r2,r0,0x001758f8            {{f/Cond|If Unit Can walk on/in water}}
  001758f0: 246200fe addiu r2,r3,0x00fe
+
001758c4: 00000000 nop                                  |
  001758f4: a2020048 sb r2,0x0048(r16)
+
001758c8: 90620003 lbu r2,0x0003(r3)                   |{{f/load|Halve + Depth}}
  001758f8: 9602001a lhu r2,0x001a(r16)
+
  001758cc: 92030048 lbu r3,0x0048(r16)                  |{{f/load|Exit Side Height}}
  001758fc: 00000000 nop
+
001758d0: 00021142 srl r2,r2,0x05                      |{{f/std|Depht only}}
  00175900: a602001e sh r2,0x001e(r16)
+
001758d4: 00021040 sll r2,r2,0x01                      |{{f/std|Depht * 2}}
  00175904: 00021400 sll r2,r2,0x10
+
001758d8: 00621821 addu r3,r3,r2                        |
  00175908: 00021403 sra r2,r2,0x10
+
001758dc: a2030048 sb r3,0x0048(r16)                    |{{f/store|Add Depth*2 to Exit side height}}
  0017590c: 00021880 sll r3,r2,0x02
+
001758e0: 9242001c lbu r2,0x001c(r18)                  |{{f/load|Load Unit's Movement 3}}
  00175910: 00621821 addu r3,r3,r2
+
001758e4: 00000000 nop                                  |
  00175914: 3c028019 lui r2,0x8019
+
001758e8: 30420040 andi r2,r2,0x0040                    |
  00175918: 24422dd8 addiu r2,r2,0x2dd8
+
001758ec: 10400002 beq r2,r0,0x001758f8                {{f/Cond|If Unit Uses Move in Water}}
  0017591c: 00621821 addu r3,r3,r2
+
001758f0: 246200fe addiu r2,r3,-0x0002                      |{{f/std|Path Heght - 2}}
  00175920: ae030010 sw r3,0x0010(r16)
+
001758f4: a2020048 sb r2,0x0048(r16)                        |{{f/store|Add Depth*2 - 2 to Exit side Height}}
  00175924: 8e020010 lw r2,0x0010(r16)
+
001758f8: 9602001a lhu r2,0x001a(r16)          |{{f/load|Load Tile ID}}
  00175928: 00000000 nop
+
001758fc: 00000000 nop                          |
0017592c: 90420000 lbu r2,0x0000(r2)
+
00175900: a602001e sh r2,0x001e(r16)            |{{f/store|Store Tile's ID in 0x1e}}
00175930: 00000000 nop
+
00175904: 00021400 sll r2,r2,0x10              |
  00175934: 2c420002 sltiu r2,r2,0x0002
+
00175908: 00021403 sra r2,r2,0x10              |
  00175938: 00021080 sll r2,r2,0x02
+
0017590c: 00021880 sll r3,r2,0x02              |{{f/std|Tile ID *4}}
  0017593c: 8fbf001c lw r31,0x001c(r29)
+
00175910: 00621821 addu r3,r3,r2                |{{f/std|Tile ID * 5}}
 +
00175914: 3c028019 lui r2,0x8019                |
 +
00175918: 24422dd8 addiu r2,r2,0x2dd8          |
 +
0017591c: 00621821 addu r3,r3,r2                |{{f/adr|Tile Offset in Targetable grid data ( 80192dd8 )}}
 +
00175920: ae030010 sw r3,0x0010(r16)            |{{f/store|Store pointer}}
 +
                                        {{f/sec|--- End section --}}
 +
00175924: 8e020010 lw r2,0x0010(r16)        |{{f/adr|Load Grid Pointer / Unit post grid pointer}}
 +
00175928: 00000000 nop                      |
 +
0017592c: 90420000 lbu r2,0x0000(r2)        |{{f/load|Load Tile's AoE data}}
 +
00175930: 00000000 nop                      |
 +
00175934: 2c420002 sltiu r2,r2,0x0002      |{{f/std|1 if AoE < 2}}
 +
  00175938: 00021080 sll r2,r2,0x02           |{{f/std|4 if AoE < 2 / Else 0x00}}
 +
  0017593c: 8fbf001c lw r31,0x001c(r29)       END
 
  00175940: 8fb20018 lw r18,0x0018(r29)
 
  00175940: 8fb20018 lw r18,0x0018(r29)
 
  00175944: 8fb10014 lw r17,0x0014(r29)
 
  00175944: 8fb10014 lw r17,0x0014(r29)
Line 184: Line 201:
 
  00175950: 03e00008 jr r31
 
  00175950: 03e00008 jr r31
 
  00175954: 00000000 nop
 
  00175954: 00000000 nop
</font>
+
=== Return Location ===
 +
'''BATTLE.BIN'''
 +
00175f38: [[Check_and_Spread_Movement_One_Tile_Around]]
 +
00176560: [[Spread_Horizontal_Jump]]

Revision as of 19:47, 1 June 2023

BATTLE.BIN : Set Origin Height Data
---------------------------------------------------------------------------------------------------------
Parameters : r4 - Preset value (some loop counter from previous routine) 
                   0x0 to 0x3 : Tile Path Height (4 directions) 
                   0x4 to 0x7 : Check Unit Path (if any)
                   Above 0x8 (context ?) seems to increment height above unit (?)

Returns  : r2 = 0x00 if AoE of move is not finsihed
           r2 = 0x04 if AoE ended
           r2 = 0x01 when ? (Above 8 section)

Multiple Height Check to finaly set some Origin height data in S-Pad 0x180
(0x48 0x49 0x36 0x46 0x1d 0x10)
------------------------------------------------------------------------------------------------------------
0017567c: 27bdffe0 addiu r29,r29,-0x0020    |
00175680: afb20018 sw r18,0x0018(r29)       |
00175684: 3c128019 lui r18,0x8019           |
00175688: 8e52f4e0 lw r18,-0x0b20(r18)      |Pointer to scratch pad (0x1f800000)
0017568c: afb10014 sw r17,0x0014(r29)       |
00175690: 3c118019 lui r17,0x8019           |
00175694: 8e31f4f0 lw r17,-0x0b10(r17)      |Pointer to Scratch Pad (0x1f800200)
00175698: afb00010 sw r16,0x0010(r29)       |
0017569c: 3c108019 lui r16,0x8019           |
001756a0: 8e10f4e4 lw r16,-0x0b1c(r16)      |Pointer to Scratch Pad (0x1f800180)
001756a4: 3c058019 lui r5,0x8019            |
001756a8: 8ca5f4e8 lw r5,-0x0b18(r5)        |Pointer to scratch pad (0x080)- Non Acting Unit coordinate wil be stored here
001756ac: 28830008 slti r3,r4,0x0008        |
001756b0: 10600005 beq r3,r0,0x001756c8     #If Counter < 8
001756b4: afbf001c sw r31,0x001c(r29)           |
001756b8: 92020040 lbu r2,0x0040(r16)           |Load Tile/Unit Path flag
001756bc: 00000000 nop                          |
001756c0: 1040004a beq r2,r0,0x001757ec         #If Path flag = 0 then branch to ' # Tile section'
001756c4: 00000000 nop                              |
001756c8: 8e020008 lw r2,0x0008(r16)        |Pointer : Tile's data in Targetable grid table 80192dd8
001756cc: 00000000 nop                      |
001756d0: 90420002 lbu r2,0x0002(r2)        |Unit ID on Tile
001756d4: 14600020 bne r3,r0,0x00175758     #If Value is between 4 and 7 Branch to' # Unit section'
001756d8: a2020041 sb r2,0x0041(r16)        |Store Unit ID 
                                        8 or Above
001756dc: 92030041 lbu r3,0x0041(r16)       |Unit ID
001756e0: 00000000 nop                      |
001756e4: 000310c0 sll r2,r3,0x03           |
001756e8: 00431023 subu r2,r2,r3            |Unit ID * 7
001756ec: 04810002 bgez r4,0x001756f8       #If Preset value < 0x00
001756f0: 00452821 addu r5,r2,r5            |Pointer to Unit data in S-Pad 0x80
001756f4: 24840003 addiu r4,r4,0x0003           |Value +3
001756f8: 92020058 lbu r2,0x0058(r16)       |Load Slope Type
001756fc: 92030044 lbu r3,0x0044(r16)       |Load Origin Slope Mod
00175700: 00000000 nop                      |
00175704: 00621007 srav r2,r2,r3            |Side slope
00175708: 92030056 lbu r3,0x0056(r16)       |Load Tile's Halves
0017570c: 30420003 andi r2,r2,0x0003        |
00175710: 00620018 mult r3,r2               |
00175714: 90a20005 lbu r2,0x0005(r5)        |Unit Height
00175718: 00041883 sra r3,r4,0x02           |Preset Value / 4
0017571c: 00431021 addu r2,r2,r3            |Unit Total Height + Preset Value/4
00175720: 2442fffe addiu r2,r2,-0x0002      |
00175724: a2020048 sb r2,0x0048(r16)        |Store Unit Height + PV/4 - 2
00175728: 9202004c lbu r2,0x004c(r16)       |Load Origin's Height*2
0017572c: 00001812 mflo r3                  |Slope Type * Halves
00175730: 00431021 addu r2,r2,r3            |
00175734: a2020050 sb r2,0x0050(r16)        |Store Origin exit side's Height
00175738: 92020048 lbu r2,0x0048(r16)       |Load Unit Total Height
0017573c: 92030050 lbu r3,0x0050(r16)       |Load Tile's Size height
00175740: 00000000 nop                      |
00175744: 0043102b sltu r2,r2,r3            |
00175748: 10400013 beq r2,r0,0x00175798     #If Unit Height + PV mod > Origin Exit Size  Branch in section below
0017574c: 34020001 ori r2,r0,0x0001             |
00175750: 0805d64f j 0x0017593c             >>If not Returns 0x1
00175754: 00000000 nop                      |
                                        --- Above Unit Path (Counter 4 to 7) ---
00175758: 8602001a lh r2,0x001a(r16)        |Load Tile ID
0017575c: 00000000 nop                      |
00175760: 02221021 addu r2,r17,r2           |Tile's data pointer in S-Pad 0x200
00175764: 90420000 lbu r2,0x0000(r2)        |Load Tile's flags
00175768: 00000000 nop                      |
0017576c: 30420008 andi r2,r2,0x0008        |Check 0x08 (Fly - Ally with stepping stone)
00175770: 10400072 beq r2,r0,0x0017593c     #If Flag 0x08 is ON #Else returns 0x2
00175774: 34020002 ori r2,r0,0x0002         |0x2
00175778: 92020041 lbu r2,0x0041(r16)           |Load Unit ID
0017577c: 00000000 nop                          |
00175780: 000218c0 sll r3,r2,0x03               |ID*8
00175784: 00621823 subu r3,r3,r2                |ID*7
00175788: 00651821 addu r3,r3,r5                |Pointer to Unit data in S-Pad 0x80
0017578c: 90620006 lbu r2,0x0006(r3)            |Tile Height + unit Size
00175790: 00000000 nop                          |
00175794: a2020048 sb r2,0x0048(r16)            |Store Height + Size
                                        --- > 8 Section Branch here ---
00175798: 86040026 lh r4,0x0026(r16)            |Tile's X Coord (for Jal)
0017579c: 86050028 lh r5,0x0028(r16)            |Tile's Y Coord (for Jal)
001757a0: 92060044 lbu r6,0x0044(r16)           |Exit Side slope mod (for Jal)
001757a4: 92070048 lbu r7,0x0048(r16)           |Height + Size (for Jal)
001757a8: 92020048 lbu r2,0x0048(r16)           |Height + Size
001757ac: a6000036 sh r0,0x0036(r16)            |Reset 0x36
001757b0: 24e7ffff addiu r7,r7,-0x0001          |Height - 1
001757b4: 30e700ff andi r7,r7,0x00ff            |Byte only
001757b8: 0c05d859 jal 0x00176164               |-->Calculate_Tile_Ceiling returns r2 = Ceiling height or 0x7f (Height from unit head here)
001757bc: a2020049 sb r2,0x0049(r16)            |Store Height + Size
001757c0: 92030041 lbu r3,0x0041(r16)           |Unit ID
001757c4: a2020046 sb r2,0x0046(r16)            |Store Ceiling Height
001757c8: 24630200 addiu r3,r3,0x0200           |Unit ID + 0x200
001757cc: 00031080 sll r2,r3,0x02               |
001757d0: 00431021 addu r2,r2,r3                |Pointer to Unit data in Post-Grid Table  801937d8
001757d4: a603001e sh r3,0x001e(r16)            |Unit Offset in Post-Grid Table
001757d8: 3c038019 lui r3,0x8019                |
001757dc: 24632dd8 addiu r3,r3,0x2dd8           |Start of Targetable grid data
001757e0: 00431021 addu r2,r2,r3                |Unit Data (Offset 0x05) at 801937d8
001757e4: 0805d649 j 0x00175924                 >>End section
001757e8: ae020010 sw r2,0x0010(r16)            |Store pointer
                                        ---- Tile Section ---
001757ec: 92020058 lbu r2,0x0058(r16)           |Load Tile's Slope Type
001757f0: 92030044 lbu r3,0x0044(r16)           |Load Exit Side Slope Mod
001757f4: 00000000 nop                          |
001757f8: 00621007 srav r2,r2,r3                |
001757fc: 92030056 lbu r3,0x0056(r16)           |Load Tile's Halves
00175800: 30420003 andi r2,r2,0x0003            |Exit Side Slope mod
00175804: 00620018 mult r3,r2                   |
00175808: 92020058 lbu r2,0x0058(r16)           |Slope Type
0017580c: 92030045 lbu r3,0x0045(r16)           |Opposite Side Slope Mod
00175810: 00000000 nop                          |
00175814: 00621007 srav r2,r2,r3                |
00175818: 00003812 mflo r7                      |Exit Side slope mod * Halves
0017581c: 92030056 lbu r3,0x0056(r16)           |Tile's Halves
00175820: 30420003 andi r2,r2,0x0003            |
00175824: 00620018 mult r3,r2                   |
00175828: 86040026 lh r4,0x0026(r16)            |X Coord (for Jal)
0017582c: 86050028 lh r5,0x0028(r16)            |Y Coord  (for Jal)
00175830: 9202004c lbu r2,0x004c(r16)           |Tile's Height*2
00175834: 92060044 lbu r6,0x0044(r16)           |Exit Side Slope Mod (for Jal)
00175838: 00471021 addu r2,r2,r7                |
0017583c: a2020048 sb r2,0x0048(r16)            |Store Exit Side Height  Height * 2 + Halve * Exit Side slope mod (0,1 or 2)
00175840: 9202004c lbu r2,0x004c(r16)           |Tile's Height*2
00175844: 00001812 mflo r3                      |Opposite Side slope mod * Halves
00175848: 00431021 addu r2,r2,r3                |Opposite Side Height
0017584c: a2020049 sb r2,0x0049(r16)            |Store Opposite Side Height
00175850: 92020048 lbu r2,0x0048(r16)           |Exit Side Height
00175854: 92030049 lbu r3,0x0049(r16)           |Opposite Side Height
00175858: 92070048 lbu r7,0x0048(r16)           |Exit Side Height (for Jal)
0017585c: 00431023 subu r2,r2,r3                |Delta Height (2 Side)
00175860: 0c05d859 jal 0x00176164               |-->Calculate_Tile_Ceiling returns r2 = Ceiling height or 0x7f
00175864: a6020036 sh r2,0x0036(r16)            |Store Height diffences (of the 2 sides)
00175868: 86030036 lh r3,0x0036(r16)            |Load delta Height
0017586c: 00000000 nop                          |
00175870: 04600009 bltz r3,0x00175898           #If Delta height is Valid
00175874: a2020046 sb r2,0x0046(r16)            |Store ceiling height
00175878: 8602001a lh r2,0x001a(r16)                |Load Tile ID
0017587c: 00000000 nop                              |
00175880: 02221021 addu r2,r17,r2                   |Pointer to Tile S-Pad 0x200
00175884: 90420000 lbu r2,0x0000(r2)                |Load Flags
00175888: 00000000 nop                              |
0017588c: 30420040 andi r2,r2,0x0040                |Check Unwalkable
00175890: 1440002a bne r2,r0,0x0017593c             #If Tile is unWalkable (0x40 if ON) :  #' Exit and returns 0x03'
00175894: 34020003 ori r2,r0,0x0003                     |
00175898: 8e030000 lw r3,0x0000(r16)            |Load Tile's data pointer ( 8019f8cc Table)
0017589c: 00000000 nop                          |
001758a0: 90620003 lbu r2,0x0003(r3)            |Halve + Depth
001758a4: 00000000 nop                          |
001758a8: 304200e0 andi r2,r2,0x00e0            |Depth only
001758ac: 10400012 beq r2,r0,0x001758f8         #If depht > 0x00
001758b0: 00000000 nop                              |
001758b4: 9242001c lbu r2,0x001c(r18)               |Load Unit's Movement 3
001758b8: 00000000 nop                              |
001758bc: 304200c0 andi r2,r2,0x00c0                |Check on/in Water
001758c0: 1040000d beq r2,r0,0x001758f8             #If Unit Can walk on/in water
001758c4: 00000000 nop                                  |
001758c8: 90620003 lbu r2,0x0003(r3)                    |Halve + Depth
001758cc: 92030048 lbu r3,0x0048(r16)                   |Exit Side Height
001758d0: 00021142 srl r2,r2,0x05                       |Depht only
001758d4: 00021040 sll r2,r2,0x01                       |Depht * 2
001758d8: 00621821 addu r3,r3,r2                        |
001758dc: a2030048 sb r3,0x0048(r16)                    |Add Depth*2 to Exit side height
001758e0: 9242001c lbu r2,0x001c(r18)                   |Load Unit's Movement 3
001758e4: 00000000 nop                                  |
001758e8: 30420040 andi r2,r2,0x0040                    |
001758ec: 10400002 beq r2,r0,0x001758f8                 #If Unit Uses Move in Water
001758f0: 246200fe addiu r2,r3,-0x0002                      |Path Heght - 2
001758f4: a2020048 sb r2,0x0048(r16)                        |Add Depth*2 - 2 to Exit side Height
001758f8: 9602001a lhu r2,0x001a(r16)           |Load Tile ID
001758fc: 00000000 nop                          |
00175900: a602001e sh r2,0x001e(r16)            |Store Tile's ID in 0x1e
00175904: 00021400 sll r2,r2,0x10               |
00175908: 00021403 sra r2,r2,0x10               |
0017590c: 00021880 sll r3,r2,0x02               |Tile ID *4
00175910: 00621821 addu r3,r3,r2                |Tile ID * 5
00175914: 3c028019 lui r2,0x8019                |
00175918: 24422dd8 addiu r2,r2,0x2dd8           |
0017591c: 00621821 addu r3,r3,r2                |Tile Offset in Targetable grid data ( 80192dd8 )
00175920: ae030010 sw r3,0x0010(r16)            |Store pointer
                                        --- End section --
00175924: 8e020010 lw r2,0x0010(r16)        |Load Grid Pointer / Unit post grid pointer
00175928: 00000000 nop                      |
0017592c: 90420000 lbu r2,0x0000(r2)        |Load Tile's AoE data
00175930: 00000000 nop                      |
00175934: 2c420002 sltiu r2,r2,0x0002       |1 if  AoE < 2
00175938: 00021080 sll r2,r2,0x02           |4 if AoE < 2 / Else 0x00
0017593c: 8fbf001c lw r31,0x001c(r29)       END
00175940: 8fb20018 lw r18,0x0018(r29)
00175944: 8fb10014 lw r17,0x0014(r29)
00175948: 8fb00010 lw r16,0x0010(r29)
0017594c: 27bd0020 addiu r29,r29,0x0020
00175950: 03e00008 jr r31
00175954: 00000000 nop

Return Location

BATTLE.BIN
00175f38: Check_and_Spread_Movement_One_Tile_Around
00176560: Spread_Horizontal_Jump