Difference between revisions of "SEQ & Animation info page"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m
m
Line 14: Line 14:
 
       0xdc -> Loads last saved animation number and byte pointer from Sprite data, and continues from where it was last saved. ReloadAnimation()
 
       0xdc -> Loads last saved animation number and byte pointer from Sprite data, and continues from where it was last saved. ReloadAnimation()
 
       0xdd -> Saves animation number and byte pointer to Sprite data, then queues the animation in the third byte. OverrideAnimation(##)
 
       0xdd -> Saves animation number and byte pointer to Sprite data, then queues the animation in the third byte. OverrideAnimation(##)
       0xde, 0xe0, 0xe1 -> likely unwritten commands, or used for another purpose. no-op.
+
       0xde -> after any attack, frog attack, sharpshoot, charge, or jump command (hardcoded to ability ID slots), manually set target hurt/block/dodge animation, and weapon element effect data if display data turns up not erroneous? only works as a unit animation command, not a weapon or effect command. PostGenericAttack()
 
       0xdf -> Sets graphic's Y rotation to 0. SetYRotation0()
 
       0xdf -> Sets graphic's Y rotation to 0. SetYRotation0()
 +
      0xe0, 0xe1 -> likely unwritten commands, or used for another purpose. no-op.
 
       0xe2 -> Resets frame delay based on SEQ data. ResetWait2()
 
       0xe2 -> Resets frame delay based on SEQ data. ResetWait2()
 
       0xe5 -> 4bytes long (?), saves a new spin on the Y axis into sprite, byte 3 is in the lower byte, and byte 4 is in the upper byte. SaveYSpin(####)
 
       0xe5 -> 4bytes long (?), saves a new spin on the Y axis into sprite, byte 3 is in the lower byte, and byte 4 is in the upper byte. SaveYSpin(####)
Line 44: Line 45:
 
     0xffdc    -> ReloadAnimation()
 
     0xffdc    -> ReloadAnimation()
 
     0xffdd##  -> OverrideAnimation(##)
 
     0xffdd##  -> OverrideAnimation(##)
 +
    0xffde    -> PostGenericAttack()
 
     0xffdf    -> SetYRotation0()
 
     0xffdf    -> SetYRotation0()
 
     0xffe2    -> ResetWait2()
 
     0xffe2    -> ResetWait2()

Revision as of 11:48, 27 July 2021

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.


Leading Byte:
0xff -> triggers alternate instructions:
     0xd3 -> triggers a check for the animation continuing. only repeats last (input) number of bytes if animation check is 1, otherwise continues next command. WeaponSheatheCheck1(##)
     0xd4 & 0xda -> unused commands, ends animation early by deactivating graphic, potentially just unwritten.
     0xd5 -> increments loop count by 1 after every animation loop. said animation loop seems to serve no other purpose. maybe debug tool? IncrementLoop()
     0xd6 -> queues a check for the animation continuing. repeats last (input) number of bytes if sheathe check value is not 0. WeaponSheatheCheck2(##)
     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 (input) to weapon rotation byte (misc unit data). SaveRotation(##)
     0xd9 -> jumps directly to Set evade type data, item and throw stone hardcoding, and continues next command from the top. QueueThrowAnim(##)
     0xdb -> Resets frame delay based on SEQ data. ResetWait1()
     0xdc -> Loads last saved animation number and byte pointer from Sprite data, and continues from where it was last saved. ReloadAnimation()
     0xdd -> Saves animation number and byte pointer to Sprite data, then queues the animation in the third byte. OverrideAnimation(##)
     0xde -> after any attack, frog attack, sharpshoot, charge, or jump command (hardcoded to ability ID slots), manually set target hurt/block/dodge animation, and weapon element effect data if display data turns up not erroneous? only works as a unit animation command, not a weapon or effect command. PostGenericAttack()
     0xdf -> Sets graphic's Y rotation to 0. SetYRotation0()
     0xe0, 0xe1 -> likely unwritten commands, or used for another purpose. no-op.
     0xe2 -> Resets frame delay based on SEQ data. ResetWait2()
     0xe5 -> 4bytes long (?), saves a new spin on the Y axis into sprite, byte 3 is in the lower byte, and byte 4 is in the upper byte. SaveYSpin(####)
     0xe6, 0xe7, 0xe8, 0xea, 0xf8, 0xfb -> 3 bytes long, no known effect.
     0xeb -> flips horizontal bitflag in sprite data. FlipHorizontal()
     0xec -> flips vertical bitflag in sprite data. FlipVertical()
     0xf2 -> resets to 0, and prepares weapon, effect, or unit ($$) graphics for frame 1 of their appropriate animation (##). QueueSpriteAnimation($$,##) 00 - Unit 01 - Weapon 02 - Effect
     0xf6 -> currently unsure. does something really technical with button inputs.
     0xf7, 0xfa -> increments r17 by 3, skipping over a whole command's worth of bytes. other effects are unknown.
     0xf9 -> does something vectory.
     0xfc -> 4 bytes long, seems to be some sort of timed counter. repeats last (input) bytes until (input2) counts down to 0. useful for bows? wait($$,##)
     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. HoldWeapon()
     0xfe -> clears graphic trigger and sets delay to 0, ending animation. EndAnimation()
     0xff -> Sets delay to 0, without clearing the graphic trigger, pausing the animation indefinitely. PauseAnimation() 
if the lead byte is NOT 0xff, then it performs a basic 2 byte command saving Weapon Rotation and the number of frames to hold in this rotation for. 0 wait frames is indefinite, unless sprite data has specified otherwise. LoadRotationWait($$,##)
   psuedo commands?
   0x$$##     -> LoadRotationWait($$,##)
   0xffd3##   -> WeaponSheatheCheck1(##)
   0xffd4     -> ReturnErrorFinishAnim1()
   0xffd5     -> IncrementLoop()
   0xffd6##   -> WeaponSheatheCheck2(##)
   0xffd8##   -> SaveRotation(##)
   0xffd9#### -> QueueThrowAnimation(####)
   0xffda     -> ReturnErrorFinishAnim2()
   0xffdb     -> ResetWait1()
   0xffdc     -> ReloadAnimation()
   0xffdd##   -> OverrideAnimation(##)
   0xffde     -> PostGenericAttack()
   0xffdf     -> SetYRotation0()
   0xffe2     -> ResetWait2()
   0xffe5#### -> SaveYSpin(####)
   0xffeb     -> FlipHorizontal()
   0xffec     -> FlipVertical()
   0xfff2$$## -> QueueSpriteAnim($$,##)
   0xfffc$$## -> Wait($$,##)
   0xfffd##   -> HoldWeapon(##)
   0xfffe     -> EndAnimation()
   0xffff     -> PauseAnimation()