Difference between revisions of "Find Tiles for the AI to move to (00178ca4)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m (Dokurider moved page 00178ca4 - 00179200 to Find Tiles for the AI to move to (00178ca4): Renaming and adding new documentation)
 
Line 1: Line 1:
<font face='Courier New'>
+
r4 = Acting Unit ID
   
+
  r5 = Caster X
 +
r6 = Caster Y
 +
r7 = Map Level
 +
 
 
  00178ca4: 27bdfdc8 addiu r29,r29,0xfdc8
 
  00178ca4: 27bdfdc8 addiu r29,r29,0xfdc8
  00178ca8: 8fa20248 lw r2,0x0248(r29)
+
  00178ca8: 8fa20248 lw r2,0x0248(r29) Evaluate Action?
 
  00178cac: afb10214 sw r17,0x0214(r29)
 
  00178cac: afb10214 sw r17,0x0214(r29)
 
  00178cb0: 3c118019 lui r17,0x8019
 
  00178cb0: 3c118019 lui r17,0x8019
  00178cb4: 8e31f4e0 lw r17,-0x0b20(r17)
+
  00178cb4: 8e31f4e0 lw r17,-0x0b20(r17) r17 = Movement Related Data Pointer
 
  00178cb8: afb00210 sw r16,0x0210(r29)
 
  00178cb8: afb00210 sw r16,0x0210(r29)
 
  00178cbc: 3c108019 lui r16,0x8019
 
  00178cbc: 3c108019 lui r16,0x8019
  00178cc0: 8e10f4e4 lw r16,-0x0b1c(r16)
+
  00178cc0: 8e10f4e4 lw r16,-0x0b1c(r16) r16 = ?
 
  00178cc4: afb3021c sw r19,0x021c(r29)
 
  00178cc4: afb3021c sw r19,0x021c(r29)
 
  00178cc8: 3c138019 lui r19,0x8019
 
  00178cc8: 3c138019 lui r19,0x8019
  00178ccc: 8e73f4e8 lw r19,-0x0b18(r19)
+
  00178ccc: 8e73f4e8 lw r19,-0x0b18(r19) r19 = ?
 
  00178cd0: afb40220 sw r20,0x0220(r29)
 
  00178cd0: afb40220 sw r20,0x0220(r29)
 
  00178cd4: 3c148019 lui r20,0x8019
 
  00178cd4: 3c148019 lui r20,0x8019
  00178cd8: 8e94f4f0 lw r20,-0x0b10(r20)
+
  00178cd8: 8e94f4f0 lw r20,-0x0b10(r20) r20 = 18f4f0 ?
  00178cdc: 8fa8024c lw r8,0x024c(r29)
+
  00178cdc: 8fa8024c lw r8,0x024c(r29) r8 = Previous Routine's Pointer + 20
 
  00178ce0: afbe0230 sw r30,0x0230(r29)
 
  00178ce0: afbe0230 sw r30,0x0230(r29)
  00178ce4: 00a0f021 addu r30,r5,r0
+
  00178ce4: 00a0f021 addu r30,r5,r0 r30 = Acting Unit X
 
  00178ce8: afb50224 sw r21,0x0224(r29)
 
  00178ce8: afb50224 sw r21,0x0224(r29)
  00178cec: 00c0a821 addu r21,r6,r0
+
  00178cec: 00c0a821 addu r21,r6,r0 r21 = Acting Unit Y
 
  00178cf0: afb60228 sw r22,0x0228(r29)
 
  00178cf0: afb60228 sw r22,0x0228(r29)
  00178cf4: 00e0b021 addu r22,r7,r0
+
  00178cf4: 00e0b021 addu r22,r7,r0 r22 = Acting Unit Map Level
 
  00178cf8: afb7022c sw r23,0x022c(r29)
 
  00178cf8: afb7022c sw r23,0x022c(r29)
  00178cfc: 0000b821 addu r23,r0,r0
+
  00178cfc: 0000b821 addu r23,r0,r0 r23 = 0
 
  00178d00: afbf0234 sw r31,0x0234(r29)
 
  00178d00: afbf0234 sw r31,0x0234(r29)
 
  00178d04: afb20218 sw r18,0x0218(r29)
 
  00178d04: afb20218 sw r18,0x0218(r29)
  00178d08: 1040004b beq r2,r0,0x00178e38
+
  00178d08: 1040004b beq r2,r0,0x00178e38 Branch if Evaluate Action? = False
  00178d0c: ad000000 sw r0,0x0000(r8)
+
  00178d0c: ad000000 sw r0,0x0000(r8) 0x20 = False
  00178d10: 000410c0 sll r2,r4,0x03
+
 
  00178d14: 00441023 subu r2,r2,r4
+
<Evaluate Action>
  00178d18: 00021180 sll r2,r2,0x06
+
  00178d10: 000410c0 sll r2,r4,0x03 Unit ID * 8
 +
  00178d14: 00441023 subu r2,r2,r4 Unit ID * 7
 +
  00178d18: 00021180 sll r2,r2,0x06 Unit ID * 1c0
 
  00178d1c: 3c018019 lui r1,0x8019
 
  00178d1c: 3c018019 lui r1,0x8019
 
  00178d20: 00220821 addu r1,r1,r2
 
  00178d20: 00220821 addu r1,r1,r2
  00178d24: 902308cd lbu r3,0x08cd(r1)
+
  00178d24: 902308cd lbu r3,0x08cd(r1) Load Unit ID (from Unit Data)
 
  00178d28: 340200ff ori r2,r0,0x00ff
 
  00178d28: 340200ff ori r2,r0,0x00ff
  00178d2c: 14620003 bne r3,r2,0x00178d3c
+
  00178d2c: 14620003 bne r3,r2,0x00178d3c Branch if Unit Exists
 
  00178d30: 00000000 nop
 
  00178d30: 00000000 nop
  00178d34: 0805e474 j 0x001791d0
+
  00178d34: 0805e474 j 0x001791d0 Exit and return -1
 
  00178d38: 2402ffff addiu r2,r0,0xffff
 
  00178d38: 2402ffff addiu r2,r0,0xffff
  00178d3c: 0c05d10c jal 0x00174430
+
 
  00178d40: 3412000f ori r18,r0,0x000f
+
  00178d3c: 0c05d10c jal 0x00174430 Evaluate Walkabilty on Map (Where unit can move to)
 +
  00178d40: 3412000f ori r18,r0,0x000f r18 = 0x0f
 
  00178d44: 3402007c ori r2,r0,0x007c
 
  00178d44: 3402007c ori r2,r0,0x007c
  00178d48: a2220006 sb r2,0x0006(r17)
+
  00178d48: a2220006 sb r2,0x0006(r17) Save Move = 4 to Movement Related Data ([0x80 - Move] is how Move is stored)
 +
 
 
  00178d4c: 340300ff ori r3,r0,0x00ff
 
  00178d4c: 340300ff ori r3,r0,0x00ff
  00178d50: 26620069 addiu r2,r19,0x0069
+
  00178d50: 26620069 addiu r2,r19,0x0069 r19 = ? + 69
 
  00178d54: a0430003 sb r3,0x0003(r2)
 
  00178d54: a0430003 sb r3,0x0003(r2)
 
  00178d58: 2652ffff addiu r18,r18,0xffff
 
  00178d58: 2652ffff addiu r18,r18,0xffff
  00178d5c: 0641fffd bgez r18,0x00178d54
+
  00178d5c: 0641fffd bgez r18,0x00178d54 Do 0x0f times
 
  00178d60: 2442fff9 addiu r2,r2,0xfff9
 
  00178d60: 2442fff9 addiu r2,r2,0xfff9
  00178d64: 0c05d3a1 jal 0x00174e84
+
 
 +
  00178d64: 0c05d3a1 jal 0x00174e84 Evaluate Map Walkability (Water Depth, Move on Lava?, etc.)
 
  00178d68: 34040001 ori r4,r0,0x0001
 
  00178d68: 34040001 ori r4,r0,0x0001
  00178d6c: 92230008 lbu r3,0x0008(r17)
+
  00178d6c: 92230008 lbu r3,0x0008(r17) Load Y
  00178d70: 92220018 lbu r2,0x0018(r17)
+
  00178d70: 92220018 lbu r2,0x0018(r17) Load Max X
 
  00178d74: 00000000 nop
 
  00178d74: 00000000 nop
  00178d78: 00620018 mult r3,r2
+
  00178d78: 00620018 mult r3,r2 Y * Max X
  00178d7c: 92220009 lbu r2,0x0009(r17)
+
  00178d7c: 92220009 lbu r2,0x0009(r17) Load Map Level
  00178d80: 92240007 lbu r4,0x0007(r17)
+
  00178d80: 92240007 lbu r4,0x0007(r17) Load X
 
  00178d84: 00021200 sll r2,r2,0x08
 
  00178d84: 00021200 sll r2,r2,0x08
  00178d88: 00001812 mflo r3
+
  00178d88: 00001812 mflo r3 Y * Max X
  00178d8c: 00431021 addu r2,r2,r3
+
  00178d8c: 00431021 addu r2,r2,r3
  00178d90: 00441821 addu r3,r2,r4
+
  00178d90: 00441821 addu r3,r2,r4 Y * Max X + X + Map Level
  00178d94: 00031080 sll r2,r3,0x02
+
  00178d94: 00031080 sll r2,r3,0x02 "" * 4
  00178d98: 00431021 addu r2,r2,r3
+
  00178d98: 00431021 addu r2,r2,r3 "" * 5 (Get Tile Pointer)
 
  00178d9c: 3c048019 lui r4,0x8019
 
  00178d9c: 3c048019 lui r4,0x8019
  00178da0: 24842dd8 addiu r4,r4,0x2dd8
+
  00178da0: 24842dd8 addiu r4,r4,0x2dd8 Moveable/Targetable Grid Panel
  00178da4: 00442821 addu r5,r2,r4
+
  00178da4: 00442821 addu r5,r2,r4 Get Current Tile from Grid
  00178da8: 02831821 addu r3,r20,r3
+
  00178da8: 02831821 addu r3,r20,r3 Tile Pointer + 18f4f0
  00178dac: a0a00003 sb r0,0x0003(r5)
+
  00178dac: a0a00003 sb r0,0x0003(r5) Clear ?
  00178db0: a0a00000 sb r0,0x0000(r5)
+
  00178db0: a0a00000 sb r0,0x0000(r5) Clear AoE
  00178db4: 90620000 lbu r2,0x0000(r3)
+
  00178db4: 90620000 lbu r2,0x0000(r3) Load ?
 
  00178db8: 00000000 nop
 
  00178db8: 00000000 nop
 
  00178dbc: 304200fe andi r2,r2,0x00fe
 
  00178dbc: 304200fe andi r2,r2,0x00fe
  00178dc0: a0620000 sb r2,0x0000(r3)
+
  00178dc0: a0620000 sb r2,0x0000(r3) Remove 0x01 from ?
 
  00178dc4: 34020004 ori r2,r0,0x0004
 
  00178dc4: 34020004 ori r2,r0,0x0004
 
  00178dc8: a2020054 sb r2,0x0054(r16)
 
  00178dc8: a2020054 sb r2,0x0054(r16)
 
  00178dcc: a2020055 sb r2,0x0055(r16)
 
  00178dcc: a2020055 sb r2,0x0055(r16)
 
  00178dd0: 340200ff ori r2,r0,0x00ff
 
  00178dd0: 340200ff ori r2,r0,0x00ff
  00178dd4: a0a00000 sb r0,0x0000(r5)
+
  00178dd4: a0a00000 sb r0,0x0000(r5) Clear AoE
  00178dd8: a0a20004 sb r2,0x0004(r5)
+
  00178dd8: a0a20004 sb r2,0x0004(r5) Default tile to Obstructed
  00178ddc: 92220018 lbu r2,0x0018(r17)
+
  00178ddc: 92220018 lbu r2,0x0018(r17) Load Max X
 
  00178de0: 00000000 nop
 
  00178de0: 00000000 nop
  00178de4: 02a20018 mult r21,r2
+
  00178de4: 02a20018 mult r21,r2 Acting Unit's Y * Max X
  00178de8: 00161200 sll r2,r22,0x08
+
  00178de8: 00161200 sll r2,r22,0x08 Acting Unit Map Level * 100
  00178dec: 00001812 mflo r3
+
  00178dec: 00001812 mflo r3 Acting Unit's Y * Max X
  00178df0: 00431021 addu r2,r2,r3
+
  00178df0: 00431021 addu r2,r2,r3 Acting Unit's Y * Max X + Map Level
  00178df4: 005e1821 addu r3,r2,r30
+
  00178df4: 005e1821 addu r3,r2,r30 "" + Acting Unit's X
  00178df8: 00031080 sll r2,r3,0x02
+
  00178df8: 00031080 sll r2,r3,0x02 Acting Unit Tile Pointer * 4
  00178dfc: 00431021 addu r2,r2,r3
+
  00178dfc: 00431021 addu r2,r2,r3 "" * 5
  00178e00: 00442821 addu r5,r2,r4
+
  00178e00: 00442821 addu r5,r2,r4 "" + MoveTarget Grid Panel
  00178e04: 3402007d ori r2,r0,0x007d
+
  00178e04: 3402007d ori r2,r0,0x007d (Is this supposed to represent a 3 movement minimum?)
  00178e08: 02831821 addu r3,r20,r3
+
  00178e08: 02831821 addu r3,r20,r3 ? + Acting Tile Pointer
  00178e0c: a0a20000 sb r2,0x0000(r5)
+
  00178e0c: a0a20000 sb r2,0x0000(r5) Save desired minimum movement?
  00178e10: 90620000 lbu r2,0x0000(r3)
+
  00178e10: 90620000 lbu r2,0x0000(r3) Load AoE?
 
  00178e14: 00000000 nop
 
  00178e14: 00000000 nop
 
  00178e18: 34420001 ori r2,r2,0x0001
 
  00178e18: 34420001 ori r2,r2,0x0001
  00178e1c: a0620000 sb r2,0x0000(r3)
+
  00178e1c: a0620000 sb r2,0x0000(r3) Mark AoE?
 
  00178e20: 34020001 ori r2,r0,0x0001
 
  00178e20: 34020001 ori r2,r0,0x0001
  00178e24: a0a00004 sb r0,0x0004(r5)
+
  00178e24: a0a00004 sb r0,0x0004(r5) Tile is not obstructed
 
  00178e28: 3c018019 lui r1,0x8019
 
  00178e28: 3c018019 lui r1,0x8019
  00178e2c: ac20f7e8 sw r0,-0x0818(r1)
+
  00178e2c: ac20f7e8 sw r0,-0x0818(r1) Clear word
 
  00178e30: 0805e393 j 0x00178e4c
 
  00178e30: 0805e393 j 0x00178e4c
  00178e34: a2220023 sb r2,0x0023(r17)
+
  00178e34: a2220023 sb r2,0x0023(r17) Save ? as true
 +
 
 +
<Haven't decided on an action yet>
 
  00178e38: 3c048019 lui r4,0x8019
 
  00178e38: 3c048019 lui r4,0x8019
  00178e3c: 24843924 addiu r4,r4,0x3924
+
  00178e3c: 24843924 addiu r4,r4,0x3924 r4 = Unit AI Extended Status Data
  00178e40: 3c051f80 lui r5,0x1f80
+
  00178e40: 3c051f80 lui r5,0x1f80 r5 = 0x1f800000
  00178e44: 0c017895 jal 0x0005e254
+
  00178e44: 0c017895 jal 0x0005e254 Save every unit's AI Extended Status data to 0x1f800000 (Store X Byte into Y)
  00178e48: 34060400 ori r6,r0,0x0400
+
  00178e48: 34060400 ori r6,r0,0x0400 r6 = 0x0400
  00178e4c: 9223000e lbu r3,0x000e(r17)
+
  00178e4c: 9223000e lbu r3,0x000e(r17) Load Bypass Obstacle?
 
  00178e50: 34020001 ori r2,r0,0x0001
 
  00178e50: 34020001 ori r2,r0,0x0001
  00178e54: 14620015 bne r3,r2,0x00178eac
+
  00178e54: 14620015 bne r3,r2,0x00178eac Branch if Unit can Bypass Obstacle? (Set when Move Underwater/Teleport)
 +
 
 +
<Clear all AoE>
 
  00178e58: 34030001 ori r3,r0,0x0001
 
  00178e58: 34030001 ori r3,r0,0x0001
 
  00178e5c: 341201ff ori r18,r0,0x01ff
 
  00178e5c: 341201ff ori r18,r0,0x01ff
 
  00178e60: 3c028019 lui r2,0x8019
 
  00178e60: 3c028019 lui r2,0x8019
  00178e64: 244237d3 addiu r2,r2,0x37d3
+
  00178e64: 244237d3 addiu r2,r2,0x37d3 Load MoveTarget Grid Panel (From last byte)
  00178e68: a0430000 sb r3,0x0000(r2)
+
  00178e68: a0430000 sb r3,0x0000(r2) Clear all AoE
 
  00178e6c: 2652ffff addiu r18,r18,0xffff
 
  00178e6c: 2652ffff addiu r18,r18,0xffff
  00178e70: 0641fffd bgez r18,0x00178e68
+
  00178e70: 0641fffd bgez r18,0x00178e68 Loop and clear all tiles from AoE starting backwards
 
  00178e74: 2442fffb addiu r2,r2,0xfffb
 
  00178e74: 2442fffb addiu r2,r2,0xfffb
 
  00178e78: 0805e46b j 0x001791ac
 
  00178e78: 0805e46b j 0x001791ac
 
  00178e7c: 00000000 nop
 
  00178e7c: 00000000 nop
 +
 +
<r23 has been set>
 
  00178e80: 3c058019 lui r5,0x8019
 
  00178e80: 3c058019 lui r5,0x8019
  00178e84: 24a53924 addiu r5,r5,0x3924
+
  00178e84: 24a53924 addiu r5,r5,0x3924 r5 = Unit AI Extended Status Data
  00178e88: 34060400 ori r6,r0,0x0400
+
  00178e88: 34060400 ori r6,r0,0x0400 r6 = 0x0400 (Unit AI Extended Status Data's size)
  00178e8c: 8fa8024c lw r8,0x024c(r29)
+
  00178e8c: 8fa8024c lw r8,0x024c(r29) r8 = Previous Routine's Pointer + 20
 
  00178e90: 34020001 ori r2,r0,0x0001
 
  00178e90: 34020001 ori r2,r0,0x0001
 
  00178e94: 3c018019 lui r1,0x8019
 
  00178e94: 3c018019 lui r1,0x8019
  00178e98: ac32f7e8 sw r18,-0x0818(r1)
+
  00178e98: ac32f7e8 sw r18,-0x0818(r1) Save Move Counter
  00178e9c: 0c017895 jal 0x0005e254
+
  00178e9c: 0c017895 jal 0x0005e254 Save every unit's AI Extended Status data to 0x1f800000 (Store X Byte into Y)
  00178ea0: ad020000 sw r2,0x0000(r8)
+
  00178ea0: ad020000 sw r2,0x0000(r8) 0x20 = Unit cannot Move?
  00178ea4: 0805e474 j 0x001791d0
+
  00178ea4: 0805e474 j 0x001791d0 Exit and return 0
 
  00178ea8: 00001021 addu r2,r0,r0
 
  00178ea8: 00001021 addu r2,r0,r0
 +
 +
<Unit can bypass obstacles?>
 
  00178eac: 3c128019 lui r18,0x8019
 
  00178eac: 3c128019 lui r18,0x8019
  00178eb0: 8e52f7e8 lw r18,-0x0818(r18)
+
  00178eb0: 8e52f7e8 lw r18,-0x0818(r18) Load Desired? Move
  00178eb4: 92220006 lbu r2,0x0006(r17)
+
  00178eb4: 92220006 lbu r2,0x0006(r17) Load Move (Defaults to 4 Move)
 
  00178eb8: 00000000 nop
 
  00178eb8: 00000000 nop
 
  00178ebc: 0242102a slt r2,r18,r2
 
  00178ebc: 0242102a slt r2,r18,r2
  00178ec0: 104000ba beq r2,r0,0x001791ac
+
  00178ec0: 104000ba beq r2,r0,0x001791ac Branch to last routine and exit if desired move is out of reach?
 
  00178ec4: 00000000 nop
 
  00178ec4: 00000000 nop
 +
 +
<Initialize>
 
  00178ec8: 0000f021 addu r30,r0,r0
 
  00178ec8: 0000f021 addu r30,r0,r0
 
  00178ecc: 3c168019 lui r22,0x8019
 
  00178ecc: 3c168019 lui r22,0x8019
Line 144: Line 162:
 
  00178ed8: 26b52dd8 addiu r21,r21,0x2dd8
 
  00178ed8: 26b52dd8 addiu r21,r21,0x2dd8
 
  00178edc: 27b30010 addiu r19,r29,0x0010
 
  00178edc: 27b30010 addiu r19,r29,0x0010
  00178ee0: 8fa80250 lw r8,0x0250(r29)
+
 
 +
<Move Loop>
 +
  00178ee0: 8fa80250 lw r8,0x0250(r29) Load isNormalMovement
 
  00178ee4: 00000000 nop
 
  00178ee4: 00000000 nop
  00178ee8: 11000007 beq r8,r0,0x00178f08
+
  00178ee8: 11000007 beq r8,r0,0x00178f08 Branch if not normal movement (Teleport, etc.)
 
  00178eec: 00000000 nop
 
  00178eec: 00000000 nop
  00178ef0: 0c066bbc jal 0x0019aef0
+
  00178ef0: 0c066bbc jal 0x0019aef0 Frame Data RNG wrapper
 
  00178ef4: 00000000 nop
 
  00178ef4: 00000000 nop
  00178ef8: 10400003 beq r2,r0,0x00178f08
+
  00178ef8: 10400003 beq r2,r0,0x00178f08 Branch if the Frame RNG said false
 
  00178efc: 00000000 nop
 
  00178efc: 00000000 nop
  00178f00: 16e0ffdf bne r23,r0,0x00178e80
+
  00178f00: 16e0ffdf bne r23,r0,0x00178e80 Branch back and exit if r23 has been set (only set at the very end)
  00178f04: 3c041f80 lui r4,0x1f80
+
  00178f04: 3c041f80 lui r4,0x1f80 Load AI Extended Status
  00178f08: 92020062 lbu r2,0x0062(r16)
+
 
 +
  00178f08: 92020062 lbu r2,0x0062(r16) Load ?
 
  00178f0c: 00000000 nop
 
  00178f0c: 00000000 nop
  00178f10: 104000a6 beq r2,r0,0x001791ac
+
  00178f10: 104000a6 beq r2,r0,0x001791ac Last Routine and Exit if false
 
  00178f14: 00000000 nop
 
  00178f14: 00000000 nop
  00178f18: a600002a sh r0,0x002a(r16)
+
  00178f18: a600002a sh r0,0x002a(r16) Clear Map Level
  00178f1c: 8602002a lh r2,0x002a(r16)
+
 
  00178f20: a6000028 sh r0,0x0028(r16)
+
<Map Level Loop (Inner)>
 +
  00178f1c: 8602002a lh r2,0x002a(r16) Get Map Level before it's overwritten
 +
  00178f20: a6000028 sh r0,0x0028(r16) Clear Y
 
  00178f24: 00021200 sll r2,r2,0x08
 
  00178f24: 00021200 sll r2,r2,0x08
 
  00178f28: a602002c sh r2,0x002c(r16)
 
  00178f28: a602002c sh r2,0x002c(r16)
  00178f2c: 92220019 lbu r2,0x0019(r17)
+
  00178f2c: 92220019 lbu r2,0x0019(r17) Load Max Y
 
  00178f30: 00000000 nop
 
  00178f30: 00000000 nop
 
  00178f34: 03c2102a slt r2,r30,r2
 
  00178f34: 03c2102a slt r2,r30,r2
  00178f38: 1040003e beq r2,r0,0x00179034
+
  00178f38: 1040003e beq r2,r0,0x00179034 Branch if Current X is out of bounds
 
  00178f3c: 00000000 nop
 
  00178f3c: 00000000 nop
  00178f40: 86030028 lh r3,0x0028(r16)
+
 
  00178f44: 92220018 lbu r2,0x0018(r17)
+
<Inner Y Loop>
 +
  00178f40: 86030028 lh r3,0x0028(r16) Y?
 +
  00178f44: 92220018 lbu r2,0x0018(r17) Load Max X
 
  00178f48: 00000000 nop
 
  00178f48: 00000000 nop
  00178f4c: 00620018 mult r3,r2
+
  00178f4c: 00620018 mult r3,r2 Max X * Y?
  00178f50: a6000026 sh r0,0x0026(r16)
+
  00178f50: a6000026 sh r0,0x0026(r16) Clear ?
  00178f54: 9603002c lhu r3,0x002c(r16)
+
  00178f54: 9603002c lhu r3,0x002c(r16) X?
 
  00178f58: 00001012 mflo r2
 
  00178f58: 00001012 mflo r2
  00178f5c: 00621821 addu r3,r3,r2
+
  00178f5c: 00621821 addu r3,r3,r2 Max X * Y? + X?
  00178f60: a603002e sh r3,0x002e(r16)
+
  00178f60: a603002e sh r3,0x002e(r16) Save Tile Pointer
  00178f64: 92220018 lbu r2,0x0018(r17)
+
 
 +
  00178f64: 92220018 lbu r2,0x0018(r17) Load Max X
 
  00178f68: 00000000 nop
 
  00178f68: 00000000 nop
  00178f6c: 03c2102a slt r2,r30,r2
+
  00178f6c: 03c2102a slt r2,r30,r2
  00178f70: 10400026 beq r2,r0,0x0017900c
+
  00178f70: 10400026 beq r2,r0,0x0017900c <Inner Y++> if Current X is out of bounds (Why compare to both Max X and Y?)
 
  00178f74: 00000000 nop
 
  00178f74: 00000000 nop
  00178f78: 9602002e lhu r2,0x002e(r16)
+
 
  00178f7c: 96030026 lhu r3,0x0026(r16)
+
<Inner X Loop>
 +
  00178f78: 9602002e lhu r2,0x002e(r16) Load Tile Pointer
 +
  00178f7c: 96030026 lhu r3,0x0026(r16) Load Cleared ? (High Tile?)
 
  00178f80: 00000000 nop
 
  00178f80: 00000000 nop
  00178f84: 00431021 addu r2,r2,r3
+
  00178f84: 00431021 addu r2,r2,r3 Tile Pointer + ?
  00178f88: a602001a sh r2,0x001a(r16)
+
  00178f88: a602001a sh r2,0x001a(r16) Save Tile Pointer
  00178f8c: 00021400 sll r2,r2,0x10
+
  00178f8c: 00021400 sll r2,r2,0x10 Tile Pointer * 10000
  00178f90: 00021343 sra r2,r2,0x0d
+
  00178f90: 00021343 sra r2,r2,0x0d Tile Pointer / 2000
  00178f94: 8603001a lh r3,0x001a(r16)
+
  00178f94: 8603001a lh r3,0x001a(r16) Load Saved Tile Pointer
  00178f98: 00561021 addu r2,r2,r22
+
  00178f98: 00561021 addu r2,r2,r22 Tile Pointer / 2000 + Map Level
  00178f9c: ae020000 sw r2,0x0000(r16)
+
  00178f9c: ae020000 sw r2,0x0000(r16) Save Tile Pointer * 8
  00178fa0: 00031080 sll r2,r3,0x02
+
  00178fa0: 00031080 sll r2,r3,0x02 Saved Tile Pointer * 4
  00178fa4: 00431021 addu r2,r2,r3
+
  00178fa4: 00431021 addu r2,r2,r3 Saved Tile Pointer * 5
  00178fa8: 8603001a lh r3,0x001a(r16)
+
  00178fa8: 8603001a lh r3,0x001a(r16) Load Saved Tile Pointer
  00178fac: 00551021 addu r2,r2,r21
+
  00178fac: 00551021 addu r2,r2,r21 Get Current Tile from MoveTarget Grid Panel
  00178fb0: ae020008 sw r2,0x0008(r16)
+
  00178fb0: ae020008 sw r2,0x0008(r16) Save Current Tile Pointer
  00178fb4: 02831021 addu r2,r20,r3
+
  00178fb4: 02831021 addu r2,r20,r3 Save Tile POinter + 18f4f0
  00178fb8: 90420000 lbu r2,0x0000(r2)
+
  00178fb8: 90420000 lbu r2,0x0000(r2) Load ?
  00178fbc: 02631821 addu r3,r19,r3
+
  00178fbc: 02631821 addu r3,r19,r3 r3 = 18f4e8 + Tile Pointer
 
  00178fc0: 30420001 andi r2,r2,0x0001
 
  00178fc0: 30420001 andi r2,r2,0x0001
  00178fc4: a0620000 sb r2,0x0000(r3)
+
  00178fc4: a0620000 sb r2,0x0000(r3) Save flag to 18f4e8 + Tile Pointer
 
  00178fc8: 8603001a lh r3,0x001a(r16)
 
  00178fc8: 8603001a lh r3,0x001a(r16)
 
  00178fcc: 00000000 nop
 
  00178fcc: 00000000 nop
Line 209: Line 237:
 
  00178fdc: 304200fe andi r2,r2,0x00fe
 
  00178fdc: 304200fe andi r2,r2,0x00fe
 
  00178fe0: a0620000 sb r2,0x0000(r3)
 
  00178fe0: a0620000 sb r2,0x0000(r3)
 +
 +
<Inner X++>
 
  00178fe4: 96020026 lhu r2,0x0026(r16)
 
  00178fe4: 96020026 lhu r2,0x0026(r16)
 
  00178fe8: 00000000 nop
 
  00178fe8: 00000000 nop
Line 214: Line 244:
 
  00178ff0: a6020026 sh r2,0x0026(r16)
 
  00178ff0: a6020026 sh r2,0x0026(r16)
 
  00178ff4: 00021400 sll r2,r2,0x10
 
  00178ff4: 00021400 sll r2,r2,0x10
  00178ff8: 92230018 lbu r3,0x0018(r17)
+
  00178ff8: 92230018 lbu r3,0x0018(r17) Load Max X
 
  00178ffc: 00021403 sra r2,r2,0x10
 
  00178ffc: 00021403 sra r2,r2,0x10
 
  00179000: 0043102a slt r2,r2,r3
 
  00179000: 0043102a slt r2,r2,r3
  00179004: 1440ffdc bne r2,r0,0x00178f78
+
  00179004: 1440ffdc bne r2,r0,0x00178f78 Branch if X? is out of bounds
 
  00179008: 00000000 nop
 
  00179008: 00000000 nop
 +
 +
<Inner Y++>
 
  0017900c: 96020028 lhu r2,0x0028(r16)
 
  0017900c: 96020028 lhu r2,0x0028(r16)
 
  00179010: 00000000 nop
 
  00179010: 00000000 nop
Line 224: Line 256:
 
  00179018: a6020028 sh r2,0x0028(r16)
 
  00179018: a6020028 sh r2,0x0028(r16)
 
  0017901c: 00021400 sll r2,r2,0x10
 
  0017901c: 00021400 sll r2,r2,0x10
  00179020: 92230019 lbu r3,0x0019(r17)
+
  00179020: 92230019 lbu r3,0x0019(r17) Load Max Y
 
  00179024: 00021403 sra r2,r2,0x10
 
  00179024: 00021403 sra r2,r2,0x10
 
  00179028: 0043102a slt r2,r2,r3
 
  00179028: 0043102a slt r2,r2,r3
  0017902c: 1440ffc4 bne r2,r0,0x00178f40
+
  0017902c: 1440ffc4 bne r2,r0,0x00178f40 Branch if Y? is out of bounds
 
  00179030: 00000000 nop
 
  00179030: 00000000 nop
 +
 +
<Map Level++ (Inner)>
 
  00179034: 9602002a lhu r2,0x002a(r16)
 
  00179034: 9602002a lhu r2,0x002a(r16)
 
  00179038: 00000000 nop
 
  00179038: 00000000 nop
 
  0017903c: 24420001 addiu r2,r2,0x0001
 
  0017903c: 24420001 addiu r2,r2,0x0001
 
  00179040: a602002a sh r2,0x002a(r16)
 
  00179040: a602002a sh r2,0x002a(r16)
  00179044: 00021400 sll r2,r2,0x10
+
  00179044: 00021400 sll r2,r2,0x10 Increase value by * 10000 just before it gets saved?
 
  00179048: 00021403 sra r2,r2,0x10
 
  00179048: 00021403 sra r2,r2,0x10
 
  0017904c: 28420002 slti r2,r2,0x0002
 
  0017904c: 28420002 slti r2,r2,0x0002
  00179050: 1440ffb2 bne r2,r0,0x00178f1c
+
  00179050: 1440ffb2 bne r2,r0,0x00178f1c Branch for High Tile
 
  00179054: 00000000 nop
 
  00179054: 00000000 nop
 +
 
  00179058: a2000062 sb r0,0x0062(r16)
 
  00179058: a2000062 sb r0,0x0062(r16)
 
  0017905c: a600002a sh r0,0x002a(r16)
 
  0017905c: a600002a sh r0,0x002a(r16)
 +
 +
<Map Level Loop (Main)>
 
  00179060: 8602002a lh r2,0x002a(r16)
 
  00179060: 8602002a lh r2,0x002a(r16)
 
  00179064: a6000028 sh r0,0x0028(r16)
 
  00179064: a6000028 sh r0,0x0028(r16)
 
  00179068: 00021200 sll r2,r2,0x08
 
  00179068: 00021200 sll r2,r2,0x08
 
  0017906c: a602002c sh r2,0x002c(r16)
 
  0017906c: a602002c sh r2,0x002c(r16)
  00179070: 92220019 lbu r2,0x0019(r17)
+
  00179070: 92220019 lbu r2,0x0019(r17) Load Max Y
 
  00179074: 00000000 nop
 
  00179074: 00000000 nop
  00179078: 1040003e beq r2,r0,0x00179174
+
  00179078: 1040003e beq r2,r0,0x00179174 <Map Level++> if Max Y is 0
 
  0017907c: 00000000 nop
 
  0017907c: 00000000 nop
 +
 +
<Y Loop>
 
  00179080: 86030028 lh r3,0x0028(r16)
 
  00179080: 86030028 lh r3,0x0028(r16)
  00179084: 92220018 lbu r2,0x0018(r17)
+
  00179084: 92220018 lbu r2,0x0018(r17) Load Max X
 
  00179088: 00000000 nop
 
  00179088: 00000000 nop
  0017908c: 00620018 mult r3,r2
+
  0017908c: 00620018 mult r3,r2 Max X * ?
 
  00179090: a6000026 sh r0,0x0026(r16)
 
  00179090: a6000026 sh r0,0x0026(r16)
 
  00179094: 9603002c lhu r3,0x002c(r16)
 
  00179094: 9603002c lhu r3,0x002c(r16)
Line 257: Line 296:
 
  0017909c: 00621821 addu r3,r3,r2
 
  0017909c: 00621821 addu r3,r3,r2
 
  001790a0: a603002e sh r3,0x002e(r16)
 
  001790a0: a603002e sh r3,0x002e(r16)
  001790a4: 92220018 lbu r2,0x0018(r17)
+
  001790a4: 92220018 lbu r2,0x0018(r17) Load Max X
 
  001790a8: 00000000 nop
 
  001790a8: 00000000 nop
  001790ac: 10400027 beq r2,r0,0x0017914c
+
  001790ac: 10400027 beq r2,r0,0x0017914c <Y++> if Max X is 0
 
  001790b0: 00000000 nop
 
  001790b0: 00000000 nop
 +
 +
<X Loop>
 
  001790b4: 9602002e lhu r2,0x002e(r16)
 
  001790b4: 9602002e lhu r2,0x002e(r16)
 
  001790b8: 96030026 lhu r3,0x0026(r16)
 
  001790b8: 96030026 lhu r3,0x0026(r16)
Line 279: Line 320:
 
  001790f4: 90620000 lbu r2,0x0000(r3)
 
  001790f4: 90620000 lbu r2,0x0000(r3)
 
  001790f8: 00000000 nop
 
  001790f8: 00000000 nop
  001790fc: 10400009 beq r2,r0,0x00179124
+
  001790fc: 10400009 beq r2,r0,0x00179124 <X++ if false>
 
  00179100: 00000000 nop
 
  00179100: 00000000 nop
  00179104: 0c05de77 jal 0x001779dc
+
 
 +
  00179104: 0c05de77 jal 0x001779dc Multi Functions for Movement Routine
 
  00179108: a2000040 sb r0,0x0040(r16)
 
  00179108: a2000040 sb r0,0x0040(r16)
  0017910c: 9222001d lbu r2,0x001d(r17)
+
  0017910c: 9222001d lbu r2,0x001d(r17) Load Teleport Check?
 
  00179110: 00000000 nop
 
  00179110: 00000000 nop
  00179114: 14400003 bne r2,r0,0x00179124
+
  00179114: 14400003 bne r2,r0,0x00179124 <X++> if Teleport (Checked off when Teleport in 174430)
 
  00179118: 00000000 nop
 
  00179118: 00000000 nop
  0017911c: 0c05df02 jal 0x00177c08
+
  0017911c: 0c05df02 jal 0x00177c08 Multi Functions for Movement Routine (Longer than the one above)
 
  00179120: a2000040 sb r0,0x0040(r16)
 
  00179120: a2000040 sb r0,0x0040(r16)
 +
 +
<X++>
 
  00179124: 96020026 lhu r2,0x0026(r16)
 
  00179124: 96020026 lhu r2,0x0026(r16)
 
  00179128: 00000000 nop
 
  00179128: 00000000 nop
Line 294: Line 338:
 
  00179130: a6020026 sh r2,0x0026(r16)
 
  00179130: a6020026 sh r2,0x0026(r16)
 
  00179134: 00021400 sll r2,r2,0x10
 
  00179134: 00021400 sll r2,r2,0x10
  00179138: 92230018 lbu r3,0x0018(r17)
+
  00179138: 92230018 lbu r3,0x0018(r17) Load Max X
 
  0017913c: 00021403 sra r2,r2,0x10
 
  0017913c: 00021403 sra r2,r2,0x10
 
  00179140: 0043102a slt r2,r2,r3
 
  00179140: 0043102a slt r2,r2,r3
  00179144: 1440ffdb bne r2,r0,0x001790b4
+
  00179144: 1440ffdb bne r2,r0,0x001790b4 Loop until Max X
 
  00179148: 00000000 nop
 
  00179148: 00000000 nop
 +
 +
<Y++>
 
  0017914c: 96020028 lhu r2,0x0028(r16)
 
  0017914c: 96020028 lhu r2,0x0028(r16)
 
  00179150: 00000000 nop
 
  00179150: 00000000 nop
Line 307: Line 353:
 
  00179164: 00021403 sra r2,r2,0x10
 
  00179164: 00021403 sra r2,r2,0x10
 
  00179168: 0043102a slt r2,r2,r3
 
  00179168: 0043102a slt r2,r2,r3
  0017916c: 1440ffc4 bne r2,r0,0x00179080
+
  0017916c: 1440ffc4 bne r2,r0,0x00179080 Loop until Max Y
 
  00179170: 00000000 nop
 
  00179170: 00000000 nop
 +
 +
<Map Level++>
 
  00179174: 9602002a lhu r2,0x002a(r16)
 
  00179174: 9602002a lhu r2,0x002a(r16)
 
  00179178: 00000000 nop
 
  00179178: 00000000 nop
Line 316: Line 364:
 
  00179188: 00021403 sra r2,r2,0x10
 
  00179188: 00021403 sra r2,r2,0x10
 
  0017918c: 28420002 slti r2,r2,0x0002
 
  0017918c: 28420002 slti r2,r2,0x0002
  00179190: 1440ffb3 bne r2,r0,0x00179060
+
  00179190: 1440ffb3 bne r2,r0,0x00179060 Loop again for high tiles
 
  00179194: 00000000 nop
 
  00179194: 00000000 nop
  00179198: 92220006 lbu r2,0x0006(r17)
+
 
  0017919c: 26520001 addiu r18,r18,0x0001
+
<Move Counter++>
 +
  00179198: 92220006 lbu r2,0x0006(r17) Load Move
 +
  0017919c: 26520001 addiu r18,r18,0x0001 Move Counter++
 
  001791a0: 0242102a slt r2,r18,r2
 
  001791a0: 0242102a slt r2,r18,r2
  001791a4: 1440ff4e bne r2,r0,0x00178ee0
+
  001791a4: 1440ff4e bne r2,r0,0x00178ee0 Loop until Move (Move usually defaults to 7c, increment until 80)
 
  001791a8: 34170001 ori r23,r0,0x0001
 
  001791a8: 34170001 ori r23,r0,0x0001
 +
 +
<Exit>
 
  001791ac: 0c05d4a2 jal 0x00175288
 
  001791ac: 0c05d4a2 jal 0x00175288
 
  001791b0: 00000000 nop
 
  001791b0: 00000000 nop
Line 332: Line 384:
 
  001791c8: 3c018019 lui r1,0x8019
 
  001791c8: 3c018019 lui r1,0x8019
 
  001791cc: ac23f514 sw r3,-0x0aec(r1)
 
  001791cc: ac23f514 sw r3,-0x0aec(r1)
 +
 
  001791d0: 8fbf0234 lw r31,0x0234(r29)
 
  001791d0: 8fbf0234 lw r31,0x0234(r29)
 
  001791d4: 8fbe0230 lw r30,0x0230(r29)
 
  001791d4: 8fbe0230 lw r30,0x0230(r29)
Line 345: Line 398:
 
  001791fc: 03e00008 jr r31
 
  001791fc: 03e00008 jr r31
 
  00179200: 00000000 nop
 
  00179200: 00000000 nop
</font>
 

Latest revision as of 00:17, 9 March 2017

r4 = Acting Unit ID
r5 = Caster X
r6 = Caster Y
r7 = Map Level
00178ca4: 27bdfdc8 addiu r29,r29,0xfdc8
00178ca8: 8fa20248 lw r2,0x0248(r29)			Evaluate Action?
00178cac: afb10214 sw r17,0x0214(r29)
00178cb0: 3c118019 lui r17,0x8019
00178cb4: 8e31f4e0 lw r17,-0x0b20(r17)			r17 = Movement Related Data Pointer
00178cb8: afb00210 sw r16,0x0210(r29)
00178cbc: 3c108019 lui r16,0x8019
00178cc0: 8e10f4e4 lw r16,-0x0b1c(r16)			r16 = ?
00178cc4: afb3021c sw r19,0x021c(r29)
00178cc8: 3c138019 lui r19,0x8019
00178ccc: 8e73f4e8 lw r19,-0x0b18(r19)			r19 = ?
00178cd0: afb40220 sw r20,0x0220(r29)
00178cd4: 3c148019 lui r20,0x8019
00178cd8: 8e94f4f0 lw r20,-0x0b10(r20)			r20 = 18f4f0 ?
00178cdc: 8fa8024c lw r8,0x024c(r29)			r8 = Previous Routine's Pointer + 20
00178ce0: afbe0230 sw r30,0x0230(r29)
00178ce4: 00a0f021 addu r30,r5,r0				r30 = Acting Unit X
00178ce8: afb50224 sw r21,0x0224(r29)
00178cec: 00c0a821 addu r21,r6,r0				r21 = Acting Unit Y
00178cf0: afb60228 sw r22,0x0228(r29)
00178cf4: 00e0b021 addu r22,r7,r0				r22 = Acting Unit Map Level
00178cf8: afb7022c sw r23,0x022c(r29)
00178cfc: 0000b821 addu r23,r0,r0				r23 = 0
00178d00: afbf0234 sw r31,0x0234(r29)
00178d04: afb20218 sw r18,0x0218(r29)
00178d08: 1040004b beq r2,r0,0x00178e38			Branch if Evaluate Action? = False
00178d0c: ad000000 sw r0,0x0000(r8)				0x20 = False
<Evaluate Action>
00178d10: 000410c0 sll r2,r4,0x03				Unit ID * 8
00178d14: 00441023 subu r2,r2,r4				Unit ID * 7
00178d18: 00021180 sll r2,r2,0x06				Unit ID * 1c0
00178d1c: 3c018019 lui r1,0x8019
00178d20: 00220821 addu r1,r1,r2
00178d24: 902308cd lbu r3,0x08cd(r1)			Load Unit ID (from Unit Data)
00178d28: 340200ff ori r2,r0,0x00ff
00178d2c: 14620003 bne r3,r2,0x00178d3c			Branch if Unit Exists
00178d30: 00000000 nop
00178d34: 0805e474 j 0x001791d0					Exit and return -1
00178d38: 2402ffff addiu r2,r0,0xffff
00178d3c: 0c05d10c jal 0x00174430				Evaluate Walkabilty on Map (Where unit can move to)
00178d40: 3412000f ori r18,r0,0x000f			r18 = 0x0f
00178d44: 3402007c ori r2,r0,0x007c
00178d48: a2220006 sb r2,0x0006(r17)			Save Move = 4 to Movement Related Data ([0x80 - Move] is how Move is stored)
00178d4c: 340300ff ori r3,r0,0x00ff
00178d50: 26620069 addiu r2,r19,0x0069			r19 = ? + 69
00178d54: a0430003 sb r3,0x0003(r2)
00178d58: 2652ffff addiu r18,r18,0xffff
00178d5c: 0641fffd bgez r18,0x00178d54			Do 0x0f times	
00178d60: 2442fff9 addiu r2,r2,0xfff9
00178d64: 0c05d3a1 jal 0x00174e84				Evaluate Map Walkability (Water Depth, Move on Lava?, etc.)
00178d68: 34040001 ori r4,r0,0x0001
00178d6c: 92230008 lbu r3,0x0008(r17)			Load Y
00178d70: 92220018 lbu r2,0x0018(r17)			Load Max X
00178d74: 00000000 nop
00178d78: 00620018 mult r3,r2					Y * Max X
00178d7c: 92220009 lbu r2,0x0009(r17)			Load Map Level
00178d80: 92240007 lbu r4,0x0007(r17)			Load X
00178d84: 00021200 sll r2,r2,0x08
00178d88: 00001812 mflo r3						Y * Max X
00178d8c: 00431021 addu r2,r2,r3				
00178d90: 00441821 addu r3,r2,r4				Y * Max X + X + Map Level
00178d94: 00031080 sll r2,r3,0x02				"" * 4
00178d98: 00431021 addu r2,r2,r3				"" * 5 (Get Tile Pointer)
00178d9c: 3c048019 lui r4,0x8019
00178da0: 24842dd8 addiu r4,r4,0x2dd8			Moveable/Targetable Grid Panel
00178da4: 00442821 addu r5,r2,r4				Get Current Tile from Grid		
00178da8: 02831821 addu r3,r20,r3				Tile Pointer + 18f4f0
00178dac: a0a00003 sb r0,0x0003(r5)				Clear ?
00178db0: a0a00000 sb r0,0x0000(r5)				Clear AoE
00178db4: 90620000 lbu r2,0x0000(r3)			Load ?
00178db8: 00000000 nop
00178dbc: 304200fe andi r2,r2,0x00fe
00178dc0: a0620000 sb r2,0x0000(r3)				Remove 0x01 from ?
00178dc4: 34020004 ori r2,r0,0x0004
00178dc8: a2020054 sb r2,0x0054(r16)
00178dcc: a2020055 sb r2,0x0055(r16)
00178dd0: 340200ff ori r2,r0,0x00ff
00178dd4: a0a00000 sb r0,0x0000(r5)				Clear AoE
00178dd8: a0a20004 sb r2,0x0004(r5)				Default tile to Obstructed
00178ddc: 92220018 lbu r2,0x0018(r17)			Load Max X
00178de0: 00000000 nop
00178de4: 02a20018 mult r21,r2					Acting Unit's Y * Max X
00178de8: 00161200 sll r2,r22,0x08				Acting Unit Map Level * 100
00178dec: 00001812 mflo r3						Acting Unit's Y * Max X
00178df0: 00431021 addu r2,r2,r3				Acting Unit's Y * Max X + Map Level
00178df4: 005e1821 addu r3,r2,r30				"" + Acting Unit's X
00178df8: 00031080 sll r2,r3,0x02				Acting Unit Tile Pointer * 4
00178dfc: 00431021 addu r2,r2,r3				"" * 5
00178e00: 00442821 addu r5,r2,r4				"" + MoveTarget Grid Panel
00178e04: 3402007d ori r2,r0,0x007d				(Is this supposed to represent a 3 movement minimum?)
00178e08: 02831821 addu r3,r20,r3				? + Acting Tile Pointer
00178e0c: a0a20000 sb r2,0x0000(r5)				Save desired minimum movement?
00178e10: 90620000 lbu r2,0x0000(r3)			Load AoE?
00178e14: 00000000 nop
00178e18: 34420001 ori r2,r2,0x0001
00178e1c: a0620000 sb r2,0x0000(r3)				Mark AoE?
00178e20: 34020001 ori r2,r0,0x0001
00178e24: a0a00004 sb r0,0x0004(r5)				Tile is not obstructed
00178e28: 3c018019 lui r1,0x8019
00178e2c: ac20f7e8 sw r0,-0x0818(r1)			Clear word
00178e30: 0805e393 j 0x00178e4c
00178e34: a2220023 sb r2,0x0023(r17)			Save ? as true
<Haven't decided on an action yet>
00178e38: 3c048019 lui r4,0x8019
00178e3c: 24843924 addiu r4,r4,0x3924			r4 = Unit AI Extended Status Data
00178e40: 3c051f80 lui r5,0x1f80				r5 = 0x1f800000
00178e44: 0c017895 jal 0x0005e254				Save every unit's AI Extended Status data to 0x1f800000 (Store X Byte into Y)
00178e48: 34060400 ori r6,r0,0x0400				r6 = 0x0400
00178e4c: 9223000e lbu r3,0x000e(r17)			Load Bypass Obstacle?
00178e50: 34020001 ori r2,r0,0x0001
00178e54: 14620015 bne r3,r2,0x00178eac			Branch if Unit can Bypass Obstacle? (Set when Move Underwater/Teleport)
<Clear all AoE>
00178e58: 34030001 ori r3,r0,0x0001
00178e5c: 341201ff ori r18,r0,0x01ff
00178e60: 3c028019 lui r2,0x8019
00178e64: 244237d3 addiu r2,r2,0x37d3			Load MoveTarget Grid Panel (From last byte)
00178e68: a0430000 sb r3,0x0000(r2)				Clear all AoE
00178e6c: 2652ffff addiu r18,r18,0xffff
00178e70: 0641fffd bgez r18,0x00178e68			Loop and clear all tiles from AoE starting backwards
00178e74: 2442fffb addiu r2,r2,0xfffb
00178e78: 0805e46b j 0x001791ac
00178e7c: 00000000 nop
<r23 has been set>
00178e80: 3c058019 lui r5,0x8019
00178e84: 24a53924 addiu r5,r5,0x3924			r5 = Unit AI Extended Status Data
00178e88: 34060400 ori r6,r0,0x0400				r6 = 0x0400 (Unit AI Extended Status Data's size)
00178e8c: 8fa8024c lw r8,0x024c(r29)			r8 = Previous Routine's Pointer + 20
00178e90: 34020001 ori r2,r0,0x0001
00178e94: 3c018019 lui r1,0x8019
00178e98: ac32f7e8 sw r18,-0x0818(r1)			Save Move Counter
00178e9c: 0c017895 jal 0x0005e254				Save every unit's AI Extended Status data to 0x1f800000 (Store X Byte into Y)
00178ea0: ad020000 sw r2,0x0000(r8)				0x20 = Unit cannot Move?
00178ea4: 0805e474 j 0x001791d0					Exit and return 0
00178ea8: 00001021 addu r2,r0,r0
<Unit can bypass obstacles?>
00178eac: 3c128019 lui r18,0x8019
00178eb0: 8e52f7e8 lw r18,-0x0818(r18)			Load Desired? Move
00178eb4: 92220006 lbu r2,0x0006(r17)			Load Move (Defaults to 4 Move)
00178eb8: 00000000 nop
00178ebc: 0242102a slt r2,r18,r2
00178ec0: 104000ba beq r2,r0,0x001791ac			Branch to last routine and exit if desired move is out of reach?
00178ec4: 00000000 nop
<Initialize>
00178ec8: 0000f021 addu r30,r0,r0
00178ecc: 3c168019 lui r22,0x8019
00178ed0: 26d6f8cc addiu r22,r22,0xf8cc
00178ed4: 3c158019 lui r21,0x8019
00178ed8: 26b52dd8 addiu r21,r21,0x2dd8
00178edc: 27b30010 addiu r19,r29,0x0010
<Move Loop>
00178ee0: 8fa80250 lw r8,0x0250(r29)				Load isNormalMovement
00178ee4: 00000000 nop
00178ee8: 11000007 beq r8,r0,0x00178f08				Branch if not normal movement (Teleport, etc.)
00178eec: 00000000 nop
00178ef0: 0c066bbc jal 0x0019aef0					Frame Data RNG wrapper
00178ef4: 00000000 nop
00178ef8: 10400003 beq r2,r0,0x00178f08				Branch if the Frame RNG said false
00178efc: 00000000 nop
00178f00: 16e0ffdf bne r23,r0,0x00178e80			Branch back and exit if r23 has been set (only set at the very end)
00178f04: 3c041f80 lui r4,0x1f80					Load AI Extended Status
00178f08: 92020062 lbu r2,0x0062(r16)				Load ?
00178f0c: 00000000 nop
00178f10: 104000a6 beq r2,r0,0x001791ac				Last Routine and Exit if false
00178f14: 00000000 nop
00178f18: a600002a sh r0,0x002a(r16)				Clear Map Level
<Map Level Loop (Inner)>
00178f1c: 8602002a lh r2,0x002a(r16)				Get Map Level before it's overwritten
00178f20: a6000028 sh r0,0x0028(r16)				Clear Y
00178f24: 00021200 sll r2,r2,0x08
00178f28: a602002c sh r2,0x002c(r16)
00178f2c: 92220019 lbu r2,0x0019(r17)				Load Max Y
00178f30: 00000000 nop
00178f34: 03c2102a slt r2,r30,r2
00178f38: 1040003e beq r2,r0,0x00179034				Branch if Current X is out of bounds
00178f3c: 00000000 nop
<Inner Y Loop>
00178f40: 86030028 lh r3,0x0028(r16)				Y?			
00178f44: 92220018 lbu r2,0x0018(r17)				Load Max X
00178f48: 00000000 nop
00178f4c: 00620018 mult r3,r2						Max X * Y?
00178f50: a6000026 sh r0,0x0026(r16)				Clear ?
00178f54: 9603002c lhu r3,0x002c(r16)				X?
00178f58: 00001012 mflo r2
00178f5c: 00621821 addu r3,r3,r2					Max X * Y? + X?
00178f60: a603002e sh r3,0x002e(r16)				Save Tile Pointer
00178f64: 92220018 lbu r2,0x0018(r17)				Load Max X
00178f68: 00000000 nop
00178f6c: 03c2102a slt r2,r30,r2					
00178f70: 10400026 beq r2,r0,0x0017900c				<Inner Y++> if Current X is out of bounds (Why compare to both Max X and Y?)
00178f74: 00000000 nop
<Inner X Loop>
00178f78: 9602002e lhu r2,0x002e(r16)				Load Tile Pointer
00178f7c: 96030026 lhu r3,0x0026(r16)				Load Cleared ? (High Tile?)
00178f80: 00000000 nop
00178f84: 00431021 addu r2,r2,r3					Tile Pointer + ?
00178f88: a602001a sh r2,0x001a(r16)				Save Tile Pointer
00178f8c: 00021400 sll r2,r2,0x10					Tile Pointer * 10000
00178f90: 00021343 sra r2,r2,0x0d					Tile Pointer / 2000
00178f94: 8603001a lh r3,0x001a(r16)				Load Saved Tile Pointer
00178f98: 00561021 addu r2,r2,r22					Tile Pointer / 2000 + Map Level
00178f9c: ae020000 sw r2,0x0000(r16)				Save Tile Pointer * 8
00178fa0: 00031080 sll r2,r3,0x02					Saved Tile Pointer * 4
00178fa4: 00431021 addu r2,r2,r3					Saved Tile Pointer * 5
00178fa8: 8603001a lh r3,0x001a(r16)				Load Saved Tile Pointer
00178fac: 00551021 addu r2,r2,r21					Get Current Tile from MoveTarget Grid Panel
00178fb0: ae020008 sw r2,0x0008(r16)				Save Current Tile Pointer
00178fb4: 02831021 addu r2,r20,r3 					Save Tile POinter + 18f4f0
00178fb8: 90420000 lbu r2,0x0000(r2)				Load ?
00178fbc: 02631821 addu r3,r19,r3					r3 = 18f4e8 + Tile Pointer
00178fc0: 30420001 andi r2,r2,0x0001
00178fc4: a0620000 sb r2,0x0000(r3)					Save flag to 18f4e8 + Tile Pointer
00178fc8: 8603001a lh r3,0x001a(r16)
00178fcc: 00000000 nop
00178fd0: 02831821 addu r3,r20,r3
00178fd4: 90620000 lbu r2,0x0000(r3)
00178fd8: 00000000 nop
00178fdc: 304200fe andi r2,r2,0x00fe
00178fe0: a0620000 sb r2,0x0000(r3)
<Inner X++>
00178fe4: 96020026 lhu r2,0x0026(r16)
00178fe8: 00000000 nop
00178fec: 24420001 addiu r2,r2,0x0001
00178ff0: a6020026 sh r2,0x0026(r16)
00178ff4: 00021400 sll r2,r2,0x10
00178ff8: 92230018 lbu r3,0x0018(r17)				Load Max X
00178ffc: 00021403 sra r2,r2,0x10
00179000: 0043102a slt r2,r2,r3
00179004: 1440ffdc bne r2,r0,0x00178f78				Branch if X? is out of bounds
00179008: 00000000 nop
<Inner Y++>
0017900c: 96020028 lhu r2,0x0028(r16)
00179010: 00000000 nop
00179014: 24420001 addiu r2,r2,0x0001
00179018: a6020028 sh r2,0x0028(r16)
0017901c: 00021400 sll r2,r2,0x10
00179020: 92230019 lbu r3,0x0019(r17)				Load Max Y
00179024: 00021403 sra r2,r2,0x10
00179028: 0043102a slt r2,r2,r3
0017902c: 1440ffc4 bne r2,r0,0x00178f40				Branch if Y? is out of bounds
00179030: 00000000 nop
<Map Level++ (Inner)>
00179034: 9602002a lhu r2,0x002a(r16)
00179038: 00000000 nop
0017903c: 24420001 addiu r2,r2,0x0001
00179040: a602002a sh r2,0x002a(r16)
00179044: 00021400 sll r2,r2,0x10					Increase value by * 10000 just before it gets saved?
00179048: 00021403 sra r2,r2,0x10
0017904c: 28420002 slti r2,r2,0x0002
00179050: 1440ffb2 bne r2,r0,0x00178f1c				Branch for High Tile
00179054: 00000000 nop
00179058: a2000062 sb r0,0x0062(r16)
0017905c: a600002a sh r0,0x002a(r16)
<Map Level Loop (Main)>
00179060: 8602002a lh r2,0x002a(r16)
00179064: a6000028 sh r0,0x0028(r16)
00179068: 00021200 sll r2,r2,0x08
0017906c: a602002c sh r2,0x002c(r16)
00179070: 92220019 lbu r2,0x0019(r17)				Load Max Y
00179074: 00000000 nop
00179078: 1040003e beq r2,r0,0x00179174				<Map Level++> if Max Y is 0
0017907c: 00000000 nop
<Y Loop>
00179080: 86030028 lh r3,0x0028(r16)
00179084: 92220018 lbu r2,0x0018(r17)				Load Max X
00179088: 00000000 nop
0017908c: 00620018 mult r3,r2						Max X * ?
00179090: a6000026 sh r0,0x0026(r16)
00179094: 9603002c lhu r3,0x002c(r16)
00179098: 00001012 mflo r2
0017909c: 00621821 addu r3,r3,r2
001790a0: a603002e sh r3,0x002e(r16)
001790a4: 92220018 lbu r2,0x0018(r17)				Load Max X
001790a8: 00000000 nop
001790ac: 10400027 beq r2,r0,0x0017914c				<Y++> if Max X is 0
001790b0: 00000000 nop
<X Loop>
001790b4: 9602002e lhu r2,0x002e(r16)
001790b8: 96030026 lhu r3,0x0026(r16)
001790bc: 00000000 nop
001790c0: 00431021 addu r2,r2,r3
001790c4: a602001a sh r2,0x001a(r16)
001790c8: 00021400 sll r2,r2,0x10
001790cc: 00021343 sra r2,r2,0x0d
001790d0: 8603001a lh r3,0x001a(r16)
001790d4: 00561021 addu r2,r2,r22
001790d8: ae020000 sw r2,0x0000(r16)
001790dc: 00031080 sll r2,r3,0x02
001790e0: 00431021 addu r2,r2,r3
001790e4: 8603001a lh r3,0x001a(r16)
001790e8: 00551021 addu r2,r2,r21
001790ec: ae020008 sw r2,0x0008(r16)
001790f0: 02631821 addu r3,r19,r3
001790f4: 90620000 lbu r2,0x0000(r3)
001790f8: 00000000 nop
001790fc: 10400009 beq r2,r0,0x00179124				<X++ if false>
00179100: 00000000 nop
00179104: 0c05de77 jal 0x001779dc					Multi Functions for Movement Routine
00179108: a2000040 sb r0,0x0040(r16)
0017910c: 9222001d lbu r2,0x001d(r17)				Load Teleport Check?
00179110: 00000000 nop
00179114: 14400003 bne r2,r0,0x00179124				<X++> if Teleport (Checked off when Teleport in 174430)
00179118: 00000000 nop
0017911c: 0c05df02 jal 0x00177c08					Multi Functions for Movement Routine (Longer than the one above)
00179120: a2000040 sb r0,0x0040(r16)
<X++>
00179124: 96020026 lhu r2,0x0026(r16)
00179128: 00000000 nop
0017912c: 24420001 addiu r2,r2,0x0001
00179130: a6020026 sh r2,0x0026(r16)
00179134: 00021400 sll r2,r2,0x10
00179138: 92230018 lbu r3,0x0018(r17)				Load Max X
0017913c: 00021403 sra r2,r2,0x10
00179140: 0043102a slt r2,r2,r3
00179144: 1440ffdb bne r2,r0,0x001790b4				Loop until Max X	
00179148: 00000000 nop
<Y++>
0017914c: 96020028 lhu r2,0x0028(r16)
00179150: 00000000 nop
00179154: 24420001 addiu r2,r2,0x0001
00179158: a6020028 sh r2,0x0028(r16)
0017915c: 00021400 sll r2,r2,0x10
00179160: 92230019 lbu r3,0x0019(r17)
00179164: 00021403 sra r2,r2,0x10
00179168: 0043102a slt r2,r2,r3
0017916c: 1440ffc4 bne r2,r0,0x00179080				Loop until Max Y
00179170: 00000000 nop
<Map Level++>
00179174: 9602002a lhu r2,0x002a(r16)
00179178: 00000000 nop
0017917c: 24420001 addiu r2,r2,0x0001
00179180: a602002a sh r2,0x002a(r16)
00179184: 00021400 sll r2,r2,0x10
00179188: 00021403 sra r2,r2,0x10
0017918c: 28420002 slti r2,r2,0x0002
00179190: 1440ffb3 bne r2,r0,0x00179060				Loop again for high tiles		
00179194: 00000000 nop
<Move Counter++>
00179198: 92220006 lbu r2,0x0006(r17)				Load Move
0017919c: 26520001 addiu r18,r18,0x0001				Move Counter++
001791a0: 0242102a slt r2,r18,r2
001791a4: 1440ff4e bne r2,r0,0x00178ee0				Loop until Move (Move usually defaults to 7c, increment until 80)
001791a8: 34170001 ori r23,r0,0x0001
<Exit>
001791ac: 0c05d4a2 jal 0x00175288
001791b0: 00000000 nop
001791b4: 34030001 ori r3,r0,0x0001
001791b8: 3c018019 lui r1,0x8019
001791bc: ac23f510 sw r3,-0x0af0(r1)
001791c0: 9223000d lbu r3,0x000d(r17)
001791c4: 86020018 lh r2,0x0018(r16)
001791c8: 3c018019 lui r1,0x8019
001791cc: ac23f514 sw r3,-0x0aec(r1)
001791d0: 8fbf0234 lw r31,0x0234(r29)
001791d4: 8fbe0230 lw r30,0x0230(r29)
001791d8: 8fb7022c lw r23,0x022c(r29)
001791dc: 8fb60228 lw r22,0x0228(r29)
001791e0: 8fb50224 lw r21,0x0224(r29)
001791e4: 8fb40220 lw r20,0x0220(r29)
001791e8: 8fb3021c lw r19,0x021c(r29)
001791ec: 8fb20218 lw r18,0x0218(r29)
001791f0: 8fb10214 lw r17,0x0214(r29)
001791f4: 8fb00210 lw r16,0x0210(r29)
001791f8: 27bd0238 addiu r29,r29,0x0238
001791fc: 03e00008 jr r31
00179200: 00000000 nop