000898a0 - 00089b9c

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search

moves unit to destination. does so progressively if executing attack with target. used by rush.
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 phase
000898ec: 00000000 nop
000898f0: 10600005 beq r3,r0,0x00089908		#branch if initialising
000898f4: 34020001 ori r2,r0,0x0001
000898f8: 10620080 beq r3,r2,0x00089afc		#branch if executing
000898fc: 00000000 nop
00089900: 080226d4 j 0x00089b50			#otherwise skip
00089904: 00000000 nop
Initialising
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 != 0x34
00089928: 00000000 nop
if current display = 0x34
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 * tile width
000899f4: 2463fff2 addiu r3,r3,0xfff2			#X location - tile width
000899f8: 00431023 subu r2,r2,r3			#difference of target panel X coordinate 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 phase
00089ae4: 00000000 nop
00089ae8: 24420001 addiu r2,r2,0x0001
00089aec: 080226bf j 0x00089afc
00089af0: ae020088 sw r2,0x0088(r16)			#store phase as 1
if attacking unit has no battle data
00089af4: 080226d4 j 0x00089b50
00089af8: a2000087 sb r0,0x0087(r16)			#if unit is erroneous, allow animation to continue
if phase is executing
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
00089b0c: 00000000 nop
00089b10: 00431021 addu r2,r2,r3			#move unit immediately towards new X. if instead attack with no targets, move unit slightly towards 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 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 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