Difference between revisions of "AI Target Priority Super Routine (001999c8)"
Jump to navigation
Jump to search
m (Dokurider moved page 001999c8 - 00199b94 to AI Target Priority Super Routine (001999c8): Renaming and adding new documentation) |
(Updated documentation) |
||
Line 1: | Line 1: | ||
− | |||
− | |||
001999c8: 3c02801a lui r2,0x801a | 001999c8: 3c02801a lui r2,0x801a | ||
− | 001999cc: 90420d7b lbu r2,0x0d7b(r2) | + | 001999cc: 90420d7b lbu r2,0x0d7b(r2) If Acted this Turn |
001999d0: 27bdffc8 addiu r29,r29,0xffc8 | 001999d0: 27bdffc8 addiu r29,r29,0xffc8 | ||
001999d4: afb3002c sw r19,0x002c(r29) | 001999d4: afb3002c sw r19,0x002c(r29) | ||
001999d8: 3c13801a lui r19,0x801a | 001999d8: 3c13801a lui r19,0x801a | ||
− | 001999dc: 2673f3c4 addiu r19,r19,0xf3c4 | + | 001999dc: 2673f3c4 addiu r19,r19,0xf3c4 r19 = Ability AI Pointer |
001999e0: afbf0034 sw r31,0x0034(r29) | 001999e0: afbf0034 sw r31,0x0034(r29) | ||
001999e4: afb40030 sw r20,0x0030(r29) | 001999e4: afb40030 sw r20,0x0030(r29) | ||
001999e8: afb20028 sw r18,0x0028(r29) | 001999e8: afb20028 sw r18,0x0028(r29) | ||
001999ec: afb10024 sw r17,0x0024(r29) | 001999ec: afb10024 sw r17,0x0024(r29) | ||
− | 001999f0: 10400019 beq r2,r0,0x00199a58 | + | 001999f0: 10400019 beq r2,r0,0x00199a58 Branch if Acting Unit this turn hasn't Acted yet. |
001999f4: afb00020 sw r16,0x0020(r29) | 001999f4: afb00020 sw r16,0x0020(r29) | ||
001999f8: 3c10801a lui r16,0x801a | 001999f8: 3c10801a lui r16,0x801a | ||
− | 001999fc: 9210f3dc lbu r16,-0x0c24(r16) | + | 001999fc: 9210f3dc lbu r16,-0x0c24(r16) r16 = Caster X |
00199a00: 3c11801a lui r17,0x801a | 00199a00: 3c11801a lui r17,0x801a | ||
− | 00199a04: 9231f3de lbu r17,-0x0c22(r17) | + | 00199a04: 9231f3de lbu r17,-0x0c22(r17) r17 = Caster Y |
00199a08: 3c02801a lui r2,0x801a | 00199a08: 3c02801a lui r2,0x801a | ||
− | 00199a0c: 904201f1 lbu r2,0x01f1(r2) | + | 00199a0c: 904201f1 lbu r2,0x01f1(r2) Caster ID |
00199a10: 3c12801a lui r18,0x801a | 00199a10: 3c12801a lui r18,0x801a | ||
− | 00199a14: 9252f3dd lbu r18,-0x0c23(r18) | + | 00199a14: 9252f3dd lbu r18,-0x0c23(r18) r18 = Caster map level |
− | 00199a18: 000218c0 sll r3,r2,0x03 | + | 00199a18: 000218c0 sll r3,r2,0x03 ID*8 |
− | 00199a1c: 00621821 addu r3,r3,r2 | + | 00199a1c: 00621821 addu r3,r3,r2 ID*9 |
− | 00199a20: 000318c0 sll r3,r3,0x03 | + | 00199a20: 000318c0 sll r3,r3,0x03 ID*48 |
− | 00199a24: 00731821 addu r3,r3,r19 | + | 00199a24: 00731821 addu r3,r3,r19 Get Unit AI Pointer |
− | 00199a28: 24630a74 addiu r3,r3,0x0a74 | + | 00199a28: 24630a74 addiu r3,r3,0x0a74 Unit's AI Map Pointer (36 * 2 long) |
00199a2c: 001210c0 sll r2,r18,0x03 maplevel*8 | 00199a2c: 001210c0 sll r2,r18,0x03 maplevel*8 | ||
00199a30: 00521021 addu r2,r2,r18 maplevel*9 | 00199a30: 00521021 addu r2,r2,r18 maplevel*9 | ||
− | 00199a34: 00021080 sll r2,r2,0x02 maplevel* | + | 00199a34: 00021080 sll r2,r2,0x02 maplevel*24 |
− | 00199a38: 00431021 addu r2,r2,r3 | + | 00199a38: 00431021 addu r2,r2,r3 AI Map Pointer + Map Level |
00199a3c: 00111840 sll r3,r17,0x01 Y coordinate*2 | 00199a3c: 00111840 sll r3,r17,0x01 Y coordinate*2 | ||
− | 00199a40: 00621821 addu r3,r3,r2 | + | 00199a40: 00621821 addu r3,r3,r2 AI Map Pointer + Y |
− | 00199a44: 94740000 lhu r20,0x0000(r3) | + | 00199a44: 94740000 lhu r20,0x0000(r3) r20 = ? from Map Pointer |
− | 00199a48: 080666bc j 0x00199af0 | + | 00199a48: 080666bc j 0x00199af0 The game decides it's just going to start looping from the Caster Unit itself, skipping anyone before them. |
00199a4c: 00000000 nop | 00199a4c: 00000000 nop | ||
− | 00199a50: 080666dd j 0x00199b74 | + | |
+ | 00199a50: 080666dd j 0x00199b74 Routine comes here when AI End of Turn Routine fails | ||
00199a54: 2402ffff addiu r2,r0,0xffff | 00199a54: 2402ffff addiu r2,r0,0xffff | ||
− | 00199a58: 00009021 addu r18,r0,r0 | + | |
+ | 00199a58: 00009021 addu r18,r0,r0 Map Level = 0 | ||
00199a5c: 3c01801a lui r1,0x801a | 00199a5c: 3c01801a lui r1,0x801a | ||
− | 00199a60: a020f3d8 sb r0,-0x0c28(r1) | + | 00199a60: a020f3d8 sb r0,-0x0c28(r1) Clear Target X |
00199a64: 3c01801a lui r1,0x801a | 00199a64: 3c01801a lui r1,0x801a | ||
− | 00199a68: a020f3e1 sb r0,-0x0c1f(r1) | + | 00199a68: a020f3e1 sb r0,-0x0c1f(r1) Clear Target Y |
− | 00199a6c: 92620e3b lbu r2,0x0e3b(r19) | + | |
+ | <Map Level Loop> | ||
+ | 00199a6c: 92620e3b lbu r2,0x0e3b(r19) Load Map Max Y | ||
00199a70: 00000000 nop | 00199a70: 00000000 nop | ||
− | 00199a74: 18400038 blez r2,0x00199b58 | + | 00199a74: 18400038 blez r2,0x00199b58 Branch if Max Y is negative |
− | 00199a78: 00008821 addu r17,r0,r0 | + | 00199a78: 00008821 addu r17,r0,r0 Initialize Current Y |
− | 00199a7c: 92620e2d lbu r2,0x0e2d(r19) | + | <Y Loop> |
+ | 00199a7c: 92620e2d lbu r2,0x0e2d(r19) Get Caster Unit ID | ||
00199a80: 00000000 nop | 00199a80: 00000000 nop | ||
− | 00199a84: 000218c0 sll r3,r2,0x03 | + | 00199a84: 000218c0 sll r3,r2,0x03 ID * 8 |
− | 00199a88: 00621821 addu r3,r3,r2 | + | 00199a88: 00621821 addu r3,r3,r2 ID * 9 |
− | 00199a8c: 000318c0 sll r3,r3,0x03 | + | 00199a8c: 000318c0 sll r3,r3,0x03 ID * 48 |
− | 00199a90: 00731821 addu r3,r3,r19 | + | 00199a90: 00731821 addu r3,r3,r19 Get Unit AI Pointer |
− | 00199a94: 24630a74 addiu r3,r3,0x0a74 | + | 00199a94: 24630a74 addiu r3,r3,0x0a74 Get Unit AI Pointer Map |
− | 00199a98: 001210c0 sll r2,r18,0x03 | + | 00199a98: 001210c0 sll r2,r18,0x03 maplevel*8 |
− | 00199a9c: 00521021 addu r2,r2,r18 | + | 00199a9c: 00521021 addu r2,r2,r18 maplevel*9 |
− | 00199aa0: 00021080 sll r2,r2,0x02 | + | 00199aa0: 00021080 sll r2,r2,0x02 maplevel*24 |
− | 00199aa4: 00431021 addu r2,r2,r3 | + | 00199aa4: 00431021 addu r2,r2,r3 AI Map Pointer + Map Level |
− | 00199aa8: 00111840 sll r3,r17,0x01 | + | 00199aa8: 00111840 sll r3,r17,0x01 Y coordinate*2 |
− | 00199aac: 00621821 addu r3,r3,r2 | + | 00199aac: 00621821 addu r3,r3,r2 AI Map Pointer + Y |
− | 00199ab0: 94740000 lhu r20,0x0000(r3) | + | 00199ab0: 94740000 lhu r20,0x0000(r3) r20 = Row Tiles containing a target (8000 srl [Row Coordinate]) from Map Pointer |
00199ab4: 00000000 nop | 00199ab4: 00000000 nop | ||
− | 00199ab8: 12800022 beq r20,r0,0x00199b44 | + | 00199ab8: 12800022 beq r20,r0,0x00199b44 Next Row if no targets in row |
00199abc: 00000000 nop | 00199abc: 00000000 nop | ||
− | 00199ac0: 92620e3a lbu r2,0x0e3a(r19) | + | 00199ac0: 92620e3a lbu r2,0x0e3a(r19) Load Map Max X |
00199ac4: 00000000 nop | 00199ac4: 00000000 nop | ||
− | 00199ac8: 1840001e blez r2,0x00199b44 | + | 00199ac8: 1840001e blez r2,0x00199b44 Next Row if negative |
− | 00199acc: 00008021 addu r16,r0,r0 | + | 00199acc: 00008021 addu r16,r0,r0 Initialize Current X |
− | 00199ad0: 02141004 sllv r2,r20,r16 | + | 00199ad0: 02141004 sllv r2,r20,r16 Row Coordinate * Current X |
− | 00199ad4: 30428000 andi r2,r2,0x8000 | + | |
− | 00199ad8: 10400015 beq r2,r0,0x00199b30 | + | <X Loop> |
+ | 00199ad4: 30428000 andi r2,r2,0x8000 Will always equal 8000 if tile has a target on it.* | ||
+ | 00199ad8: 10400015 beq r2,r0,0x00199b30 Branch if Tile has a Target on it. | ||
00199adc: 00000000 nop | 00199adc: 00000000 nop | ||
− | 00199ae0: a2700018 sb r16,0x0018(r19) | + | |
− | 00199ae4: a271001a sb r17,0x001a(r19) | + | So the 0th Y tile contains a value that directs the game to X tiles in it's row that has Units of interest? |
− | 00199ae8: 0c066ec8 jal 0x0019bb20 | + | Then what happens if there are multiple units within that row? |
− | 00199aec: a2720019 sb r18,0x0019(r19) | + | If Y Value is 0400, then only the 5th tile would activate. If Y was 2000, then the 2nd tile would activate. |
− | 00199af0: 0c0674df jal 0x0019d37c | + | So then what about 2400? Correct, both would produce True results! |
+ | |||
+ | 00199ae0: a2700018 sb r16,0x0018(r19) Save Current X | ||
+ | 00199ae4: a271001a sb r17,0x001a(r19) Save Current Y | ||
+ | 00199ae8: 0c066ec8 jal 0x0019bb20 Unit Priority Matrix Analysis Routine | ||
+ | 00199aec: a2720019 sb r18,0x0019(r19) Save Current Map Level | ||
+ | 00199af0: 0c0674df jal 0x0019d37c AI End of turn, in between turn, etc. | ||
00199af4: 00000000 nop | 00199af4: 00000000 nop | ||
+ | |||
00199af8: 2403ffff addiu r3,r0,0xffff | 00199af8: 2403ffff addiu r3,r0,0xffff | ||
− | 00199afc: 1043ffd4 beq r2,r3,0x00199a50 | + | 00199afc: 1043ffd4 beq r2,r3,0x00199a50 Branch to an routine exiting jump if AI routine failed; return -1 |
− | 00199b00: 001210c0 sll r2,r18,0x03 | + | 00199b00: 001210c0 sll r2,r18,0x03 Map Level * 8 |
− | 00199b04: 00521021 addu r2,r2,r18 | + | 00199b04: 00521021 addu r2,r2,r18 Map Level * 9 |
− | 00199b08: 00021180 sll r2,r2,0x06 | + | 00199b08: 00021180 sll r2,r2,0x06 Map Level * 240 |
− | 00199b0c: 00531021 addu r2,r2,r19 | + | 00199b0c: 00531021 addu r2,r2,r19 AI Pointer + Map Level |
− | 00199b10: 244205f4 addiu r2,r2,0x05f4 | + | 00199b10: 244205f4 addiu r2,r2,0x05f4 Current Unit's Units of Interest? |
− | 00199b14: 00111940 sll r3,r17,0x05 | + | 00199b14: 00111940 sll r3,r17,0x05 Y * 20 |
− | 00199b18: 00621821 addu r3,r3,r2 | + | 00199b18: 00621821 addu r3,r3,r2 Pointer + Map Level + Y |
− | 00199b1c: 00102040 sll r4,r16,0x01 | + | 00199b1c: 00102040 sll r4,r16,0x01 X * 2 |
− | 00199b20: 96620032 lhu r2,0x0032(r19) | + | 00199b20: 96620032 lhu r2,0x0032(r19) Load Unit Target Priority |
− | 00199b24: 00832021 addu r4,r4,r3 | + | 00199b24: 00832021 addu r4,r4,r3 Get Coordinates of current Unit |
− | 00199b28: 00021023 subu r2,r0,r2 | + | 00199b28: 00021023 subu r2,r0,r2 -Priority |
− | 00199b2c: a4820000 sh r2,0x0000(r4) | + | 00199b2c: a4820000 sh r2,0x0000(r4) Save Priority to Units of Interest Map |
− | 00199b30: 92620e3a lbu r2,0x0e3a(r19) | + | |
− | 00199b34: 26100001 addiu r16,r16,0x0001 | + | 00199b30: 92620e3a lbu r2,0x0e3a(r19) Load Max X |
+ | 00199b34: 26100001 addiu r16,r16,0x0001 Current X++ | ||
00199b38: 0202102a slt r2,r16,r2 | 00199b38: 0202102a slt r2,r16,r2 | ||
− | 00199b3c: 1440ffe5 bne r2,r0,0x00199ad4 | + | 00199b3c: 1440ffe5 bne r2,r0,0x00199ad4 Loop for Max X |
− | 00199b40: 02141004 sllv r2,r20,r16 | + | 00199b40: 02141004 sllv r2,r20,r16 Row Coordinate * Current X |
− | 00199b44: 92620e3b lbu r2,0x0e3b(r19) | + | |
− | 00199b48: 26310001 addiu r17,r17,0x0001 | + | |
+ | 00199b44: 92620e3b lbu r2,0x0e3b(r19) Load Max Y | ||
+ | 00199b48: 26310001 addiu r17,r17,0x0001 Current Y++ | ||
00199b4c: 0222102a slt r2,r17,r2 | 00199b4c: 0222102a slt r2,r17,r2 | ||
− | 00199b50: 1440ffca bne r2,r0,0x00199a7c | + | 00199b50: 1440ffca bne r2,r0,0x00199a7c Loop for Max Y |
00199b54: 00000000 nop | 00199b54: 00000000 nop | ||
− | 00199b58: 26520001 addiu r18,r18,0x0001 | + | |
+ | 00199b58: 26520001 addiu r18,r18,0x0001 Map Level++ | ||
00199b5c: 2a420002 slti r2,r18,0x0002 | 00199b5c: 2a420002 slti r2,r18,0x0002 | ||
− | 00199b60: 1440ffc2 bne r2,r0,0x00199a6c | + | 00199b60: 1440ffc2 bne r2,r0,0x00199a6c Loop for both low and high tiles |
00199b64: 00000000 nop | 00199b64: 00000000 nop | ||
− | 00199b68: 0c067c96 jal 0x0019f258 | + | |
+ | 00199b68: 0c067c96 jal 0x0019f258 Store units coordinates | ||
00199b6c: 26640e30 addiu r4,r19,0x0e30 | 00199b6c: 26640e30 addiu r4,r19,0x0e30 | ||
00199b70: 00001021 addu r2,r0,r0 | 00199b70: 00001021 addu r2,r0,r0 | ||
Line 117: | Line 134: | ||
00199b90: 03e00008 jr r31 | 00199b90: 03e00008 jr r31 | ||
00199b94: 00000000 nop | 00199b94: 00000000 nop | ||
− |
Revision as of 01:22, 9 March 2017
001999c8: 3c02801a lui r2,0x801a 001999cc: 90420d7b lbu r2,0x0d7b(r2) If Acted this Turn 001999d0: 27bdffc8 addiu r29,r29,0xffc8 001999d4: afb3002c sw r19,0x002c(r29) 001999d8: 3c13801a lui r19,0x801a 001999dc: 2673f3c4 addiu r19,r19,0xf3c4 r19 = Ability AI Pointer 001999e0: afbf0034 sw r31,0x0034(r29) 001999e4: afb40030 sw r20,0x0030(r29) 001999e8: afb20028 sw r18,0x0028(r29) 001999ec: afb10024 sw r17,0x0024(r29) 001999f0: 10400019 beq r2,r0,0x00199a58 Branch if Acting Unit this turn hasn't Acted yet. 001999f4: afb00020 sw r16,0x0020(r29) 001999f8: 3c10801a lui r16,0x801a 001999fc: 9210f3dc lbu r16,-0x0c24(r16) r16 = Caster X 00199a00: 3c11801a lui r17,0x801a 00199a04: 9231f3de lbu r17,-0x0c22(r17) r17 = Caster Y 00199a08: 3c02801a lui r2,0x801a 00199a0c: 904201f1 lbu r2,0x01f1(r2) Caster ID 00199a10: 3c12801a lui r18,0x801a 00199a14: 9252f3dd lbu r18,-0x0c23(r18) r18 = Caster map level 00199a18: 000218c0 sll r3,r2,0x03 ID*8 00199a1c: 00621821 addu r3,r3,r2 ID*9 00199a20: 000318c0 sll r3,r3,0x03 ID*48 00199a24: 00731821 addu r3,r3,r19 Get Unit AI Pointer 00199a28: 24630a74 addiu r3,r3,0x0a74 Unit's AI Map Pointer (36 * 2 long) 00199a2c: 001210c0 sll r2,r18,0x03 maplevel*8 00199a30: 00521021 addu r2,r2,r18 maplevel*9 00199a34: 00021080 sll r2,r2,0x02 maplevel*24 00199a38: 00431021 addu r2,r2,r3 AI Map Pointer + Map Level 00199a3c: 00111840 sll r3,r17,0x01 Y coordinate*2 00199a40: 00621821 addu r3,r3,r2 AI Map Pointer + Y 00199a44: 94740000 lhu r20,0x0000(r3) r20 = ? from Map Pointer 00199a48: 080666bc j 0x00199af0 The game decides it's just going to start looping from the Caster Unit itself, skipping anyone before them. 00199a4c: 00000000 nop
00199a50: 080666dd j 0x00199b74 Routine comes here when AI End of Turn Routine fails 00199a54: 2402ffff addiu r2,r0,0xffff
00199a58: 00009021 addu r18,r0,r0 Map Level = 0 00199a5c: 3c01801a lui r1,0x801a 00199a60: a020f3d8 sb r0,-0x0c28(r1) Clear Target X 00199a64: 3c01801a lui r1,0x801a 00199a68: a020f3e1 sb r0,-0x0c1f(r1) Clear Target Y
<Map Level Loop> 00199a6c: 92620e3b lbu r2,0x0e3b(r19) Load Map Max Y 00199a70: 00000000 nop 00199a74: 18400038 blez r2,0x00199b58 Branch if Max Y is negative 00199a78: 00008821 addu r17,r0,r0 Initialize Current Y <Y Loop> 00199a7c: 92620e2d lbu r2,0x0e2d(r19) Get Caster Unit ID 00199a80: 00000000 nop 00199a84: 000218c0 sll r3,r2,0x03 ID * 8 00199a88: 00621821 addu r3,r3,r2 ID * 9 00199a8c: 000318c0 sll r3,r3,0x03 ID * 48 00199a90: 00731821 addu r3,r3,r19 Get Unit AI Pointer 00199a94: 24630a74 addiu r3,r3,0x0a74 Get Unit AI Pointer Map 00199a98: 001210c0 sll r2,r18,0x03 maplevel*8 00199a9c: 00521021 addu r2,r2,r18 maplevel*9 00199aa0: 00021080 sll r2,r2,0x02 maplevel*24 00199aa4: 00431021 addu r2,r2,r3 AI Map Pointer + Map Level 00199aa8: 00111840 sll r3,r17,0x01 Y coordinate*2 00199aac: 00621821 addu r3,r3,r2 AI Map Pointer + Y 00199ab0: 94740000 lhu r20,0x0000(r3) r20 = Row Tiles containing a target (8000 srl [Row Coordinate]) from Map Pointer 00199ab4: 00000000 nop 00199ab8: 12800022 beq r20,r0,0x00199b44 Next Row if no targets in row 00199abc: 00000000 nop 00199ac0: 92620e3a lbu r2,0x0e3a(r19) Load Map Max X 00199ac4: 00000000 nop 00199ac8: 1840001e blez r2,0x00199b44 Next Row if negative 00199acc: 00008021 addu r16,r0,r0 Initialize Current X 00199ad0: 02141004 sllv r2,r20,r16 Row Coordinate * Current X
<X Loop> 00199ad4: 30428000 andi r2,r2,0x8000 Will always equal 8000 if tile has a target on it.* 00199ad8: 10400015 beq r2,r0,0x00199b30 Branch if Tile has a Target on it. 00199adc: 00000000 nop
So the 0th Y tile contains a value that directs the game to X tiles in it's row that has Units of interest? Then what happens if there are multiple units within that row? If Y Value is 0400, then only the 5th tile would activate. If Y was 2000, then the 2nd tile would activate. So then what about 2400? Correct, both would produce True results!
00199ae0: a2700018 sb r16,0x0018(r19) Save Current X 00199ae4: a271001a sb r17,0x001a(r19) Save Current Y 00199ae8: 0c066ec8 jal 0x0019bb20 Unit Priority Matrix Analysis Routine 00199aec: a2720019 sb r18,0x0019(r19) Save Current Map Level 00199af0: 0c0674df jal 0x0019d37c AI End of turn, in between turn, etc. 00199af4: 00000000 nop
00199af8: 2403ffff addiu r3,r0,0xffff 00199afc: 1043ffd4 beq r2,r3,0x00199a50 Branch to an routine exiting jump if AI routine failed; return -1 00199b00: 001210c0 sll r2,r18,0x03 Map Level * 8 00199b04: 00521021 addu r2,r2,r18 Map Level * 9 00199b08: 00021180 sll r2,r2,0x06 Map Level * 240 00199b0c: 00531021 addu r2,r2,r19 AI Pointer + Map Level 00199b10: 244205f4 addiu r2,r2,0x05f4 Current Unit's Units of Interest? 00199b14: 00111940 sll r3,r17,0x05 Y * 20 00199b18: 00621821 addu r3,r3,r2 Pointer + Map Level + Y 00199b1c: 00102040 sll r4,r16,0x01 X * 2 00199b20: 96620032 lhu r2,0x0032(r19) Load Unit Target Priority 00199b24: 00832021 addu r4,r4,r3 Get Coordinates of current Unit 00199b28: 00021023 subu r2,r0,r2 -Priority 00199b2c: a4820000 sh r2,0x0000(r4) Save Priority to Units of Interest Map
00199b30: 92620e3a lbu r2,0x0e3a(r19) Load Max X 00199b34: 26100001 addiu r16,r16,0x0001 Current X++ 00199b38: 0202102a slt r2,r16,r2 00199b3c: 1440ffe5 bne r2,r0,0x00199ad4 Loop for Max X 00199b40: 02141004 sllv r2,r20,r16 Row Coordinate * Current X
00199b44: 92620e3b lbu r2,0x0e3b(r19) Load Max Y 00199b48: 26310001 addiu r17,r17,0x0001 Current Y++ 00199b4c: 0222102a slt r2,r17,r2 00199b50: 1440ffca bne r2,r0,0x00199a7c Loop for Max Y 00199b54: 00000000 nop
00199b58: 26520001 addiu r18,r18,0x0001 Map Level++ 00199b5c: 2a420002 slti r2,r18,0x0002 00199b60: 1440ffc2 bne r2,r0,0x00199a6c Loop for both low and high tiles 00199b64: 00000000 nop
00199b68: 0c067c96 jal 0x0019f258 Store units coordinates 00199b6c: 26640e30 addiu r4,r19,0x0e30 00199b70: 00001021 addu r2,r0,r0 00199b74: 8fbf0034 lw r31,0x0034(r29) 00199b78: 8fb40030 lw r20,0x0030(r29) 00199b7c: 8fb3002c lw r19,0x002c(r29) 00199b80: 8fb20028 lw r18,0x0028(r29) 00199b84: 8fb10024 lw r17,0x0024(r29) 00199b88: 8fb00020 lw r16,0x0020(r29) 00199b8c: 27bd0038 addiu r29,r29,0x0038 00199b90: 03e00008 jr r31 00199b94: 00000000 nop