Load Unit graphics from sprite sheet

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search

appears to be a unit graphic loading routine - extremely similar in structure to Load WEP graphic from WEP1 Sheet
00084818: 27bdffc0 addiu r29,r29,0xffc0
0008481c: afb30024 sw r19,0x0024(r29)
00084820: 00809821 addu r19,r4,r0		r19 = misc unit data pointer
00084824: afb5002c sw r21,0x002c(r29)
00084828: 00a0a821 addu r21,r5,r0		r21 = frame & animation data
0008482c: afbe0038 sw r30,0x0038(r29)
00084830: 00c0f021 addu r30,r6,r0		r30 = wait frames (in progress)
00084834: afbf003c sw r31,0x003c(r29)
00084838: afb70034 sw r23,0x0034(r29)
0008483c: afb60030 sw r22,0x0030(r29)
00084840: afb40028 sw r20,0x0028(r29)
00084844: afb20020 sw r18,0x0020(r29)
00084848: afb1001c sw r17,0x001c(r29)
0008484c: afb00018 sw r16,0x0018(r29)
00084850: 96b70004 lhu r23,0x0004(r21)		load current animation
00084854: 96b20006 lhu r18,0x0006(r21)		load unit (not weapon) byte counter
00084858: 32e3ffff andi r3,r23,0xffff		move animation to r3
0008485c: 2c6201f4 sltiu r2,r3,0x01f4		r2 = true if animation < 0x1f4
00084860: 10400004 beq r2,r0,0x00084874	#branch if animation > 0x1f4               // if animation is on evtchr slot 1
00084864: 02e0a021 addu r20,r23,r0			|r20 = current animation
00084868: 8eb60020 lw r22,0x0020(r21)			|SEQ data pointer
0008486c: 08021227 j 0x0008489c			@jump ahead
00084870: 00000000 nop					|
00084874: 2c620258 sltiu r2,r3,0x0258		#r2 = true if animation < 0x258
00084878: 10400005 beq r2,r0,0x00084890	#branch if animation > 0x258               // if animation is on evtchr slot 2
0008487c: 26f4fe0c addiu r20,r23,0xfe0c		|r20 = animation - 0x1f4
00084880: 3c16800a lui r22,0x800a			|
00084884: 26d677d8 addiu r22,r22,0x77d8		|r22 = 0x800a77d8                  // if animation is on evtchr slot 1, use slot1 seq data
00084888: 08021227 j 0x0008489c			@jump ahead
0008488c: 00000000 nop
00084890: 3c16800b lui r22,0x800b		#
00084894: 26d6ed3c addiu r22,r22,0xed3c	r22 = 0x800aed3c                           // if animation is on evtchr slot 2, use slot2 seq data
00084898: 26f4fda8 addiu r20,r23,0xfda8	r20 = animation - 0x258
0008489c: 17c00002 bne r30,r0,0x000848a8	@#branch if wait frames != 0
000848a0: 3282ffff andi r2,r20,0xffff			|r2 = animation
000848a4: 2652fffe addiu r18,r18,0xfffe		|r18 = counter - 1                 //
000848a8: 00021080 sll r2,r2,0x02		#animation * 4
000848ac: 00561021 addu r2,r2,r22		SEQ + animation * 4
000848b0: 8c430008 lw r3,0x0008(r2)		load animation's first instr. byte
000848b4: 2402ffff addiu r2,r0,0xffff
000848b8: 14620005 bne r3,r2,0x000848d0	#branch if pointer is not invalid
000848bc: 3282ffff andi r2,r20,0xffff			|move animation to r2
000848c0: 34040009 ori r4,r0,0x0009			|
000848c4: 0c011282 jal 0x00044a08			|move r4 to r5 and clear something (error thing) // free to remove.
000848c8: 00000000 nop					|
000848cc: 3282ffff andi r2,r20,0xffff			|move animation to r2
000848d0: 00021080 sll r2,r2,0x02		#animation * 4
000848d4: 00561021 addu r2,r2,r22		SEQ + animation * 4
000848d8: 00121c00 sll r3,r18,0x10		
000848dc: 8c450008 lw r5,0x0008(r2)		load animation's frame command pointer
000848e0: 00031c03 sra r3,r3,0x10		I heard you like garbage                   // I can fix a lot of these compiler inefficiencies...
000848e4: 00a31821 addu r3,r5,r3		
000848e8: 90630000 lbu r3,0x0000(r3)		load appropriate frame command byte
000848ec: 340200ff ori r2,r0,0x00ff		r2 = 0xff
000848f0: 14620223 bne r3,r2,0x00085180	#branch if byte is not 0xff                // load frame in r3 and wait by byte 2 frames
000848f4: 00121400 sll r2,r18,0x10			|moves counter to r2
000848f8: 26430001 addiu r3,r18,0x0001			|increment byte counter
000848fc: 00031400 sll r2,r3,0x10			|
00084900: 00021403 sra r2,r2,0x10			|moves counter + 1 to r2
00084904: 00a21021 addu r2,r5,r2			|
00084908: 90420000 lbu r2,0x0000(r2)			|load appropriate byte
0008490c: 24720001 addiu r18,r3,0x0001			|increment counter again
00084910: 2443ff42 addiu r3,r2,0xff42			|subtract 0xbe  
00084914: 2c620042 sltiu r2,r3,0x0042			|r2 = true if r3 < 0x42 (if command byte => 0xbe)
00084918: 10400217 beq r2,r0,0x00085178		$branch if command byte < 0xbe (invalid command) // free to remove, just don't use animation instructions less than and I should be good.
0008491c: 00031080 sll r2,r3,0x02				|r2 = r3 * 4 (makes it a pointer :D)
00084920: 3c018006 lui r1,0x8006				|
00084924: 00220821 addu r1,r1,r2				|
00084928: 8c227f20 lw r2,0x7f20(r1)				|loads return addresses based byte
0008492c: 00000000 nop						|
00084930: 00400008 jr r2					|go there (above branches continue past this)     // I really want to compact this table... I could fit like twice as many instructions here. alas, must I?
00084934: 00000000 nop						|
						Return addresses based on command byte:
						0xbe: 0x80085168 (initialise something?)
						0xbf: 0x80085158 (unsure and not used?)
						0xc0: 0x80085110 WaitForDistort(ffc0, ##)
						0xc1: 0x800850c0 QueueDistortAnim(ffc1, Distort ID, Var)
						0xc2: 0x800848cc nop
						0xc3: 0x80085000 UnloadMFItem(ffc3)
						0xc4: 0x80085078 MFItemPos(ffc4, XX, YY)
						0xc5: 0x80084ff4 LoadMFItem(ffc5)
						0xc6: 0x80085008 WaitForInput(ffc6, ##)
				    0xc7, 0xc8, 0xc9: 0x80084b08 nop(##,##)
						0xca: 0x80085170 nop(##)
						0xcb: 0x80084fe0 MoveUp2(ffcb)
						0xcc: 0x80084fcc MoveUp1(ffcc)           // these can be simplified to use the argument as part of the calculation.
						0xcd: 0x80084fb8 MoveBackward2(ffcd)
						0xce: 0x80084fa4 MoveBackward1(ffcd)
						0xcf: 0x80084f90 MoveDown2(ffcf)
						0xd0: 0x80084f7c MoveDown1(ffd0)
						0xd1: 0x80084f68 MoveForward2(ffd1)
						0xd2: 0x80084f54 MoveForward1(ffd2)
						0xd3: 0x8008505c WeaponSheatheCheck1(ffd3, ##)
						0xd4: 0x80085024 PlayAttackSound(ffd4, SoundID)
						0xd5: 0x80084a00 IncrementLoop(ffd5)             // loopcount is a debug variable. can be repurposed.
						0xd6: 0x80084b3c WeaponSheatheCheck2(ffd6, ##)
						0xd7: 0x80085170 nop(##)
						0xd8: 0x80084c64 SetFrameOffset(ffd8, Rotation)
						0xd9: 0x80084b00 QueueThrowAnimation(ffd9, ####) // does not use its argument. can trim the fat.
						0xda: 0x80085178 ReturnErrorFinishAnim(ffda)     // can be repurposed
						0xdb: 0x80084c2c SetSlowdown(ffdb, Wait)
						0xdc: 0x80084b10 ReloadAnimation(ffdc)
						0xdd: 0x80084c9c OverrideAnimation(ffdd, ID)
						0xde: 0x80084a20 PostGenericAttack (ffde)
						0xdf: 0x80084a14 SetYRotation0(ffdf)
						0xe0: 0x8008496c ClearShadow(ffe0)
						0xe1: 0x80084960 SetShadow(ffe1)
						0xe2: 0x80084cf4 SetLayerPriority(ffe2, LayerID) // layer IDs can be concatenated. nevertheless, mostly outside my scope.
					  0xe3, 0xe4: 0x80085170 nop(##)
						0xe5: 0x80084e8c SaveYSpin(ffe5, Spin)
				    0xe6, 0xe7, 0xe8: 0x80084b08 nop(##,##)
						0xe9: 0x80085170 nop(##)
						0xea: 0x80084b08 nop(##,##)
						0xeb: 0x8008494c FlipVertical(ffeb)
						0xec: 0x80084938 FlipHorizontal(ffec)
						0xed: 0x80085170 nop(##)
						0xee: 0x80084c00 MoveUnitFB(ffee, XX)
						0xef: 0x80084bc8 MoveUnitDU(ffef, YY)
						0xf0: 0x80084b90 MoveUnitRL(fff0, ZZ)
						0xf1: 0x80084b08 nop(##,##)
						0xf2: 0x80084d24 QueueSpriteAnim(fff2, Graphic, ID) // cannot set the animation of the unit themselves. shame. should it?
				    0xf3, 0xf4, 0xf5: 0x80085170 nop(##)
				    		0xf6: 0x80084b58 PlaySound(fff6, ID)
						0xf7: 0x80084f4c nop(##,##,##)
						0xf8: 0x80084b08 nop(##,##)
						0xf9: 0x80084e24 UNKNOWN1(##,##)
						0xfa: 0x80084ed8 MoveUnit(fffa, ZZ, YY, XX)
						0xfb: 0x80084b08 nop(##,##)
						0xfc: 0x80084da4 Wait(fffc, ##, Loops)
						0xfd: 0x80085120 HoldWeapon (fffd, ##)
					  0xfe, 0xff: 0x80084974 PauseAnimation(ffff) (also EndAnimation (fffe), but that mostly exists for weapon compat.)

Flip Horizontal

00084938: 96a20018 lhu r2,0x0018(r21)		load rotation flags
0008493c: 00000000 nop
00084940: 38420002 xori r2,r2,0x0002		flip horizontal flip flag
00084944: 08021233 j 0x000848cc		queue next command
00084948: a6a20018 sh r2,0x0018(r21)		save rotation flag

Flip Vertical

0008494c: 96a20018 lhu r2,0x0018(r21)		load rotation flags
00084950: 00000000 nop
00084954: 38420004 xori r2,r2,0x0004		flip vertical flip flag
00084958: 08021233 j 0x000848cc		queue next command
0008495c: a6a20018 sh r2,0x0018(r21)		save rotation flags

Set Shadow

00084960: 34020001 ori r2,r0,0x0001
00084964: 08021233 j 0x000848cc		queue next command
00084968: a2620298 sb r2,0x0298(r19)		Save 1 to unit's shadow

Clear Shadow

0008496c: 08021233 j 0x000848cc		queue next command
00084970: a2600298 sb r0,0x0298(r19)		save 0 to unit's shadow

Pause Animation

00084974: 32e3ffff andi r3,r23,0xffff		r3 = animation
00084978: 2c6201f4 sltiu r2,r3,0x01f4		set if animation is < 0x1f4
0008497c: 1040001e beq r2,r0,0x000849f8	#branch if not                                   // if animation is from EVTCHR1 or EVTCHR2
00084980: 30620001 andi r2,r3,0x0001			|r2 = true if animation is odd
00084984: 1040000c beq r2,r0,0x000849b8		$branch if even
00084988: 02602021 addu r4,r19,r0				|r4 = unit misc. data pointer
0008498c: 92620006 lbu r2,0x0006(r19)				|load unit spritesheet ID
00084990: 00000000 nop						|
00084994: 00021080 sll r2,r2,0x02				|ID * 4
00084998: 3c018009 lui r1,0x8009				|
0008499c: 00220821 addu r1,r1,r2				|
000849a0: 90224748 lbu r2,0x4748(r1)				|Load spritesheet's SHP ID
000849a4: 3c018009 lui r1,0x8009				|
000849a8: 00220821 addu r1,r1,r2				|
000849ac: 903049d0 lbu r16,0x49d0(r1)				|Load associated byte to SHP ID // loads and stores a wait frame for the unit
000849b0: 08021277 j 0x000849dc				@jump ahead
000849b4: 00000000 nop						|
000849b8: 92620006 lbu r2,0x0006(r19)			$load unit spritesheet ID
000849bc: 00000000 nop					|
000849c0: 00021080 sll r2,r2,0x02			|unit spritesheet ID * 4
000849c4: 3c018009 lui r1,0x8009			|
000849c8: 00220821 addu r1,r1,r2			|
000849cc: 90224748 lbu r2,0x4748(r1)			|Load spritesheet's SHP ID
000849d0: 3c018009 lui r1,0x8009			|
000849d4: 00220821 addu r1,r1,r2			|
000849d8: 903049c4 lbu r16,0x49c4(r1)			|Load associated byte to SHP ID        // loads and stores a wait frame for the unit
000849dc: 02a02821 addu r5,r21,r0			@r5 = Frame + Animation data
000849e0: 3206ffff andi r6,r16,0xffff			|r6 = associated byte to SHP ID
000849e4: 02e03821 addu r7,r23,r0			|r7 = animation ID
000849e8: a4800054 sh r0,0x0054(r4)			|save 0 to Y?
000849ec: a4800052 sh r0,0x0052(r4)			|save 0 to Height?
000849f0: 0c021085 jal 0x00084214			|--> Update Sprite display data
000849f4: a4800050 sh r0,0x0050(r4)			|save 0 to X?
000849f8: 08021480 j 0x00085200		#Finishes animation
000849fc: a6a0000a sh r0,0x000a(r21)		clears frame delay + other stuff (number of frames in that pose)

Increment Loop

00084a00: 96a2000c lhu r2,0x000c(r21)		Load loop count
00084a04: 00009021 addu r18,r0,r0		set counter to 0
00084a08: 24420001 addiu r2,r2,0x0001		increment loop count by 1
00084a0c: 08021233 j 0x000848cc		queue next command
00084a10: a6a2000c sh r2,0x000c(r21)		save new loop count

Set Y Rotation == 0

00084a14: 8ea2002c lw r2,0x002c(r21)		Load sprite display section
00084a18: 08021233 j 0x000848cc		queue next animation
00084a1c: a440000c sh r0,0x000c(r2)		set rotation on Y axis to 0

Post Generic Attack Calculation

00084a20: 3c038009 lui r3,0x8009
00084a24: 8c6360e4 lw r3,0x60e4(r3)		loads type of display?
00084a28: 34020034 ori r2,r0,0x0034		r2 = 0x34
00084a2c: 1062ffa7 beq r3,r2,0x000848cc	queue next command if display type is 0x34            // not compatible with displaying damage?
00084a30: 00000000 nop
00084a34: 866401a0 lh r4,0x01a0(r19)		Load last attack used's ID
00084a38: 00000000 nop
00084a3c: 1080000d beq r4,r0,0x00084a74	#Branch if said attack was... attack.
00084a40: 00801821 addu r3,r4,r0			|r3 = ability ID
00084a44: 3402016f ori r2,r0,0x016f			|r2 = 0x16f
00084a48: 1082000a beq r4,r2,0x00084a74		#branch if attack ID was frog attack
00084a4c: 2462ff76 addiu r2,r3,0xff76				|r2 = ability - 0x8a
00084a50: 2c420008 sltiu r2,r2,0x0008				|r2 = true if ability is between 0x8a and 0x91 (exclusive, Knight skills only?)
00084a54: 14400007 bne r2,r0,0x00084a74			#branch if such is the case
00084a58: 2462ff2b addiu r2,r3,0xff2b					|type of display - 0xd5
00084a5c: 2c420003 sltiu r2,r2,0x0003					|r2 = true if ability is between 0xd5 and 0xd7 (exclusive, Mustadio's skills?)
00084a60: 14400004 bne r2,r0,0x00084a74				#branch if such is the case
00084a64: 2462fe76 addiu r2,r3,0xfe76						|ability - 0x18a
00084a68: 2c420014 sltiu r2,r2,0x0014						|r2 = true if ability is between 0x18a (exclusive, dragoon and archer skills?) // this is dumb, and I can trim it down.
00084a6c: 1040ff98 beq r2,r0,0x000848d0					|queue next command if this is not the case
00084a70: 3282ffff andi r2,r20,0xffff						|r2 = animation
00084a74: 9262018d lbu r2,0x018d(r19)		#load Limit for target data
00084a78: 00000000 nop
00084a7c: 1040ff94 beq r2,r0,0x000848d0	queue next command if limit is 0
00084a80: 3282ffff andi r2,r20,0xffff		r2 = animation
00084a84: 9262018d lbu r2,0x018d(r19)		load limit again
00084a88: 00000000 nop				
00084a8c: 1040ff8f beq r2,r0,0x000848cc	queue next command if limit is 0, but different this time I swear                // can trim this
00084a90: 00008821 addu r17,r0,r0		r17 = 0
00084a94: 3222ffff andi r2,r17,0xffff		r2 = r17
00084a98: 02621021 addu r2,r19,r2		r2 = misc. unit data + counter
00084a9c: 9044018e lbu r4,0x018e(r2)		Load first target
00084aa0: 0c01e9c9 jal 0x0007a724		--> Get unit misc data that matches r4 ID
00084aa4: 00000000 nop				
00084aa8: 00408021 addu r16,r2,r0		r16 = r2 (target unit ID)
00084aac: 1200000d beq r16,r0,0x00084ae4	#branch if result of routine returns 0 (invalid unit?)
00084ab0: 26310001 addiu r17,r17,0x0001		|increment r17 by 1
00084ab4: 02602021 addu r4,r19,r0			|r4 = misc. unit data pointer
00084ab8: 0c020e5e jal 0x00083978			|--> Set targets animation based on attack type
00084abc: 02002821 addu r5,r16,r0			|r5 = r16
00084ac0: 02602021 addu r4,r19,r0			|r4 = misc. unit data pointer
00084ac4: 0c020e1d jal 0x00083874			|--> Set attacker animation for shield block
00084ac8: 02002821 addu r5,r16,r0			|r5 = r16
00084acc: 92040004 lbu r4,0x0004(r16)			|Unit Misc ID?
00084ad0: 0c01a2f5 jal 0x00068bd4			|--> Jump to post action display
00084ad4: 00000000 nop					|
00084ad8: 02602021 addu r4,r19,r0			|r4 = misc unit data pointer
00084adc: 0c01a253 jal 0x0006894c			|--> Set evade type data and weapon element effect
00084ae0: 00002821 addu r5,r0,r0			|r5 = 0
00084ae4: 9263018d lbu r3,0x018d(r19)		#loads something :D
00084ae8: 3222ffff andi r2,r17,0xffff		moves resultant counter to r2
00084aec: 0043102b sltu r2,r2,r3		sets r2 to true if the number of times gone through the routine is less than r3
00084af0: 1440ffe9 bne r2,r0,0x00084a98	repeat part of the routine if still not matching target hit# limit
00084af4: 3222ffff andi r2,r17,0xffff		moves r17 into r2 again
00084af8: 08021234 j 0x000848d0		queues next command
00084afc: 3282ffff andi r2,r20,0xffff		r2 = animation

Queue Throw Hardcoding and Projectile Loading

00084b00: 0c01a269 jal 0x000689a4		--> Set evade type data, item and throw stone hardcoding
00084b04: 02602021 addu r4,r19,r0		r4 = misc unit data pointer
00084b08: 08021233 j 0x000848cc		queue next command
00084b0c: 26520002 addiu r18,r18,0x0002	increment counter by 2

Reload Animation

00084b10: 96b7000e lhu r23,0x000e(r21)		Load unit animation
00084b14: 96b20010 lhu r18,0x0010(r21)		load last animation's counter
00084b18: 32e3ffff andi r3,r23,0xffff		moves animation into r3
00084b1c: 2c6201f4 sltiu r2,r3,0x01f4		set if animation is less than 0x1f4
00084b20: 1440ff6a bne r2,r0,0x000848cc	queue next command if so
00084b24: 02e0a021 addu r20,r23,r0		r20 = animation
00084b28: 2c620258 sltiu r2,r3,0x0258		set if animation is less than 0x258
00084b2c: 1440ff67 bne r2,r0,0x000848cc	queue next command if so
00084b30: 26f4fe0c addiu r20,r23,0xfe0c	r20 = animation - 1f4
00084b34: 08021233 j 0x000848cc		queue next command
00084b38: 26f4fda8 addiu r20,r23,0xfda8	r20 = animation - 0x258

Weapon Sheathe Check 2

00084b3c: 3c028009 lui r2,0x8009		
00084b40: 8c42612c lw r2,0x612c(r2)		load weapon sheathe check (maybe an anim finished check lmao)
00084b44: 00000000 nop
00084b48: 14400176 bne r2,r0,0x00085124	branch if not finishing animation
00084b4c: 3282ffff andi r2,r20,0xffff		r2 = animation
00084b50: 08021234 j 0x000848d0		queue next command
00084b54: 26520001 addiu r18,r18,0x0001	increment counter by 1

Play Sound

00084b58: 02401021 addu r2,r18,r0		r2 = counter
00084b5c: 26520001 addiu r18,r18,0x0001	r18 = counter + 1
00084b60: 3283ffff andi r3,r20,0xffff		r3 = animation
00084b64: 00031880 sll r3,r3,0x02		animation * 4
00084b68: 00761821 addu r3,r3,r22		SEQ animation + Anim * 4
00084b6c: 00021400 sll r2,r2,0x10		
00084b70: 8c630008 lw r3,0x0008(r3)		load pointer to frame commands
00084b74: 00021403 sra r2,r2,0x10
00084b78: 00621821 addu r3,r3,r2
00084b7c: 90650000 lbu r5,0x0000(r3)
00084b80: 0c01ae58 jal 0x0006b960		--> 0006b960 - 0006b990 plays sound
00084b84: 02602021 addu r4,r19,r0
00084b88: 08021234 j 0x000848d0		queue next command
00084b8c: 3282ffff andi r2,r20,0xffff

Move Unit Right+/Left-

00084b90: 02401021 addu r2,r18,r0		r2 = counter
00084b94: 26520001 addiu r18,r18,0x0001	r18 = counter + 1
00084b98: 3283ffff andi r3,r20,0xffff		r3 = animation
00084b9c: 00031880 sll r3,r3,0x02		animation * 4
00084ba0: 00761821 addu r3,r3,r22		seq data + animation * 4
00084ba4: 00021400 sll r2,r2,0x10
00084ba8: 8c630008 lw r3,0x0008(r3)		load pointer to frame commands
00084bac: 00021403 sra r2,r2,0x10
00084bb0: 00621821 addu r3,r3,r2
00084bb4: 80650000 lb r5,0x0000(r3)
00084bb8: 0c0211ac jal 0x000846b0		--> Move Unit Right+/Left-
00084bbc: 02602021 addu r4,r19,r0
00084bc0: 08021234 j 0x000848d0		queue next command
00084bc4: 3282ffff andi r2,r20,0xffff

Move Unit Down+/Up-

00084bc8: 02401021 addu r2,r18,r0		r2 = counter
00084bcc: 26520001 addiu r18,r18,0x0001	r18 = counter + 1
00084bd0: 3283ffff andi r3,r20,0xffff
00084bd4: 00031880 sll r3,r3,0x02
00084bd8: 00761821 addu r3,r3,r22
00084bdc: 00021400 sll r2,r2,0x10
00084be0: 8c630008 lw r3,0x0008(r3)		load pointer to frame commands
00084be4: 00021403 sra r2,r2,0x10
00084be8: 00621821 addu r3,r3,r2
00084bec: 80650000 lb r5,0x0000(r3)		load 1st byte
00084bf0: 0c0211d6 jal 0x00084758		--> Move Unit Down+/Up- - Float routine?
00084bf4: 02602021 addu r4,r19,r0		r4 = unit misc. data pointer
00084bf8: 08021234 j 0x000848d0		queue next command
00084bfc: 3282ffff andi r2,r20,0xffff		r2 = animation

Move Unit Forward+/Back-

00084c00: 02401021 addu r2,r18,r0		r2 = counter
00084c04: 3283ffff andi r3,r20,0xffff		r3 = animation
00084c08: 00031880 sll r3,r3,0x02		animation * 4
00084c0c: 00761821 addu r3,r3,r22		seq data + animation * 4
00084c10: 00021400 sll r2,r2,0x10
00084c14: 8c630008 lw r3,0x0008(r3)		frame command pointer
00084c18: 00021403 sra r2,r2,0x10
00084c1c: 00621821 addu r3,r3,r2
00084c20: 80650000 lb r5,0x0000(r3)		load third byte to r5
00084c24: 080213cf j 0x00084f3c		jump ahead with this r5 value
00084c28: 26520001 addiu r18,r18,0x0001	increment counter by 1

Set Slowdown

00084c2c: 3283ffff andi r3,r20,0xffff		r3 = animation
00084c30: 00031880 sll r3,r3,0x02		animation * 4
00084c34: 00761821 addu r3,r3,r22
00084c38: 02401021 addu r2,r18,r0
00084c3c: 00021400 sll r2,r2,0x10
00084c40: 8c630008 lw r3,0x0008(r3)		frame command pointer
00084c44: 00021403 sra r2,r2,0x10
00084c48: 00621821 addu r3,r3,r2
00084c4c: 90620000 lbu r2,0x0000(r3)		load third frame command
00084c50: 26520001 addiu r18,r18,0x0001	increment counter
00084c54: 00021600 sll r2,r2,0x18
00084c58: 00021603 sra r2,r2,0x18
00084c5c: 08021233 j 0x000848cc		queue next command
00084c60: a6a20012 sh r2,0x0012(r21)		save third frame command to sprite data

Set Frame Offset

00084c64: 3283ffff andi r3,r20,0xffff		r3 = animation
00084c68: 00031880 sll r3,r3,0x02		anim * 4
00084c6c: 00761821 addu r3,r3,r22
00084c70: 02401021 addu r2,r18,r0
00084c74: 00021400 sll r2,r2,0x10
00084c78: 8c630008 lw r3,0x0008(r3)		pointer to frame commands
00084c7c: 00021403 sra r2,r2,0x10
00084c80: 00621821 addu r3,r3,r2
00084c84: 90620000 lbu r2,0x0000(r3)		Load third command byte
00084c88: 26520001 addiu r18,r18,0x0001	increment counter
00084c8c: 00021600 sll r2,r2,0x18
00084c90: 00021603 sra r2,r2,0x18
00084c94: 08021233 j 0x000848cc
00084c98: a6a20014 sh r2,0x0014(r21)		save third byte to... ?

Override Animation

00084c9c: 3283ffff andi r3,r20,0xffff		r3 = animation
00084ca0: 00031880 sll r3,r3,0x02		anim * 4
00084ca4: 00761821 addu r3,r3,r22		pointer to SEQ data
00084ca8: 02401021 addu r2,r18,r0		r2 = counter
00084cac: 00021400 sll r2,r2,0x10
00084cb0: a6b7000e sh r23,0x000e(r21)		save animation to sprite data
00084cb4: 8c630008 lw r3,0x0008(r3)		load frame command pointer
00084cb8: 00021403 sra r2,r2,0x10
00084cbc: 00621821 addu r3,r3,r2
00084cc0: 90770000 lbu r23,0x0000(r3)		Load 3rd byte into raw anim register
00084cc4: 26520001 addiu r18,r18,0x0001	increment counter
00084cc8: 32e3ffff andi r3,r23,0xffff		r3 = new animation
00084ccc: 2c6201f4 sltiu r2,r3,0x01f4		set r2 true if anim# < 0x1f4
00084cd0: 14400005 bne r2,r0,0x00084ce8	#branch if so
00084cd4: 02e0a021 addu r20,r23,r0			|r20 = animation
00084cd8: 2c620258 sltiu r2,r3,0x0258			|set if animation is less than 0x258
00084cdc: 14400002 bne r2,r0,0x00084ce8		#branch if so
00084ce0: 26f4fe0c addiu r20,r23,0xfe0c			|r20 = animation -0x1f4
00084ce4: 26f4fda8 addiu r20,r23,0xfda8			|r20 = animation -x0258
00084ce8: a6b20010 sh r18,0x0010(r21)		#save counter
00084cec: 08021233 j 0x000848cc		queue next command
00084cf0: 00009021 addu r18,r0,r0		reset counter

Set Unit-Weapon-Glint Layer priority

00084cf4: 3283ffff andi r3,r20,0xffff		r3 = animation
00084cf8: 00031880 sll r3,r3,0x02		anim * 4
00084cfc: 00761821 addu r3,r3,r22
00084d00: 02401021 addu r2,r18,r0
00084d04: 00021400 sll r2,r2,0x10
00084d08: 8c630008 lw r3,0x0008(r3)		load frame command pointer
00084d0c: 00021403 sra r2,r2,0x10
00084d10: 00621821 addu r3,r3,r2
00084d14: 90620000 lbu r2,0x0000(r3)		load 3rd frame command
00084d18: 26520001 addiu r18,r18,0x0001	increment counter
00084d1c: 08021233 j 0x000848cc		queue next command
00084d20: a6620014 sh r2,0x0014(r19)		save ?

Queue Weapon1/Glint2 Sprite Animation

00084d24: 26430001 addiu r3,r18,0x0001			r3 = counter + 1
00084d28: 00122400 sll r4,r18,0x10
00084d2c: 24720001 addiu r18,r3,0x0001			r18 = counter + 2
00084d30: 3282ffff andi r2,r20,0xffff			r2 = animation
00084d34: 00021080 sll r2,r2,0x02			r2 = animation * 4
00084d38: 00561021 addu r2,r2,r22			r2 = SEQ + anim * 4
00084d3c: 00042403 sra r4,r4,0x10			r4 = counter
00084d40: 00031c00 sll r3,r3,0x10			
00084d44: 8c420008 lw r2,0x0008(r2)			load unit anim's command pointer
00084d48: 00031c03 sra r3,r3,0x10			r3 = r18 + 1
00084d4c: 00442021 addu r4,r2,r4			pointer to 3rd byte
00084d50: 00431021 addu r2,r2,r3			pointer to 4th byte
00084d54: 90900000 lbu r16,0x0000(r4)			load 3rd byte
00084d58: 90510000 lbu r17,0x0000(r2)			Load 4th byte
00084d5c: 16000004 bne r16,r0,0x00084d70		#branch if ? is not 0
00084d60: 00101040 sll r2,r16,0x01				|r2 = 3rd byte * 2
00084d64: 0c011282 jal 0x00044a08				|error jump thing.
00084d68: 3404000d ori r4,r0,0x000d				|move r4 to r5
00084d6c: 00101040 sll r2,r16,0x01				|r2 = ? * 2
00084d70: 00501021 addu r2,r2,r16			#r2 = 3rd byte * 3
00084d74: 00021100 sll r2,r2,0x04			r2 = 3rd byte * 0x30
00084d78: 244201d8 addiu r2,r2,0x01d8			r2 = 3rd byte * 0x30 + 0x1d8
00084d7c: 02621021 addu r2,r19,r2			r2 = WEP1 data (usually)
00084d80: 34080001 ori r8,r0,0x0001
00084d84: a448000a sh r8,0x000a(r2)			saves 1 to anim frame length
00084d88: a4510004 sh r17,0x0004(r2)			Save weapon animation
00084d8c: a4400006 sh r0,0x0006(r2)			clear increment
00084d90: a4400012 sh r0,0x0012(r2)			clear frame delay
00084d94: a4400014 sh r0,0x0014(r2)			clear weapon rotation
00084d98: a4400016 sh r0,0x0016(r2)			clear ?
00084d9c: 08021233 j 0x000848cc			queue next command
00084da0: a4480000 sh r8,0x0000(r2)			save 1 to graphic trigger

Wait

00084da4: 26460001 addiu r6,r18,0x0001			r6 = counter + 1
00084da8: 00122400 sll r4,r18,0x10
00084dac: 24d20001 addiu r18,r6,0x0001			r18 = counter + 2
00084db0: 3282ffff andi r2,r20,0xffff			r2 = animation
00084db4: 00021080 sll r2,r2,0x02			anim * 4
00084db8: 00561021 addu r2,r2,r22			seq data pointer
00084dbc: 00042403 sra r4,r4,0x10			r4 = counter
00084dc0: 8c430008 lw r3,0x0008(r2)			pointer to frame commands
00084dc4: 00061400 sll r2,r6,0x10
00084dc8: 00021403 sra r2,r2,0x10			r2 = counter + 1
00084dcc: 00642021 addu r4,r3,r4			position of 3rd command byte
00084dd0: 00621821 addu r3,r3,r2			position of 4th command byte
00084dd4: 90820000 lbu r2,0x0000(r4)			load 3rd byte
00084dd8: 90640000 lbu r4,0x0000(r3)			load 4th
00084ddc: 96a30016 lhu r3,0x0016(r21)			load 16th byte of sprite data
00084de0: 00021600 sll r2,r2,0x18			
00084de4: 1060000b beq r3,r0,0x00084e14		#branch if timer is still blank
00084de8: 00022e03 sra r5,r2,0x18				|r5 = 3rd byte
00084dec: 96a20016 lhu r2,0x0016(r21)				|
00084df0: 00000000 nop						|
00084df4: 2442ffff addiu r2,r2,0xffff				|
00084df8: a6a20016 sh r2,0x0016(r21)				|save third byte as 0x16 byte in sprite data
00084dfc: 3042ffff andi r2,r2,0xffff				|
00084e00: 1040feb3 beq r2,r0,0x000848d0			|branch if timer reaches 0
00084e04: 3282ffff andi r2,r20,0xffff				|r2 = animation
00084e08: 24c2fffd addiu r2,r6,0xfffd				|
00084e0c: 08021233 j 0x000848cc				|queue next command
00084e10: 00a29021 addu r18,r5,r2				|counter + 3rd byte - 2
00084e14: 24c2fffd addiu r2,r6,0xfffd			#counter - 2
00084e18: 00a29021 addu r18,r5,r2			counter + 3rd byte - 2
00084e1c: 08021233 j 0x000848cc			queue next command
00084e20: a6a40016 sh r4,0x0016(r21)			store 4th byte as wait frames

UNKNOWN1

00084e24: 3284ffff andi r4,r20,0xffff			r4 = anim
00084e28: 00042080 sll r4,r4,0x02			anim * 4
00084e2c: 00962021 addu r4,r4,r22			seq data pointer
00084e30: 00121400 sll r2,r18,0x10
00084e34: 00021403 sra r2,r2,0x10			r2 = counter
00084e38: 26450001 addiu r5,r18,0x0001			r5 = counter + 1
00084e3c: 8c830008 lw r3,0x0008(r4)			frame command pointer
00084e40: 24b20001 addiu r18,r5,0x0001			r18 = counter + 2
00084e44: 00621821 addu r3,r3,r2			location of third byte
00084e48: 90620000 lbu r2,0x0000(r3)			load third command byte
00084e4c: 96630058 lhu r3,0x0058(r19)			load ? from vector data?
00084e50: 00021600 sll r2,r2,0x18			
00084e54: 00021603 sra r2,r2,0x18
00084e58: 00431021 addu r2,r2,r3			load command byte and ? vector
00084e5c: a6620058 sh r2,0x0058(r19)			save again
00084e60: 00051400 sll r2,r5,0x10
00084e64: 8c830008 lw r3,0x0008(r4)			frame command pointer
00084e68: 00021403 sra r2,r2,0x10			r2 = counter + 1
00084e6c: 00621821 addu r3,r3,r2
00084e70: 90620000 lbu r2,0x0000(r3)			4th command byte
00084e74: 9663005a lhu r3,0x005a(r19)			load more vector
00084e78: 00021600 sll r2,r2,0x18
00084e7c: 00021603 sra r2,r2,0x18
00084e80: 00431021 addu r2,r2,r3			add vector and 4th command byte
00084e84: 08021233 j 0x000848cc			queue next command
00084e88: a662005a sh r2,0x005a(r19)			save more vector

Save Y Spin

00084e8c: 26430001 addiu r3,r18,0x0001			r3 = counter + 1
00084e90: 00122400 sll r4,r18,0x10
00084e94: 24720001 addiu r18,r3,0x0001			r18 = counter + 2
00084e98: 3282ffff andi r2,r20,0xffff			r2 = anim
00084e9c: 00021080 sll r2,r2,0x02			anim * 4
00084ea0: 00561021 addu r2,r2,r22			seq data pointer
00084ea4: 00042403 sra r4,r4,0x10			r4 = counter
00084ea8: 00031c00 sll r3,r3,0x10
00084eac: 8c420008 lw r2,0x0008(r2)			load frame command pointer
00084eb0: 00031c03 sra r3,r3,0x10
00084eb4: 00442021 addu r4,r2,r4			location of 3rd command byte
00084eb8: 00431021 addu r2,r2,r3			location of 4th command byte
00084ebc: 90420000 lbu r2,0x0000(r2)			load third command byte
00084ec0: 90840000 lbu r4,0x0000(r4)			load fourth command byte
00084ec4: 8ea3002c lw r3,0x002c(r21)			loads ? display pointer
00084ec8: 00021200 sll r2,r2,0x08			move 3rd byte to upper byte of halfword
00084ecc: 00822025 or r4,r4,r2				combines two commands
00084ed0: 08021233 j 0x000848cc			queue next command
00084ed4: a464000c sh r4,0x000c(r3)			save new rotation

Move Unit Down+/Up-, Right+/Left-, Forward+/Back-

00084ed8: 02602021 addu r4,r19,r0			r4 = misc unit data pointer
00084edc: 3291ffff andi r17,r20,0xffff			r17 = animation
00084ee0: 00118880 sll r17,r17,0x02			anim * 4
00084ee4: 02368821 addu r17,r17,r22			Seq data pointer
00084ee8: 00121400 sll r2,r18,0x10
00084eec: 00021403 sra r2,r2,0x10			r2 = counter
00084ef0: 8e230008 lw r3,0x0008(r17)			frame command pointer
00084ef4: 26500001 addiu r16,r18,0x0001		r16 = counter + 1
00084ef8: 00621821 addu r3,r3,r2			Location of 3rd byte
00084efc: 80650000 lb r5,0x0000(r3)			third byte
00084f00: 0c0211ac jal 0x000846b0			--> Move Unit Right+/Left- Knockback? moving?
00084f04: 26120002 addiu r18,r16,0x0002		increment counter again
00084f08: 00101400 sll r2,r16,0x10
00084f0c: 8e230008 lw r3,0x0008(r17)			frame command pointer
00084f10: 00021403 sra r2,r2,0x10			r2 = counter + 1
00084f14: 00621821 addu r3,r3,r2			Location of 4th byte
00084f18: 80650000 lb r5,0x0000(r3)			load 4th byte
00084f1c: 0c0211d6 jal 0x00084758			--> Move Unit Down+/Up- the definitely not float routine
00084f20: 02602021 addu r4,r19,r0			r4 = misc unit data pointer
00084f24: 26100001 addiu r16,r16,0x0001		r16 = counter + 2
00084f28: 00108400 sll r16,r16,0x10
00084f2c: 8e220008 lw r2,0x0008(r17)			frame command pointer again
00084f30: 00108403 sra r16,r16,0x10
00084f34: 00501021 addu r2,r2,r16			location of 5th byte
00084f38: 80450000 lb r5,0x0000(r2)			load 5th byte
00084f3c: 0c0211dc jal 0x00084770			--> Move Unit Forward+/Back-
00084f40: 02602021 addu r4,r19,r0			r4 = unit misc data pointer
00084f44: 08021234 j 0x000848d0			queue next command
00084f48: 3282ffff andi r2,r20,0xffff			r2 = animation

Nop 3 Args

00084f4c: 08021233 j 0x000848cc			queue next command
00084f50: 26520003 addiu r18,r18,0x0003		skip ahead 3 bytes

Move Forward 1

00084f54: 02602021 addu r4,r19,r0			r4 = unit misc data
00084f58: 0c0211dc jal 0x00084770			--> 00084770 - 00084814
00084f5c: 34050001 ori r5,r0,0x0001			r5 = 1
00084f60: 08021234 j 0x000848d0			queue next command
00084f64: 3282ffff andi r2,r20,0xffff			r2 = animation

Move Forward 2

00084f68: 02602021 addu r4,r19,r0			r4 = unit misc data
00084f6c: 0c0211dc jal 0x00084770			--> 00084770 - 00084814
00084f70: 34050002 ori r5,r0,0x0002			r5 = 2
00084f74: 08021234 j 0x000848d0			queue next command
00084f78: 3282ffff andi r2,r20,0xffff			r2 = animation

Move Down 1

00084f7c: 02602021 addu r4,r19,r0			r4 = unit Misc data
00084f80: 0c0211d6 jal 0x00084758			--> 00084758 - 0008476c the definitely not float routine
00084f84: 34050001 ori r5,r0,0x0001			r5 = 1
00084f88: 08021234 j 0x000848d0			queue next command
00084f8c: 3282ffff andi r2,r20,0xffff			r2 = animation

Move Down 2

00084f90: 02602021 addu r4,r19,r0
00084f94: 0c0211d6 jal 0x00084758			--> 00084758 - 0008476c the definitely not float routine
00084f98: 34050002 ori r5,r0,0x0002
00084f9c: 08021234 j 0x000848d0			queue next command
00084fa0: 3282ffff andi r2,r20,0xffff

Move Backward 1

00084fa4: 02602021 addu r4,r19,r0
00084fa8: 0c0211dc jal 0x00084770			--> 00084770 - 00084814
00084fac: 2405ffff addiu r5,r0,0xffff			r5 = -1
00084fb0: 08021234 j 0x000848d0
00084fb4: 3282ffff andi r2,r20,0xffff

Move Backward 2

00084fb8: 02602021 addu r4,r19,r0
00084fbc: 0c0211dc jal 0x00084770			--> 00084770 - 00084814
00084fc0: 2405fffe addiu r5,r0,0xfffe			r5 = -2
00084fc4: 08021234 j 0x000848d0
00084fc8: 3282ffff andi r2,r20,0xffff

Move Up 1

00084fcc: 02602021 addu r4,r19,r0
00084fd0: 0c0211d6 jal 0x00084758			--> 00084758 - 0008476c the definitely not float routine
00084fd4: 2405ffff addiu r5,r0,0xffff			r5 = -1
00084fd8: 08021234 j 0x000848d0
00084fdc: 3282ffff andi r2,r20,0xffff

Move Up 2

00084fe0: 02602021 addu r4,r19,r0
00084fe4: 0c0211d6 jal 0x00084758			--> 00084758 - 0008476c the definitely not float routine
00084fe8: 2405fffe addiu r5,r0,0xfffe			r5 = -2
00084fec: 08021234 j 0x000848d0
00084ff0: 3282ffff andi r2,r20,0xffff

Load Move-Find Item

00084ff4: 34020001 ori r2,r0,0x0001			r2 = 1
00084ff8: 08021233 j 0x000848cc			queue next command
00084ffc: a26202d0 sb r2,0x02d0(r19)			save 1 to item display

Unload Move-Find Item

00085000: 08021233 j 0x000848cc
00085004: a26002d0 sb r0,0x02d0(r19)			save 0 to item display?

Wait For Controller Input

00085008: 3c02800a lui r2,0x800a
0008500c: 8c428db8 lw r2,-0x7248(r2)			post action check?
00085010: 00000000 nop
00085014: 10400043 beq r2,r0,0x00085124		@branch if 0
00085018: 3282ffff andi r2,r20,0xffff			r2 = animation
0008501c: 08021234 j 0x000848d0			queue next command
00085020: 26520001 addiu r18,r18,0x0001		r18 = counter + 1

Play Attack Sound as Per Weapon Type

00085024: 02401021 addu r2,r18,r0			r2 = counter
00085028: 26520001 addiu r18,r18,0x0001		r18 = counter + 1
0008502c: 3283ffff andi r3,r20,0xffff			r3 = animation
00085030: 00031880 sll r3,r3,0x02
00085034: 00761821 addu r3,r3,r22
00085038: 00021400 sll r2,r2,0x10
0008503c: 8c630008 lw r3,0x0008(r3)			frame command pointer
00085040: 00021403 sra r2,r2,0x10
00085044: 00621821 addu r3,r3,r2
00085048: 90650000 lbu r5,0x0000(r3)			third frame command
0008504c: 0c020988 jal 0x00082620			--> 00082620 - 00082788
00085050: 02602021 addu r4,r19,r0			r4 = misc unit data
00085054: 08021234 j 0x000848d0
00085058: 3282ffff andi r2,r20,0xffff			r2 = animation

Weapon Sheathe Check 1

0008505c: 3c028009 lui r2,0x8009
00085060: 8c42612c lw r2,0x612c(r2)			weapon sheathe check
00085064: 34080001 ori r8,r0,0x0001
00085068: 1048002e beq r2,r8,0x00085124		@branch if 1
0008506c: 3282ffff andi r2,r20,0xffff
00085070: 08021234 j 0x000848d0			queue next command otherwise
00085074: 26520001 addiu r18,r18,0x0001		counter + 1

Set Move-Find Item Position

00085078: 3284ffff andi r4,r20,0xffff			r4 = animation
0008507c: 00042080 sll r4,r4,0x02			anim * 4
00085080: 00962021 addu r4,r4,r22
00085084: 00121400 sll r2,r18,0x10
00085088: 8c830008 lw r3,0x0008(r4)			frame command pointer
0008508c: 00021403 sra r2,r2,0x10
00085090: 00621821 addu r3,r3,r2
00085094: 90620000 lbu r2,0x0000(r3)			3rd frame command
00085098: 26450001 addiu r5,r18,0x0001			r5 = counter + 1
0008509c: a26202d2 sb r2,0x02d2(r19)			save 3rd byte to whatever this is lmao
000850a0: 00051400 sll r2,r5,0x10
000850a4: 8c830008 lw r3,0x0008(r4)			frame command pointer again
000850a8: 00021403 sra r2,r2,0x10
000850ac: 00621821 addu r3,r3,r2
000850b0: 90620000 lbu r2,0x0000(r3)			4th byte
000850b4: 24b20001 addiu r18,r5,0x0001			counter + 2
000850b8: 08021233 j 0x000848cc
000850bc: a26202d3 sb r2,0x02d3(r19)			save 4th byte to whatever that is lmao

Queue Secondary Sprite Distortion/Movement Animation

000850c0: 3284ffff andi r4,r20,0xffff			r4 = anim
000850c4: 00042080 sll r4,r4,0x02			anim * 4
000850c8: 00962021 addu r4,r4,r22
000850cc: 00121400 sll r2,r18,0x10
000850d0: 8c830008 lw r3,0x0008(r4)			frame command pointer
000850d4: 00021403 sra r2,r2,0x10
000850d8: 00621821 addu r3,r3,r2
000850dc: 90620000 lbu r2,0x0000(r3)			3rd command byte
000850e0: 26450001 addiu r5,r18,0x0001			r5 = counter + 1
000850e4: 24420002 addiu r2,r2,0x0002			r2 = 3rd byte + 2
000850e8: a2620087 sb r2,0x0087(r19)			Store 3rd byte as distortion type
000850ec: 00051400 sll r2,r5,0x10
000850f0: 8c830008 lw r3,0x0008(r4)			frame command pointer
000850f4: 00021403 sra r2,r2,0x10
000850f8: 00621821 addu r3,r3,r2
000850fc: 90620000 lbu r2,0x0000(r3)			4th byte
00085100: 24b20001 addiu r18,r5,0x0001			counter + 2
00085104: ae600088 sw r0,0x0088(r19)			clear distortion counter
00085108: 08021233 j 0x000848cc
0008510c: ae62008c sw r2,0x008c(r19)			save 4th byte as distortion variable (temp, per distort anim.)

Wait For Sprite Distortion/Movement Animation

00085110: 92620087 lbu r2,0x0087(r19)			load distortion animation check
00085114: 00000000 nop
00085118: 10400015 beq r2,r0,0x00085170		#branch if distortion animation is complete
0008511c: 00000000 nop						|
00085120: 3282ffff andi r2,r20,0xffff				|r2 = animation
00085124: 00021080 sll r2,r2,0x02				@command 0xffd3 and 0xffc6 branch here
00085128: 00561021 addu r2,r2,r22				|
0008512c: 00121c00 sll r3,r18,0x10				|
00085130: 8c420008 lw r2,0x0008(r2)				|frame command pointer
00085134: 00031c03 sra r3,r3,0x10				|
00085138: 00431021 addu r2,r2,r3				|
0008513c: 90420000 lbu r2,0x0000(r2)				|load 3rd byte
00085140: 00000000 nop						|
00085144: 00021600 sll r2,r2,0x18				|
00085148: 00022e03 sra r5,r2,0x18				|move 3rd byte to r5
0008514c: 2642fffe addiu r2,r18,0xfffe				|r2 = counter - 2
00085150: 08021233 j 0x000848cc				|queue next command
00085154: 00a29021 addu r18,r5,r2				|r18 = counter - 2 + 3rd byte

Is this... erroneous?

00085158: 0c01fc90 jal 0x0007f240				|0007f240 - 0007f2a8
0008515c: 02602021 addu r4,r19,r0				|r4 = unit misc data
00085160: 08021234 j 0x000848d0				|queue next command
00085164: 3282ffff andi r2,r20,0xffff				|r2 = animation

Initialise ?

00085168: 08021233 j 0x000848cc				|queue next command
0008516c: ae6002e8 sw r0,0x02e8(r19)				|clears 'unused section'.

Nop 1 arg

00085170: 08021233 j 0x000848cc			#queue next command
00085174: 26520001 addiu r18,r18,0x0001		counter + 1

Return Error & Finish Animation

00085178: 08021231 j 0x000848c4			queue some error check, deletes weapons if check is triggered. unsure about units.
0008517c: 3404000d ori r4,r0,0x000d			r4 = 0xd

Load Frame and Wait

00085180: 00021403 sra r2,r2,0x10			continues moving counter to r2
00085184: 00a21021 addu r2,r5,r2			r2 = location of 1st byte
00085188: 96a30014 lhu r3,0x0014(r21)			load frame offset
0008518c: 90420000 lbu r2,0x0000(r2)			load 2nd byte
00085190: 26440001 addiu r4,r18,0x0001			r4 = counter + 1
00085194: 13c00011 beq r30,r0,0x000851dc		#branch if wait frames = 0
00085198: 00628021 addu r16,r3,r2				|absolute frame (to load, command frame + frame offset)
0008519c: 00041400 sll r2,r4,0x10				|
000851a0: 00021403 sra r2,r2,0x10				|r2 = counter + 1
000851a4: 00a21021 addu r2,r5,r2				|location of 2nd byte
000851a8: 90420000 lbu r2,0x0000(r2)				|load 2nd byte
000851ac: 96a30012 lhu r3,0x0012(r21)				|load frame delay
000851b0: 00000000 nop						|
000851b4: 00431021 addu r2,r2,r3				|add 2nd byte and frame delay
000851b8: a6a2000a sh r2,0x000a(r21)				|save to amount of frames to not update sprite
000851bc: 96a2000a lhu r2,0x000a(r21)			#load wait frames
000851c0: 00000000 nop
000851c4: 2c420101 sltiu r2,r2,0x0101			r2 = true if wait frames < 0x101
000851c8: 14400005 bne r2,r0,0x000851e0		#branch if wait frames > 0x101
000851cc: 24920001 addiu r18,r4,0x0001				|r18 = counter + 2
000851d0: 34020001 ori r2,r0,0x0001				|r2 = 1
000851d4: 08021478 j 0x000851e0				#jump ahead
000851d8: a6a2000a sh r2,0x000a(r21)				|save 1 to wait frames if wait frames exceed 0x100
000851dc: 24920001 addiu r18,r4,0x0001				|skipped?
000851e0: 02602021 addu r4,r19,r0			#r4 = unit misc data
000851e4: 02a02821 addu r5,r21,r0			r5 = unit sprite data
000851e8: 3206ffff andi r6,r16,0xffff			r6 = load frame
000851ec: 0c021085 jal 0x00084214			--> 00084214 - 000846ac the actual graphic loading part of the graphic loading routine. the thing that. loads the rotation.
000851f0: 02e03821 addu r7,r23,r0			r7 = animation
000851f4: a6b20006 sh r18,0x0006(r21)			save counter to unit sprite data
000851f8: a6b00008 sh r16,0x0008(r21)			save first byte + speed(?) to frame (I wonder how the math works out on that one)
000851fc: a6b70004 sh r23,0x0004(r21)			save animation to unit animation
00085200: 8fbf003c lw r31,0x003c(r29)
00085204: 8fbe0038 lw r30,0x0038(r29)
00085208: 8fb70034 lw r23,0x0034(r29)
0008520c: 8fb60030 lw r22,0x0030(r29)
00085210: 8fb5002c lw r21,0x002c(r29)
00085214: 8fb40028 lw r20,0x0028(r29)
00085218: 8fb30024 lw r19,0x0024(r29)
0008521c: 8fb20020 lw r18,0x0020(r29)
00085220: 8fb1001c lw r17,0x001c(r29)
00085224: 8fb00018 lw r16,0x0018(r29)
00085228: 27bd0040 addiu r29,r29,0x0040
0008522c: 03e00008 jr r31
00085230: 00000000 nop