/*
** Command & Conquer Red Alert(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
/***************************************************************************
** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
***************************************************************************
* *
* Project Name : VQAVIEW *
* *
* File Name : VQ.H *
* *
* Programmer : Michael Grayford *
* *
* Start Date : *
* *
* Last Update : Nov 22, 1995 [MG] *
* *
*-------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
//==========================================================================
// INCLUDES
//==========================================================================
#include
#include
#define bool BOOL
#define true 1
#define false 0
#include
//==========================================================================
// PUBLIC FUNCTIONS
//==========================================================================
void Set_Movie_Frame_Rate( void );
//==========================================================================
// PRIVATE DEFINES
//==========================================================================
//--------------------------------------------------------------------------
// GENERAL DEFINES
//--------------------------------------------------------------------------
#define VQ_BLOCK_WIDTH 4
#define VQ_BLOCK_HEIGHT 4
#define VQ_COLUMNS ( VQ_MOVIE_WIDTH / VQ_BLOCK_WIDTH )
#define VQ_ROWS ( VQ_MOVIE_HEIGHT / VQ_BLOCK_HEIGHT )
// Codes for media_src parameter of VQAClass constructor:
#define FROM_DISK 0
#define FROM_MEMORY 1
// CODES for Play_VQA:
#define PLAY_ALL_FRAMES -1
#define PLAY_TO_END_OF_MOVIE -2
// CODES for Play_VQA_Frame:
#define PLAY_LAST_FRAME -1
// Error codes returned by VQA_INIT:
#define VQA_INIT_NO_ERROR -1
#define VQA_INIT_FAILED_MEM_POOL_ALLOC -2
#define VQA_INIT_FAILED_SCRATCH_ALLOC -3
// Codes for Cache_VQA:
#define CACHE_REST_OF_FILE 0
// Error codes returned by CACHE_VQA
#define CACHE_NO_ERROR -1
#define CACHE_EOF -2
#define CACHE_FAILED_MEM_ALLOC -3
#define CACHE_OPEN_FILE_ERROR -4
#define CACHE_READ_ERROR -5
// Error codes returned by Play_VQA:
#define VQA_PLAY_NO_ERROR 0
#define VQA_PLAY_USER_BREAK 1
#define VECTOR_FORMAT_OFFSETS 1
#define VECTOR_FORMAT_INDEXES 2
#define MAX_CODEBOOK_OFFSET 32766
//==========================================================================
// PUBLIC DATA
//==========================================================================
extern unsigned char *Movie_Scratch_Buffer;
//==========================================================================
// CLASSES
//==========================================================================
class VQAClass {
private:
char base_filename[ _MAX_PATH ];
char vqa_filename[ _MAX_PATH ];
char PaletteFilename [_MAX_PATH];
VQAConfig vqa_config;
VQAHandle *vqa_handle;
short media_source;
int file_handle;
unsigned char palette[ SIZE_OF_PALETTE * 3 ];
int current_frame;
int total_frames;
BOOL vqa_is_open;
unsigned char *InterpolatedPalettes[50]; //Max 50 palette changes in a vq
BOOL PalettesRead;
RawFileClass *PaletteFile;
unsigned NumPalettes;
/*=========================================================================*/
/* Private functions. */
/*=========================================================================*/
int VQAClass::Play_Generic_VQA( int last_frame_to_play );
public:
VQAClass( char *filename, char *buffer, short media_src, long (*callback) (unsigned char *, long) );
~VQAClass (void);
BOOL VQAClass::Update_Palette( unsigned char *newpalette );
BOOL Open_And_Load_Buffers( void );
void Seek_To_Frame( unsigned long frame );
int Play_VQA( int last_frame_to_play );
void Play_VQA_Frame( int frame_number );
void Pause_VQA( void );
void Close_And_Free_VQA( void );
void VQAClass::Read_Palettes(void);
void VQAClass::Write_Palettes(void);
}; /* VQAClass */
//==========================================================================
// TYPES
//==========================================================================
typedef struct {
unsigned long file_offset;
unsigned long file_size;
} VQACacheHeader;