mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1871 3b4a5df2-a311-0410-b5c6-a8a6f20db521
225 lines
6.8 KiB
C
225 lines
6.8 KiB
C
//**************************************************************************
|
|
//
|
|
// Filename : flic.h
|
|
//
|
|
// Purpose : to define some flic stuff
|
|
//
|
|
// Modification history :
|
|
//
|
|
//**************************************************************************
|
|
|
|
#ifndef __FLIC_H
|
|
#define __FLIC_H
|
|
|
|
//**************************************************************************
|
|
//
|
|
// Includes
|
|
//
|
|
//**************************************************************************
|
|
|
|
#include "sgp.h"
|
|
#include <stdio.h>
|
|
|
|
//**************************************************************************
|
|
//
|
|
// Defines
|
|
//
|
|
//**************************************************************************
|
|
|
|
#define ErrFlicLibAccess -1
|
|
#define ErrFlicAccess -2
|
|
#define ErrFlicSeek -3
|
|
#define ErrFlicRead -4
|
|
#define ErrFlicBad -5
|
|
#define ErrFlicBadFrame -6
|
|
|
|
//**************************************************************************
|
|
//
|
|
// Typedefs
|
|
//
|
|
//**************************************************************************
|
|
|
|
struct _Flic;
|
|
|
|
typedef signed char Char; /* Signed 8 bits. */
|
|
typedef unsigned char Uchar; /* Unsigned 8 bits. */
|
|
typedef short Short; /* Signed 16 bits please. */
|
|
typedef unsigned short Ushort; /* Unsigned 16 bits please. */
|
|
typedef long Long; /* Signed 32 bits. */
|
|
typedef unsigned long Ulong; /* Unsigned 32 bits. */
|
|
|
|
typedef int Boolean; /* TRUE or FALSE value. */
|
|
typedef int ErrCode; /* ErrXXX or Success. */
|
|
typedef int FileHandle; /* OS file handle. */
|
|
|
|
typedef Uchar Pixel; /* Pixel type. */
|
|
|
|
typedef ErrCode FlicOpenFunc(struct _Flic *flic, const char *filename);
|
|
typedef ErrCode FlicCheckFrameFunc(struct _Flic *);
|
|
typedef ErrCode FlicSeekFunc(struct _Flic *, long offset);
|
|
|
|
typedef struct
|
|
{
|
|
Uchar r,g,b;
|
|
} Colour; /* One color map entry r,g,b 0-255. */
|
|
|
|
typedef struct
|
|
{
|
|
Pixel pixels[2];
|
|
} Pixels2; /* For word-oriented run length encoding */
|
|
|
|
/* Flic Header */
|
|
typedef struct
|
|
{
|
|
Long size; /* Size of flic including this header. */
|
|
Ushort type; /* Either FLI_TYPE or FLC_TYPE below. */
|
|
Ushort frames; /* Number of frames in flic. */
|
|
Ushort width; /* Flic width in pixels. */
|
|
Ushort height; /* Flic height in pixels. */
|
|
Ushort depth; /* Bits per pixel. (Always 8 now.) */
|
|
Ushort flags; /* FLI_FINISHED | FLI_LOOPED ideally. */
|
|
Long speed; /* Delay between frames. */
|
|
Short reserved1; /* Set to zero. */
|
|
Short created1;
|
|
Short created2;
|
|
//Ulong created; /* Date of flic creation. (FLC only.) */
|
|
Short creator1;
|
|
Short creator2;
|
|
//Ulong creator; /* Serial # of flic creator. (FLC only.) */
|
|
Short updated1;
|
|
Short updated2;
|
|
//Ulong updated; /* Date of flic update. (FLC only.) */
|
|
Short updater1;
|
|
Short updater2;
|
|
//Ulong updater; /* Serial # of flic updater. (FLC only.) */
|
|
Ushort aspect_dx; /* Width of square rectangle. (FLC only.) */
|
|
Ushort aspect_dy; /* Height of square rectangle. (FLC only.) */
|
|
Char reserved2[38]; /* Set to zero. */
|
|
Long oframe1; /* Offset to frame 1. (FLC only.) */
|
|
Long oframe2; /* Offset to frame 2. (FLC only.) */
|
|
Char reserved3[40]; /* Set to zero. */
|
|
} FlicHead;
|
|
|
|
typedef struct
|
|
{
|
|
Pixel *pixels; /* Set to AOOO:0000 for hardware. */
|
|
int width, height; /* Dimensions of screen. (320x200) */
|
|
char change_palette; /*True means that the flic changes the palette */
|
|
} FlicScreen; /* Device specific screen type. */
|
|
|
|
typedef struct
|
|
{
|
|
Ulong max_loop_count,
|
|
loop_count;
|
|
Ushort max_frame_index,
|
|
frame_index;
|
|
} FlicFrameStatus;
|
|
|
|
typedef struct
|
|
{
|
|
// lmlib_t *names;
|
|
long offset,
|
|
length;
|
|
}FlicLib;
|
|
|
|
typedef struct _Flic
|
|
{
|
|
FlicHead head; /* Flic file header. */
|
|
FILE *file; /* File handle. */
|
|
const char *name; /* Name from flic_open. Helps error reporting. */
|
|
int xoff,yoff; /* Offset to display flic at. */
|
|
|
|
FlicFrameStatus status;
|
|
FlicScreen screen;
|
|
FlicLib lib;
|
|
|
|
FlicOpenFunc *open;
|
|
FlicCheckFrameFunc *check_frame;
|
|
FlicSeekFunc *seek;
|
|
|
|
} Flic;
|
|
|
|
/* Values for FlicHead.type */
|
|
#define FLI_TYPE 0xAF11u /* 320x200 .FLI type ID */
|
|
#define FLC_TYPE 0xAF12u /* Variable rez .FLC type ID */
|
|
/* Values for FlicHead.flags */
|
|
#define FLI_FINISHED 0x0001
|
|
#define FLI_LOOPED 0x0002
|
|
|
|
/* Optional Prefix Header */
|
|
typedef struct
|
|
{
|
|
Long size; /* Size of prefix including header. */
|
|
Ushort type; /* Always PREFIX_TYPE. */
|
|
Short chunks; /* Number of subchunks in prefix. */
|
|
Char reserved[8];/* Always 0. */
|
|
} PrefixHead;
|
|
|
|
/* Value for PrefixHead.type */
|
|
#define PREFIX_TYPE 0xF100u
|
|
|
|
/* Frame Header */
|
|
typedef struct
|
|
{
|
|
Long size; /* Size of frame including header. */
|
|
Ushort type; /* Always FRAME_TYPE */
|
|
Short chunks; /* Number of chunks in frame. */
|
|
Char reserved[8];/* Always 0. */
|
|
} FrameHead;
|
|
|
|
/* Value for FrameHead.type */
|
|
#define FRAME_TYPE 0xF1FAu
|
|
|
|
/* Chunk Header */
|
|
typedef struct
|
|
{
|
|
Long size; /* Size of chunk including header. */
|
|
Ushort type; /* Value from ChunkTypes below. */
|
|
} ChunkHead;
|
|
|
|
typedef enum
|
|
{
|
|
COLOR_256 = 4, /* 256 level color pallette info. (FLC only.) */
|
|
DELTA_FLC = 7, /* Word-oriented delta compression. (FLC only.) */
|
|
COLOR_64 = 11, /* 64 level color pallette info. */
|
|
DELTA_FLI = 12, /* Byte-oriented delta compression. */
|
|
BLACK_FRAME = 13, /* whole frame is color 0 */
|
|
BYTE_RUN = 15, /* Byte run-length compression. */
|
|
LITERAL = 16, /* Uncompressed pixels. */
|
|
PSTAMP = 18, /* "Postage stamp" chunk. (FLC only.) */
|
|
} ChunkTypes;
|
|
|
|
//**************************************************************************
|
|
//
|
|
// Function prototypes.
|
|
//
|
|
//**************************************************************************
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
void FlicInit(Flic *flic, unsigned screen_width, unsigned screen_height, char change_palette, char *Buffer);
|
|
ErrCode FlicOpen(Flic *flic, const char *filename);
|
|
void FlicSetOrigin(Flic *flic, unsigned x, unsigned y);
|
|
ErrCode FlicPlay(Flic *flic, Ulong max_loop);
|
|
void FlicClose(Flic *flic);
|
|
void FlicSeekFirst(Flic *flic);
|
|
int FlicAdvance(Flic *flic, BOOL fDecode);
|
|
int FlicAdvanceNoDecode(Flic *flic);
|
|
int FlicStart(char *filename, int width, int height, char *buffer, Flic *flic, char usepal);
|
|
void FlicStop(Flic *flic);
|
|
ErrCode FlicGetStats(char *filename, int width, int height, Flic *flic, int *piBufferSize, int *piColourPalSize);
|
|
ErrCode FlicGetColourPalette(CHAR *filename, int width, int height, CHAR **ppBuffer, INT *piNumColours);
|
|
CHAR *FlicSeekChunk(Flic *flic, INT iFrame, ChunkTypes eType, INT *piChunkSize);
|
|
INT FlicFindByteRunBeforeFrame(Flic *flic, INT iFrame);
|
|
ErrCode FlicFillBitmapData( Flic *flic, INT iPrevFrame, INT iFrame, HBITMAP hBitmap );
|
|
ErrCode FlicFillFrameData( Flic *flic, INT iPrevFrame, INT iFrame, CHAR *, INT * );
|
|
void FlicClearBitmap( HBITMAP hBitmap, INT iColourIndex );
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
extern char FlicPal[768];
|
|
#endif
|