The FLT File Format

Also known as: FLC, FLIC


Original Documentation

The FLC files are files created by the Autodesk Animator Pro and contain
animations. The FLC files are a superset of those created by the Autodesk
Animator (FLIc files). In some cases, new data fields or compression methods
were added. The FLC files use a hierarchical block oriented structure and blocks
are a combination of control information and data. The file consists of one
header followed by data blocks. It is possible that new types of blocks not
described in this document will be added to animation files in the future. It is
recommended that you quietly ignore unknown block types you encounter during
animation playback.  The size fields in the block headers make it easy to skip
an entire unrecognized block.

The FLC files consist of one 128-byte header block and one or more of the
following blocks :

The prefix block, if present, contains Animator Pro settings information,
CEL placement information, and other auxiliary data.

A frame block exists for each frame in the animation. In addition, a ring frame
follows all the animation frames. Each frame block contains color palette
information and/or pixel data.

The ring frame contains delta-compressed information to loop from the last frame
of the flic back to the first. It can be helpful to think of the ring frame as a
copy of the first frame, compressed in a different way. All flic files will
contain a ring frame, including a single-frame flic.

The FLC file header

OFFSET              Count TYPE   Description
0000h                   1 dword  The size of the whole animation file, including
								 the size of this header.
0004h                   1 word   ID=0AF12h
0006h                   1 word   Number of frames in this animation, not
								 including the ring frame. FLC files have a
								 maximum length of 4000 frames.
0008h                   1 word   Screen width in pixels
000Ah                   1 word   Screen height in pixels
000Ch                   1 word   Bits per pixel (always 8)
000Eh                   1 word   Flags - bitmapped
								 0 - Ring frame not written / ring frame written
								 1 - Flic header not updated / updated
							  2-15 - reserved
0010h                   1 dword  Delay between frames in miliseconds.
0014h                   1 word   reserved
0016h                   1 dword  MS-DOS date and time of file creation (see table 0009)
001Ah                   1 dword  Serial number of the Animator Pro program used
								 to create the file. If the file was created
								 with the FlicLib development kit, this value
								 equals 0464c4942h ("FLIB").
001Eh                   1 dword  MS-DOS date and time of last modification (see table 0009)
0022h                   1 dword  Serial number of program that made the last
								 modification. See Serial Number.
0026h                   1 word   X-axis aspect ratio of the file
0028h                   1 word   Y-axis aspect ratio of the file
								 (320x200 = 6:5)
002Ah                  38 byte   reserved (0)
0050h                   1 dword  Offset from begin of file to the first
								 animation frame block.
0054h                   1 dword  Offset from begin of file to the second
								 animation frame block. This value is used
								 when looping the animation.
0058h                  40 byte   reserved (0)

Each subblock in the animation file has an identical header structure,
which is formatted like this :
0000h                   1 dword  The size of the whole block and all subordinate
								 blocks including the size of this header
0004h                   1 word   Block ID, varies depending on the block type.
0006h                   1 word   Number of subordinate blocks in this block.
								 including the ring frame. FLC files have a
								 maximum length of 4000 frames.
0008h                   8 byte   reserved(0)

Immediately after the header there may be an optional prefix block, which is
used to store additional data which is not directly involved in animation
playback.

The prefix block has the usual header with an ID of 0F100h.
The prefix block should only be created by the Animator Pro programs and never
by any other software, it is to be ignored by other software.

The FLC frame blocks contain the information to convert the current frame into
the next frame; they have an ID of 0F1FAh. Directly after the frame header,
there are the subordinate data blocks - if the subblock count is 0 this means,
that the current frame is identical to the previous frame, only the appropriate
delay has to be made.
The data blocks have a different header format :
OFFSET              Count TYPE   Description
0000h                   1 dword  Size of this block, including header size
0004h                   1 word   Data type identifier :
								  4 - 256-level color palette info
								  7 - Word-oriented delta compression
								 11 - 64-level color palette info
								 12 - Byte-oriented delta compression
								 13 - Entire frame is color index 0
								 15 - Byte run length compression
								 16 - No compression
								 18 - Postage stamp sized image
0006h                   ? byte   Color or pixel data

The following sections describe each of these data encoding methods in detail.

--- Block Type  4 (FLI_COLOR256) - 256-Level Color

The data in this block is organized in packets.  The first word following the
block header is a count of the number of packets in the blocks. Each packet
consists of a one-byte color index skip count, a one-byte color count and three
bytes of color information for each color defined.

At the start of the block, the color index is assumed to be zero. Before
processing any colors in a packet, the color index skip count is added to the
current color index.  The number of colors defined in the packet is retrieved.
A zero in this byte indicates 256 colors follow. The three bytes for each color
define the red, green, and blue components of the color in that order. Each
component can range from 0 (off) to 255 (full on).  The data to change colors
2,7,8, and 9 would appear as follows:

	 2                      ; two packets
	 2,1,r,g,b              ; skip 2, change 1
	 4,3,r,g,b,r,g,b,r,g,b  ; skip 4, change 3

--- Block Type 11 (FLI_COLOR) - 64-Level Color

This block is identical to FLI_COLOR256 except that the values for the red,
green and blue components are in the range of 0-63 instead of 0-255, i.e. in
native VGA values which can be written to the VGA without modification.

--- Block Type 13 (FLI_BLACK) - No Data
This block has no data following the header. All pixels in the frame are set to
color index 0.

--- Block Type 16 (FLI_COPY) - No Compression

This block contains an uncompressed raw image of the frame, from upper left
to the lower right, storing each line sequentially. This type of block is
created when the preferred compression method (SS2 or BRUN) generates more
data than the uncompressed frame image; a relatively rare situation.

--- Block Type 15 (FLI_BRUN) - Byte Run Length Compression

This block contains the entire image in a compressed format. Usually this block
is used in the first frame of an animation, or within a postage stamp image
block.

The data is organized in lines. Each line contains packets of compressed pixels.
The first line is at the top of the animation, followed by subsequent lines
moving downward. The number of lines in this block is given by the height of the
animation.

The first byte of each line is a count of packets in the line. This value is
ignored, it is a holdover from the original Animator. It is possible to generate
more than 255 packets on a line. The width of the animation is now used to drive
the decoding of packets on a line; continue reading and processing packets until
width pixels have been processed, then proceed to the next line.

Each packet consist of a type/size byte, followed by one or more pixels. If the
number is negative (the high bit of the packet type is set), the absolute value
is the count of pixels to be copied from the packet to the animation image,
otherwise the next byte contains a single pixel which is to be replicated;
The lower 7 bits are the number of times the pixel is to be replicated.

--- Block Type 12 (FLI_LC) - Byte Aligned Delta Compression

This block contains the differences between the previous frame and this frame.
This compression method was used by the original Animator, but is not created by
Animator Pro. This type of block can appear in an Animator Pro file, however, if
the file was originally created by Animator, then some (but not all) frames were
modified using Animator Pro.

The first word following the block header contains the position of the first
line in the block. This is a count of lines (down from the top of the image)
which are unchanged from the prior frame. The second word contains the number of
lines in the block. The data for the lines follows these two words.

Each line begins with two bytes. The first byte contains the starting x position
of the data on the line, and the second byte the number of packets for the line.
Unlike BRUN compression, the packet count is significant (because this
compression method is only used on 320x200 flics).

Each packet consists of a single byte column skip, followed by a packet type/
size byte, which has the reverse meaning of in the block type 15.

--- Block Type  7 (FLI_SS2) - Word Aligned Delta Compression

This format contains the differences between consecutive frames. This is the
format most often used by Animator Pro for frames other than the first frame of
an animation. It is similar to the line coded delta (LC) compression, but is
word oriented instead of byte oriented. The data is organized into lines and
each line is organized into packets.

The first word in the data following the block header contains the number of
lines in the block. Each line can begin with some optional words that are used
to skip lines and set the last byte in the line for animations with odd widths.
These optional words are followed by a count of the packets in the line. The
line count does not include skipped lines.

The high order two bits of the word is used to determine the contents of
the word :

	 Bit 15  Bit 14       Meaning

	   0      0           The word contains the packet count. The packets follow
						  this word. The packet count can be zero; this occurs
						  when only the last pixel on a line changes.

	   1      0           The low order byte is to be stored in the last byte of
						  the current line. The packet count always follows this
						  word.

	   1      1           The word contains a line skip count. The number of
						  lines skipped is given by the absolute value of the
						  word.  This word can be followed by more skip counts,
						  by a last byte word, or by the packet count.

The packets in each line are similar to the packets for the line coded block.
The first byte of each packet is a column skip count. The second byte is a
packet type. If the packet type is positive, the packet type is a count of words
to be copied from the packet to the animation image. If the packet type is
negative, the packet contains one more word which is to be replicated. The
absolute value of the packet type gives the number of times the word is to be
replicated. The high and low order byte in the replicated word do not
necessarily have the same value.

--- Block Type 18 (FLI_PSTAMP) - Postage Stamp Image

This block type holds a postage stamp - a reduced-size image - of the frame. It
generally appears only in the first frame block within a flic file. When
creating a postage stamp, Animator Pro considers the ideal size to be 100x63
pixels. The actual size will vary as needed to maintain the same aspect ratio as
the original.
The pixels in a postage stamp image are mapped into a six-cube color space,
regardless of the color palette settings for the full frame image. A six-cube
color space is formed as follows:

	 start at palette entry 0
	 for red = 0 thru 5
		  for green = 0 thru 5
			   for blue = 0 thru 5
					palette_red   = (red   * 256)/6
					palette_green = (green * 256)/6
					palette_blue  = (blue  * 256)/6
					move to next palette entry
			   end for blue
		  end for green
	 end for red

Any arbitrary rgb value (where each component is in the range of 0-255) can be
mapped into the six-cube space using the formula:

  ((6*red)/256)*36 + ((6*green)/256)*6 + ((6*blue)/256)

The full postage stamp block header is defined as follows:

Offset  Length  Name         Description
OFFSET              Count TYPE   Description
0000h                   1 dword  Size of this block, including header size
0004h                   1 word   ID=18
0006h                   1 word   Height of the postage stamp image
0008h                   1 word   Width of the image
000Ah                   1 word   Color translation type :
								 1 - six-cube color space

Immediately following this header is the postage stamp data. The data is
formatted as a block with standard size/type header. The type will be one of:

	 15     FPS_BRUN         Byte run length compression
	 16     FPS_COPY         No compression
	 18     FPS_XLAT256      Six-cube color xlate table

The FPS_BRUN and FPS_COPY types are identical to the FLI_BRUN and FLI_COPY
encoding methods described above.

The FPS_XLAT256 type indicates that the block contains a 256-byte color
translation table instead of pixel data. To process this type of postage stamp,
read the pixel data for the full-sized frame image, and translate its pixels
into six-cube space using a lookup in the 256-byte color translation table. This
type of postage stamp appears when the size of the animation frames is smaller
than the standard 100x63 postage stamp size.
*************
TWE - Tween Data Files

A TWE file holds information about a tweening operation set up
via the Tween menus.  The information includes the starting and
ending shapes, and the optional userD specified links between the
shapes.  Animator Pro creates tween files.

A TWE file begins with an 8-byte header defined as follows:

Offset  Length  Name         Description

  0       2     magic        File format identifier. Always hex 1995.

  2       2     version      The file format version; always zero.

  4       4     tcount       The number of tween shapes in the file;
							 always 2.

  8       8     reserved     Unused space; set to zeroes.

  16      4     linkcount    The number of link entries in the file.

Immediately following the file header are the link entries.  If
the linkcount value is zero there are no links.  Each link entry
is a pair of 32-bit integers. The first value in each pair is the
index of the point in the first shape, and the second value is
the index of the point in the ending shape.  (IE, a link value of
2,7 says to link the second starting-shape point to the seventh
ending-shape point.)

Following the link entries is the data block that describes the
starting shape, then the data block that describes the ending
shape.  The format of these blocks is identical to that of the
polygon (PLY) file, including file header data.  In other words,
they appear as if a pair of polygon files are embedded in the
tween file at this point.

**********
OPT - Optics Menu Settings Files


An OPT file holds information about an optics operation set up
via the Optics menus.  Both Animator Pro and the original
Animator create OPT files.  The file format is the same for both.

An OPT file starts with a 4-byte header, as follows:

Offset  Length  Name         Description

  0       2     magic        File type identifier.  Always hex 1A3F.

  2       2     count        Number of records in the file.

Following the file header are optics records of 50 bytes each.  A
record is generated for each click on CONTINUE MOVE in the OPTICS
menu.  The move records are formatted as follows:

Offset  Length  Name         Description

  0       4     link         In the file, this field is always zero.
							 In memory, it's a pointer to the next
							 move record.

  4       6     spincenter   The x,y,z coordinates of the spin
							 center point; three 16-bit values.

  10      6     spinaxis     The x,y,z coordinates of the spin axis;
							 three 16-bit values.

  16      6     spinturns    The x,y,z coordinates of the spin turns;
							 three 16-bit values.

  22      4     spininter    Intermediate turns.  Two 16-bit values.
							 These are values for a conjugation matrix
							 that corresponds to spin axis.

  26      6     sizecenter   The x,y,z coordinates of the size
							 center point; three 16-bit values.

  32      2     xmultiplier  Determines (along with xdivisor)
							 how to scale along x dimension.

  34      2     xdivisor     Determines (along with xmultiplier) how
							 to scale along x dimension.

  36      2     ymultiplier  Determines (along with ydivisor)
							 how to scale along y dimension.

  38      2     ydivisor     Determines (along with ymultiplier) how
							 to scale along y dimension.

  40      2     bothmult     Like xmultiplier, but applied to both
							 dimensions.

  42      2     bothdiv      Like xdivisor, but applied to both
							 dimensions.

  44      6     linearmove   The x,y,z offset for a linear move;
							 three 16-bit values.

EXTENSION:FLT
OCCURENCES:PC
PROGRAMS:Autodesk Animator Pro
REFERENCE:
SEE ALSO:FLIc
VALIDATION:

This information is from Corion.net and is used with permission.

More Resources