Difference between revisions of "Accelerate Unit to Destination"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m (link)
Line 11: Line 11:
 
  000898c0: 8e11008c lw r17,0x008c(r16)
 
  000898c0: 8e11008c lw r17,0x008c(r16)
 
  000898c4: 8e130090 lw r19,0x0090(r16)
 
  000898c4: 8e130090 lw r19,0x0090(r16)
  000898c8: 8e020028 lw r2,0x0028(r16)
+
  000898c8: 8e020028 lw r2,0x0028(r16) #X mod difference?
  000898cc: 8e03002c lw r3,0x002c(r16)
+
  000898cc: 8e03002c lw r3,0x002c(r16) #Y mod difference?
  000898d0: 8e040030 lw r4,0x0030(r16)
+
  000898d0: 8e040030 lw r4,0x0030(r16) #height mod difference? (all for types of motion)
 
  000898d4: 8e050034 lw r5,0x0034(r16)
 
  000898d4: 8e050034 lw r5,0x0034(r16)
 
  000898d8: afa20018 sw r2,0x0018(r29)
 
  000898d8: afa20018 sw r2,0x0018(r29)
 
  000898dc: afa3001c sw r3,0x001c(r29)
 
  000898dc: afa3001c sw r3,0x001c(r29)
  000898e0: afa40020 sw r4,0x0020(r29)
+
  000898e0: afa40020 sw r4,0x0020(r29) #store height mod f
  000898e4: afa50024 sw r5,0x0024(r29)
+
  000898e4: afa50024 sw r5,0x0024(r29) #stores above to stack?
  000898e8: 8e030088 lw r3,0x0088(r16)
+
  000898e8: 8e030088 lw r3,0x0088(r16) #load distort counter
 
  000898ec: 00000000 nop
 
  000898ec: 00000000 nop
  000898f0: 10600005 beq r3,r0,0x00089908
+
  000898f0: 10600005 beq r3,r0,0x00089908 #branch if 0
 
  000898f4: 34020001 ori r2,r0,0x0001
 
  000898f4: 34020001 ori r2,r0,0x0001
  000898f8: 10620080 beq r3,r2,0x00089afc
+
  000898f8: 10620080 beq r3,r2,0x00089afc #branch if 1
 
  000898fc: 00000000 nop
 
  000898fc: 00000000 nop
  00089900: 080226d4 j 0x00089b50
+
  00089900: 080226d4 j 0x00089b50 #otherwise skip
 
  00089904: 00000000 nop
 
  00089904: 00000000 nop
  00089908: 8e040134 lw r4,0x0134(r16)
+
 
 +
Distort counter = 0
 +
  00089908: 8e040134 lw r4,0x0134(r16) #load pointer to unit's battle data
 
  0008990c: 00000000 nop
 
  0008990c: 00000000 nop
  00089910: 10800078 beq r4,r0,0x00089af4
+
  00089910: 10800078 beq r4,r0,0x00089af4 #branch if null
 
  00089914: 34020034 ori r2,r0,0x0034
 
  00089914: 34020034 ori r2,r0,0x0034
 
  00089918: 3c038009 lui r3,0x8009
 
  00089918: 3c038009 lui r3,0x8009
  0008991c: 8c6360e4 lw r3,0x60e4(r3)
+
  0008991c: 8c6360e4 lw r3,0x60e4(r3) #load type of display? (gameflow variable)
 
  00089920: 00000000 nop
 
  00089920: 00000000 nop
  00089924: 14620016 bne r3,r2,0x00089980
+
  00089924: 14620016 bne r3,r2,0x00089980 #branch if current display is 0x34
 
  00089928: 00000000 nop
 
  00089928: 00000000 nop
  0008992c: 9203007c lbu r3,0x007c(r16)
+
  0008992c: 9203007c lbu r3,0x007c(r16) #load unit's X coordinate
 
  00089930: 00000000 nop
 
  00089930: 00000000 nop
 
  00089934: 000310c0 sll r2,r3,0x03
 
  00089934: 000310c0 sll r2,r3,0x03
 
  00089938: 00431023 subu r2,r2,r3
 
  00089938: 00431023 subu r2,r2,r3
  0008993c: 00021080 sll r2,r2,0x02
+
  0008993c: 00021080 sll r2,r2,0x02 #X coord * tile width
  00089940: 2442000e addiu r2,r2,0x000e
+
  00089940: 2442000e addiu r2,r2,0x000e #x coord + 1 * tile width
  00089944: 8e030018 lw r3,0x0018(r16)
+
  00089944: 8e030018 lw r3,0x0018(r16) #load X mod
  00089948: 00021300 sll r2,r2,0x0c
+
  00089948: 00021300 sll r2,r2,0x0c #x coord -> x coord's x mod
  0008994c: 00431023 subu r2,r2,r3
+
  0008994c: 00431023 subu r2,r2,r3 #find difference in adjacent tile's x mod to current tile's
  00089950: afa20018 sw r2,0x0018(r29)
+
  00089950: afa20018 sw r2,0x0018(r29) #store
  00089954: 9203007d lbu r3,0x007d(r16)
+
  00089954: 9203007d lbu r3,0x007d(r16) #load unit's Y coordinate
  00089958: 8e040020 lw r4,0x0020(r16)
+
  00089958: 8e040020 lw r4,0x0020(r16) #load Y mod
  0008995c: afa0001c sw r0,0x001c(r29)
+
  0008995c: afa0001c sw r0,0x001c(r29) #clear height mod difference
 
  00089960: 000310c0 sll r2,r3,0x03
 
  00089960: 000310c0 sll r2,r3,0x03
 
  00089964: 00431023 subu r2,r2,r3
 
  00089964: 00431023 subu r2,r2,r3
Line 54: Line 56:
 
  0008996c: 2442000e addiu r2,r2,0x000e
 
  0008996c: 2442000e addiu r2,r2,0x000e
 
  00089970: 00021300 sll r2,r2,0x0c
 
  00089970: 00021300 sll r2,r2,0x0c
  00089974: 00441023 subu r2,r2,r4
+
  00089974: 00441023 subu r2,r2,r4 #find difference in adjacent tile's Y mod and current tile's
 
  00089978: 080226a9 j 0x00089aa4
 
  00089978: 080226a9 j 0x00089aa4
  0008997c: afa20020 sw r2,0x0020(r29)
+
  0008997c: afa20020 sw r2,0x0020(r29) #store height mod difference
  00089980: 9202018d lbu r2,0x018d(r16)
+
 
 +
if current display = 0x34
 +
  00089980: 9202018d lbu r2,0x018d(r16) #load targets hit counter
 
  00089984: 00000000 nop
 
  00089984: 00000000 nop
  00089988: 10400014 beq r2,r0,0x000899dc
+
  00089988: 10400014 beq r2,r0,0x000899dc #branch if none
 
  0008998c: 00000000 nop
 
  0008998c: 00000000 nop
  00089990: 9204018e lbu r4,0x018e(r16)
+
  00089990: 9204018e lbu r4,0x018e(r16) #load target ID
 
  00089994: 0c01e9c9 jal 0x0007a724        [[Get_unit_misc_data_that_matches_r4_ID]]
 
  00089994: 0c01e9c9 jal 0x0007a724        [[Get_unit_misc_data_that_matches_r4_ID]]
 
  00089998: 00000000 nop
 
  00089998: 00000000 nop
  0008999c: 8c430018 lw r3,0x0018(r2)
+
  0008999c: 8c430018 lw r3,0x0018(r2) #load target's X mod
  000899a0: 8e040018 lw r4,0x0018(r16)
+
  000899a0: 8e040018 lw r4,0x0018(r16) #load attacker's X mod
 
  000899a4: 00000000 nop
 
  000899a4: 00000000 nop
  000899a8: 00641823 subu r3,r3,r4
+
  000899a8: 00641823 subu r3,r3,r4 #find difference
  000899ac: afa30018 sw r3,0x0018(r29)
+
  000899ac: afa30018 sw r3,0x0018(r29) #store difference of X mods
  000899b0: 8c43001c lw r3,0x001c(r2)
+
  000899b0: 8c43001c lw r3,0x001c(r2) #
  000899b4: 8e04001c lw r4,0x001c(r16)
+
  000899b4: 8e04001c lw r4,0x001c(r16) #Load height mods
 
  000899b8: 00000000 nop
 
  000899b8: 00000000 nop
 
  000899bc: 00641823 subu r3,r3,r4
 
  000899bc: 00641823 subu r3,r3,r4
  000899c0: afa3001c sw r3,0x001c(r29)
+
  000899c0: afa3001c sw r3,0x001c(r29) #store difference of height mods
 
  000899c4: 8c420020 lw r2,0x0020(r2)
 
  000899c4: 8c420020 lw r2,0x0020(r2)
 
  000899c8: 8e030020 lw r3,0x0020(r16)
 
  000899c8: 8e030020 lw r3,0x0020(r16)
Line 79: Line 83:
 
  000899d0: 00431023 subu r2,r2,r3
 
  000899d0: 00431023 subu r2,r2,r3
 
  000899d4: 080226a9 j 0x00089aa4
 
  000899d4: 080226a9 j 0x00089aa4
  000899d8: afa20020 sw r2,0x0020(r29)
+
  000899d8: afa20020 sw r2,0x0020(r29) #store difference of Y mods
  000899dc: 8483017a lh r3,0x017a(r4)
+
 
 +
if no targets:
 +
  000899dc: 8483017a lh r3,0x017a(r4) #load target's X coord
 
  000899e0: 00000000 nop
 
  000899e0: 00000000 nop
 
  000899e4: 000310c0 sll r2,r3,0x03
 
  000899e4: 000310c0 sll r2,r3,0x03
 
  000899e8: 00431023 subu r2,r2,r3
 
  000899e8: 00431023 subu r2,r2,r3
  000899ec: 86030040 lh r3,0x0040(r16)
+
  000899ec: 86030040 lh r3,0x0040(r16) #loads X location on screen
  000899f0: 00021080 sll r2,r2,0x02
+
  000899f0: 00021080 sll r2,r2,0x02 #Target's X coord * 0xE
  000899f4: 2463fff2 addiu r3,r3,0xfff2
+
  000899f4: 2463fff2 addiu r3,r3,0xfff2 #X location - 0xE
  000899f8: 00431023 subu r2,r2,r3
+
  000899f8: 00431023 subu r2,r2,r3 #difference of target X panel * E and X location - E
  000899fc: 00021300 sll r2,r2,0x0c
+
  000899fc: 00021300 sll r2,r2,0x0c #X modify
  00089a00: afa20018 sw r2,0x0018(r29)
+
  00089a00: afa20018 sw r2,0x0018(r29) #store
  00089a04: 8e020134 lw r2,0x0134(r16)
+
  00089a04: 8e020134 lw r2,0x0134(r16) #load pointer to unit's data
 
  00089a08: 00000000 nop
 
  00089a08: 00000000 nop
  00089a0c: 8443017e lh r3,0x017e(r2)
+
  00089a0c: 8443017e lh r3,0x017e(r2) #Y panel for target
 
  00089a10: 00000000 nop
 
  00089a10: 00000000 nop
 
  00089a14: 000310c0 sll r2,r3,0x03
 
  00089a14: 000310c0 sll r2,r3,0x03
 
  00089a18: 00431023 subu r2,r2,r3
 
  00089a18: 00431023 subu r2,r2,r3
  00089a1c: 86030044 lh r3,0x0044(r16)
+
  00089a1c: 86030044 lh r3,0x0044(r16) #Y position on screen
 
  00089a20: 00021080 sll r2,r2,0x02
 
  00089a20: 00021080 sll r2,r2,0x02
 
  00089a24: 2463fff2 addiu r3,r3,0xfff2
 
  00089a24: 2463fff2 addiu r3,r3,0xfff2
 
  00089a28: 00431023 subu r2,r2,r3
 
  00089a28: 00431023 subu r2,r2,r3
  00089a2c: 00021300 sll r2,r2,0x0c
+
  00089a2c: 00021300 sll r2,r2,0x0c #find same difference as before
  00089a30: afa20020 sw r2,0x0020(r29)
+
  00089a30: afa20020 sw r2,0x0020(r29) #store Y mod difference
 
  00089a34: 8e020134 lw r2,0x0134(r16)
 
  00089a34: 8e020134 lw r2,0x0134(r16)
 
  00089a38: 00000000 nop
 
  00089a38: 00000000 nop
  00089a3c: 8443017a lh r3,0x017a(r2)
+
  00089a3c: 8443017a lh r3,0x017a(r2) #load target's X panel
 
  00089a40: 00000000 nop
 
  00089a40: 00000000 nop
 
  00089a44: 000310c0 sll r2,r3,0x03
 
  00089a44: 000310c0 sll r2,r3,0x03
Line 110: Line 116:
 
  00089a4c: 00021080 sll r2,r2,0x02
 
  00089a4c: 00021080 sll r2,r2,0x02
 
  00089a50: 2442000e addiu r2,r2,0x000e
 
  00089a50: 2442000e addiu r2,r2,0x000e
  00089a54: a7a20010 sh r2,0x0010(r29)
+
  00089a54: a7a20010 sh r2,0x0010(r29) #store target's X mod
 
  00089a58: 8e020134 lw r2,0x0134(r16)
 
  00089a58: 8e020134 lw r2,0x0134(r16)
 
  00089a5c: 00000000 nop
 
  00089a5c: 00000000 nop
  00089a60: 8443017e lh r3,0x017e(r2)
+
  00089a60: 8443017e lh r3,0x017e(r2) #load target's Y panel
 
  00089a64: 00000000 nop
 
  00089a64: 00000000 nop
 
  00089a68: 000310c0 sll r2,r3,0x03
 
  00089a68: 000310c0 sll r2,r3,0x03
Line 119: Line 125:
 
  00089a70: 00021080 sll r2,r2,0x02
 
  00089a70: 00021080 sll r2,r2,0x02
 
  00089a74: 2442000e addiu r2,r2,0x000e
 
  00089a74: 2442000e addiu r2,r2,0x000e
  00089a78: a7a20014 sh r2,0x0014(r29)
+
  00089a78: a7a20014 sh r2,0x0014(r29) #store target's Y mod
 
  00089a7c: 8e020134 lw r2,0x0134(r16)
 
  00089a7c: 8e020134 lw r2,0x0134(r16)
 
  00089a80: 00000000 nop
 
  00089a80: 00000000 nop
  00089a84: 8445017c lh r5,0x017c(r2)
+
  00089a84: 8445017c lh r5,0x017c(r2) #parse map level
 
  00089a88: 0c01f203 jal 0x0007c80c            [[Slope_Calculations]]
 
  00089a88: 0c01f203 jal 0x0007c80c            [[Slope_Calculations]]
  00089a8c: 27a40010 addiu r4,r29,0x0010
+
  00089a8c: 27a40010 addiu r4,r29,0x0010 #stack pointer
  00089a90: 86030042 lh r3,0x0042(r16)
+
  00089a90: 86030042 lh r3,0x0042(r16) #load height mod
 
  00089a94: 00000000 nop
 
  00089a94: 00000000 nop
  00089a98: 00431023 subu r2,r2,r3
+
  00089a98: 00431023 subu r2,r2,r3 #find difference between current height and slope height at centre?
  00089a9c: 00021300 sll r2,r2,0x0c
+
  00089a9c: 00021300 sll r2,r2,0x0c #mod
  00089aa0: afa2001c sw r2,0x001c(r29)
+
  00089aa0: afa2001c sw r2,0x001c(r29) #store
  00089aa4: 8fa40018 lw r4,0x0018(r29)
+
  00089aa4: 8fa40018 lw r4,0x0018(r29) #load x mod difference
 
  00089aa8: 00000000 nop
 
  00089aa8: 00000000 nop
 
  00089aac: 0091001a div r4,r17
 
  00089aac: 0091001a div r4,r17
  00089ab0: 00002012 mflo r4
+
  00089ab0: 00002012 mflo r4 #divide by distortion variable
 
  00089ab4: 8fa3001c lw r3,0x001c(r29)
 
  00089ab4: 8fa3001c lw r3,0x001c(r29)
 
  00089ab8: 00000000 nop
 
  00089ab8: 00000000 nop
 
  00089abc: 0071001a div r3,r17
 
  00089abc: 0071001a div r3,r17
  00089ac0: 00001812 mflo r3
+
  00089ac0: 00001812 mflo r3 #divide height difference by distortion variable
 
  00089ac4: 8fa20020 lw r2,0x0020(r29)
 
  00089ac4: 8fa20020 lw r2,0x0020(r29)
 
  00089ac8: 00000000 nop
 
  00089ac8: 00000000 nop
 
  00089acc: 0051001a div r2,r17
 
  00089acc: 0051001a div r2,r17
  00089ad0: 00001012 mflo r2
+
  00089ad0: 00001012 mflo r2 #divide y difference by distortion variable
 
  00089ad4: afa40018 sw r4,0x0018(r29)
 
  00089ad4: afa40018 sw r4,0x0018(r29)
 
  00089ad8: afa3001c sw r3,0x001c(r29)
 
  00089ad8: afa3001c sw r3,0x001c(r29)
  00089adc: afa20020 sw r2,0x0020(r29)
+
  00089adc: afa20020 sw r2,0x0020(r29) #store all again
  00089ae0: 8e020088 lw r2,0x0088(r16)
+
  00089ae0: 8e020088 lw r2,0x0088(r16) #load distortion counter
 
  00089ae4: 00000000 nop
 
  00089ae4: 00000000 nop
 
  00089ae8: 24420001 addiu r2,r2,0x0001
 
  00089ae8: 24420001 addiu r2,r2,0x0001
 
  00089aec: 080226bf j 0x00089afc
 
  00089aec: 080226bf j 0x00089afc
  00089af0: ae020088 sw r2,0x0088(r16)
+
  00089af0: ae020088 sw r2,0x0088(r16) #increment and store
 
  00089af4: 080226d4 j 0x00089b50
 
  00089af4: 080226d4 j 0x00089b50
  00089af8: a2000087 sb r0,0x0087(r16)
+
  00089af8: a2000087 sb r0,0x0087(r16) #if unit is erroneous, allow animation to continue
  00089afc: 1a200012 blez r17,0x00089b48
+
 
 +
if distortion counter = 1
 +
  00089afc: 1a200012 blez r17,0x00089b48 #if distortion variable = 0, unit has already arrived at new destination
 
  00089b00: 00000000 nop
 
  00089b00: 00000000 nop
  00089b04: 8e020018 lw r2,0x0018(r16)
+
  00089b04: 8e020018 lw r2,0x0018(r16) #load X mod
  00089b08: 8fa30018 lw r3,0x0018(r29)
+
  00089b08: 8fa30018 lw r3,0x0018(r29) #load X mod difference / distortion variable
 
  00089b0c: 00000000 nop
 
  00089b0c: 00000000 nop
  00089b10: 00431021 addu r2,r2,r3
+
  00089b10: 00431021 addu r2,r2,r3 #move unit closer to new X
  00089b14: 12400006 beq r18,r0,0x00089b30
+
  00089b14: 12400006 beq r18,r0,0x00089b30 #branch if input 2 = 0 (no height change?)
 
  00089b18: ae020018 sw r2,0x0018(r16)
 
  00089b18: ae020018 sw r2,0x0018(r16)
 
  00089b1c: 8e02001c lw r2,0x001c(r16)
 
  00089b1c: 8e02001c lw r2,0x001c(r16)
  00089b20: 8fa3001c lw r3,0x001c(r29)
+
  00089b20: 8fa3001c lw r3,0x001c(r29) #load height mod and height mod difference/ distortion
 
  00089b24: 00000000 nop
 
  00089b24: 00000000 nop
 
  00089b28: 00431021 addu r2,r2,r3
 
  00089b28: 00431021 addu r2,r2,r3
  00089b2c: ae02001c sw r2,0x001c(r16)
+
  00089b2c: ae02001c sw r2,0x001c(r16) #move unit closer to new height
 
  00089b30: 8e020020 lw r2,0x0020(r16)
 
  00089b30: 8e020020 lw r2,0x0020(r16)
 
  00089b34: 8fa30020 lw r3,0x0020(r29)
 
  00089b34: 8fa30020 lw r3,0x0020(r29)
Line 170: Line 178:
 
  00089b3c: 00431021 addu r2,r2,r3
 
  00089b3c: 00431021 addu r2,r2,r3
 
  00089b40: 080226d3 j 0x00089b4c
 
  00089b40: 080226d3 j 0x00089b4c
  00089b44: ae020020 sw r2,0x0020(r16)
+
  00089b44: ae020020 sw r2,0x0020(r16) #move unit closer to new Y
 
  00089b48: a2000087 sb r0,0x0087(r16)
 
  00089b48: a2000087 sb r0,0x0087(r16)
  00089b4c: 2631ffff addiu r17,r17,0xffff
+
  00089b4c: 2631ffff addiu r17,r17,0xffff #distortion variable - 1 (movement speeds up over time, until it abruptly stops at destination)
 
  00089b50: 8fa20018 lw r2,0x0018(r29)
 
  00089b50: 8fa20018 lw r2,0x0018(r29)
 
  00089b54: 8fa3001c lw r3,0x001c(r29)
 
  00089b54: 8fa3001c lw r3,0x001c(r29)
Line 180: Line 188:
 
  00089b64: ae03002c sw r3,0x002c(r16)
 
  00089b64: ae03002c sw r3,0x002c(r16)
 
  00089b68: ae040030 sw r4,0x0030(r16)
 
  00089b68: ae040030 sw r4,0x0030(r16)
  00089b6c: ae050034 sw r5,0x0034(r16)
+
  00089b6c: ae050034 sw r5,0x0034(r16) #store all differences(?) back into unit data
  00089b70: 0c02255f jal 0x0008957c
+
  00089b70: 0c02255f jal 0x0008957c #[[0008957c - 000895c0]]
 
  00089b74: 02002021 addu r4,r16,r0
 
  00089b74: 02002021 addu r4,r16,r0
 
  00089b78: ae11008c sw r17,0x008c(r16)
 
  00089b78: ae11008c sw r17,0x008c(r16)

Revision as of 10:12, 10 October 2022

000898a0: 27bdffc0 addiu r29,r29,0xffc0
000898a4: afb00028 sw r16,0x0028(r29)
000898a8: 00808021 addu r16,r4,r0
000898ac: afb20030 sw r18,0x0030(r29)
000898b0: 00a09021 addu r18,r5,r0
000898b4: afbf0038 sw r31,0x0038(r29)
000898b8: afb30034 sw r19,0x0034(r29)
000898bc: afb1002c sw r17,0x002c(r29)
000898c0: 8e11008c lw r17,0x008c(r16)
000898c4: 8e130090 lw r19,0x0090(r16)
000898c8: 8e020028 lw r2,0x0028(r16)			#X mod difference?
000898cc: 8e03002c lw r3,0x002c(r16)			#Y mod difference?
000898d0: 8e040030 lw r4,0x0030(r16)			#height mod difference? (all for types of motion)
000898d4: 8e050034 lw r5,0x0034(r16)
000898d8: afa20018 sw r2,0x0018(r29)
000898dc: afa3001c sw r3,0x001c(r29)
000898e0: afa40020 sw r4,0x0020(r29)			#store height mod f
000898e4: afa50024 sw r5,0x0024(r29)			#stores above to stack?
000898e8: 8e030088 lw r3,0x0088(r16)			#load distort counter
000898ec: 00000000 nop
000898f0: 10600005 beq r3,r0,0x00089908		#branch if 0
000898f4: 34020001 ori r2,r0,0x0001
000898f8: 10620080 beq r3,r2,0x00089afc		#branch if 1
000898fc: 00000000 nop
00089900: 080226d4 j 0x00089b50			#otherwise skip
00089904: 00000000 nop
Distort counter = 0
00089908: 8e040134 lw r4,0x0134(r16)			#load pointer to unit's battle data
0008990c: 00000000 nop
00089910: 10800078 beq r4,r0,0x00089af4		#branch if null
00089914: 34020034 ori r2,r0,0x0034
00089918: 3c038009 lui r3,0x8009
0008991c: 8c6360e4 lw r3,0x60e4(r3)			#load type of display? (gameflow variable)
00089920: 00000000 nop
00089924: 14620016 bne r3,r2,0x00089980		#branch if current display is 0x34
00089928: 00000000 nop
0008992c: 9203007c lbu r3,0x007c(r16)			#load unit's X coordinate
00089930: 00000000 nop
00089934: 000310c0 sll r2,r3,0x03
00089938: 00431023 subu r2,r2,r3
0008993c: 00021080 sll r2,r2,0x02			#X coord * tile width
00089940: 2442000e addiu r2,r2,0x000e			#x coord + 1 * tile width
00089944: 8e030018 lw r3,0x0018(r16)			#load X mod
00089948: 00021300 sll r2,r2,0x0c			#x coord -> x coord's x mod
0008994c: 00431023 subu r2,r2,r3			#find difference in adjacent tile's x mod to current tile's
00089950: afa20018 sw r2,0x0018(r29)			#store
00089954: 9203007d lbu r3,0x007d(r16)			#load unit's Y coordinate
00089958: 8e040020 lw r4,0x0020(r16)			#load Y mod
0008995c: afa0001c sw r0,0x001c(r29)			#clear height mod difference
00089960: 000310c0 sll r2,r3,0x03
00089964: 00431023 subu r2,r2,r3
00089968: 00021080 sll r2,r2,0x02
0008996c: 2442000e addiu r2,r2,0x000e
00089970: 00021300 sll r2,r2,0x0c
00089974: 00441023 subu r2,r2,r4			#find difference in adjacent tile's Y mod and current tile's
00089978: 080226a9 j 0x00089aa4
0008997c: afa20020 sw r2,0x0020(r29)			#store height mod difference
if current display = 0x34
00089980: 9202018d lbu r2,0x018d(r16)			#load targets hit counter
00089984: 00000000 nop
00089988: 10400014 beq r2,r0,0x000899dc		#branch if none
0008998c: 00000000 nop
00089990: 9204018e lbu r4,0x018e(r16)			#load target ID
00089994: 0c01e9c9 jal 0x0007a724         Get_unit_misc_data_that_matches_r4_ID
00089998: 00000000 nop
0008999c: 8c430018 lw r3,0x0018(r2)			#load target's X mod
000899a0: 8e040018 lw r4,0x0018(r16)			#load attacker's X mod
000899a4: 00000000 nop
000899a8: 00641823 subu r3,r3,r4			#find difference
000899ac: afa30018 sw r3,0x0018(r29)			#store difference of X mods
000899b0: 8c43001c lw r3,0x001c(r2)			#
000899b4: 8e04001c lw r4,0x001c(r16)			#Load height mods
000899b8: 00000000 nop
000899bc: 00641823 subu r3,r3,r4
000899c0: afa3001c sw r3,0x001c(r29)			#store difference of height mods
000899c4: 8c420020 lw r2,0x0020(r2)
000899c8: 8e030020 lw r3,0x0020(r16)
000899cc: 00000000 nop
000899d0: 00431023 subu r2,r2,r3
000899d4: 080226a9 j 0x00089aa4
000899d8: afa20020 sw r2,0x0020(r29)			#store difference of Y mods
if no targets:
000899dc: 8483017a lh r3,0x017a(r4)			#load target's X coord
000899e0: 00000000 nop
000899e4: 000310c0 sll r2,r3,0x03
000899e8: 00431023 subu r2,r2,r3
000899ec: 86030040 lh r3,0x0040(r16)			#loads X location on screen
000899f0: 00021080 sll r2,r2,0x02			#Target's X coord * 0xE
000899f4: 2463fff2 addiu r3,r3,0xfff2			#X location - 0xE
000899f8: 00431023 subu r2,r2,r3			#difference of target X panel * E and X location - E
000899fc: 00021300 sll r2,r2,0x0c			#X modify
00089a00: afa20018 sw r2,0x0018(r29)			#store
00089a04: 8e020134 lw r2,0x0134(r16)			#load pointer to unit's data
00089a08: 00000000 nop
00089a0c: 8443017e lh r3,0x017e(r2)			#Y panel for target
00089a10: 00000000 nop
00089a14: 000310c0 sll r2,r3,0x03
00089a18: 00431023 subu r2,r2,r3
00089a1c: 86030044 lh r3,0x0044(r16)			#Y position on screen
00089a20: 00021080 sll r2,r2,0x02
00089a24: 2463fff2 addiu r3,r3,0xfff2
00089a28: 00431023 subu r2,r2,r3
00089a2c: 00021300 sll r2,r2,0x0c			#find same difference as before
00089a30: afa20020 sw r2,0x0020(r29)			#store Y mod difference
00089a34: 8e020134 lw r2,0x0134(r16)
00089a38: 00000000 nop
00089a3c: 8443017a lh r3,0x017a(r2)			#load target's X panel
00089a40: 00000000 nop
00089a44: 000310c0 sll r2,r3,0x03
00089a48: 00431023 subu r2,r2,r3
00089a4c: 00021080 sll r2,r2,0x02
00089a50: 2442000e addiu r2,r2,0x000e
00089a54: a7a20010 sh r2,0x0010(r29)			#store target's X mod
00089a58: 8e020134 lw r2,0x0134(r16)
00089a5c: 00000000 nop
00089a60: 8443017e lh r3,0x017e(r2)			#load target's Y panel
00089a64: 00000000 nop
00089a68: 000310c0 sll r2,r3,0x03
00089a6c: 00431023 subu r2,r2,r3
00089a70: 00021080 sll r2,r2,0x02
00089a74: 2442000e addiu r2,r2,0x000e
00089a78: a7a20014 sh r2,0x0014(r29)			#store target's Y mod
00089a7c: 8e020134 lw r2,0x0134(r16)
00089a80: 00000000 nop
00089a84: 8445017c lh r5,0x017c(r2)			#parse map level
00089a88: 0c01f203 jal 0x0007c80c            Slope_Calculations
00089a8c: 27a40010 addiu r4,r29,0x0010			#stack pointer
00089a90: 86030042 lh r3,0x0042(r16)			#load height mod
00089a94: 00000000 nop
00089a98: 00431023 subu r2,r2,r3			#find difference between current height and slope height at centre?
00089a9c: 00021300 sll r2,r2,0x0c			#mod
00089aa0: afa2001c sw r2,0x001c(r29)			#store
00089aa4: 8fa40018 lw r4,0x0018(r29)			#load x mod difference
00089aa8: 00000000 nop
00089aac: 0091001a div r4,r17
00089ab0: 00002012 mflo r4				#divide by distortion variable
00089ab4: 8fa3001c lw r3,0x001c(r29)
00089ab8: 00000000 nop
00089abc: 0071001a div r3,r17
00089ac0: 00001812 mflo r3				#divide height difference by distortion variable
00089ac4: 8fa20020 lw r2,0x0020(r29)
00089ac8: 00000000 nop
00089acc: 0051001a div r2,r17
00089ad0: 00001012 mflo r2				#divide y difference by distortion variable
00089ad4: afa40018 sw r4,0x0018(r29)
00089ad8: afa3001c sw r3,0x001c(r29)
00089adc: afa20020 sw r2,0x0020(r29)			#store all again
00089ae0: 8e020088 lw r2,0x0088(r16)			#load distortion counter
00089ae4: 00000000 nop
00089ae8: 24420001 addiu r2,r2,0x0001
00089aec: 080226bf j 0x00089afc
00089af0: ae020088 sw r2,0x0088(r16)			#increment and store
00089af4: 080226d4 j 0x00089b50
00089af8: a2000087 sb r0,0x0087(r16)			#if unit is erroneous, allow animation to continue
if distortion counter = 1
00089afc: 1a200012 blez r17,0x00089b48			#if distortion variable = 0, unit has already arrived at new destination
00089b00: 00000000 nop
00089b04: 8e020018 lw r2,0x0018(r16)			#load X mod
00089b08: 8fa30018 lw r3,0x0018(r29)			#load X mod difference / distortion variable
00089b0c: 00000000 nop
00089b10: 00431021 addu r2,r2,r3			#move unit closer to new X
00089b14: 12400006 beq r18,r0,0x00089b30		#branch if input 2 = 0 (no height change?)
00089b18: ae020018 sw r2,0x0018(r16)
00089b1c: 8e02001c lw r2,0x001c(r16)
00089b20: 8fa3001c lw r3,0x001c(r29)			#load height mod and height mod difference/ distortion
00089b24: 00000000 nop
00089b28: 00431021 addu r2,r2,r3
00089b2c: ae02001c sw r2,0x001c(r16)			#move unit closer to new height
00089b30: 8e020020 lw r2,0x0020(r16)
00089b34: 8fa30020 lw r3,0x0020(r29)
00089b38: 00000000 nop
00089b3c: 00431021 addu r2,r2,r3
00089b40: 080226d3 j 0x00089b4c
00089b44: ae020020 sw r2,0x0020(r16)			#move unit closer to new Y
00089b48: a2000087 sb r0,0x0087(r16)
00089b4c: 2631ffff addiu r17,r17,0xffff		#distortion variable - 1 (movement speeds up over time, until it abruptly stops at destination)
00089b50: 8fa20018 lw r2,0x0018(r29)
00089b54: 8fa3001c lw r3,0x001c(r29)
00089b58: 8fa40020 lw r4,0x0020(r29)
00089b5c: 8fa50024 lw r5,0x0024(r29)
00089b60: ae020028 sw r2,0x0028(r16)
00089b64: ae03002c sw r3,0x002c(r16)
00089b68: ae040030 sw r4,0x0030(r16)
00089b6c: ae050034 sw r5,0x0034(r16)			#store all differences(?) back into unit data
00089b70: 0c02255f jal 0x0008957c			#0008957c - 000895c0
00089b74: 02002021 addu r4,r16,r0
00089b78: ae11008c sw r17,0x008c(r16)
00089b7c: ae130090 sw r19,0x0090(r16)
00089b80: 8fbf0038 lw r31,0x0038(r29)
00089b84: 8fb30034 lw r19,0x0034(r29)
00089b88: 8fb20030 lw r18,0x0030(r29)
00089b8c: 8fb1002c lw r17,0x002c(r29)
00089b90: 8fb00028 lw r16,0x0028(r29)
00089b94: 27bd0040 addiu r29,r29,0x0040
00089b98: 03e00008 jr r31
00089b9c: 00000000 nop