gamedata.h

Go to the documentation of this file.
00001 #ifndef _GAMEDATA_H
00002 #define _GAMEDATA_H
00003 
00004 /* See Buzz_inc.h for comments on this */
00005 #ifdef ALTERED_STRUCTURE_PACKING
00006 #error Make sure that gamedata.h is included before Buzz_inc.h
00007 #undefined /* to make errors appear on all compilers */
00008 #endif
00009 
00010 #include "race.h"
00011 #include <stdio.h>
00012 #include "int_types.h"  /* auto-generated inttypes.h */
00013 
00014 /* Routines for read/write access to LITTLE ENDIAN data in game files */
00015 extern size_t fread_uint8_t(uint8_t *dst, size_t nelem, FILE *file);
00016 extern size_t fread_uint16_t(uint16_t *dst, size_t nelem, FILE *file);
00017 extern size_t fread_uint32_t(uint32_t *dst, size_t nelem, FILE *file);
00018 extern size_t fread_int8_t(int8_t *dst, size_t nelem, FILE *file);
00019 extern size_t fread_int16_t(int16_t *dst, size_t nelem, FILE *file);
00020 extern size_t fread_int32_t(int32_t *dst, size_t nelem, FILE *file);
00021 extern size_t fwrite_uint8_t(const uint8_t *src, size_t nelem, FILE *file);
00022 extern size_t fwrite_uint16_t(const uint16_t *src, size_t nelem, FILE *file);
00023 extern size_t fwrite_uint32_t(const uint32_t *src, size_t nelem, FILE *file);
00024 extern size_t fwrite_int8_t(const int8_t *src, size_t nelem, FILE *file);
00025 extern size_t fwrite_int16_t(const int16_t *src, size_t nelem, FILE *file);
00026 extern size_t fwrite_int32_t(const int32_t *src, size_t nelem, FILE *file);
00027 
00028 /** \defgroup datafiles Datafile descriptions
00029  * 
00030  * \addtogroup datafiles
00031  * \@{
00032  * 
00033  *  Document every game data file: name, structures, layout.
00034  *  Each structure that can exist in a file should define total
00035  *  size in bytes. Also declare functions for reading/writing
00036  *  from/to stdio streams, if necessary.
00037  */
00038 
00039 /** \addtogroup datafiles
00040  * \@{
00041  * \verbatim
00042  * File: SEQ.KEY, FSEQ.KEY
00043  * Desc: Names of movie & audio files, each name 8 bytes long.
00044  *       Successful mission video sequences are stored in SEQ,
00045  *       failures in FSEQ.
00046  * Structure:
00047  *      u16 - number of subsequent filenames
00048  *      u8[8]* - filenames, each should be 0 terminated
00049  * \endverbatim
00050  */
00051 
00052 /** \addtogroup datafiles
00053  * \@{ 
00054  * \verbatim 
00055  * File: SEQ.DAT
00056  * Desc: Indexes to video and audio files for successful mission stages.
00057  * Structure:
00058  *       sequence of oGROUP structures,
00059  *       each containing ID sequence string and oLIST structures.
00060  * \endverbatim
00061  */
00062 
00063 /** \addtogroup datafiles
00064  * \@{
00065  * \verbatim
00066  * VAB.IMG is
00067  *  ** Player 0 image
00068  *   char[768]   -- palette
00069  *   uint16_t    -- length of following PCX compressed image
00070  *   image_data[] --
00071  *  ** Player 1 image
00072  *   char[768]   -- palette
00073  *   uint16_t    -- length of following PCX compressed image
00074  *   image_data[]
00075  * 
00076  * \endverbatim
00077  */
00078 
00079 /** \addtogroup datafiles
00080  * \@{
00081  * \verbatim
00082  * File: FSEQ.DAT
00083  * Desc: Indexes to video and audio files for failed mission stages.
00084  * Structure:
00085  *       50 Table structures
00086  *       sequence of oFGROUP structures,
00087  *       each containing ID sequence string and oLIST structures.
00088  * \endverbatim
00089  */
00090 
00091 struct oLIST {
00092     int16_t aIdx;   /**< index of video filename in {SEQ,FSEQ}.KEY */
00093     int16_t sIdx;   /**< index of audio filename in {SEQ,FSEQ}.KEY */
00094 };
00095 #define sizeof_oLIST 4
00096 extern size_t fread_oLIST(struct oLIST *dst, size_t num, FILE *f);
00097 
00098 struct oGROUP {
00099     char ID[10];            /**< Sequence identifier */
00100     struct oLIST oLIST[5];  /**< Audio/video file indexes */
00101 };
00102 #define sizeof_oGROUP (10 + 5*sizeof_oLIST)
00103 extern size_t fread_oGROUP(struct oGROUP *dst, size_t num, FILE *f);
00104 
00105 struct Table {
00106     char fname[8];          /* XXX: File name? */
00107     int32_t foffset;        /* XXX: Offset in file? */
00108     uint16_t size;          /* XXX: Data size? */
00109 };
00110 #define sizeof_Table (8 + 4 + 2)
00111 extern size_t fread_Table(struct Table *dst, size_t num, FILE *f);
00112 
00113 struct oFGROUP {
00114     char ID[15];            /**< Sequence identifier */
00115     struct oLIST oLIST[5];  /**< Audio/video file indexes */
00116 };
00117 #define sizeof_oFGROUP (15 + 5*sizeof_oLIST)
00118 extern size_t fread_oFGROUP(struct oFGROUP *dst, size_t num, FILE *f);
00119 
00120 /* used in: MOON.BUT, LMER.BUT, APROG.BUT, INTEL.BUT,
00121  *          RDFULL.BUT, PRFX.BUT, LFACIL.BUT, PRESR.BUT */
00122 typedef struct {
00123     uint16_t size;
00124     uint32_t offset;
00125 } SimpleHdr;
00126 #define sizeof_SimpleHdr (2+4)
00127 extern size_t fread_SimpleHdr(SimpleHdr *dst, size_t num, FILE *f);
00128 
00129 /** \addtogroup datafiles
00130  * \@{
00131  * \verbatim
00132  * File: REPLAY.DAT
00133  * Desc: Contains indices to animation sequences of past player missions.
00134  * Structure:
00135  *       sequence of ReplayItem structures,
00136  *       each containing offsets to animations.
00137  * \endverbatim
00138  */
00139 
00140 #if 0
00141 typedef struct ReplayItem {
00142    uint8_t Qty;             /* Number of Animated Sequences */
00143    uint16_t Off[35];        /* Offsets to Each animated Part */
00144 } REPLAY;
00145 #define sizeof_REPLAY (1 + 35*2)
00146 extern size_t fread_REPLAY(REPLAY *dst, size_t num, FILE *f);
00147 extern size_t fwrite_REPLAY(const REPLAY *src, size_t num, FILE *f);
00148 #endif
00149 
00150 #endif /* _GAMEDATA_H */

Generated on Fri Sep 28 00:35:45 2007 for raceintospace by  doxygen 1.5.3