CFAST Disney Animation Studio
From Just Solve the File Format Problem
Revision as of 22:08, 22 June 2018 by Sigurdler
CFAST is an animated raster graphics format associated with the Disney Animation Studio application for Amiga computers.
Numbers are stored in big-endian format. 4 bytes - signature 'GUCF', 'LOCK' or 'STDY' 'LOCK' means the file was meant to be saved as final/non editable. 'STDY' means the file is one of the Animation Studio Sample files (copyright Disney) If the signature is 'LOCK' or 'STDY' then a copyright/description message follows 2 bytes string length n bytes string Then follows the bitmap header 4 bytes - image width 4 bytes - image height 4 bytes - Amiga screen width (320=lores, 640=hires) 4 bytes - Amiga screen height (200=NTSC, 256=PAL, 400=NTSC interlaced, 512=PAL interlaced) 1 byte - number of bitplanes (1..5) (numColors = 2^bitplanes) Then follows palette information for the first two colors (if there are more colors, they are specified later in the file) 3 bytes - rgb for color index 0 3 bytes - rgb for color index 1 Then follows an extra block of data of varying length 1 byte - extralen n bytes (unknown contents) Then follows the number of frames 4 bytes - numFrames Frames are compressed individually (frames are NOT delta compressed from the previous frame) for every frame for every bitplane 4 bytes - compressed size of bitplane n bytes - compressed bitplane data (Run length encoding) end of every bitplane 1 byte - numColors in frame 3*numColors bytes 1 byte - number of color cycling ranges for every range 1 byte - low color index (0..31) 1 byte - high color index (0..31) 6 bytes - unknown 4 bytes - color cycle Rate 32 bytes - color cycle color indices ? Seems to always be numbered 0,1,2,3,4...31 (regardless of # bitplanes) I don't know why these are needed, when we have low/high. end of every range end of every frame At the end of the file, there may also be exposure sheet information ... (TODO) RLE compression: Bitplanes are compressed with run length encoding. Each column of words (two bytes) are compressed separately. 2 bytes - code if code < 0 then the next word is replicated -code+1 times else code+1 words are copied literally