XPlor/libs/assets/clipmap.h
2025-07-10 00:04:52 -04:00

234 lines
4.3 KiB
C

#ifndef CLIPMAP_H
#define CLIPMAP_H
#include "model.h"
#include "mapent.h"
#include "effectdef.h"
struct cStaticModelWritable
{
unsigned __int16 nextModelInWorldSector;
};
struct cStaticModel_s
{
cStaticModelWritable writable;
Model *xmodel;
float origin[3];
float invScaledAxis[3][3];
float absmin[3];
float absmax[3];
};
struct dmaterial_t
{
char material[64];
int surfaceFlags;
int contentFlags;
};
struct cNode_t
{
CPlane *plane;
__int16 children[2];
};
struct CLeaf
{
unsigned __int16 firstCollAabbIndex;
unsigned __int16 collAabbCount;
int brushContents;
int terrainContents;
float mins[3];
float maxs[3];
int leafBrushNode;
__int16 cluster;
};
struct CLeafBrushNodeLeaf
{
unsigned __int16 *brushes;
};
struct CLeafBrushNodeChildren
{
float dist;
float range;
unsigned __int16 childOffset[2];
};
union CLeafBrushNodeData
{
CLeafBrushNodeLeaf leaf;
CLeafBrushNodeChildren children;
};
struct CLeafBrushNode
{
unsigned __int8 axis;
__int16 leafBrushCount;
int contents;
CLeafBrushNodeData data;
};
struct CollisionBorder
{
float distEq[3];
float zBase;
float zSlope;
float start;
float length;
};
struct CollisionPartition
{
unsigned __int8 triCount;
unsigned __int8 borderCount;
int firstTri;
CollisionBorder *borders;
};
union CollisionAabbTreeIndex
{
int firstChildIndex;
int partitionIndex;
};
struct CollisionAabbTree
{
float origin[3];
float halfSize[3];
unsigned __int16 materialIndex;
unsigned __int16 childCount;
CollisionAabbTreeIndex u;
};
struct CModel
{
float mins[3];
float maxs[3];
float radius;
CLeaf leaf;
};
struct __declspec(align(16)) CBrush
{
float mins[3];
int contents;
float maxs[3];
unsigned int numsides;
CBrushSide *sides;
__int16 axialMaterialNum[2][3];
unsigned __int8 *baseAdjacentSide;
__int16 firstAdjacentSideOffsets[2][3];
unsigned __int8 edgeCount[2][3];
};
enum DynEntityType : __int32
{
DYNENT_TYPE_INVALID = 0x0,
DYNENT_TYPE_CLUTTER = 0x1,
DYNENT_TYPE_DESTRUCT = 0x2,
DYNENT_TYPE_COUNT = 0x3,
};
struct GfxPlacement
{
float quat[4];
float origin[3];
};
struct XModelPieces;
struct DynEntityDef
{
DynEntityType type;
GfxPlacement pose;
Model *xModel;
unsigned __int16 brushModel;
unsigned __int16 physicsBrushModel;
const EffectDef *destroyFx;
XModelPieces *destroyPieces;
PhysPreset *physPreset;
int health;
PhysMass mass;
int contents;
};
struct DynEntityPose
{
GfxPlacement pose;
float radius;
};
struct DynEntityClient
{
int physObjId;
unsigned __int16 flags;
unsigned __int16 lightingHandle;
int health;
};
struct DynEntityColl
{
unsigned __int16 sector;
unsigned __int16 nextEntInSector;
float linkMins[2];
float linkMaxs[2];
};
struct ClipMap
{
const char *name;
int isInUse;
int planeCount;
CPlane *planes;
unsigned int numStaticModels;
cStaticModel_s *staticModelList;
unsigned int numMaterials;
dmaterial_t *materials;
unsigned int numBrushSides;
CBrushSide *brushsides;
unsigned int numBrushEdges;
unsigned __int8 *brushEdges;
unsigned int numNodes;
cNode_t *nodes;
unsigned int numLeafs;
CLeaf *leafs;
unsigned int leafbrushNodesCount;
CLeafBrushNode *leafbrushNodes;
unsigned int numLeafBrushes;
unsigned __int16 *leafbrushes;
unsigned int numLeafSurfaces;
unsigned int *leafsurfaces;
unsigned int vertCount;
float (*verts)[3];
int triCount;
unsigned __int16 *triIndices;
unsigned __int8 *triEdgeIsWalkable;
int borderCount;
CollisionBorder *borders;
int partitionCount;
CollisionPartition *partitions;
int aabbTreeCount;
CollisionAabbTree *aabbTrees;
unsigned int numSubModels;
CModel *cmodels;
unsigned __int16 numBrushes;
CBrush *brushes;
int numClusters;
int clusterBytes;
unsigned __int8 *visibility;
int vised;
MapEnts *mapEnts;
CBrush *box_brush;
CModel box_model;
unsigned __int16 dynEntCount[2];
DynEntityDef *dynEntDefList[2];
DynEntityPose *dynEntPoseList[2];
DynEntityClient *dynEntClientList[2];
DynEntityColl *dynEntCollList[2];
unsigned int checksum;
};
#endif // CLIPMAP_H