Accelerate Unit to Destination
Revision as of 04:13, 9 August 2024 by Talcall (talk | contribs) (Talcall moved page 000898a0 - 00089b9c to Accelerate Unit to Destination)
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