Files
RP411/MUNGA_L4/libDPL/dsys/__PFILE.H
T
CydandClaude Opus 4.8 4abbf8879f Initial import of Red Planet v4.10 Win32 source
Imports the current Win32 source for the pod-racing game 'Red Planet',
built on the MUNGA engine and its L4 (Win32/DirectX) platform layer:

- MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend
- RP / RP_L4: Red Planet game logic and Win32 application
- DivLoader, Setup1: asset loader and installer project
- lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies

Removed stale Subversion metadata and added .gitignore/.gitattributes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 07:59:51 -05:00

604 lines
16 KiB
C++

/****************************************************************************
*
* Copyright 1995 Division Limited.
* All Rights Reserved
*
*
* System :
* Module :
* Object Name : $RCSfile: __pfile.h,v $
* Revision : $Revision: 1.15 $
* Date : $Date: 95/05/16 13:46:17 $
* Author : $Author: bill $
* Last Modified : <120595.1125>
*
* Description
*
* Notes
*
* History
*
* $Log: __pfile.h,v $
* Revision 1.15 95/05/16 13:46:17 bill
* Added 1) dos. 2) STRIP_LIST. 3) POINTLIST. 4) biz->bgf
*
* Revision 1.14 95/04/27 23:01:16 bill
* Major ci for 3.0 Alpha (new: pgeneral, dm)
*
*
****************************************************************************
*
* Copyright (c) 1995 Division Ltd.
*
* All Rights Reserved.
*
* This Document may not, in whole or in part, be copied,
* photocopied, reproduced, translated, or reduced to any
* electronic medium or machine readable form without prior
* written consent from Division Ltd.
****************************************************************************/
#ifndef ____PFILE_H__
#define ____PFILE_H__
#include <dsys/du.h>
#ifdef _PF_LOCAL
#include "filelib.h"
#include "pfile.h"
#else
#include <dsys/filelib.h>
#include <dsys/pfile.h>
#endif
/* Constant ID strings */
#define dpfBIZIDstrLen 31
#define dpfBIZIDstr "biz v1.0 (c) DIVISION Ltd 1992"
#define dpfVIZIDstr "/* viz v1.0 (c) DIVISION Ltd 1992 */\n"
#define dpfB2ZIDstrLen 8
#define dpfB2ZIDstr "DIV-BIZ2"
#define dpfV2ZIDstrLen 8
#define dpfV2ZIDstr "DIV-VIZ2"
#define dpfBMFIDstrLen 8
#define dpfBMFIDstr "DIV-BMF2"
#define dpfVMFIDstrLen 8
#define dpfVMFIDstr "DIV-VMF2"
/* ver change */
/* 2.00 Initial pfile version */
/* 2.01 Replairs to pmesh tag and section length tests */
/* 2.02 pmesh extended to have polygons of upto 255 faces */
/* 2.03 boundary information added */
/* 2.04 Line definition change, can now be textured cooked & normalized */
/* 2.05 Introduction of material libraries */
/* 2.06 pgeneral way of doing things */
/* 2.07 STRIP_LISTs and POINTLISTs added to format */
#define dpf_LIBRARY_MAJOR_VER 2
#define dpf_LIBRARY_MINOR_VER 07
#define dpfSTDINName "Std In"
#define dpfSTDOUTName "Std Out"
/* new biz v2 max depth constant */
#define dpf_MAX_DEPTH 10
/* load in basic types, struct names and procedure heading which
** can be externally called.
*/
#define dpfVBLKSIZE 1024
extern uint8 dpfVERTFLAG ;
extern uint8 dpfVERTSIZE ;
extern uint8 dpfVERTNORM ;
extern uint8 dpfVERTRGBA ;
extern uint8 dpfVERTTEXT ;
extern uint8 dpfVERTOVER ;
/* Now define all the internal structures */
typedef int32 dpfTOKEN ;
/* The following is for the new wizzy v1.0 -> v2.0 texture converter */
typedef struct dpfVISTEXTURETYPE
{
char *visName ;
char *F_textName, *F_textMap ;
char *B_textName, *B_textMap ;
struct dpfVISTEXTURETYPE *next ;
} dpfVISTEXTURE ;
typedef struct dpfSTRINGTYPE
{
int32 length ;
uint8 *string ;
} dpfSTRING ;
typedef struct dpfTEXTURETYPE
{
char *textName ;
char *fileName ;
dpfMINIFY minify ;
dpfMAGNIFY magnify ;
dpfALPHA alpha ;
dpfWRAP wrap_U, wrap_V ;
dpfDETAIL detail ;
char *detailName;
uint8 bitslice ;
dpfSTRINGPTR special ;
int32 dataLength ;
struct dpfFILE_TYPE *file;
struct dpfTEXTURETYPE *next ;
} dpfTEXTURE ;
typedef struct dpfRAMPTYPE
{
char *name ;
dpfRGBA data[2] ;
dpfSTRINGPTR special ;
int32 dataLength ;
struct dpfFILE_TYPE *file;
struct dpfRAMPTYPE *next ;
} dpfRAMP ;
typedef struct dpfMATERIALTYPE
{
char *name ;
dpfMATTXTTYPE textureType ;
char *textureName ;
char *rampName ;
dpfRGBA ambient,
diffuse,
specular,
emissive,
opacity ;
dpfSTRINGPTR special ;
int32 dataLength ;
struct dpfFILE_TYPE *file;
struct dpfMATERIALTYPE *next ;
} dpfMATERIAL ;
typedef struct dpfSURFACETYPE
{
char *name ;
dpfMATTYPE F_Material ;
dpfMATTYPE B_Material ;
char *F_MatName ;
char *B_MatName ;
dpfPLANE plane ;
dpfFACET facet ;
int32 decal ;
dpfDRAWMODE drawMode ;
uint8 width ;
uint8 vertex ;
dpfLOCK lock ;
dpfSTRINGPTR special ;
} dpfSURFACE ;
typedef struct dpfVERTEXTYPE {
struct dpfVERTEXTYPE *next ;
union {
struct dpfGEOMETRYTYPE *geom ;
struct dptTRILISTTYPE *triList ;
} ptr ;
uint8 vertex ;
uint8 flag ;
unsigned short count ;
float32 data[3] ;
} dpfVERTEX ;
typedef struct dpfVERTBLK {
struct dpfVERTBLK *next ;
dpfVERTEX vert[dpfVBLKSIZE] ;
} dpfVERTBLK, *dpfVERTBLKPTR ;
/*************************************************************
* The Following are type defs for the ptmesh utility *
*************************************************************/
typedef struct dptTRILISTTYPE
{
struct dptTRIANGLETYPE *triangle ;
struct dptTRILISTTYPE *next ;
} dptTRILIST, *dptTRILISTPTR ;
typedef struct dptCONNECTTYPE
{
struct dptTRIANGLETYPE *connection ;
int32 p1 ;
struct dptCONNECTTYPE *next ;
} dptCONNECT, *dptCONNECTPTR ;
typedef struct dptTRIANGLETYPE
{
dpfPATCHPTR patch ;
dpfVERTEXPTR points[3] ;
dptCONNECTPTR connections ;
dmVector normal ;
/* Beware of using the octPos flag. it is used in the flipper, octize,
** spatial divide and the unloading of meshes
*/
int32 octPos ;
struct dptTRIANGLETYPE *next, *prev ;
} dptTRIANGLE ;
typedef struct
{
dpfPATCHPTR patch ;
dptTRIANGLEPTR LTrian, RTrian ;
int32 LVertNo, RVertNo ;
int32 ROrient, LOrient ;
int32 noVerts ;
int32 octPos ;
} dptSAVEBLOCK, *dptSAVEBLOCKPTR ;
typedef struct dptMESHTYPE {
dpfVERTEXPTR *hash_tbl ;
dptTRIANGLEPTR trian_hd, trian_tl ;
dpfGEOMETRYPTR geom_hd, geom_tl ;
duBlkCtrl conBC, trilBC, trisBC ;
int32 hash_size, normals ;
int32 No_trian, No_verts ;
int32 noGroups ;
int32 DropTri ;
} dptMESH ;
/************************************************************/
typedef struct dpfCLISTTYPE
{
int32 pcount ;
int32 fcount ;
int32 DataLength ;
struct dpfGEOMETRYTYPE *geom;
struct dpfCLISTTYPE *next ;
int32 *faces ;
} dpfCLIST ;
typedef struct dpfSLISTTYPE
{
int32 pcount ;
int32 vcount ;
int32 DataLength ;
struct dpfGEOMETRYTYPE *geom;
struct dpfSLISTTYPE *next ;
int32 *faces ;
} dpfSLIST ;
/* 4th float of point (point[dpf_U]) is used as radius */
typedef struct dpfSPHERENODETYPE
{
dmVector point ;
float32 radius ;
struct dpfGEOMETRYTYPE *geom;
struct dpfSPHERENODETYPE *next ;
int32 *block ;
} dpfSPHERENODE ;
typedef struct dpfTEXTNODETYPE
{
dmVector point ;
char *string ;
struct dpfGEOMETRYTYPE *geom;
struct dpfTEXTNODETYPE *next ;
int32 *block ;
} dpfTEXTNODE ;
typedef struct dpfSTRIPTYPE {
dpfVERTEXPTR point_hd, point_tl ;
union
{
uint8 thickness ;
float32 size ;
} data ;
int32 noVertex, pDataLength ;
} dpfSTRIP, *dpfSTRIPPTR ;
typedef struct dpfPMESHTYPE {
dpfVERTEXPTR point_hd, point_tl ;
dpfCLISTPTR cList_hd, cList_tl ;
dpfSLISTPTR sList_hd, sList_tl ;
int32 noVertex, pDataLength ;
int32 noCList, clDataLength ;
int32 noSList, slDataLength ;
} dpfPMESH, *dpfPMESHPTR ;
typedef struct dpfSPHERETYPE {
uint16 dice_u, dice_v ;
dpfSPHERENODEPTR sphere_hd, sphere_tl ;
int32 noSphereNode, sDataLength ;
} dpfSPHERE, *dpfSPHEREPTR ;
typedef struct dpfLETTEXTTYPE {
dpfFONT font ;
dmVector scale, orientation ;
dpfTEXTNODEPTR text_hd, text_tl ;
int32 noTextNode, tDataLength ;
} dpfLETTEXT, *dpfLETTEXTPTR ;
typedef struct dpfGEOMETRYTYPE
{
int32 geomType ;
union
{
dpfSTRIPPTR strip ;
dpfPMESHPTR pmesh ;
dpfSPHEREPTR sphere ;
dpfLETTEXTPTR text ;
} u_data ;
int32 dataLength ;
struct dpfPATCHTYPE *patch;
struct dpfGEOMETRYTYPE *next ;
} dpfGEOMETRY ;
typedef struct dpfPATCHTYPE {
dpfSURFACE surface;
dpfGEOMETRYPTR geom_hd;
dpfGEOMETRYPTR geom_tl;
int32 dataLength ;
struct dpfLODTYPE *LOD ;
struct dpfPATCHTYPE *next;
} dpfPATCH ;
typedef struct dpfLODTYPE
{
char *name ;
float32 inDist, outDist ;
dpfTRANSITION transition ;
int32 referenceFlag ;
dmVector reference ;
dpfPATCHPTR patch_hd;
dpfPATCHPTR patch_tl;
dpfSTRINGPTR special ;
int32 dataLength ;
struct dpfOBJECTTYPE *object;
struct dpfLODTYPE *next ;
} dpfLOD ;
typedef struct dpfOBJECTTYPE {
dpfSURFACE surface;
dpfLODPTR LOD_hd;
dpfLODPTR LOD_tl;
int32 dataLength ;
struct dpfOBJECTTYPE *next;
struct dpfFILE_TYPE *file;
} dpfOBJECT ;
typedef struct dpfHEADERTYPE
{
uint8 verMajor, verMinor;
uint8 day, month, year ;
uint8 hours, minutes ;
uint8 headerLoaded ;
float32 scale ;
dpfPRECISION precision ;
dpfSTRINGPTR comment ;
dpfUNIT unit ;
dpfSTRINGPTR special ;
int32 dataLength ;
dpfFILEFORMAT type;
} dpfHEADER ;
typedef struct dpfBOUNDTYPE
{
char *objectName ;
char *LODName ;
dpfAUTO Auto ;
uint8 gotBSphere ;
dmVector sphPoint ;
float32 sphRadius ;
uint8 gotBBox ;
dmVector boxMax, boxMin ;
dmVector boxOrien ;
dpfGEOMETRYPTR pmesh ;
dpfSTRINGPTR special ;
int32 dataLength ;
dpfBOUNDPTR child_hd ;
dpfBOUNDPTR child_tl ;
dpfBOUNDPTR next ;
dpfBOUNDPTR parent ;
dpfFILEPTR file ;
} dpfBOUND ;
/* dpfFILETYPE => dpfFILE_TYPE to stop conflict */
typedef struct dpfFILE_TYPE
{
dpfHEADER header ;
dpfFILETYPE type;
dpfFILEMODE mode;
char *fileName ;
dflFILEPTR fl ;
int32 lineNo, newMaterialCount ;
int32 dataLength, blockDepth, blockEnd[dpf_MAX_DEPTH] ;
dpfTEXTUREPTR texture_hd ;
dpfTEXTUREPTR texture_tl ;
dpfMATERIALPTR material_hd ;
dpfMATERIALPTR material_tl ;
dpfRAMPPTR ramp_hd ;
dpfRAMPPTR ramp_tl ;
dpfBOUNDPTR bound ;
dpfOBJECTPTR object_hd;
dpfOBJECTPTR object_tl;
dpfTOKEN curtok;
int32 curtag;
float32 semfloat ;
int32 semint ;
int32 noMaterials, noTextures, noRamps ;
int32 noObjects, noLODs, noPatches ;
int32 noGeometries, noPmeshes ;
int32 noCLists, noCFaces, cFtimesP ;
int32 noSLists, noSFaces, sFtimesP ;
int32 noPolystrips, noTristrips ;
int32 noPolygons, noPolyVerts ;
int32 noVertices, noVertLists, noTriangles ;
int32 noSphereLists, noSpheres ;
int32 noPointLists, noPoints ;
int32 noLineLists, noLines ;
int32 noTextLists, noTexts ;
dpfVISTEXTUREPTR visList ;
int32 mazSearched ;
char *FtextName, *BtextName ;
uint8 forceVer ;
} dpfFILE ;
/*****************************************************************************/
/* Global variables and macros */
/*****************************************************************************/
/* Internal functions */
extern int32 (*dpfReadFloatP)(dpfFILEPTR file,float32 *dest);
extern int32 (*dpfReadnFloatP)(dpfFILEPTR file, int32 n, float32 *dest);
/* Reading data */
int32
dpfReadFloatPSS(dpfFILEPTR file,float32 *dest) ;
int32
dpfReadFloatPSD(dpfFILEPTR file,float32 *dest) ;
int32
dpfReadFloatPDS(dpfFILEPTR file,float64 *dest) ;
int32
dpfReadFloatPDD(dpfFILEPTR file,float64 *dest) ;
int32
dpfReadnFloatPSS(dpfFILEPTR file,int32 n, float32 *dest) ;
int32
dpfReadnFloatPSD(dpfFILEPTR file,int32 n, float32 *dest) ;
int32
dpfReadnFloatPDS(dpfFILEPTR file,int32 n, float64 *dest) ;
int32
dpfReadnFloatPDD(dpfFILEPTR file,int32 n, float64 *dest) ;
#define dpfRead1byte(file,dest) dflRead1byte(file->fl,(void *)(dest))
#define dpfReadn1byte(file,n,dest) dflReadn1byte(file->fl,n,(void *)(dest))
#define dpfRead2byte(file,dest) dflRead2byte(file->fl,(void *)(dest))
#define dpfReadn2byte(file,n,dest) dflReadn2byte(file->fl,n,(void *)(dest))
#define dpfRead4byte(file,dest) dflRead4byte(file->fl,(void *)(dest))
#define dpfReadn4byte(file,n,dest) dflReadn4byte(file->fl,n,(void *)(dest))
#define dpfRead8byte(file,dest) dflRead8byte(file->fl,(void *)(dest))
#define dpfReadn8byte(file,n,dest) dflReadn8byte(file->fl,n,(void *)(dest))
/* Writing data */
#define dpfFwriteint8(file,i) dflWriteint8(file->fl,i)
#define dpfFwriteuint8(file,i) dflWriteuint8(file->fl,i)
#define dpfFwriteint16(file,i) dflWriteint16(file->fl,i)
#define dpfFwriteuint16(file,i) dflWriteuint16(file->fl,i)
#define dpfFwriteint32(file,i) dflWriteint32(file->fl,i)
#define dpfFwritefloat32(file,f) dflWritefloat32(file->fl,f)
#define dpfFwritefloat64(file,f) dflWritefloat64(file->fl,f)
void
dpfFwriteFloatP(dpfFILEPTR file, float32 f) ;
/* pfcheck checks input values */
int32
dpfRgbNotUnit(dpfRGBA r) ;
int32
dpfRgbNotZero(dpfRGBA r) ;
float32
dpfCheckRGBValue(dpfFILEPTR file, float32) ;
float32
dpfCheckAlphaValue(dpfFILEPTR file, float32) ;
float32
dpfCheckV1PowerValue(dpfFILEPTR file, float32) ;
float32
dpfCheckV2PowerValue(dpfFILEPTR file, float32) ;
float32
dpfCheckOpacityValue(dpfFILEPTR file, float32) ;
#define dpfV12v2PowerConvert(p) p
#define dpfV22v1PowerConvert(p) \
((p > dpfV1POWER_MAX) ? dpfV1POWER_MAX:p)
/* Dirty data structure stuff */
/* Does not unlink from structure so be careful */
int32
dpfFreeVertexList(dpfVERTEXPTR vert) ;
int32
dpfFreeCListList(dpfCLISTPTR cList) ;
int32
dpfFreeGeometryList(dpfGEOMETRYPTR geometry) ;
int32
dpfFreeSurfaceNames(dpfSURFACEPTR surface) ;
int32
dpfFreePatchList(dpfPATCHPTR patch) ;
int32
dpfFreeLODList(dpfLODPTR lod) ;
int32
dpfFreeObjectList(dpfOBJECTPTR object) ;
int32
dpfFreeBoundList(dpfBOUNDPTR bound) ;
int32
dpfFreeTextureList(dpfTEXTUREPTR txt) ;
int32
dpfFreeMaterialList(dpfMATERIALPTR mat) ;
int32
dpfFreeRampList(dpfRAMPPTR ramp) ;
/* Use setSurface, not copySurface, does not free name memory if
** dest suface has already got names
*/
void
dpfCopySurface(dpfSURFACEPTR dest, dpfSURFACEPTR source);
dpfFILETYPE
dpfIdentifyFile(dflFILEPTR fp) ;
int32
dpfGetB1FileBody(dpfFILEPTR file) ;
int32
dpfGetV1FileBody(dpfFILEPTR file) ;
int32
dpfGetB2FileBody(dpfFILEPTR file) ;
int32
dpfGetV2FileBody(dpfFILEPTR file) ;
int32
dpfPutB1FileBody(dpfFILEPTR Dfile, dpfFILEPTR Sfile, dpfFILEPTR matFile) ;
int32
dpfPutV1FileBody(dpfFILEPTR Dfile, dpfFILEPTR Sfile, dpfFILEPTR matFile) ;
int32
dpfPutB2FileBody(dpfFILEPTR dest, dpfFILEPTR infile) ;
int32
dpfPutV2FileBody(dpfFILEPTR dest, dpfFILEPTR infile) ;
void
dpfConvertV1Texture(dpfFILEPTR Sfp, dpfMATERIALPTR Fmat, dpfMATERIALPTR Bmat) ;
void
VIZsetLexdfl(dflFILEPTR fl);
#endif /* ____PFILE_H__ */