Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
Final Fantasy I & II: Dawn of Souls/FF1 Animation Scripting: Difference between revisions
Jump to navigation
Jump to search
(Created page with "{{subpage|game=Final Fantasy I & II: Dawn of Souls:Notes}} Spell and attack animations in Final Fantasy I use a shared scripting language to define how animations play out. He...") |
(Adding commands $3, $4, $F, $14, $1D, $30, $31, $38; also additions to $2, $B and $10) |
||
Line 12: | Line 12: | ||
Don't load subsequent commands until that time either | Don't load subsequent commands until that time either | ||
0x02: | 0x02: Conditional Test | ||
If the conditional fails, skip to the next 0x4 or 0x3 command | |||
0xC bytes long | |||
$00: Which $1F130 test to run | $00: Which $1F130 test to run | ||
$04: | $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: | 0x05: | ||
Line 52: | Line 64: | ||
$14: Branch B offset | $14: Branch B offset | ||
0x07, | 0x07, Perform some animation-related bookkeeping for a targeted animation | ||
0x8 bytes | 0x8 bytes | ||
$04: Delay in frames | $04: Delay in frames | ||
Line 60: | Line 72: | ||
$04: Sound delay, in frames(?), from when this command is first read | $04: Sound delay, in frames(?), from when this command is first read | ||
$08: Sound Effect ID | $08: Sound Effect ID | ||
0x0A, Animate standing tile | 0x0A, Animate standing tile | ||
Line 67: | Line 78: | ||
$08: TSA/animation pointer? Affects how the tile GFX are loaded and animated | $08: TSA/animation pointer? Affects how the tile GFX are loaded and animated | ||
$0C: More TSA/animation stuff? | $0C: More TSA/animation stuff? | ||
$10: Origin point of GFX: | $10: Origin point type of GFX: | ||
0x00: Top-left corner of screen | 0x00: Top-left corner of screen | ||
0x01: Center of screen | 0x01: Center of screen | ||
Line 81: | Line 92: | ||
$18: Same deal as $14 in Chunk 0x17...a zoom factor?? | $18: Same deal as $14 in Chunk 0x17...a zoom factor?? | ||
0x0B (used for Kill | 0x0B, (used for Kill) | ||
0x10 bytes | |||
$04: Pointer to compressed tile data | |||
$08: Some parameter...an identifier? | |||
0x0D, Animate tile from target? | 0x0D, Animate tile from target? | ||
Line 88: | Line 102: | ||
$08: TSA/animation pointer | $08: TSA/animation pointer | ||
$0C: Origin point type | $0C: Origin point type | ||
$10: Y-displacement | $10: Y-displacement from origin | ||
$12: X-displacement | $12: X-displacement from origin | ||
$14: ?? | $14: ?? | ||
$18: ?? | $18: ?? | ||
$1C: ?? (zero?) | $1C: ?? (zero?) | ||
0x10, | 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 | 0x24 bytes | ||
$04: Delay | $04: Delay | ||
Line 121: | Line 149: | ||
$24: If non-0x1, tile stops animating... | $24: If non-0x1, tile stops animating... | ||
$26: If 0x1, tile is drawn beneath PC sprites | $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: | 0x17, Animate moving tile: | ||
Line 152: | Line 200: | ||
0x08 bytes long | 0x08 bytes long | ||
$04: Delay | $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? | 0x1F, set anim data for fixed tile? | ||
Line 197: | Line 254: | ||
0x05: Fade everything? | 0x05: Fade everything? | ||
$14: Fade speed (frames) - don't move to next command until finished darkening | $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? |
Revision as of 22:39, 20 June 2017
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?