Copyright (c) Hyperion Entertainment and contributors.
FANT IFF Movie Format
Jump to navigation
Jump to search
FANT
FORM FANT /*********************************************************************/ /* ** ** - FantForm.h ** ** ** ** This is the IFF movie format for Amiga Fantavision. ** ** ** ** (c) Copyright 1988 Broderbund Software ** ** ** ** - FORMAT FROZED May 5, 1988 - ** ** ** ** Implemented by Steve Hales ** ** ** ** Overvue - ** ** This is a description of the format used for Amiga ** ** Fantavision. It assumes you have intimate knowledge of how ** ** IFF-FORMs are constructed, layed out, and read. This file ** ** can be used as a header file. This is fairly complete, but ** ** I'm sure there are a few things missing. ** ** ** ** I can be reached in the following ways: ** ** UseNet: Steve_A_Hales@cup.portal.com OR ** ** sun!cup.portal.com!Steve_A_Hales ** ** ** ** US Mail: 882 Hagemann Drive ** ** Livermore, CA, 94550-2420 ** ** ** ** Phone: (415) 449-5297 ** ** ** ** NOTE: I cannot, by contract, give out any code to load or ** ** play Fantavision movies. If that is want you want ** ** then you will need to contact Broderbund Software ** ** directly. Their number is (415) 492-3200. ** ** ** ** Enjoy! Aloha. ** ** */ /*********************************************************************/ /* Misc Fantavision structures */ typedef struct Rect { int left, top, right, bottom; }; typedef struct Point { int h, v; }; /* Frame opcodes */ #define opNEXT 0 /* go on to next frame */ #define opREPEAT 1 /* repeat sequence starting from frame Parm rep1 times */ #define opGOTO 2 /* goto frame Parm */ /* Frame modes */ #define fNORMAL 0x0000 /* redraw every frame */ #define fTRACE 0x0001 /* draw into both paged screens */ #define fLIGHTNING 0x0020 /* don't erase background */ /* Fantavision FORM defines */ #define ID_FANT 'FANT' /* FORM type */ #define ID_FHDR 'FHDR' /* Movie Header */ #define ID_FRAM 'FRAM' /* Format info for a Frame */ #define ID_POLY 'POLY' /* Format info for a Polygon */ #define ID_CSTR 'CSTR' /* \0 terminated string */ /* Polygon modes */ #define pTYPEMASK 0x00FF /* type mask to get just type of poly */ #define pSELECT 0x8000 /* is object selected? */ #define pOUTLINE 0x4000 /* outlined polygon using DotModeSide to ** determine when to not connect a line. ** ex. 0 draws on all sides, 1 will draw on ** everyother side, 2 will leave every second ** side blank, 3 will every third side ** blank, etc. */ #define pBACKDROP 0x2000 /* polygon will be dropped into the background ** during animation. */ #define pMSKBITMAP 0x1000 /* bitmap has a mask */ /* Polygon types */ #define pDELETE 0x7000 /* object is a filler (its deleted from display) */ #define pFILLED 0 /* filled polygon */ #define pLINE 1 /* not-connected line polygon */ #define pLINED 2 /* connected line polygon */ #define pTEXTBLOCK 3 /* text block to draw */ #define pCIRCLEDOT 4 /* draw circle dots at vertex's using ** dotSize at size. */ #define pRECTDOT 5 /* draw square dots at vertex's using ** dotSize at size. */ #define pBITMAPDOT 6 /* draw dots using a bitmap at vertex's using ** BitMap. */ #define pBITMAP 7 /* draw just bitmap image */ /* These are used for the pTEXTBLOCK polygon type */ /* Text justification */ #define tLEFT 0 #define tCENTER 1 #define tRIGHT 2 /* Text style */ #define tNORMAL (int)(FS_NORMAL) #define tBOLD (int)(FSF_BOLD) #define tITALIC (int)(FSF_ITALIC) #define tUNDERLINE (int)(FSF_UNDERLINED) #define tEXTENDED (int)(FSF_EXTENDED) /* Fantavision movie header - ** ** This header defines how much RAM is needed, how many frames, and sounds ** in the movie. */ typedef struct FantHeader { int PointsPerObj; /* number of vertexs per object */ int ObjsPerFrame; /* number of objects per frame */ int ScreenDepth; /* 0 to 6, for number of bit planes */ int ScreenWidth; /* in pixels */ int ScreenHeight; /* in pixels */ int BackColor; /* background color palette number */ long SizeOfMovie; /* RAM Size of movie, expanded */ int pad[30]; /* padding for expanding */ int NumberOfFrames; int NumberOfSounds; int NumberOfBitMaps; int Background; /* non-zero if first bitmap is a background */ int SpeedOfMovie; /* 100 is normal speed, 50 is half speed, etc */ int pad[3]; /* expansion */ }; /* Fantavision frame info - ** ** Each frame has this structure defined. */ typedef struct FrameFormat { int OpCode; /* Frame opcode */ long Parm; /* contains frame number for opNEXT, opREPEAT */ char Rep1, Rep2; /* Rep1 is repeat counter, Rep2 is not used */ int TweenRate; /* number of tweens per frame */ int ChannelIndex[2]; /* -3 stop sound is this channel ** -2 modify current sound ** -1 no sound for this channel ** (all others) is an index into the sound ** list. Which sound to use. */ int NumberOfPolys; /* number of polygons in this frame */ int ColorPalette[32]; /* xRGB - format 4 bits per register */ int Pan, Tilt; /* 0 is centered, (+-) amounts are in pixels */ int Modes; /* Frame modes */ int pad; /* expansion */ }; /* Fantavision polygon info - ** ** Each polygon has this structure defined. */ typedef struct PolyFormat { int NumberOfPoints; /* how many vertexs for this polygon */ int Type; /* polygon type */ int Color; /* palette color number (see note 1) */ Rect Bounds; /* enclosing rectangle of polygon */ int Depth; /* polygon view depth (see note 2) */ char DotModeSize; /* in pixels, not larger than 40 */ char DotModeSide; /* determines outlining features */ int OutlineColor; /* palette color number for outline */ int BitMapIndex; /* if not -1, then bitmap index into bitmap list */ int BMRealWidth; /* in pixels */ int BMRealHeight; int TextLength; /* length of text for pTEXTBLOCK */ int TextJust; char TextSize; /* size in pixels */ char TextStyle; long pad; /* expansion */ Point p[]; /* array of points defining vertexs */ }; /* Fantavision high-level IFF format. ** FORM FANT FHDR - background - FORM ILBM if Background is non-zero BMHD BODY - bitmap list - NOTE: If a bitmap has a mask, it will be compute during load time. FORM ILBM times NumberOfBitMaps BMHD BODY - sound list - { FORM 8SVX times NumberOfSounds VHDR BODY SEFX } Default parameters for sound - frame list - { FRAM times NumberOfFrames SEFX if sound for channel 1. SEFX if sound for channel 2. POLY times NumberOfPolys { CSTR Text of poly if PolyType = pTEXTBLOCK CSTR } } Name of font */ /******- NOTES -**********************************************************/ /* ** 1 - The color palette is a number from 0 to 1120. The first 32 numbers ** are normal RGB colors, but the rest index into a pre-defined ** set of patterns. ** ** 2 - The view depth of each polygon determines the display order. The ** higher the number the closer the polygon is to the viewer. During ** editing, each polygon is assigned numbers in multiplies of 100, ** but to function, any number can work. */