Difference between revisions of "Set Tile Flags for Pathfinding"
Jump to navigation
Jump to search
(Created page with "<font face='Courier New'> 00174e84: 00806021 addu r12,r4,r0 00174e88: 00004021 addu r8,r0,r0 00174e8c: 00003821 addu r7,r0,r0 00174e90: 3c098019 lui r9,0x8019 00174e94:...") |
m (Orkney moved page 00174e84 - 00175284 to Set Tile Flags for Pathfinding) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | BATTLE.BIN : Set Tile's Flags for Pathfinding | |
+ | ------------------------------------------------------------------------------------------------------- | ||
+ | Parameters : r4 - Preset Value | ||
+ | 0x01 - Whole routine | ||
+ | - Exclusive : Nullify Grid 0x04, set Grid/Post grid 0x00 to Unit Move +1 | ||
+ | Set value of counters at S-Pad 0x184 - 0x54 and 0x55 | ||
+ | 0x02 - Preserves Grid 0x00, 0x03 and 0x04 bytes | ||
+ | - Avoid Initialization of reachable tile counter (S-Pad 0x180 - 0x18) | ||
+ | 0x03 - Does not set flags relating to the presence of units | ||
+ | |||
+ | Returns : nothing | ||
− | + | Set Some Tile Flag on scratch Pad 0x1f800200 | |
− | + | Initialize data on Targetable Grid ( 80192dd8 )and post grid ( 801937d8 ) | |
− | + | ------------------------------------------------------------------------------------------------------- | |
− | + | 00174e84: 00806021 addu r12,r4,r0 |{{f/std|Preset value}} | |
− | + | 00174e88: 00004021 addu r8,r0,r0 |{{f/std|Initialize Tile counter}} | |
− | + | 00174e8c: 00003821 addu r7,r0,r0 |{{f/std|Initialize Offset in targetable grid (+5 each iteration)}} | |
− | + | 00174e90: 3c098019 lui r9,0x8019 | | |
− | + | 00174e94: 8d29f4e0 lw r9,-0x0b20(r9) |{{f/adr|Pointer to scratch pad}} [[1f800000|<span style=color:blue>0x1f800000</span>]] | |
− | + | 00174e98: 3c0d8019 lui r13,0x8019 | | |
− | + | 00174e9c: 8dadf4e4 lw r13,-0x0b1c(r13) |{{f/adr|Pointer to Scratch Pad}} [[1f800180|<span style=color:blue>0x1f800180</span>]] | |
− | + | 00174ea0: 3c0b8019 lui r11,0x8019 | | |
− | + | 00174ea4: 8d6bf4f0 lw r11,-0x0b10(r11) |{{f/adr|Pointer to Scratch Pad}} [[1f800200|<span style=color:blue>0x1f800200</span>]] | |
− | + | 00174ea8: 3c0e8019 lui r14,0x8019 | | |
− | + | 00174eac: 8dcef4e8 lw r14,-0x0b18(r14) |{{f/adr|Pointer to scratch pad}} [[1f800080|<span style=color:blue>0x1f800080</span>]] | |
− | + | 00174eb0: 01602021 addu r4,r11,r0 |{{f/adr|Dynamic pointer to Scratch Pad 0x200 (+1 each iteration)}} | |
− | + | 00174eb4: 01603021 addu r6,r11,r0 |{{f/adr|Dynamic pointer to Scratch Pad 0x200 (+1 each iteration)}} | |
− | + | 00174eb8: 3c028019 lui r2,0x8019 |{{f/std|LOOP - through each Tile}} {{f/std|0x210 Loop - the 0x10 Extra are for Unit Post Grid data}} | |
− | + | 00174ebc: 24422dd8 addiu r2,r2,0x2dd8 | | |
− | + | 00174ec0: 00e22821 addu r5,r7,r2 |{{f/adr|Pointer to this iteration Tile in Targetable grid}} {{f/std| 80192dd8}} | |
− | + | 00174ec4: 31820001 andi r2,r12,0x0001 | | |
− | + | 00174ec8: a0a00001 sb r0,0x0001(r5) |{{f/store|Initialize Tile's Grid 0x01 / Initial colour }} | |
− | + | 00174ecc: 10400005 beq r2,r0,0x00174ee4 {{f/Cond|If preset value has flag 0x01}} {{f/std|0x1 or 0x3}} | |
− | + | 00174ed0: a0a00002 sb r0,0x0002(r5) |{{f/store|Initialize Tile's grid 0x02 (Unit ID on Tile)}} | |
− | + | 00174ed4: 340200ff ori r2,r0,0x00ff | | |
− | + | 00174ed8: a0a00000 sb r0,0x0000(r5) |{{f/store|Initialize Tile Grid data 0x00}} | |
− | + | 00174edc: a0a00003 sb r0,0x0003(r5) |{{f/store|Initialize Tile data 0x03}} | |
− | + | 00174ee0: a0a20004 sb r2,0x0004(r5) |{{f/store|0xff in Tile data 0x04}} | |
− | + | 00174ee4: 29020200 slti r2,r8,0x0200 | | |
− | + | 00174ee8: 10400055 beq r2,r0,0x00175040 {{f/Cond|If Loop counter < 0x200}} | |
− | + | 00174eec: 000818c0 sll r3,r8,0x03 |{{f/std|Tile ID * 8}} | |
− | + | 00174ef0: 3c028019 lui r2,0x8019 | | |
− | + | 00174ef4: 2442f8cc addiu r2,r2,-0x0734 | | |
− | + | 00174ef8: 00622821 addu r5,r3,r2 |{{f/adr|This iteration Tile data pointer (8019f8cc)}} | |
− | + | 00174efc: a0c00000 sb r0,0x0000(r6) |{{f/store|Initialize this Tile data in scratch pad (0x200)}} | |
− | + | 00174f00: 90a20004 lbu r2,0x0004(r5) |{{f/load|Load Tile's Slope Type}} | |
− | + | 00174f04: 00000000 nop | | |
− | + | 00174f08: 30430005 andi r3,r2,0x0005 |{{f/std|Keep West and East data}} | |
− | + | 00174f0c: 34020001 ori r2,r0,0x0001 | | |
− | + | 00174f10: 10620003 beq r3,r2,0x00174f20 {{f/Cond|If Slope type 0x41 or 0x11 Branch to Low corner section}} | |
− | + | 00174f14: 34020004 ori r2,r0,0x0004 | | |
− | + | 00174f18: 1462000d bne r3,r2,0x00174f50 {{f/Cond|If Slope type 0x14 0x44 / Else Avoid low corner section}} | |
− | + | 00174f1c: 00000000 nop | | |
− | + | {{f/sec|Low Corner Section}} | |
− | + | 00174f20: 90830000 lbu r3,0x0000(r4) |{{f/load|Load Scratch Pad data}} | |
− | + | 00174f24: 00000000 nop | | |
− | + | 00174f28: 34620002 ori r2,r3,0x0002 | | |
− | + | 00174f2c: a0820000 sb r2,0x0000(r4) |{{f/store|Enable flag 0x02 on S-Pad 0x200 }} | |
− | + | 00174f30: 90a20003 lbu r2,0x0003(r5) |{{f/load|Load Halves}} | |
− | + | 00174f34: 00000000 nop | | |
− | + | 00174f38: 3042001f andi r2,r2,0x001f | | |
− | + | 00174f3c: 28420003 slti r2,r2,0x0003 | | |
− | + | 00174f40: 1440000d bne r2,r0,0x00174f78 {{f/Cond|If Halves > 0x2 / Else ignore Slope section}} | |
− | + | 00174f44: 34620042 ori r2,r3,0x0042 | | |
− | + | 00174f48: 0805d3de j 0x00174f78 {{f/jump|Avoid Others Slope Type section}} | |
− | + | 00174f4c: a0820000 sb r2,0x0000(r4) |{{f/store|Enable flag 0x42 on S-Pad 0x200}} | |
− | + | {{f/sec|Not a Low Corner}} | |
− | + | 00174f50: 90a20003 lbu r2,0x0003(r5) |{{f/load|Load Halves}} | |
− | + | 00174f54: 91230004 lbu r3,0x0004(r9) |{{f/load|Load Acting Unit Jump}} {{f/std| routine at 00174430}} | |
− | + | 00174f58: 3042001f andi r2,r2,0x001f | | |
− | + | 00174f5c: 0062182a slt r3,r3,r2 | | |
− | + | 00174f60: 10600005 beq r3,r0,0x00174f78 {{f/Cond|If Acting Unit Jump < Halves}} | |
− | + | 00174f64: 00000000 nop | | |
− | + | 00174f68: 90820000 lbu r2,0x0000(r4) |{{f/load|Load Tile's 0x00 (scratch pad)}} | |
− | + | 00174f6c: 00000000 nop | | |
− | + | 00174f70: 34420040 ori r2,r2,0x0040 | | |
− | + | 00174f74: a0820000 sb r2,0x0000(r4) |{{f/store|Update Tile's Flag in S-Pad 0x200}} {{f/std|This Flag is checked while climbing up}} | |
− | + | {{f/sec|--- All cases ---}} | |
− | + | 00174f78: 90a20006 lbu r2,0x0006(r5) |{{f/load|Load Tile's data 0x06}} | |
− | + | 00174f7c: 00000000 nop | | |
− | + | 00174f80: 30430001 andi r3,r2,0x0001 |{{f/std|Check [Unselectable]}} | |
− | + | 00174f84: 00021042 srl r2,r2,0x01 | | |
− | + | 00174f88: 30420001 andi r2,r2,0x0001 |{{f/std|Check [Cannot Target] (after right shift…)}} | |
− | + | 00174f8c: 00621825 or r3,r3,r2 | | |
− | + | 00174f90: 14600014 bne r3,r0,0x00174fe4 {{f/Cond|If Tile Can beTargeted or Selected }} {{f/std|Else Avoid Flag 0x10}} | |
− | + | 00174f94: 00000000 nop | | |
− | + | 00174f98: 90a20003 lbu r2,0x0003(r5) |{{f/load|Load Halves/Depth}} | |
− | + | 00174f9c: 00000000 nop | | |
− | + | 00174fa0: 00021942 srl r3,r2,0x05 |{{f/std|Keep Depth}} | |
− | + | 00174fa4: 10600005 beq r3,r0,0x00174fbc {{f/Cond|If Depht <> 0x00}} | |
− | + | 00174fa8: 2c620004 sltiu r2,r3,0x0004 |{{f/std|Depth Vs 0x4}} | |
− | + | 00174fac: 91220011 lbu r2,0x0011(r9) |{{f/load|Load Cannot enter water flag}} | |
− | + | 00174fb0: 00000000 nop | | |
− | + | 00174fb4: 1440000b bne r2,r0,0x00174fe4 {{f/Cond|Avoid Flag 0x10 if cannot enter water}} | |
− | + | 00174fb8: 2c620004 sltiu r2,r3,0x0004 | | |
− | + | 00174fbc: 14400005 bne r2,r0,0x00174fd4 {{f/Cond|If Depht > 3}} | |
− | + | 00174fc0: 00000000 nop | | |
− | + | 00174fc4: 91220013 lbu r2,0x0013(r9) |{{f/load|Load Walk in/on water flag (0 if ok)}} | |
− | + | 00174fc8: 00000000 nop | | |
− | + | 00174fcc: 14400005 bne r2,r0,0x00174fe4 {{f/Cond|Avoid Flag 0x10 if can't go at this depht}} | |
− | + | 00174fd0: 00000000 nop | | |
− | + | 00174fd4: 90820000 lbu r2,0x0000(r4) |{{f/load|Load Tiles flag}} | |
− | + | 00174fd8: 00000000 nop | | |
− | + | 00174fdc: 34420010 ori r2,r2,0x0010 | | |
− | + | 00174fe0: a0820000 sb r2,0x0000(r4) |{{f/store|Enable flag 0x10}} | |
− | + | {{f/sec|--- All cases ---}} | |
− | + | 00174fe4: 90a30006 lbu r3,0x0006(r5) |{{f/load|Load Tile's data 0x06}} | |
− | + | 00174fe8: 00000000 nop | | |
− | + | 00174fec: 30620001 andi r2,r3,0x0001 | | |
− | + | 00174ff0: 10400004 beq r2,r0,0x00175004 {{f/Cond|If Tile is Unselectable}} | |
− | + | 00174ff4: 00000000 nop | | |
− | + | 00174ff8: 90820000 lbu r2,0x0000(r4) |{{f/load|Load Tiles 0x00 (scratchpad)}} | |
− | + | 00174ffc: 0805d40f j 0x0017503c {{f/jump|Jump with flag 0x80 and store it in scratch pad}} | |
− | + | 00175000: 34420080 ori r2,r2,0x0080 | | |
− | + | '''Else : Tile is selectable ''' | |
− | + | 00175004: 9122000e lbu r2,0x000e(r9) |{{f/load|Load Acting unit Move Type}} | |
− | + | 00175008: 00000000 nop | | |
− | + | 0017500c: 1440000c bne r2,r0,0x00175040 {{f/Cond|If Unit is Flying}} | |
− | + | 00175010: 30620002 andi r2,r3,0x0002 | | |
− | + | 00175014: 1040000a beq r2,r0,0x00175040 {{f/Cond|If Tile is not targetable}} | |
− | + | 00175018: 3403003f ori r3,r0,0x003f | | |
− | + | 0017501c: 90a20000 lbu r2,0x0000(r5) |{{f/load|Load Tile's Type}} | |
− | + | 00175020: 00000000 nop | | |
− | + | 00175024: 3042003f andi r2,r2,0x003f |{{f/std|Keep Type Only}} | |
− | + | 00175028: 10430005 beq r2,r3,0x00175040 {{f/Cond|If Tile is not a Cross Section}} | |
− | + | 0017502c: 00000000 nop | | |
− | + | 00175030: 90820000 lbu r2,0x0000(r4) |{{f/load|Load Tiles 0x00 (scratchpad)}} | |
− | + | 00175034: 00000000 nop | | |
− | + | 00175038: 34420010 ori r2,r2,0x0010 | | |
− | + | 0017503c: a0820000 sb r2,0x0000(r4) |{{f/store|Enable flag 0x10}} | |
− | + | '''End of the "Tile only" loop part ''' | |
− | + | 00175040: 24840001 addiu r4,r4,0x0001 |{{f/adr|Offset of scratchpad data + 1}} | |
− | + | 00175044: 24c60001 addiu r6,r6,0x0001 |{{f/adr|Offset of scratchpad data + 1 (only use to intialize data…on Grid + 210)}} | |
− | + | 00175048: 25080001 addiu r8,r8,0x0001 |{{f/std|Loop counter +1}} | |
− | + | 0017504c: 29020210 slti r2,r8,0x0210 | | |
− | + | 00175050: 1440ff99 bne r2,r0,0x00174eb8 {{f/eloop|Loop 0x210 times}} {{f/std|Grid and Post-Grid entries}} | |
− | + | 00175054: 24e70005 addiu r7,r7,0x0005 |{{f/adr|Targetable grid offset}} | |
− | + | 00175058: 34020003 ori r2,r0,0x0003 | | |
− | + | 0017505c: 11820052 beq r12,r2,0x001751a8 {{f/Cond|If Preset value <> 0x03}} | |
− | + | 00175060: 31820001 andi r2,r12,0x0001 | | |
− | + | 00175064: 00004021 addu r8,r0,r0 |{{f/std|Initialize Unit counter}} | |
− | + | 00175068: 01c03821 addu r7,r14,r0 |{{f/adr|Dynamic Pointer to Other units Scratchpad ( 0x1f800080 )}} | |
− | + | '''LOOP - 0x10 (Unit in S-Pad 0x80)''' | |
− | + | 0017506c: 90e60003 lbu r6,0x0003(r7) |{{f/load|This iteration Unit ID}} | |
− | + | 00175070: 340200ff ori r2,r0,0x00ff | | |
− | + | 00175074: 30c300ff andi r3,r6,0x00ff | | |
− | + | 00175078: 10620046 beq r3,r2,0x00175194 {{f/Cond|If Unit doesn't exist : branch to}} {{f/loc| Next iteration}} | |
− | + | 0017507c: 00000000 nop | | |
− | + | 00175080: 90e30001 lbu r3,0x0001(r7) |{{f/load|This Unit Y}} | |
− | + | 00175084: 91220018 lbu r2,0x0018(r9) |{{f/load|Map Max Y}} | |
− | + | 00175088: 00000000 nop | | |
− | + | 0017508c: 00620018 mult r3,r2 | | |
− | + | 00175090: 90e20002 lbu r2,0x0002(r7) |{{f/load|This Unit Elevation + Stepping stone}} | |
− | + | 00175094: 90e40000 lbu r4,0x0000(r7) |{{f/load|This Unit X}} | |
− | + | 00175098: 3042007f andi r2,r2,0x007f |{{f/std|Keep only elevation (0x1)}} | |
− | + | 0017509c: 00021200 sll r2,r2,0x08 |{{f/std|0x100 if higher elevation}} | |
− | + | 001750a0: 00001812 mflo r3 |{{f/std|Map MaxY * Unit Y}} | |
− | + | 001750a4: 00431021 addu r2,r2,r3 | | |
− | + | 001750a8: 00445021 addu r10,r2,r4 |{{f/std|This Unit Tile ID}} {{f/std|(MaxY * Y) + X + Elevation offset}} | |
− | + | 001750ac: 30c3001f andi r3,r6,0x001f |{{f/std|Unit ID without other flags}} | |
− | + | 001750b0: 000310c0 sll r2,r3,0x03 | | |
− | + | 001750b4: 00431023 subu r2,r2,r3 | | |
− | + | 001750b8: 00021180 sll r2,r2,0x06 | | |
− | + | 001750bc: 3c018019 lui r1,0x8019 | | |
− | + | 001750c0: 00220821 addu r1,r1,r2 |{{f/adr|Pointer to this iteration Unit battle data}} | |
− | + | 001750c4: 902308cc lbu r3,0x08cc(r1) |{{f/load|Unit Base ID}} | |
− | + | 001750c8: 34020049 ori r2,r0,0x0049 | | |
− | + | 001750cc: 14620007 bne r3,r2,0x001750ec {{f/Cond|If This Unit is Archangel / branch if not - WHAT'- KANZEN??}} | |
− | + | 001750d0: 016a2021 addu r4,r11,r10 |{{f/adr|This Unit Tile's data in scratchpad (0x200)}} | |
− | + | 001750d4: 016a1821 addu r3,r11,r10 |{{f/adr|This Unit Tile's data in scratchpad 0x200}} | |
− | + | 001750d8: 90620000 lbu r2,0x0000(r3) |{{f/load|Load Tile's data}} | |
− | + | 001750dc: 00000000 nop | | |
− | + | 001750e0: 34420080 ori r2,r2,0x0080 | | |
− | + | 001750e4: 304200ef andi r2,r2,0x00ef | | |
− | + | 001750e8: a0620000 sb r2,0x0000(r3) |{{f/store|Update Tile's Flag (enables 0x80 - Disable 0x10)}} {{f/std|Unselectable / Not walkable}} | |
− | + | 001750ec: 000a1080 sll r2,r10,0x02 |{{f/std|Tile's ID * 4}} | |
− | + | 001750f0: 004a1021 addu r2,r2,r10 |{{f/std|Tile's ID * 5}} | |
− | + | 001750f4: 3c018019 lui r1,0x8019 | | |
− | + | 001750f8: 00220821 addu r1,r1,r2 |{{f/adr|Part of pointer to This unit Tile's data in Targetable grid}} | |
− | + | 001750fc: a0282dda sb r8,0x2dda(r1) |{{f/store|Store Unit ID standing in Grid panel 0x02}} | |
− | + | 00175100: 90820000 lbu r2,0x0000(r4) |{{f/load|Load Tile's data (scratchpad 0x200)}} | |
− | + | 00175104: 00000000 nop | | |
− | + | 00175108: 34450004 ori r5,r2,0x0004 |{{f/std|Enable flag 0x04}} | |
− | + | 0017510c: 30c20040 andi r2,r6,0x0040 |{{f/std|Check Not in Active Team flag}} | |
− | + | 00175110: 14400018 bne r2,r0,0x00175174 {{f/Cond|If This Unit is in Acting Unit Team}} | |
− | + | 00175114: a0850000 sb r5,0x0000(r4) |{{f/store|Store Tile's data with 0x04 enabled}} | |
− | + | 00175118: 91220022 lbu r2,0x0022(r9) |{{f/load|Load Acting Stepping stone flag}} | |
− | + | 0017511c: 00000000 nop | | |
− | + | 00175120: 14400006 bne r2,r0,0x0017513c {{f/Cond|If Acting Unit do not have stepping stone}} | |
− | + | 00175124: 30a200f7 andi r2,r5,0x00f7 |{{f/std|Disable 0x08}} | |
− | + | 00175128: 90e30002 lbu r3,0x0002(r7) |{{f/load|Load This iteration Unit Elevation/stepping stone}} | |
− | + | 0017512c: 00000000 nop | | |
− | + | 00175130: 000319c2 srl r3,r3,0x07 |{{f/std|Keep stepping stone (as 0x1)}} | |
− | + | 00175134: 000318c0 sll r3,r3,0x03 |{{f/std|Stepping stone is 0x08 (You can walk on this unit)}} | |
− | + | 00175138: 00431025 or r2,r2,r3 |{{f/std|Enable stepping stone (if present initialy)}} | |
− | + | 0017513c: a0820000 sb r2,0x0000(r4) |{{f/store|Disable or Enable Flag 0x08}} | |
− | + | 00175140: 30c20020 andi r2,r6,0x0020 |{{f/std|Check Unit's Not mountable Flag}} | |
− | + | 00175144: 14400006 bne r2,r0,0x00175160 {{f/Cond|If This ally unit is mountable}} {{f/std| Reversed flag : 0x20 if unmountable}} | |
− | + | 00175148: 016a1821 addu r3,r11,r10 |{{f/adr|This Unit Tile's data in scratchpad 0x200}} | |
− | + | 0017514c: 90620000 lbu r2,0x0000(r3) |{{f/load|Load Tile's data}} | |
− | + | 00175150: 00000000 nop | | |
− | + | 00175154: 34420020 ori r2,r2,0x0020 |{{f/std|Enable 0x20}} | |
− | + | 00175158: 0805d465 j 0x00175194 {{f/jump|Jump to}} {{f/loc| Next iteration}} | |
− | + | 0017515c: a0620000 sb r2,0x0000(r3) |{{f/store|Store Data with flag 0x20}} | |
− | + | '''Else : Unmountable ally''' | |
− | + | 00175160: 90620000 lbu r2,0x0000(r3) |{{f/load|Load Tile's data}} | |
− | + | 00175164: 00000000 nop | | |
− | + | 00175168: 304200df andi r2,r2,0x00df |{{f/std|Disable 0x20}} | |
− | + | 0017516c: 0805d465 j 0x00175194 {{f/jump|Jump to}} {{f/loc| Next iteration}} | |
− | + | 00175170: a0620000 sb r2,0x0000(r3) |{{f/store|Store Data without flag 0x20}} | |
− | + | '''Else : Unit is not is Acting Unit team (Flag 0x40 if ON)''' | |
− | + | 00175174: 30a300cf andi r3,r5,0x00cf |{{f/std|Disable flag 0x20 and 0x10}} | |
− | + | 00175178: a0830000 sb r3,0x0000(r4) |{{f/store|Store Data without flag 0x20 and 0x10}} | |
− | + | 0017517c: 9122000e lbu r2,0x000e(r9) |{{f/load|Load acting unit Move Type}} | |
− | + | 00175180: 00000000 nop | | |
− | + | 00175184: 14400002 bne r2,r0,0x00175190 {{f/Cond|If Active unit is Flying}} | |
− | + | 00175188: 30a200c7 andi r2,r5,0x00c7 |{{f/std|Disable 0x08}} | |
− | + | 0017518c: 34620008 ori r2,r3,0x0008 |{{f/std|Enable Tile's flag 0x08}} | |
− | + | 00175190: a0820000 sb r2,0x0000(r4) |{{f/store|Store Tile's date (scratchpad 0x200)}} | |
− | + | 00175194: 25080001 addiu r8,r8,0x0001 |{{f/std|Loop counter +1}} | |
− | + | 00175198: 29020010 slti r2,r8,0x0010 |{{f/std|Check Limit}} | |
− | + | 0017519c: 1440ffb3 bne r2,r0,0x0017506c {{f/eloop|Loop 0x10 Times}} | |
− | + | 001751a0: 24e70007 addiu r7,r7,0x0007 |{{f/adr|Scratch pad 0x080 Offset (Other Units data)}} | |
− | + | 001751a4: 31820001 andi r2,r12,0x0001 | | |
− | + | 001751a8: 1040000d beq r2,r0,0x001751e0 {{f/Cond|if Preset Value has flag 0x01}} {{f/std|0x1 or 0x3}} | |
− | + | 001751ac: 34020001 ori r2,r0,0x0001 | | |
− | + | 001751b0: a5a00018 sh r0,0x0018(r13) |{{f/store|Initialize reachable tile counter}} | |
− | + | 001751b4: 91230008 lbu r3,0x0008(r9) |{{f/load|Load Acting Unit Y}} | |
− | + | 001751b8: 91220018 lbu r2,0x0018(r9) |{{f/load|Load Map Max X}} | |
− | + | 001751bc: 00000000 nop | | |
− | + | 001751c0: 00620018 mult r3,r2 | | |
− | + | 001751c4: 91220009 lbu r2,0x0009(r9) |{{f/load|Load Acting Unit Elevation}} | |
− | + | 001751c8: 91240007 lbu r4,0x0007(r9) |{{f/load|Load Acting Unit X}} | |
− | + | 001751cc: 00021200 sll r2,r2,0x08 |{{f/std|Elevation becomes 0x100}} | |
− | + | 001751d0: 00001812 mflo r3 |{{f/std|Y*Max X}} | |
− | + | 001751d4: 00431021 addu r2,r2,r3 | | |
− | + | 001751d8: 00445021 addu r10,r2,r4 |{{f/std|Acting Unit's Tile ID (replace Other Unit Tile ID)}} | |
− | + | 001751dc: 34020001 ori r2,r0,0x0001 | | |
− | + | 001751e0: 15820027 bne r12,r2,0x00175280 {{f/Cond|<nowiki>If Preset Value = 0x1 / Else Branch to</nowiki>}} {{f/loc| End}} | |
− | + | 001751e4: 000a1880 sll r3,r10,0x02 |{{f/std|Tile ID*4}} | |
− | + | 001751e8: 006a1821 addu r3,r3,r10 |{{f/std|Tile ID*5}} | |
− | + | 001751ec: 3c048019 lui r4,0x8019 | | |
− | + | 001751f0: 24842dd8 addiu r4,r4,0x2dd8 |{{f/adr|Targetable grid pointer}} | |
− | + | 001751f4: 016a1021 addu r2,r11,r10 |{{f/adr|Pointer to Acting Unit Tile's data in scratchpad (0x200)}} | |
− | + | 001751f8: 90420000 lbu r2,0x0000(r2) |{{f/load|Load acting unit Tile's Flags}} | |
− | + | 001751fc: 00000000 nop | | |
− | + | 00175200: 30420020 andi r2,r2,0x0020 | | |
− | + | 00175204: 1040000d beq r2,r0,0x0017523c {{f/Cond|If Flag 0x20 is ON (Tested when Acting unit stop riding)}} | |
− | + | 00175208: 00642821 addu r5,r3,r4 |{{f/adr|Pointer to Acting unit Tile's data (targetable grid)}} | |
− | + | 0017520c: 34020024 ori r2,r0,0x0024 | | |
− | + | 00175210: a1a20054 sb r2,0x0054(r13) |{{f/store|Store 0x24 in Scratch Pad 0x180 (Byte 0x54)}} {{f/std|Used as loop counter - seems to check incrementing height}} | |
− | + | 00175214: 90a20002 lbu r2,0x0002(r5) |{{f/load|Load Unit ID (from Targetable Grid)}} | |
− | + | 00175218: 24840a00 addiu r4,r4,0x0a00 |{{f/adr|Targetable grid pointer + 0xa00}} {{f/std| 801937d8}} {{f/std|<nowiki>(Just after Targetable grid panel 0x200 * 5 = A00)</nowiki>}} | |
− | + | 0017521c: 00021880 sll r3,r2,0x02 |{{f/std|Unit ID * 4}} | |
− | + | 00175220: 00621821 addu r3,r3,r2 |{{f/std|Unit ID * 5}} | |
− | + | 00175224: 91220006 lbu r2,0x0006(r9) |{{f/load|Load Unit Move (scratch pad 0x00)}} | |
− | + | 00175228: 00641821 addu r3,r3,r4 |{{f/adr|801937d8 + Unit Offset (0x05 Byte per unit)}} | |
− | + | 0017522c: a0600004 sb r0,0x0004(r3) |{{f/store|Nullify Unit 0x04 (Post Grid)}} | |
− | + | 00175230: 24420001 addiu r2,r2,0x0001 | | |
− | 00175264 | + | 00175234: 0805d491 j 0x00175244 | |
− | + | 00175238: a0620000 sb r2,0x0000(r3) |{{f/store|Store Move +1 at Unit 0x00 (Post Grid)}} {{f/std| This unit post-grid is used as center of AoE}} | |
− | + | '''Else : Flag 0x20 is OFF''' | |
− | + | 0017523c: 34020008 ori r2,r0,0x0008 | | |
− | 00175274: 00000000 nop | + | 00175240: a1a20054 sb r2,0x0054(r13) |{{f/store|Store 0x08 in Scratch Pad 0x180 (Byte 0x54)}} |
− | 00175278: 24420001 addiu r2,r2,0x0001 | + | 00175244: 34020004 ori r2,r0,0x0004 | |
− | 0017527c: a1a20062 sb r2,0x0062(r13) | + | 00175248: a1a20055 sb r2,0x0055(r13) |{{f/store|Store 0x04 in Scratch Pad 0x180 (Byte 0x55)}} |
− | 00175280: 03e00008 jr r31 | + | 0017524c: 91220006 lbu r2,0x0006(r9) |{{f/load|Load Unit Move (scratch pad 0x00)}} |
+ | 00175250: 016a1821 addu r3,r11,r10 |{{f/adr|Pointer to Acting Unit Tile's data in scratchpad (0x200)}} | ||
+ | 00175254: a0a00004 sb r0,0x0004(r5) |{{f/store|Nullify Tile's 0x04 in Targetable grid}} | ||
+ | 00175258: 24420001 addiu r2,r2,0x0001 | | ||
+ | 0017525c: a0a20000 sb r2,0x0000(r5) |{{f/store|Store Move +1 in Tile's AoE}} | ||
+ | 00175260: 90620000 lbu r2,0x0000(r3) |{{f/load|Load Acting Unit Tile's flag}} | ||
+ | 00175264: 00000000 nop | | ||
+ | 00175268: 34420001 ori r2,r2,0x0001 | | ||
+ | 0017526c: a0620000 sb r2,0x0000(r3) |{{f/store|Enabled Flag 0x01 in Acting Unit tile's flag (scratch pad 0x200)}} | ||
+ | 00175270: 91220006 lbu r2,0x0006(r9) |{{f/load|Load Unit Move (scratch pad 0x00)}} | ||
+ | 00175274: 00000000 nop | | ||
+ | 00175278: 24420001 addiu r2,r2,0x0001 |{{f/std|Move + 1}} | ||
+ | 0017527c: a1a20062 sb r2,0x0062(r13) |{{f/store|Store Acting Unit move +1 on scratch pad 0x180}} | ||
+ | 00175280: 03e00008 jr r31 END | ||
00175284: 00000000 nop | 00175284: 00000000 nop | ||
− | + | === Return Locations === | |
+ | '''BATTLE.BIN''' | ||
+ | 00174bf0: [[Set_Reachable_Tiles]] r4 = 0x01 | ||
+ | 001767e4: [[001766b4_-_00176c0c]] r4 = 0x02 | ||
+ | 001784b8: [[Find_Tiles_for_the_AI_to_move_to_(00178ca4)]] r4 = 0x01 | ||
+ | 00178d6c: [[Calculate_Pathing]] r4 = 0x03 |
Latest revision as of 10:49, 3 June 2023
BATTLE.BIN : Set Tile's Flags for Pathfinding ------------------------------------------------------------------------------------------------------- Parameters : r4 - Preset Value 0x01 - Whole routine - Exclusive : Nullify Grid 0x04, set Grid/Post grid 0x00 to Unit Move +1 Set value of counters at S-Pad 0x184 - 0x54 and 0x55 0x02 - Preserves Grid 0x00, 0x03 and 0x04 bytes - Avoid Initialization of reachable tile counter (S-Pad 0x180 - 0x18) 0x03 - Does not set flags relating to the presence of units Returns : nothing Set Some Tile Flag on scratch Pad 0x1f800200 Initialize data on Targetable Grid ( 80192dd8 )and post grid ( 801937d8 ) ------------------------------------------------------------------------------------------------------- 00174e84: 00806021 addu r12,r4,r0 |Preset value 00174e88: 00004021 addu r8,r0,r0 |Initialize Tile counter 00174e8c: 00003821 addu r7,r0,r0 |Initialize Offset in targetable grid (+5 each iteration) 00174e90: 3c098019 lui r9,0x8019 | 00174e94: 8d29f4e0 lw r9,-0x0b20(r9) |Pointer to scratch pad 0x1f800000 00174e98: 3c0d8019 lui r13,0x8019 | 00174e9c: 8dadf4e4 lw r13,-0x0b1c(r13) |Pointer to Scratch Pad 0x1f800180 00174ea0: 3c0b8019 lui r11,0x8019 | 00174ea4: 8d6bf4f0 lw r11,-0x0b10(r11) |Pointer to Scratch Pad 0x1f800200 00174ea8: 3c0e8019 lui r14,0x8019 | 00174eac: 8dcef4e8 lw r14,-0x0b18(r14) |Pointer to scratch pad 0x1f800080 00174eb0: 01602021 addu r4,r11,r0 |Dynamic pointer to Scratch Pad 0x200 (+1 each iteration) 00174eb4: 01603021 addu r6,r11,r0 |Dynamic pointer to Scratch Pad 0x200 (+1 each iteration) 00174eb8: 3c028019 lui r2,0x8019 |LOOP - through each Tile 0x210 Loop - the 0x10 Extra are for Unit Post Grid data 00174ebc: 24422dd8 addiu r2,r2,0x2dd8 | 00174ec0: 00e22821 addu r5,r7,r2 |Pointer to this iteration Tile in Targetable grid 80192dd8 00174ec4: 31820001 andi r2,r12,0x0001 | 00174ec8: a0a00001 sb r0,0x0001(r5) |Initialize Tile's Grid 0x01 / Initial colour 00174ecc: 10400005 beq r2,r0,0x00174ee4 #If preset value has flag 0x01 0x1 or 0x3 00174ed0: a0a00002 sb r0,0x0002(r5) |Initialize Tile's grid 0x02 (Unit ID on Tile) 00174ed4: 340200ff ori r2,r0,0x00ff | 00174ed8: a0a00000 sb r0,0x0000(r5) |Initialize Tile Grid data 0x00 00174edc: a0a00003 sb r0,0x0003(r5) |Initialize Tile data 0x03 00174ee0: a0a20004 sb r2,0x0004(r5) |0xff in Tile data 0x04 00174ee4: 29020200 slti r2,r8,0x0200 | 00174ee8: 10400055 beq r2,r0,0x00175040 #If Loop counter < 0x200 00174eec: 000818c0 sll r3,r8,0x03 |Tile ID * 8 00174ef0: 3c028019 lui r2,0x8019 | 00174ef4: 2442f8cc addiu r2,r2,-0x0734 | 00174ef8: 00622821 addu r5,r3,r2 |This iteration Tile data pointer (8019f8cc) 00174efc: a0c00000 sb r0,0x0000(r6) |Initialize this Tile data in scratch pad (0x200) 00174f00: 90a20004 lbu r2,0x0004(r5) |Load Tile's Slope Type 00174f04: 00000000 nop | 00174f08: 30430005 andi r3,r2,0x0005 |Keep West and East data 00174f0c: 34020001 ori r2,r0,0x0001 | 00174f10: 10620003 beq r3,r2,0x00174f20 #If Slope type 0x41 or 0x11 Branch to Low corner section 00174f14: 34020004 ori r2,r0,0x0004 | 00174f18: 1462000d bne r3,r2,0x00174f50 #If Slope type 0x14 0x44 / Else Avoid low corner section 00174f1c: 00000000 nop | Low Corner Section 00174f20: 90830000 lbu r3,0x0000(r4) |Load Scratch Pad data 00174f24: 00000000 nop | 00174f28: 34620002 ori r2,r3,0x0002 | 00174f2c: a0820000 sb r2,0x0000(r4) |Enable flag 0x02 on S-Pad 0x200 00174f30: 90a20003 lbu r2,0x0003(r5) |Load Halves 00174f34: 00000000 nop | 00174f38: 3042001f andi r2,r2,0x001f | 00174f3c: 28420003 slti r2,r2,0x0003 | 00174f40: 1440000d bne r2,r0,0x00174f78 #If Halves > 0x2 / Else ignore Slope section 00174f44: 34620042 ori r2,r3,0x0042 | 00174f48: 0805d3de j 0x00174f78 >>Avoid Others Slope Type section 00174f4c: a0820000 sb r2,0x0000(r4) |Enable flag 0x42 on S-Pad 0x200 Not a Low Corner 00174f50: 90a20003 lbu r2,0x0003(r5) |Load Halves 00174f54: 91230004 lbu r3,0x0004(r9) |Load Acting Unit Jump routine at 00174430 00174f58: 3042001f andi r2,r2,0x001f | 00174f5c: 0062182a slt r3,r3,r2 | 00174f60: 10600005 beq r3,r0,0x00174f78 #If Acting Unit Jump < Halves 00174f64: 00000000 nop | 00174f68: 90820000 lbu r2,0x0000(r4) |Load Tile's 0x00 (scratch pad) 00174f6c: 00000000 nop | 00174f70: 34420040 ori r2,r2,0x0040 | 00174f74: a0820000 sb r2,0x0000(r4) |Update Tile's Flag in S-Pad 0x200 This Flag is checked while climbing up --- All cases --- 00174f78: 90a20006 lbu r2,0x0006(r5) |Load Tile's data 0x06 00174f7c: 00000000 nop | 00174f80: 30430001 andi r3,r2,0x0001 |Check [Unselectable] 00174f84: 00021042 srl r2,r2,0x01 | 00174f88: 30420001 andi r2,r2,0x0001 |Check [Cannot Target] (after right shift…) 00174f8c: 00621825 or r3,r3,r2 | 00174f90: 14600014 bne r3,r0,0x00174fe4 #If Tile Can beTargeted or Selected Else Avoid Flag 0x10 00174f94: 00000000 nop | 00174f98: 90a20003 lbu r2,0x0003(r5) |Load Halves/Depth 00174f9c: 00000000 nop | 00174fa0: 00021942 srl r3,r2,0x05 |Keep Depth 00174fa4: 10600005 beq r3,r0,0x00174fbc #If Depht <> 0x00 00174fa8: 2c620004 sltiu r2,r3,0x0004 |Depth Vs 0x4 00174fac: 91220011 lbu r2,0x0011(r9) |Load Cannot enter water flag 00174fb0: 00000000 nop | 00174fb4: 1440000b bne r2,r0,0x00174fe4 #Avoid Flag 0x10 if cannot enter water 00174fb8: 2c620004 sltiu r2,r3,0x0004 | 00174fbc: 14400005 bne r2,r0,0x00174fd4 #If Depht > 3 00174fc0: 00000000 nop | 00174fc4: 91220013 lbu r2,0x0013(r9) |Load Walk in/on water flag (0 if ok) 00174fc8: 00000000 nop | 00174fcc: 14400005 bne r2,r0,0x00174fe4 #Avoid Flag 0x10 if can't go at this depht 00174fd0: 00000000 nop | 00174fd4: 90820000 lbu r2,0x0000(r4) |Load Tiles flag 00174fd8: 00000000 nop | 00174fdc: 34420010 ori r2,r2,0x0010 | 00174fe0: a0820000 sb r2,0x0000(r4) |Enable flag 0x10 --- All cases --- 00174fe4: 90a30006 lbu r3,0x0006(r5) |Load Tile's data 0x06 00174fe8: 00000000 nop | 00174fec: 30620001 andi r2,r3,0x0001 | 00174ff0: 10400004 beq r2,r0,0x00175004 #If Tile is Unselectable 00174ff4: 00000000 nop | 00174ff8: 90820000 lbu r2,0x0000(r4) |Load Tiles 0x00 (scratchpad) 00174ffc: 0805d40f j 0x0017503c >>Jump with flag 0x80 and store it in scratch pad 00175000: 34420080 ori r2,r2,0x0080 | Else : Tile is selectable 00175004: 9122000e lbu r2,0x000e(r9) |Load Acting unit Move Type 00175008: 00000000 nop | 0017500c: 1440000c bne r2,r0,0x00175040 #If Unit is Flying 00175010: 30620002 andi r2,r3,0x0002 | 00175014: 1040000a beq r2,r0,0x00175040 #If Tile is not targetable 00175018: 3403003f ori r3,r0,0x003f | 0017501c: 90a20000 lbu r2,0x0000(r5) |Load Tile's Type 00175020: 00000000 nop | 00175024: 3042003f andi r2,r2,0x003f |Keep Type Only 00175028: 10430005 beq r2,r3,0x00175040 #If Tile is not a Cross Section 0017502c: 00000000 nop | 00175030: 90820000 lbu r2,0x0000(r4) |Load Tiles 0x00 (scratchpad) 00175034: 00000000 nop | 00175038: 34420010 ori r2,r2,0x0010 | 0017503c: a0820000 sb r2,0x0000(r4) |Enable flag 0x10 End of the "Tile only" loop part 00175040: 24840001 addiu r4,r4,0x0001 |Offset of scratchpad data + 1 00175044: 24c60001 addiu r6,r6,0x0001 |Offset of scratchpad data + 1 (only use to intialize data…on Grid + 210) 00175048: 25080001 addiu r8,r8,0x0001 |Loop counter +1 0017504c: 29020210 slti r2,r8,0x0210 | 00175050: 1440ff99 bne r2,r0,0x00174eb8 Λ Loop 0x210 times Grid and Post-Grid entries 00175054: 24e70005 addiu r7,r7,0x0005 |Targetable grid offset 00175058: 34020003 ori r2,r0,0x0003 | 0017505c: 11820052 beq r12,r2,0x001751a8 #If Preset value <> 0x03 00175060: 31820001 andi r2,r12,0x0001 | 00175064: 00004021 addu r8,r0,r0 |Initialize Unit counter 00175068: 01c03821 addu r7,r14,r0 |Dynamic Pointer to Other units Scratchpad ( 0x1f800080 ) LOOP - 0x10 (Unit in S-Pad 0x80) 0017506c: 90e60003 lbu r6,0x0003(r7) |This iteration Unit ID 00175070: 340200ff ori r2,r0,0x00ff | 00175074: 30c300ff andi r3,r6,0x00ff | 00175078: 10620046 beq r3,r2,0x00175194 #If Unit doesn't exist : branch to Next iteration 0017507c: 00000000 nop | 00175080: 90e30001 lbu r3,0x0001(r7) |This Unit Y 00175084: 91220018 lbu r2,0x0018(r9) |Map Max Y 00175088: 00000000 nop | 0017508c: 00620018 mult r3,r2 | 00175090: 90e20002 lbu r2,0x0002(r7) |This Unit Elevation + Stepping stone 00175094: 90e40000 lbu r4,0x0000(r7) |This Unit X 00175098: 3042007f andi r2,r2,0x007f |Keep only elevation (0x1) 0017509c: 00021200 sll r2,r2,0x08 |0x100 if higher elevation 001750a0: 00001812 mflo r3 |Map MaxY * Unit Y 001750a4: 00431021 addu r2,r2,r3 | 001750a8: 00445021 addu r10,r2,r4 |This Unit Tile ID (MaxY * Y) + X + Elevation offset 001750ac: 30c3001f andi r3,r6,0x001f |Unit ID without other flags 001750b0: 000310c0 sll r2,r3,0x03 | 001750b4: 00431023 subu r2,r2,r3 | 001750b8: 00021180 sll r2,r2,0x06 | 001750bc: 3c018019 lui r1,0x8019 | 001750c0: 00220821 addu r1,r1,r2 |Pointer to this iteration Unit battle data 001750c4: 902308cc lbu r3,0x08cc(r1) |Unit Base ID 001750c8: 34020049 ori r2,r0,0x0049 | 001750cc: 14620007 bne r3,r2,0x001750ec #If This Unit is Archangel / branch if not - WHAT'- KANZEN?? 001750d0: 016a2021 addu r4,r11,r10 |This Unit Tile's data in scratchpad (0x200) 001750d4: 016a1821 addu r3,r11,r10 |This Unit Tile's data in scratchpad 0x200 001750d8: 90620000 lbu r2,0x0000(r3) |Load Tile's data 001750dc: 00000000 nop | 001750e0: 34420080 ori r2,r2,0x0080 | 001750e4: 304200ef andi r2,r2,0x00ef | 001750e8: a0620000 sb r2,0x0000(r3) |Update Tile's Flag (enables 0x80 - Disable 0x10) Unselectable / Not walkable 001750ec: 000a1080 sll r2,r10,0x02 |Tile's ID * 4 001750f0: 004a1021 addu r2,r2,r10 |Tile's ID * 5 001750f4: 3c018019 lui r1,0x8019 | 001750f8: 00220821 addu r1,r1,r2 |Part of pointer to This unit Tile's data in Targetable grid 001750fc: a0282dda sb r8,0x2dda(r1) |Store Unit ID standing in Grid panel 0x02 00175100: 90820000 lbu r2,0x0000(r4) |Load Tile's data (scratchpad 0x200) 00175104: 00000000 nop | 00175108: 34450004 ori r5,r2,0x0004 |Enable flag 0x04 0017510c: 30c20040 andi r2,r6,0x0040 |Check Not in Active Team flag 00175110: 14400018 bne r2,r0,0x00175174 #If This Unit is in Acting Unit Team 00175114: a0850000 sb r5,0x0000(r4) |Store Tile's data with 0x04 enabled 00175118: 91220022 lbu r2,0x0022(r9) |Load Acting Stepping stone flag 0017511c: 00000000 nop | 00175120: 14400006 bne r2,r0,0x0017513c #If Acting Unit do not have stepping stone 00175124: 30a200f7 andi r2,r5,0x00f7 |Disable 0x08 00175128: 90e30002 lbu r3,0x0002(r7) |Load This iteration Unit Elevation/stepping stone 0017512c: 00000000 nop | 00175130: 000319c2 srl r3,r3,0x07 |Keep stepping stone (as 0x1) 00175134: 000318c0 sll r3,r3,0x03 |Stepping stone is 0x08 (You can walk on this unit) 00175138: 00431025 or r2,r2,r3 |Enable stepping stone (if present initialy) 0017513c: a0820000 sb r2,0x0000(r4) |Disable or Enable Flag 0x08 00175140: 30c20020 andi r2,r6,0x0020 |Check Unit's Not mountable Flag 00175144: 14400006 bne r2,r0,0x00175160 #If This ally unit is mountable Reversed flag : 0x20 if unmountable 00175148: 016a1821 addu r3,r11,r10 |This Unit Tile's data in scratchpad 0x200 0017514c: 90620000 lbu r2,0x0000(r3) |Load Tile's data 00175150: 00000000 nop | 00175154: 34420020 ori r2,r2,0x0020 |Enable 0x20 00175158: 0805d465 j 0x00175194 >>Jump to Next iteration 0017515c: a0620000 sb r2,0x0000(r3) |Store Data with flag 0x20 Else : Unmountable ally 00175160: 90620000 lbu r2,0x0000(r3) |Load Tile's data 00175164: 00000000 nop | 00175168: 304200df andi r2,r2,0x00df |Disable 0x20 0017516c: 0805d465 j 0x00175194 >>Jump to Next iteration 00175170: a0620000 sb r2,0x0000(r3) |Store Data without flag 0x20 Else : Unit is not is Acting Unit team (Flag 0x40 if ON) 00175174: 30a300cf andi r3,r5,0x00cf |Disable flag 0x20 and 0x10 00175178: a0830000 sb r3,0x0000(r4) |Store Data without flag 0x20 and 0x10 0017517c: 9122000e lbu r2,0x000e(r9) |Load acting unit Move Type 00175180: 00000000 nop | 00175184: 14400002 bne r2,r0,0x00175190 #If Active unit is Flying 00175188: 30a200c7 andi r2,r5,0x00c7 |Disable 0x08 0017518c: 34620008 ori r2,r3,0x0008 |Enable Tile's flag 0x08 00175190: a0820000 sb r2,0x0000(r4) |Store Tile's date (scratchpad 0x200) 00175194: 25080001 addiu r8,r8,0x0001 |Loop counter +1 00175198: 29020010 slti r2,r8,0x0010 |Check Limit 0017519c: 1440ffb3 bne r2,r0,0x0017506c Λ Loop 0x10 Times 001751a0: 24e70007 addiu r7,r7,0x0007 |Scratch pad 0x080 Offset (Other Units data) 001751a4: 31820001 andi r2,r12,0x0001 | 001751a8: 1040000d beq r2,r0,0x001751e0 #if Preset Value has flag 0x01 0x1 or 0x3 001751ac: 34020001 ori r2,r0,0x0001 | 001751b0: a5a00018 sh r0,0x0018(r13) |Initialize reachable tile counter 001751b4: 91230008 lbu r3,0x0008(r9) |Load Acting Unit Y 001751b8: 91220018 lbu r2,0x0018(r9) |Load Map Max X 001751bc: 00000000 nop | 001751c0: 00620018 mult r3,r2 | 001751c4: 91220009 lbu r2,0x0009(r9) |Load Acting Unit Elevation 001751c8: 91240007 lbu r4,0x0007(r9) |Load Acting Unit X 001751cc: 00021200 sll r2,r2,0x08 |Elevation becomes 0x100 001751d0: 00001812 mflo r3 |Y*Max X 001751d4: 00431021 addu r2,r2,r3 | 001751d8: 00445021 addu r10,r2,r4 |Acting Unit's Tile ID (replace Other Unit Tile ID) 001751dc: 34020001 ori r2,r0,0x0001 | 001751e0: 15820027 bne r12,r2,0x00175280 #If Preset Value = 0x1 / Else Branch to End 001751e4: 000a1880 sll r3,r10,0x02 |Tile ID*4 001751e8: 006a1821 addu r3,r3,r10 |Tile ID*5 001751ec: 3c048019 lui r4,0x8019 | 001751f0: 24842dd8 addiu r4,r4,0x2dd8 |Targetable grid pointer 001751f4: 016a1021 addu r2,r11,r10 |Pointer to Acting Unit Tile's data in scratchpad (0x200) 001751f8: 90420000 lbu r2,0x0000(r2) |Load acting unit Tile's Flags 001751fc: 00000000 nop | 00175200: 30420020 andi r2,r2,0x0020 | 00175204: 1040000d beq r2,r0,0x0017523c #If Flag 0x20 is ON (Tested when Acting unit stop riding) 00175208: 00642821 addu r5,r3,r4 |Pointer to Acting unit Tile's data (targetable grid) 0017520c: 34020024 ori r2,r0,0x0024 | 00175210: a1a20054 sb r2,0x0054(r13) |Store 0x24 in Scratch Pad 0x180 (Byte 0x54) Used as loop counter - seems to check incrementing height 00175214: 90a20002 lbu r2,0x0002(r5) |Load Unit ID (from Targetable Grid) 00175218: 24840a00 addiu r4,r4,0x0a00 |Targetable grid pointer + 0xa00 801937d8 (Just after Targetable grid panel 0x200 * 5 = A00) 0017521c: 00021880 sll r3,r2,0x02 |Unit ID * 4 00175220: 00621821 addu r3,r3,r2 |Unit ID * 5 00175224: 91220006 lbu r2,0x0006(r9) |Load Unit Move (scratch pad 0x00) 00175228: 00641821 addu r3,r3,r4 |801937d8 + Unit Offset (0x05 Byte per unit) 0017522c: a0600004 sb r0,0x0004(r3) |Nullify Unit 0x04 (Post Grid) 00175230: 24420001 addiu r2,r2,0x0001 | 00175234: 0805d491 j 0x00175244 | 00175238: a0620000 sb r2,0x0000(r3) |Store Move +1 at Unit 0x00 (Post Grid) This unit post-grid is used as center of AoE Else : Flag 0x20 is OFF 0017523c: 34020008 ori r2,r0,0x0008 | 00175240: a1a20054 sb r2,0x0054(r13) |Store 0x08 in Scratch Pad 0x180 (Byte 0x54) 00175244: 34020004 ori r2,r0,0x0004 | 00175248: a1a20055 sb r2,0x0055(r13) |Store 0x04 in Scratch Pad 0x180 (Byte 0x55) 0017524c: 91220006 lbu r2,0x0006(r9) |Load Unit Move (scratch pad 0x00) 00175250: 016a1821 addu r3,r11,r10 |Pointer to Acting Unit Tile's data in scratchpad (0x200) 00175254: a0a00004 sb r0,0x0004(r5) |Nullify Tile's 0x04 in Targetable grid 00175258: 24420001 addiu r2,r2,0x0001 | 0017525c: a0a20000 sb r2,0x0000(r5) |Store Move +1 in Tile's AoE 00175260: 90620000 lbu r2,0x0000(r3) |Load Acting Unit Tile's flag 00175264: 00000000 nop | 00175268: 34420001 ori r2,r2,0x0001 | 0017526c: a0620000 sb r2,0x0000(r3) |Enabled Flag 0x01 in Acting Unit tile's flag (scratch pad 0x200) 00175270: 91220006 lbu r2,0x0006(r9) |Load Unit Move (scratch pad 0x00) 00175274: 00000000 nop | 00175278: 24420001 addiu r2,r2,0x0001 |Move + 1 0017527c: a1a20062 sb r2,0x0062(r13) |Store Acting Unit move +1 on scratch pad 0x180 00175280: 03e00008 jr r31 END 00175284: 00000000 nop
Return Locations
BATTLE.BIN 00174bf0: Set_Reachable_Tiles r4 = 0x01 001767e4: 001766b4_-_00176c0c r4 = 0x02 001784b8: Find_Tiles_for_the_AI_to_move_to_(00178ca4) r4 = 0x01 00178d6c: Calculate_Pathing r4 = 0x03