Some Map calculations - height diff., coordinates
Jump to navigation
Jump to search
0019abb4: 27bdffc8 addiu r29,r29,0xffc8 0019abb8: afb3002c sw r19,0x002c(r29) 0019abbc: 3c13801a lui r19,0x801a 0019abc0: 2673f3c4 addiu r19,r19,0xf3c4 r19 = AI Data Pointer 0019abc4: 3c03801a lui r3,0x801a 0019abc8: 90630bc3 lbu r3,0x0bc3(r3) Load ? 0019abcc: 34020005 ori r2,r0,0x0005 r2 = 5 0019abd0: afbf0034 sw r31,0x0034(r29) 0019abd4: afb40030 sw r20,0x0030(r29) 0019abd8: afb20028 sw r18,0x0028(r29) 0019abdc: afb10024 sw r17,0x0024(r29) 0019abe0: 10620003 beq r3,r2,0x0019abf0 Branch if ? = 5 0019abe4: afb00020 sw r16,0x0020(r29) 0019abe8: 08066b54 j 0x0019ad50 0019abec: 00601021 addu r2,r3,r0 r2 = ? 0019abf0: 3c04801a lui r4,0x801a 0019abf4: 908401f2 lbu r4,0x01f2(r4) Load Acting Unit ID 0019abf8: 26650e30 addiu r5,r19,0x0e30 r5 = Unit's Coordinate Pointer 0019abfc: 00008021 addu r16,r0,r0 Counter = 0 0019ac00: 27b20018 addiu r18,r29,0x0018 r18 = Stack Pointer + 0x18 0019ac04: 0c067ca9 jal 0x0019f2a4 Transfer Unit Coordinates to AI 0019ac08: 00008821 addu r17,r0,r0 Pointer Mod = 0 0019ac0c: 92620e30 lbu r2,0x0e30(r19) Load Unit's X Coordinate 0019ac10: 3c01801a lui r1,0x801a 0019ac14: 00310821 addu r1,r1,r17 0019ac18: 9023f358 lbu r3,-0x0ca8(r1) Load X Mod 0019ac1c: 26640e30 addiu r4,r19,0x0e30 r4 = Unit's Coordinate Pointer 0019ac20: 00431021 addu r2,r2,r3 X += X Mod 0019ac24: a3a20010 sb r2,0x0010(r29) Store X 0019ac28: 92620e32 lbu r2,0x0e32(r19) Load Unit's Y Coordinate 0019ac2c: 3c01801a lui r1,0x801a 0019ac30: 00310821 addu r1,r1,r17 0019ac34: 9023f359 lbu r3,-0x0ca7(r1) Load Y Mod 0019ac38: 27a50010 addiu r5,r29,0x0010 r5 = Stack Pointer + 0x10 0019ac3c: a3a00011 sb r0,0x0011(r29) Store Map Level = 0 0019ac40: 00431021 addu r2,r2,r3 Y += Y Mod 0019ac44: 0c066b5d jal 0x0019ad74 Determine if Height Difference < 3 0019ac48: a3a20012 sb r2,0x0012(r29) Store Y 0019ac4c: 10400003 beq r2,r0,0x0019ac5c Branch if Height Difference < 3 0019ac50: 34020001 ori r2,r0,0x0001 r2 = 1 (Targetable) 0019ac54: 08066b19 j 0x0019ac64 0019ac58: a2400000 sb r0,0x0000(r18) Store Untargetable 0019ac5c: 0200a021 addu r20,r16,r0 r20 = Counter 0019ac60: a2420000 sb r2,0x0000(r18) Store Targetable 0019ac64: 26520001 addiu r18,r18,0x0001 Stack Pointer ++ 0019ac68: 26100001 addiu r16,r16,0x0001 Counter ++ 0019ac6c: 2a020004 slti r2,r16,0x0004 0019ac70: 1440ffe6 bne r2,r0,0x0019ac0c Branch if Counter < 4 0019ac74: 26310002 addiu r17,r17,0x0002 Pointer Mod += 2 0019ac78: 8fa20018 lw r2,0x0018(r29) Load Tile Targetable flags 0019ac7c: 00000000 nop 0019ac80: 14400004 bne r2,r0,0x0019ac94 Branch if a tile can be targeted 0019ac84: 34030001 ori r3,r0,0x0001 r3 = 1 0019ac88: 3c020101 lui r2,0x0101 0019ac8c: 34420101 ori r2,r2,0x0101 0019ac90: afa20018 sw r2,0x0018(r29) Store all tiles = Targetable 0019ac94: 34110014 ori r17,r0,0x0014 Counter = 0x14 0019ac98: 26620014 addiu r2,r19,0x0014 0019ac9c: a0430c8d sb r3,0x0c8d(r2) Store Unit = Targetable 0019aca0: 2631ffff addiu r17,r17,0xffff Counter -- 0019aca4: 0621fffd bgez r17,0x0019ac9c Branch if Counter >= 0 0019aca8: 2442ffff addiu r2,r2,0xffff Pointer -- 0019acac: 00009021 addu r18,r0,r0 Target = Not Self 0019acb0: 92700e2e lbu r16,0x0e2e(r19) Load Acting Unit ID 0019acb4: 0c066449 jal 0x00199124 Calculate Physical? Target 0019acb8: 34040001 ori r4,r0,0x0001 r4 = 1 () 0019acbc: 00408821 addu r17,r2,r0 r17 = Target ID 0019acc0: 16110006 bne r16,r17,0x0019acdc Branch if Target != Self 0019acc4: 02202021 addu r4,r17,r0 r4 = Target ID 0019acc8: 0c066449 jal 0x00199124 Calculate Physical? Target 0019accc: 34040002 ori r4,r0,0x0002 r4 = 2 (Target Enemy) 0019acd0: 00408821 addu r17,r2,r0 r17 = Target ID 0019acd4: 34120001 ori r18,r0,0x0001 Target = Self 0019acd8: 02202021 addu r4,r17,r0 r4 = Target ID 0019acdc: 0c067ca9 jal 0x0019f2a4 Transfer Unit Coordinates to AI 0019ace0: 27a50010 addiu r5,r29,0x0010 r5 = Stack Pointer + 0x10 0019ace4: 27a40010 addiu r4,r29,0x0010 r4 = Stack Pointer + 0x10 0019ace8: 0c065e39 jal 0x001978e4 Find Direction of Target 0019acec: 26650e30 addiu r5,r19,0x0e30 r5 = Acting Unit's X Coordinate Pointer 0019acf0: 00408021 addu r16,r2,r0 r16 = Direction of Target 0019acf4: 27a30018 addiu r3,r29,0x0018 r3 = Stack Pointer + 0x18 0019acf8: 00701021 addu r2,r3,r16 0019acfc: 90420000 lbu r2,0x0000(r2) Load Direction's Targetable Flag 0019ad00: 00000000 nop 0019ad04: 14400012 bne r2,r0,0x0019ad50 Branch if Direction can be targeted 0019ad08: 02001021 addu r2,r16,r0 r2 = Direction of Target 0019ad0c: 16400004 bne r18,r0,0x0019ad20 Branch if Target is Self 0019ad10: 00000000 nop 0019ad14: 02711021 addu r2,r19,r17 r2 = AI Data Pointer + Target ID 0019ad18: 08066b2c j 0x0019acb0 0019ad1c: a0400c8d sb r0,0x0c8d(r2) Store Target = Untargetable 0019ad20: 8e6217f8 lw r2,0x17f8(r19) Load Acting Unit's Data Pointer 0019ad24: 00000000 nop 0019ad28: 94420048 lhu r2,0x0048(r2) Load Unit's Y + Map Level 0019ad2c: 00000000 nop 0019ad30: 00021202 srl r2,r2,0x08 0019ad34: 3044000f andi r4,r2,0x000f r4 = Unit's Facing 0019ad38: 00641021 addu r2,r3,r4 0019ad3c: 90430000 lbu r3,0x0000(r2) Load Direction's Targetable Flag 0019ad40: 00000000 nop 0019ad44: 10600002 beq r3,r0,0x0019ad50 Branch if direction isn't targetable 0019ad48: 02801021 addu r2,r20,r0 r2 = Counter 0019ad4c: 00801021 addu r2,r4,r0 r2 = Unit's Facing 0019ad50: 8fbf0034 lw r31,0x0034(r29) 0019ad54: 8fb40030 lw r20,0x0030(r29) 0019ad58: 8fb3002c lw r19,0x002c(r29) 0019ad5c: 8fb20028 lw r18,0x0028(r29) 0019ad60: 8fb10024 lw r17,0x0024(r29) 0019ad64: 8fb00020 lw r16,0x0020(r29) 0019ad68: 27bd0038 addiu r29,r29,0x0038 0019ad6c: 03e00008 jr r31 0019ad70: 00000000 nop