162 lines
5.7 KiB
C++
162 lines
5.7 KiB
C++
/*
|
|
** 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/***************************************************************************
|
|
** 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 <vqa32\vqaplay.h>
|
|
#include <vidmode.h>
|
|
#define bool BOOL
|
|
#define true 1
|
|
#define false 0
|
|
#include <rawfile.h>
|
|
|
|
//==========================================================================
|
|
// 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;
|
|
|
|
|
|
|