Difference between revisions of "SEQ & Animation info page"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m
m
 
(48 intermediate revisions by the same user not shown)
Line 1: Line 1:
The routine: [[Load WEP graphic from WEP1 Sheet]] references this table to load a series of commands (otherwise named 'frame commands') that vary in width depending on various inputs - but they seem mostly independent as commands. This page is an attempt to catalogue their effects. The pointer to these commands is located in SEQ Data, at address 0x800be74c + Weapon animation * 4.
+
SEQ (Sequence) files contain the information to animate a [[unit]] or a [[weapon and its effect]]. While [[SHP]] files contain the breakdown of each frame, Sequence files describe how they are strung together, plus some additional commands that dictate sound, loading graphics related to the unit, and sliding the unit graphic on the screen, among others.
  
 +
==Section 1==
 +
Using Type 1 SEQ as an example:
 +
          AA AA BB BB
 +
00000000: 78 00 FF 00
 +
These first few bytes dictate some specifics regarding unit interactions. In RAM, they are expanded to take up a word of space each.
 +
*AA - This number tells the game to set an animation for the target as well as an animation for the attacker. this animation puts them standing upright, and may be overridden by damage or dodging.
 +
*BB - This number tells the game to stop this process.
  
Leading Byte:
+
==Section 2==
0xff -> this byte seems to indicate that the operand of this command is an extra byte long? it pairs with the following secondary bytes to jump to other positions in the WEP graphic loading routine:
+
          Animation 1|Animation 2|Animation 3|Animation 4|...
      0xd3 -> Despite being a command that is technically skipped over, it has a unique branch to a part of the routine. it checks if the weapon sheath byte is 1, and if it is, queues the next command. however if it is 1, then it will do the same funky command repeating that 0xd6 does, with the third byte.
+
00000004: 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 ...
      0xd4 & 0xda -> some kind of checking operand? will clear 0x8004C6C4 regardless of inputs, then loads the next command, ignoring the next byte.
+
These are all pointers to animations. This section is always exactly 0x400 bytes long.
      0xd5 -> currently unsure
 
      0xd6 -> Queues a check of the value at 0x8009612c (Animation finishing?). arbitrarily set to a value of 2, however this command continues to check every frame that the animation is finishing, (until it's no longer called). based on the value of the third byte, this frame command repeats the last few commands of the animation, until it returns that the weapon is being sheathed, then it calls that. Weapon Sheath check?
 
      0xd7, 0xe3, 0xe4, 0xe9, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf3, 0xf4, 0xf5 -> increments r17 by 1. no other known effect. continues next command without considering third byte.
 
      0xd8 -> saves the value in the third byte to weapon rotation byte (misc unit data). Save rotation ##?
 
      0xd9 -> jumps directly to [[Set evade type data, item and throw stone hardcoding]], and continues next command from the top. Hence I can probably conclude that command 0xffd9## is 'Queue-throw animation'
 
      0xdb -> currently unsure
 
      0xdc -> This forces r17 to be the value at the byte 0x10 from the start of WEP Sprite data, and loads weapon animation from WEP1 data (rather than r22). Queues the next command in the list. this is probably related to a hardcoded weapon animation slot, and less specifically a specific weapon animation. acts as a kind of jump, I guess.
 
      0xdd -> saves information regarding the current animation to WEP1 data (Misc unit data) and then overrides the animation with the value in the third byte. 'Override animation: ##'
 
      0xde, 0xe0, 0xe1 -> cuts command 1 byte short, and queues the next command without consideration of a third byte.
 
      0xdf -> clears ? Display data. no other known effect. continues next command without considering a third byte.
 
      0xe2 -> currently unsure
 
      0xe5 -> 4bytes long (?), saves a new spin on the Y axis into WEP1 sprite, byte 3 is in the lower byte, and byte 4 is in the upper byte. after saving this value, skips ahead 5 commands. Save Y Spin ####?
 
      0xe6, 0xe7, 0xe8, 0xea, 0xf8, 0xfb -> skips third byte of command, queues next command. no other known effect.
 
      0xeb -> I'm inclined to say this is some kind of direction check? there's an XORI in there and those are hard to think of immediate uses for. they mostly come around in brief periods of inspiration.
 
      0xec -> same deal here, but the value's changed for the command. instead of xori 0x4, is xori 0x2.
 
      0xf2 -> resets to 0, and prepares weapon, effect, or unit ($$) graphics for frame 1 of their appropriate animation (##). 'queue $$ animation ##' - 0x00 is unit (also branched over), 0x01 is WEP, and 0x02 is EFF
 
      0xf6 -> currently unsure
 
      0xf7, 0xfa -> increments r17 by 3, skipping over a whole command's worth of bytes. other effects are unknown.
 
      0xf9 -> currently unsure
 
      0xfc -> 4 bytes long, seems to save various values depending on the value of byte 0x16 in WEP1 data:
 
          0x00 -> override 0x16th byte with 4th command byte, then branches to a command, relative to the start of this command, with the value of byte 3.
 
          0x01 -> subtracts 1 from 0x16th byte, and engage next command.
 
          0x02 -> subtracts 1 from 0x16th byte, then branches to a command, relative to the start of this command, with the value of byte 3.
 
      0xfd -> identical secondary effects to d6, however the effects are guaranteed, and do not need the sheathe check. repeats last few commands of attack animation. Hold weapon?
 
      0xfe -> clears some values from WEP sprite data, and then leaves the routine, without processing another frame command.
 
      0xff -> clears exactly 1 less value than above command. other effects appear the same.  
 
  
if the lead byte is NOT 0xff, then it performs a basic 2 byte command that loads and saves weapon graphic information.
+
==Section 3==
  Lead byte -> Added to weapon rotation for this frame. values that are too high may start spilling into erroneous data.
+
          Anim0|Anim1|Anim2|Anim3|Anim4|Anim5|Animation 6 ...
second byte -> Skipped over if byte interpretation has already happened on this frame. added to frame delay for that frame.
+
  00000406: 00 00 03 00 02 00 01 00 08 00 07 00 0B 06 0A 08 ...
 +
This section contains the animation commands themselves. it stretches on until the end of the file.
  
  Potential psuedo commands?
+
 
    0x$$## -> Load rotation $$ and wait ##
+
==Noteworthy RAM locations==
    0xffd3## -> (dummied) Weapon sheath check
+
0x80094364: Weapon Change of Animation (Animation - 1 (if away from camera) / 2)
    0xffd6## -> Weapon sheath check
+
0x00 + weapon type * 3: Low swing animation
    0xffd8## -> Save rotation ##
+
0x01 + weapon type * 3: Same-height swing animation
    0xffd9#### -> Queue Throw Animation ####
+
0x02 + weapon type * 3: high swing animation
    0xffdc -> Jump to previous animation
+
- These are loaded when the unit attacks or the UnitAnim for attacking with the current/temp weapon is called.
    0xffdd## -> Override Animation: ##
+
 
    0xffe5#### -> Save Y Spin ####
+
  0x80094548: Unit, weapon, effect, and damage text layer priority quadruplets
     0xfff202## -> queue $$ animation ##
+
Every 4 words is a unique set of values (0 through 3) that govern when a certain graphic is loaded, so it is under/over other graphics. this only applies to a unit and its weapon, its swing effect, and the damage/status text.
     0xfffd## -> Hold Weapon
+
Possible values:
 +
- 0x00: unit graphic
 +
- 0x01: weapon graphic
 +
- 0x02: effect graphic
 +
- 0x03: status/damage text graphic
 +
 
 +
0x800a1c84: Location of First loaded section 3 in RAM
 +
- This location stores the animations for the unit.
 +
! To investigate ! do Arute and Kanzen have reserved spaces due to their complicated animation set?
 +
 
 +
0x800bfa30: Location of First loaded section 1 & 2 in RAM
 +
- this location stores pointers to the unit animations, which are updated according to section 2 in RAM, and the location of section 3 when it is stored in RAM.
 +
- Section 1 is stored as words here instead of halfwords, as in the file.
 +
 +
==Known SEQ Commands==
 +
*LoadFrameAndWait (Frame, Wait)
 +
- Frame
 +
- Loads the frame of animation from SHP Data
 +
- for weapons, the weapon type will dictate the 0-frame of animation, and count from there with the value.
 +
- For units, above a certain value, the second half of the spritesheet is loaded from. Above another value, swimming top half sprites, and then swimming bottom half sprites.
 +
 +
- Wait
 +
- Waits to execute the next command by the designated number of frames.
 +
 
 +
*WaitForDistort(ffc0, ##)
 +
- If no animation has been set by QueueDistortAnim(), this instruction does nothing.
 +
 +
- No Bytes (##)
 +
- loops the last ## bytes of animation (signed) if a distortion animation is currently underway
 +
 
 +
*QueueDistortAnim(ffc1, Distort ID, Var)
 +
- Queues a secondary graphic animation to trigger (such as mounting a unit, or jumping). can distort unit graphic.
 +
 +
- sets a byte check that allows WaitForDistort() to loop until the secondary animation is complete
 +
 +
- Distort ID
 +
- ID of secondary animation to trigger
 +
 +
- Var
 +
- Initial variable that has a variety of effects. typically monitors the rate at which an animation is completed.
 +
 
 +
*UnloadMFItem (ffc3)
 +
- clears Move Find Item graphic trigger
 +
 +
- Is also used for Chests and Crystals
 +
 
 +
*MFItemPos (ffc4, XX, YY)
 +
- X Pos (XX)
 +
- Sets front/back (+/-) position of item, relative to unit centre
 +
 +
- Y Pos (YY)
 +
- Sets Down/Up (+/-) position of item, relative to feet of unit
 +
 +
- Is also used for Chests and Crystals
 +
 
 +
*LoadMFItem (ffc5)
 +
- Sets Move Find Item trigger
 +
 +
- Is also used for Chests and Crystals
 +
 
 +
*WaitForInput (ffc6, ##)
 +
- No. Bytes (##)
 +
- waits for controller confirmation while looping last ## bytes of animation. Signed.
 +
 
 +
*MoveUp2 (ffcb)
 +
- Moves the unit upwards by 2 units.
 +
 
 +
*MoveUp1 (ffcc)
 +
- Moves the unit upwards by 1 unit.
 +
 
 +
*MoveBackward2 (ffcd)
 +
- Moves the unit backwards by 2 units.
 +
 
 +
*MoveBackward1 (ffce)
 +
- Moves the unit backwards by 1 unit.
 +
 
 +
*MoveDown2 (ffcf)
 +
- Moves the unit downwards by 2 units.
 +
 
 +
*MoveDown1 (ffd0)
 +
- Moves the unit downwards by 1 unit.
 +
 
 +
*MoveForward2 (ffd1)
 +
- Moves the unit forward by 2 units.
 +
 
 +
*MoveForward1 (ffd2)
 +
- Moves the unit forward by 1 unit.
 +
 
 +
*WeaponSheatheCheck1 (ffd3, ##)
 +
- No. Bytes (##)
 +
- Loops the last few command bytes until damage numbers fade. Signed.
 +
 
 +
*PlayAttackSound (ffd4, SoundID)
 +
- Sound ID
 +
- 0x00 calls woosh sound, 0x01 calls hit sound.
 +
 +
- Use for weapons or effects returns an error and deactivates the animation.
 +
 
 +
*IncrementLoop (ffd5)
 +
- Used by animations that loop. Will increment a loop counter on trigger, and loop the animation indefinitely.
 +
 
 +
*WeaponSheatheCheck2 (ffd6, ##)
 +
- No. Bytes (##)
 +
- Loops last ## command bytes until damage numbers fade. Signed
 +
 
 +
*SetFrameOffset (ffd8, Rotation)
 +
- Rotation
 +
- Sets a constant value to the frame offset (added to frames called by LoadFrameWait())
 +
 
 +
*QueueThrowAnimation (ffd9, ####)
 +
- Queues a hardcoded routine that saves thrown Item ID.
 +
 
 +
*ReturnErrorFinishAnim (ffda)
 +
- returns an error. likely no use.
 +
 
 +
*SetSlowdown (ffdb, Wait)
 +
- Wait
 +
- Sets constant slow down amount in frames. Does not persist between animations.
 +
 
 +
*ReloadAnimation (ffdc)
 +
- Reloads previously saved information about the last animation (prior to executing OverrideAnimation(ID))
 +
 
 +
*OverrideAnimation (ffdd, ID)
 +
- ID
 +
- Saves all information about the current animation to graphic data, and overrides the current animation.
 +
 
 +
*PostGenericAttack (ffde)
 +
- Calculates damage numbers to appear at the end of an animation
 +
 +
- Allows Sheathe Checks to continue animation (uncertain)
 +
 +
- if ability has a secondary particle affect (Knight break, aim, snipe, jump):
 +
- sets attack woosh colour based on weapon element, if ability has a secondary particle effect (Break equipment, Aim, Snipe, or jump)
 +
 +
- Saves appropriate dodge/block animations to target & attacker
 +
 
 +
*SetYRotation0 (ffdf)
 +
- Resets graphic rotation to 0.
 +
 
 +
*ClearShadow (ffe0)
 +
- Removes the unit's shadow
 +
 
 +
*SetShadow (ffe1)
 +
- Enable the unit's shadow
 +
 
 +
*SetLayerPriority (ffe2, LayerID)
 +
- No Notes on valid Layer ID's.
 +
 +
- for weapons/woosh effects, sets starting frame offset to LayerID. this would be useful if weapons did not already automatically set their own 0 frame based on their weapon type.
 +
 +
- for units, sets their current [[Animation layer priority]]. these priorities are found in quadruplets at 0x80094548
 +
 
 +
*SaveYSpin (ffe5, Spin)
 +
- Spin (halfword)
 +
- Saves a value directly to Y spin.
 +
 
 +
*FlipVertical (ffeb)
 +
- Flips the graphic vertically.
 +
 
 +
*FlipHorizontal (ffec)
 +
- Flips the graphic horizontally.
 +
 
 +
 
 +
*MoveUnitFB (ffee, XX)
 +
- Movement in pixels (XX)
 +
- Moves the unit forward (+) or backward (-) by XX units, relative to how they're facing.
 +
 
 +
*MoveUnitDU (ffef, YY)
 +
- Movement in pixels (YY)
 +
- Moves the unit down (+) or up (-) by YY units.
 +
 
 +
*MoveUnitRL (fff0, ZZ)
 +
- Movement in Pixels (ZZ)
 +
- Moves the unit right (+) or left (-) by ZZ units.
 +
 
 +
*QueueSpriteAnim (fff2, Graphic, ID)
 +
- Graphic
 +
- Prepares weapon (01) or effect (02) for animation.
 +
 +
- ID
 +
- The Animation of the Graphic being called.
 +
 
 +
*PlaySound(fff6, ID)
 +
- ID
 +
- the ID of the audio byte to play (only ever used in the same capacity as PlayAttackSound()?)
 +
 
 +
*MoveUnit (fffa, ZZ, YY, XX)
 +
- Movement in Pixels (ZZ, YY, XX)
 +
- Moves the unit in any/all 3 perpendicular directions. Right(+)/Left(-) by ZZ, Down(+)/Up(-) by YY, and forward(+)/backward(-) by XX.
 +
 
 +
*Wait (fffc, ##, Loops)
 +
- No. Bytes (##)
 +
- Loops last ## command bytes.
 +
 +
- Loops
 +
- The number of times to repeat those bytes.
 +
 
 +
*HoldWeapon (fffd, ##)
 +
- No. Bytes (##)
 +
- Has the same looping effect as the Sheathe checks, but without checking if the damage numbers have faded.
 +
 
 +
*EndAnimation (fffe)
 +
- Finishes the animation, deactivating the graphic.
 +
 
 +
*PauseAnimation(ffff)
 +
- Sets wait to 0, without deactivating the graphic, pausing the animation until it's ended by another process.
 +
 
 +
==Unknown SEQ commands==
 +
     0xbe -> clears some unused data?
 +
    0xbf -> jumps to somewhere with no routine recorded on the wiki.
 +
    0xc2 -> queues next command immediately. no other known purpose.
 +
    0xc7, 0xc8, 0xc9, 0xca, 0xe3, 0xe4, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xed, 0xd7, 0xf0, 0xf1, 0xf3, 0xf4, 0xf5, 0xf8, 0xfb -> skips over input value. no other known effect.
 +
    0xda -> unused command, ends animation early by deactivating graphic, potentially just unwritten.
 +
    0xf7 -> skips 3 input values. other effects are unknown.
 +
     0xf9 -> does something vectory. seems to slide the unit rapidly to the right of the screen.

Latest revision as of 10:39, 31 October 2022

SEQ (Sequence) files contain the information to animate a unit or a weapon and its effect. While SHP files contain the breakdown of each frame, Sequence files describe how they are strung together, plus some additional commands that dictate sound, loading graphics related to the unit, and sliding the unit graphic on the screen, among others.

Section 1

Using Type 1 SEQ as an example:

          AA AA BB BB
00000000: 78 00 FF 00

These first few bytes dictate some specifics regarding unit interactions. In RAM, they are expanded to take up a word of space each.

  • AA - This number tells the game to set an animation for the target as well as an animation for the attacker. this animation puts them standing upright, and may be overridden by damage or dodging.
  • BB - This number tells the game to stop this process.

Section 2

          Animation 1|Animation 2|Animation 3|Animation 4|...
00000004: 00 00 00 00 02 00 00 00 04 00 00 00 06 00 00 00 ...

These are all pointers to animations. This section is always exactly 0x400 bytes long.

Section 3

          Anim0|Anim1|Anim2|Anim3|Anim4|Anim5|Animation 6 ...
00000406: 00 00 03 00 02 00 01 00 08 00 07 00 0B 06 0A 08 ...

This section contains the animation commands themselves. it stretches on until the end of the file.


Noteworthy RAM locations

0x80094364: Weapon Change of Animation (Animation - 1 (if away from camera) / 2)
	0x00 + weapon type * 3: Low swing animation
	0x01 + weapon type * 3: Same-height swing animation
	0x02 + weapon type * 3: high swing animation
- These are loaded when the unit attacks or the UnitAnim for attacking with the current/temp weapon is called.
0x80094548: Unit, weapon, effect, and damage text layer priority quadruplets
	Every 4 words is a unique set of values (0 through 3) that govern when a certain graphic is loaded, so it is under/over other graphics. this only applies to a unit and its weapon, its swing effect, and the damage/status text.
	Possible values:
		- 0x00: unit graphic
		- 0x01: weapon graphic
		- 0x02: effect graphic
		- 0x03: status/damage text graphic
0x800a1c84: Location of First loaded section 3 in RAM
- This location stores the animations for the unit.
! To investigate ! do Arute and Kanzen have reserved spaces due to their complicated animation set?
0x800bfa30: Location of First loaded section 1 & 2 in RAM
- this location stores pointers to the unit animations, which are updated according to section 2 in RAM, and the location of section 3 when it is stored in RAM.
- Section 1 is stored as words here instead of halfwords, as in the file.

Known SEQ Commands

  • LoadFrameAndWait (Frame, Wait)
		- Frame
			- Loads the frame of animation from SHP Data
			- for weapons, the weapon type will dictate the 0-frame of animation, and count from there with the value.
			- For units, above a certain value, the second half of the spritesheet is loaded from. Above another value, swimming top half sprites, and then swimming bottom half sprites.

		- Wait
			- Waits to execute the next command by the designated number of frames.
  • WaitForDistort(ffc0, ##)
		- If no animation has been set by QueueDistortAnim(), this instruction does nothing.

		- No Bytes (##)
			- loops the last ## bytes of animation (signed) if a distortion animation is currently underway
  • QueueDistortAnim(ffc1, Distort ID, Var)
		- Queues a secondary graphic animation to trigger (such as mounting a unit, or jumping). can distort unit graphic.

		- sets a byte check that allows WaitForDistort() to loop until the secondary animation is complete

		- Distort ID
			- ID of secondary animation to trigger

		- Var
			- Initial variable that has a variety of effects. typically monitors the rate at which an animation is completed.
  • UnloadMFItem (ffc3)
		- clears Move Find Item graphic trigger

		- Is also used for Chests and Crystals
  • MFItemPos (ffc4, XX, YY)
		- X Pos (XX)
			- Sets front/back (+/-) position of item, relative to unit centre

		- Y Pos (YY)
			- Sets Down/Up (+/-) position of item, relative to feet of unit

		- Is also used for Chests and Crystals
  • LoadMFItem (ffc5)
		- Sets Move Find Item trigger

		- Is also used for Chests and Crystals
  • WaitForInput (ffc6, ##)
		- No. Bytes (##)
			- waits for controller confirmation while looping last ## bytes of animation. Signed.
  • MoveUp2 (ffcb)
		- Moves the unit upwards by 2 units.
  • MoveUp1 (ffcc)
		- Moves the unit upwards by 1 unit.
  • MoveBackward2 (ffcd)
		- Moves the unit backwards by 2 units. 
  • MoveBackward1 (ffce)
		- Moves the unit backwards by 1 unit.
  • MoveDown2 (ffcf)
		- Moves the unit downwards by 2 units.
  • MoveDown1 (ffd0)
		- Moves the unit downwards by 1 unit.
  • MoveForward2 (ffd1)
		- Moves the unit forward by 2 units.
  • MoveForward1 (ffd2)
		- Moves the unit forward by 1 unit.
  • WeaponSheatheCheck1 (ffd3, ##)
		- No. Bytes (##)
			- Loops the last few command bytes until damage numbers fade. Signed.
  • PlayAttackSound (ffd4, SoundID)
		- Sound ID
			- 0x00 calls woosh sound, 0x01 calls hit sound.

		- Use for weapons or effects returns an error and deactivates the animation.
  • IncrementLoop (ffd5)
		- Used by animations that loop. Will increment a loop counter on trigger, and loop the animation indefinitely.
  • WeaponSheatheCheck2 (ffd6, ##)
		- No. Bytes (##)
			- Loops last ## command bytes until damage numbers fade. Signed
  • SetFrameOffset (ffd8, Rotation)
		- Rotation
			- Sets a constant value to the frame offset (added to frames called by LoadFrameWait())
  • QueueThrowAnimation (ffd9, ####)
		- Queues a hardcoded routine that saves thrown Item ID.
  • ReturnErrorFinishAnim (ffda)
		- returns an error. likely no use.
  • SetSlowdown (ffdb, Wait)
		- Wait
			- Sets constant slow down amount in frames. Does not persist between animations.
  • ReloadAnimation (ffdc)
		- Reloads previously saved information about the last animation (prior to executing OverrideAnimation(ID))
  • OverrideAnimation (ffdd, ID)
		- ID
			- Saves all information about the current animation to graphic data, and overrides the current animation.
  • PostGenericAttack (ffde)
		- Calculates damage numbers to appear at the end of an animation

		- Allows Sheathe Checks to continue animation (uncertain)

		- if ability has a secondary particle affect (Knight break, aim, snipe, jump):
			- sets attack woosh colour based on weapon element, if ability has a secondary particle effect (Break equipment, Aim, Snipe, or jump)

			- Saves appropriate dodge/block animations to target & attacker
  • SetYRotation0 (ffdf)
		- Resets graphic rotation to 0.
  • ClearShadow (ffe0)
		- Removes the unit's shadow
  • SetShadow (ffe1)
		- Enable the unit's shadow
  • SetLayerPriority (ffe2, LayerID)
		- No Notes on valid Layer ID's.

		- for weapons/woosh effects, sets starting frame offset to LayerID. this would be useful if weapons did not already automatically set their own 0 frame based on their weapon type.

		- for units, sets their current Animation layer priority. these priorities are found in quadruplets at 0x80094548
  • SaveYSpin (ffe5, Spin)
		- Spin (halfword)
			- Saves a value directly to Y spin.
  • FlipVertical (ffeb)
		- Flips the graphic vertically.
  • FlipHorizontal (ffec)
		- Flips the graphic horizontally.


  • MoveUnitFB (ffee, XX)
		- Movement in pixels (XX)
			- Moves the unit forward (+) or backward (-) by XX units, relative to how they're facing.
  • MoveUnitDU (ffef, YY)
		- Movement in pixels (YY)
			- Moves the unit down (+) or up (-) by YY units.
  • MoveUnitRL (fff0, ZZ)
		- Movement in Pixels (ZZ)
			- Moves the unit right (+) or left (-) by ZZ units.
  • QueueSpriteAnim (fff2, Graphic, ID)
		- Graphic
			- Prepares weapon (01) or effect (02) for animation.

		- ID
			- The Animation of the Graphic being called.
  • PlaySound(fff6, ID)
		- ID
			- the ID of the audio byte to play (only ever used in the same capacity as PlayAttackSound()?)
  • MoveUnit (fffa, ZZ, YY, XX)
		- Movement in Pixels (ZZ, YY, XX)
			- Moves the unit in any/all 3 perpendicular directions. Right(+)/Left(-) by ZZ, Down(+)/Up(-) by YY, and forward(+)/backward(-) by XX.
  • Wait (fffc, ##, Loops)
		- No. Bytes (##)
			- Loops last ## command bytes.

		- Loops
			- The number of times to repeat those bytes.
  • HoldWeapon (fffd, ##)
		- No. Bytes (##)
			- Has the same looping effect as the Sheathe checks, but without checking if the damage numbers have faded.
  • EndAnimation (fffe)
		- Finishes the animation, deactivating the graphic.
  • PauseAnimation(ffff)
		- Sets wait to 0, without deactivating the graphic, pausing the animation until it's ended by another process.

Unknown SEQ commands

   0xbe -> clears some unused data?
   0xbf -> jumps to somewhere with no routine recorded on the wiki.
   0xc2 -> queues next command immediately. no other known purpose.
   0xc7, 0xc8, 0xc9, 0xca, 0xe3, 0xe4, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xed, 0xd7, 0xf0, 0xf1, 0xf3, 0xf4, 0xf5, 0xf8, 0xfb -> skips over input value. no other known effect.
   0xda -> unused command, ends animation early by deactivating graphic, potentially just unwritten.
   0xf7 -> skips 3 input values. other effects are unknown.
   0xf9 -> does something vectory. seems to slide the unit rapidly to the right of the screen.