#ifndef __RES_VOXEL_H #define __RES_VOXEL_H #include "doomdef.h" // [RH] Voxels from Build #define MAXVOXMIPS 5 struct kvxslab_t { BYTE ztop; // starting z coordinate of top of slab BYTE zleng; // # of bytes in the color array - slab height BYTE backfacecull; // low 6 bits tell which of 6 faces are exposed BYTE col[1/*zleng*/];// color data from top to bottom }; struct FVoxelMipLevel { FVoxelMipLevel(); ~FVoxelMipLevel(); int SizeX; int SizeY; int SizeZ; fixed_t PivotX; // 24.8 fixed point fixed_t PivotY; // "" fixed_t PivotZ; // "" int *OffsetX; short *OffsetXY; BYTE *SlabData; }; struct FVoxel { int LumpNum; int NumMips; int VoxelIndex; // Needed by GZDoom BYTE *Palette; FVoxelMipLevel Mips[MAXVOXMIPS]; FVoxel(); ~FVoxel(); void Remap(); }; struct FVoxelDef { FVoxel *Voxel; int PlacedSpin; // degrees/sec to spin actors without MF_DROPPED set int DroppedSpin; // degrees/sec to spin actors with MF_DROPPED set int VoxeldefIndex; // Needed by GZDoom fixed_t Scale; angle_t AngleOffset; // added to actor's angle to compensate for wrong-facing voxels }; extern TDeletingArray Voxels; // used only to auto-delete voxels on exit. extern TDeletingArray VoxelDefs; FVoxel *R_LoadKVX(int lumpnum); FVoxelDef *R_LoadVoxelDef(int lumpnum, int spin); void R_InitVoxels(); #endif