If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Final Fantasy I & II: Dawn of Souls/FF1 Animation Scripting
Jump to navigation
Jump to search
This is a sub-page of Final Fantasy I & II: Dawn of Souls.
Spell and attack animations in Final Fantasy I use a shared scripting language to define how animations play out. Here follows a list of known script commands; there are many more yet to be discovered and understood.
0x00: End animation 0x4 bytes long
0x01: Execute previous commands 0x8 Bytes long And do some bookkeeping too? Repeat until all previous commands are finished? Don't load subsequent commands until that time either
0x02: Conditional Test If the conditional fails, skip to the next 0x4 or 0x3 command 0xC bytes long $00: Which $1F130 test to run $04: Test parameter (if applicable)
0x03: Failed conditional marker 1 0x04 bytes -When this is encountered after a 0x02 fail, execute all of the following chunks until an 0x4 is reached
0x04: Failed conditional marker 2 0x04 bytes -used as an end marker for failed 0x02 conditionals -Set the command after this one as the place to begin reading from -Used by Kill to skip part of its animation if it fails to inflict Death
0x05: -Used to handle spells like Blind that play an effect on individual targets before proceeding with 'main' effect -Loops for all 9 monsters or all 4 PCs, depending on who the target is -For each target, $04: Mode byte; indexes to a routine jump table $1F130 Run for each target to determine if that target will have the effect played 0x00: Return 0x1 0x01: Return 0x1 for all living targets 0x02: If caster is a monster, return 0x0; if a PC, return 0x1 0x03: If target(s) is/are monster(s), return 0x0; if targets are PC, return 0x1 0x04: Return 0x1 only on targets who are effected by the spell? (for Kill, etc?) 0x05: (same as 0x01) 0x06: Depending on Encounter ID, returns a variable: $08: Some number that becomes the Param1 of a 0x7 Chunk - delay between each iteration $0C: Number of subsequent chunks to load (these next chunks are applied to every valid target) After loading those chunks, a 0x7 Chunk is created, and the delay set to $08's value
0x06, Jump to different script offsets based on conditional 0x18 bytes -If the conditional returns 0x1, choose Branch A; if 0x0, choose Branch B $04: Delay $08: Conditional ID: $00: Return 0x1 $01: Return 0x1 if unit of parameter's ID may be targeted; else return 0x0 $02: If caster is a PC, return 0x1; if a monster, return 0x0 $03: If target(s) is/are PCs, return 0x1; if monster(s), return 0x0 $04: If target (or any among targets) received a status effect from this attack return 0x1; else 0x0 $05: Same as $01 $06: Checks encounter ID for special type; if equal to Parameter return 0x1; else 0x0 $0C: Conditional Parameter $10: Branch A offset $14: Branch B offset
0x07, Perform some animation-related bookkeeping for a targeted animation 0x8 bytes $04: Delay in frames
0x08, Play Sound: 0xC Bytes $04: Sound delay, in frames(?), from when this command is first read $08: Sound Effect ID
0x0A, Animate standing tile 0x1C Bytes $04: Spawn Delay $08: TSA/animation pointer? Affects how the tile GFX are loaded and animated $0C: More TSA/animation stuff? $10: Origin point type of GFX: 0x00: Top-left corner of screen 0x01: Center of screen 0x02: Mid-left of screen 0x03: Just above caster? 0x04: Caster 0x05: First enemy/target? 0x06: Target? 0x07: Caster? 0x08: Top-left corner of screen? $14: Y-displacement (positive is down), hw $16: X-displacement (positive is right), hw $18: Same deal as $14 in Chunk 0x17...a zoom factor??
0x0B, (used for Kill) 0x10 bytes $04: Pointer to compressed tile data $08: Some parameter...an identifier?
0x0D, Animate tile from target? 0x20 bytes $04: Spawn delay $08: TSA/animation pointer $0C: Origin point type $10: Y-displacement from origin $12: X-displacement from origin $14: ?? $18: ?? $1C: ?? (zero?)
0x0F, Animated moving object (straight line) 0x24 bytes $04: Delay $08: Tile data pointer? $0C: Origin type $10: Y starting pos $12: X starting pos $14: Some layering/zoom param: 0x10000000: Flip horizontally $18: Y-speed; positive values are down, negative are up $1A: X-speed; positive values are to the right, negative to the left $1C: Index to tile data? $20: Time, in frames, this object will last; affects speed as well
0x10, Non-animated moving object (straight line) 0x24 bytes $04: Delay $08: Tile data pointer? $0C: Some stuff to do with the origin... $10: Y origin $12: X origin $14: Y displacement (total) $16: X displacement (total) $18: Some sort of layering/zoom param? If 0x10000000, flip horizontally? $1C: Some sort of index to sprites within a spritesheet $20: Time; number of frames movement will take; lower values = faster, shorter
0x13, Animate tile 0x28 bytes $04: Delay (frames) $08: TSA/animation pointer $0C: Origin $10: Y-offset (hw) $12: X-offset $14: Some zoom factor? Same as $14 in Chunk 0x17 $18: ?? $1C: ?? $20: ?? $24: If non-0x1, tile stops animating... $26: If 0x1, tile is drawn beneath PC sprites
0x14, Draw object spiraling in 0x30 (!!) bytes long $04: Delay $08: Tile data pointer $0C: Origin type to base destination coords off of $10: Destination Y-coord $12: Destination X-coord $14: Spiral Y magnitude $16: Spiral X magnitude $18: ??? $1C: Direction/distance A and starting position on spiral $20: Direction/distance B -If A > B, go counterclockwise a distance of A - B -If A < B, go clockwise a distance of B - A -A's value also determines starting position along the spiral $24: More zoom params; same 0x10000000 bit to flip horizontally $28: Animation mode and flags? 0x400000: Flicker $2C: Total time
0x17, Animate moving tile: $04: Spawn delay, in frames, from the start of the animation $08: Some ROM pointer that affects how the GFX tiles are loaded $0C: Origin point of moving tile, to be modified by coordinates $10: Displacement from the origin for the GFX tile to emerge from $10-11: Y-coord $12-13: X-coord (both are signed) $14: Something...displacement after spawning? $18: $19-1A: $1B: Layer to draw on? (in front of/behind sprites) $1C: Path? Only values below 0x1F are accepted; indexes to a jump table of routines 0x00: Move in a circle? 0x02: Spiral outwards? 0x05: Wobble downwards (fast) 0x06: Wobble down-right (slow) 0x12: Sway up+down then change 0x16: Move to left edge of screen...or mid-left at least? 0x18: Move to right edge of screen $20: Parameter relating to the $1C param
0x1C, Load fixed tile? 0x10 bytes long $04: Anim/Tile data pointer $08: Palette pointer $0C: ?
0x1E, Something for the end of anims 0x08 bytes long $04: Delay
0x1D, load BG overlay? 0x18 bytes long $04: Delay $08: Tile data pointer $0C: Y-offset in tile data $0E: X-offset in tile data $10: ? $14: ?
0x1F, set anim data for fixed tile? 0x0C bytes long $04: Delay $08: Layering? 0x1 Draw translucently over sprites 0x2 Draw under sprites 0x3 Draw, and remove PC sprites!
0x21: Something to do with palettes...loads palette for cycling, sets the params 0x18 bytes long $04: Delay $08: Palette pointer $0C: Number of frames to play before looping $10: Palette cycling speed $14: Total time to pause before moving on
0x23: Something about activating an animation... 0x10 bytes long $04: Delay $08: Tile data pointer..?
0x24: Restore normal brightness 0x0C bytes long $04: Delay $08: Light speed
0x26: Tint spell GFX 0x18 bytes long $04: Delay $08: ? $0C: ? 0xC and 0xC makes a faded tint...
0x27: Darken screen 0x18 bytes long $04: Delay (before beginning) $08: Colour (only red?) $0C: Intensity $10: Flags: 0x00: Fade BG 0x01: Fade PCs 0x02: Fade Monsters 0x04: Fade spell animation 0x05: Fade everything? $14: Fade speed (frames) - don't move to next command until finished darkening
0x30: Create screen distortion effect (w/ extra BG layer?)
0x18 bytes long $04: Delay $08: If nonzero, don't animate $0C: Distortion frequency $10: Distortion intensity $14: What to distort?
0x00: BG only 0x01: BG and monsters 0x02: ? 0x03: ?
0x31: (BG distortion-related) 0x0C bytes long $04: Delay $08: Some modifier for BG overlay distortion pattern? very high values = less distortion
0x38: (BG effect-related) 0x0C bytes long $04: Delay $08: Y-coord? $0A: X-coord?