Add Commands for T5

This commit is contained in:
Jan 2021-05-12 19:23:27 +02:00
parent 4823fe036e
commit e3a3d012e6
39 changed files with 1950 additions and 48 deletions

View File

@ -184,9 +184,9 @@ namespace T5
float piecesUpwardVelocity;
int canFloat;
float gravityScale;
float centerOfMassOffset[3];
float buoyancyBoxMin[3];
float buoyancyBoxMax[3];
vec3_t centerOfMassOffset;
vec3_t buoyancyBoxMin;
vec3_t buoyancyBoxMax;
};
enum ConstraintType
@ -225,10 +225,10 @@ namespace T5
int target_index2;
uint16_t target_ent2;
const char* target_bone2;
float offset[3];
float pos[3];
float pos2[3];
float dir[3];
vec3_t offset;
vec3_t pos;
vec3_t pos2;
vec3_t dir;
int flags;
int timeout;
int min_health;
@ -236,7 +236,7 @@ namespace T5
float distance;
float damp;
float power;
float scale[3];
vec3_t scale;
float spin_scale;
float minAngle;
float maxAngle;
@ -391,8 +391,8 @@ namespace T5
bool bLeftHandGripIK;
bool bStreamable;
unsigned int streamedFileSize;
char boneCount[10];
char notifyCount;
unsigned char boneCount[10];
unsigned char notifyCount;
char assetType;
bool isDefault;
unsigned int randomDataShortCount;
@ -491,6 +491,8 @@ namespace T5
XSurfaceCollisionTree* collisionTree;
};
typedef tdef_align(16) unsigned short r_index16_t;
struct XSurface
{
char tileMode;
@ -500,7 +502,7 @@ namespace T5
uint16_t triCount;
uint16_t baseTriIndex;
uint16_t baseVertIndex;
uint16_t* triIndices;
r_index16_t(*triIndices)[3];
XSurfaceVertexInfo vertInfo;
GfxPackedVertex* verts0;
void/*IDirect3DVertexBuffer9*/* vb0;
@ -560,7 +562,7 @@ namespace T5
struct cplane_s
{
float normal[3];
vec3_t normal;
float dist;
char type;
char signbits;
@ -574,17 +576,17 @@ namespace T5
int sflags;
};
struct BrushWrapper
struct type_align(16) BrushWrapper
{
float mins[3];
vec3_t mins;
int contents;
float maxs[3];
vec3_t maxs;
unsigned int numsides;
cbrushside_t* sides;
int axial_cflags[2][3];
int axial_sflags[2][3];
unsigned int numverts;
float(*verts)[3];
vec3_t* verts;
cplane_s* planes;
};
@ -592,15 +594,17 @@ namespace T5
{
BrushWrapper* brush;
int type;
float orientation[3][3];
float offset[3];
float halfLengths[3];
vec3_t orientation[3];
vec3_t offset;
vec3_t halfLengths;
};
typedef tdef_align(16) PhysGeomInfo PhysGeomInfo16;
struct PhysGeomList
{
unsigned int count;
PhysGeomInfo* geoms;
PhysGeomInfo16* geoms;
int contents;
};
@ -618,8 +622,8 @@ namespace T5
char lodRampType;
uint16_t* boneNames;
char* parentList;
int16_t* quats;
float* trans;
int16_t(*quats)[4];
float(*trans)[4];
char* partClassification;
DObjAnimMat* baseMat;
XSurface* surfs;
@ -821,12 +825,28 @@ namespace T5
union MaterialArgumentDef
{
const float* literalConst;
const float(*literalConst)[4];
MaterialArgumentCodeConst codeConst;
unsigned int codeSampler;
unsigned int nameHash;
};
enum MaterialShaderArgumentType
{
MTL_ARG_MATERIAL_VERTEX_CONST = 0x0,
MTL_ARG_LITERAL_VERTEX_CONST = 0x1,
MTL_ARG_MATERIAL_PIXEL_SAMPLER = 0x2,
MTL_ARG_CODE_PRIM_BEGIN = 0x3,
MTL_ARG_CODE_VERTEX_CONST = 0x3,
MTL_ARG_CODE_PIXEL_SAMPLER = 0x4,
MTL_ARG_CODE_PIXEL_CONST = 0x5,
MTL_ARG_CODE_PRIM_END = 0x6,
MTL_ARG_MATERIAL_PIXEL_CONST = 0x6,
MTL_ARG_LITERAL_PIXEL_CONST = 0x7,
MLT_ARG_COUNT
};
struct MaterialShaderArgument
{
uint16_t type;
@ -892,6 +912,52 @@ namespace T5
int platform[2];
};
enum TextureSemantic
{
TS_2D = 0x0,
TS_FUNCTION = 0x1,
TS_COLOR_MAP = 0x2,
TS_UNUSED_1 = 0x3,
TS_UNUSED_2 = 0x4,
TS_NORMAL_MAP = 0x5,
TS_UNUSED_3 = 0x6,
TS_UNUSED_4 = 0x7,
TS_SPECULAR_MAP = 0x8,
TS_UNUSED_5 = 0x9,
TS_UNUSED_6 = 0xA,
TS_WATER_MAP = 0xB,
TS_COLOR0_MAP = 0xC,
TS_COLOR1_MAP = 0xD,
TS_COLOR2_MAP = 0xE,
TS_COLOR3_MAP = 0xF,
TS_COLOR4_MAP = 0x10,
TS_COLOR5_MAP = 0x11,
TS_COLOR6_MAP = 0x12,
TS_COLOR7_MAP = 0x13,
TS_COLOR8_MAP = 0x14,
TS_COLOR9_MAP = 0x15,
TS_COLOR10_MAP = 0x16,
TS_COLOR11_MAP = 0x17,
TS_COLOR12_MAP = 0x18,
TS_COLOR13_MAP = 0x19,
TS_COLOR14_MAP = 0x1A,
TS_COLOR15_MAP = 0x1B,
TS_THROW_MAP = 0x1C,
};
enum ImageCategory
{
IMG_CATEGORY_UNKNOWN = 0x0,
IMG_CATEGORY_AUTO_GENERATED = 0x1,
IMG_CATEGORY_LIGHTMAP = 0x2,
IMG_CATEGORY_LOAD_FROM_FILE = 0x3,
IMG_CATEGORY_RAW = 0x4,
IMG_CATEGORY_FIRST_UNMANAGED = 0x5,
IMG_CATEGORY_WATER = 0x5,
IMG_CATEGORY_RENDERTARGET = 0x6,
IMG_CATEGORY_TEMP = 0x7,
};
struct GfxImage
{
GfxTexture texture;
@ -947,6 +1013,8 @@ namespace T5
SND_ASSET_FLAG_PAD_LOOP_BUFFER = 0x2,
};
typedef tdef_align(2048) char snd_align_char;
struct snd_asset
{
unsigned int version;
@ -962,7 +1030,7 @@ namespace T5
unsigned int seek_table_count;
unsigned int* seek_table;
unsigned int data_size;
char* data;
snd_align_char* data;
};
struct LoadedSound
@ -971,10 +1039,12 @@ namespace T5
snd_asset sound;
};
typedef tdef_align(2048) char char_align_2048;
struct PrimedSound
{
const char* name;
char* buffer;
char_align_2048* buffer;
unsigned int size;
};
@ -990,6 +1060,15 @@ namespace T5
StreamedSound* streamSnd;
};
enum snd_alias_type_t
{
SAT_UNKNOWN = 0x0,
SAT_LOADED = 0x1,
SAT_STREAMED = 0x2,
SAT_PRIMED = 0x3,
SAT_COUNT = 0x4,
};
struct SoundFile
{
SoundFileRef u;
@ -1232,7 +1311,7 @@ namespace T5
int axial_cflags[2][3];
int axial_sflags[2][3];
unsigned int numverts;
float(*verts)[3];
vec3_t* verts;
};
enum DynEntityType
@ -1406,9 +1485,9 @@ namespace T5
unsigned int numLeafSurfaces;
unsigned int* leafsurfaces;
unsigned int vertCount;
float(*verts)[3];
vec3_t* verts;
unsigned int numBrushVerts;
float(*brushVerts)[3];
vec3_t* brushVerts;
unsigned int nuinds;
uint16_t* uinds;
int triCount;
@ -1832,7 +1911,7 @@ namespace T5
GfxPortalWritable writable;
DpvsPlane plane;
GfxCell* cell;
float(*vertices)[3];
vec3_t* vertices;
char vertexCount;
float hullAxis[2][3];
};
@ -1938,6 +2017,8 @@ namespace T5
char rgb[56][3];
};
typedef tdef_align(4) char aligned_byte_pointer;
struct GfxLightGrid
{
bool hasLightRegions;
@ -1948,7 +2029,7 @@ namespace T5
unsigned int colAxis;
uint16_t* rowDataStart;
unsigned int rawRowDataSize;
char* rawRowData;
aligned_byte_pointer* rawRowData;
unsigned int entryCount;
GfxLightGridEntry* entries;
unsigned int colorCount;
@ -2130,14 +2211,14 @@ namespace T5
char* surfaceVisData[3];
char* smodelVisDataCameraSaved;
char* surfaceVisDataCameraSaved;
unsigned int* lodData;
raw_uint128* lodData;
uint16_t* sortedSurfIndex;
GfxStaticModelInst* smodelInsts;
GfxSurface* surfaces;
GfxCullGroup* cullGroups;
GfxStaticModelDrawInst* smodelDrawInsts;
GfxDrawSurf* surfaceMaterials;
unsigned int* surfaceCastsSunShadow;
raw_uint128* surfaceCastsSunShadow;
volatile int usageCount;
};
@ -2167,7 +2248,7 @@ namespace T5
struct GfxWaterBuffer
{
unsigned int bufferSize;
float(*buffer)[4];
vec4_t* buffer;
};
struct Occluder
@ -2385,6 +2466,14 @@ namespace T5
operandInternalDataUnion internals;
};
enum expressionRpnEnum
{
RPN_CONSTANT = 0x0,
RPN_CMD_IDX = 0x1,
RPN_CMD = 0x2,
RPN_END = 0x3,
};
union expressionRpnDataUnion
{
Operand constant;
@ -2897,6 +2986,140 @@ namespace T5
MISSILE_GUIDANCE_COUNT = 0x7,
};
enum weapAnimFiles_t
{
WEAP_ANIM_ROOT = 0x0,
WEAP_ANIM_IDLE = 0x1,
WEAP_ANIM_EMPTY_IDLE = 0x2,
WEAP_ANIM_FIRE = 0x3,
WEAP_ANIM_HOLD_FIRE = 0x4,
WEAP_ANIM_LASTSHOT = 0x5,
WEAP_ANIM_RECHAMBER = 0x6,
WEAP_ANIM_MELEE = 0x7,
WEAP_ANIM_MELEE_CHARGE = 0x8,
WEAP_ANIM_RELOAD = 0x9,
WEAP_ANIM_RELOAD_RIGHT = 0xA,
WEAP_ANIM_RELOAD_EMPTY = 0xB,
WEAP_ANIM_RELOAD_START = 0xC,
WEAP_ANIM_RELOAD_END = 0xD,
WEAP_ANIM_RELOAD_QUICK = 0xE,
WEAP_ANIM_RELOAD_QUICK_EMPTY = 0xF,
WEAP_ANIM_RAISE = 0x10,
WEAP_ANIM_FIRST_RAISE = 0x11,
WEAP_ANIM_DROP = 0x12,
WEAP_ANIM_ALT_RAISE = 0x13,
WEAP_ANIM_ALT_DROP = 0x14,
WEAP_ANIM_QUICK_RAISE = 0x15,
WEAP_ANIM_QUICK_DROP = 0x16,
WEAP_ANIM_EMPTY_RAISE = 0x17,
WEAP_ANIM_EMPTY_DROP = 0x18,
WEAP_ANIM_SPRINT_IN = 0x19,
WEAP_ANIM_SPRINT_LOOP = 0x1A,
WEAP_ANIM_SPRINT_OUT = 0x1B,
WEAP_ANIM_SPRINT_EMPTY_IN = 0x1C,
WEAP_ANIM_SPRINT_EMPTY_LOOP = 0x1D,
WEAP_ANIM_SPRINT_EMPTY_OUT = 0x1E,
WEAP_ANIM_LOWREADY_IN = 0x1F,
WEAP_ANIM_LOWREADY_LOOP = 0x20,
WEAP_ANIM_LOWREADY_OUT = 0x21,
WEAP_ANIM_CONT_FIRE_IN = 0x22,
WEAP_ANIM_CONT_FIRE_LOOP = 0x23,
WEAP_ANIM_CONT_FIRE_OUT = 0x24,
WEAP_ANIM_DEPLOY = 0x25,
WEAP_ANIM_BREAKDOWN = 0x26,
WEAP_ANIM_DETONATE = 0x27,
WEAP_ANIM_NIGHTVISION_WEAR = 0x28,
WEAP_ANIM_NIGHTVISION_REMOVE = 0x29,
WEAP_ANIM_ADS_FIRE = 0x2A,
WEAP_ANIM_ADS_LASTSHOT = 0x2B,
WEAP_ANIM_ADS_RECHAMBER = 0x2C,
WEAP_ANIM_DTP_IN = 0x2D,
WEAP_ANIM_DTP_LOOP = 0x2E,
WEAP_ANIM_DTP_OUT = 0x2F,
WEAP_ANIM_DTP_EMPTY_IN = 0x30,
WEAP_ANIM_DTP_EMPTY_LOOP = 0x31,
WEAP_ANIM_DTP_EMPTY_OUT = 0x32,
WEAP_ANIM_SLIDE_IN = 0x33,
WEAP_ANIM_MANTLE = 0x34,
WEAP_ANIM_CAMERA_SPRINT_LOOP = 0x35,
WEAP_ANIM_CAMERA_DTP_IN = 0x36,
WEAP_ANIM_CAMERA_DTP_LOOP = 0x37,
WEAP_ANIM_CAMERA_DTP_OUT = 0x38,
WEAP_ANIM_CAMERA_MANTLE = 0x39,
WEAP_ANIM_FIRE_LEFT = 0x3A,
WEAP_ANIM_LASTSHOT_LEFT = 0x3B,
WEAP_ANIM_IDLE_LEFT = 0x3C,
WEAP_ANIM_EMPTY_IDLE_LEFT = 0x3D,
WEAP_ANIM_RELOAD_EMPTY_LEFT = 0x3E,
WEAP_ANIM_RELOAD_LEFT = 0x3F,
WEAP_ANIM_ADS_UP = 0x40,
WEAP_ANIM_ADS_DOWN = 0x41,
NUM_WEAP_ANIMS
};
enum materialSurfType_t
{
SURF_TYPE_DEFAULT,
SURF_TYPE_BARK,
SURF_TYPE_BRICK,
SURF_TYPE_CARPET,
SURF_TYPE_CLOTH,
SURF_TYPE_CONCRETE,
SURF_TYPE_DIRT,
SURF_TYPE_FLESH,
SURF_TYPE_FOLIAGE,
SURF_TYPE_GLASS,
SURF_TYPE_GRASS,
SURF_TYPE_GRAVEL,
SURF_TYPE_ICE,
SURF_TYPE_METAL,
SURF_TYPE_MUD,
SURF_TYPE_PAPER,
SURF_TYPE_PLASTER,
SURF_TYPE_ROCK,
SURF_TYPE_SAND,
SURF_TYPE_SNOW,
SURF_TYPE_WATER,
SURF_TYPE_WOOD,
SURF_TYPE_ASPHALT,
SURF_TYPE_CERAMIC,
SURF_TYPE_PLASTIC,
SURF_TYPE_RUBBER,
SURF_TYPE_CUSHION,
SURF_TYPE_FRUIT,
SURF_TYPE_PAINTED_METAL,
SURF_TYPE_PLAYER,
SURF_TYPE_TALL_GRASS,
SURF_TYPE_NUM
};
enum hitLocation_t
{
HITLOC_NONE = 0x0,
HITLOC_HELMET = 0x1,
HITLOC_HEAD = 0x2,
HITLOC_NECK = 0x3,
HITLOC_TORSO_UPR = 0x4,
HITLOC_TORSO_LWR = 0x5,
HITLOC_R_ARM_UPR = 0x6,
HITLOC_L_ARM_UPR = 0x7,
HITLOC_R_ARM_LWR = 0x8,
HITLOC_L_ARM_LWR = 0x9,
HITLOC_R_HAND = 0xA,
HITLOC_L_HAND = 0xB,
HITLOC_R_LEG_UPR = 0xC,
HITLOC_L_LEG_UPR = 0xD,
HITLOC_R_LEG_LWR = 0xE,
HITLOC_L_LEG_LWR = 0xF,
HITLOC_R_FOOT = 0x10,
HITLOC_L_FOOT = 0x11,
HITLOC_GUN = 0x12,
HITLOC_NUM
};
struct flameTable
{
float flameVar_streamChunkGravityStart;
@ -3467,9 +3690,17 @@ namespace T5
float fHipViewScatterMax;
float fightDist;
float maxDist;
const char* accuracyGraphName[2];
vec2_t* accuracyGraphKnots[2];
vec2_t* originalAccuracyGraphKnots[2];
//const char *accuracyGraphName[2]; // TODO: Order is accuracyGraphName[0] -> accuracyGraphKnots[0] -> originalAccuracyGraphKnots[0] -> accuracyGraphName[1] -> ...
// Which is currently not possible to do in code generation. Afaik this is the only place where this is the case.
// So might be something to fix but on the other hand it might be too much work for this little inconvenience.
const char* accuracyGraphName0;
const char* accuracyGraphName1;
//vec2_t *accuracyGraphKnots[2];
vec2_t* accuracyGraphKnots0;
vec2_t* accuracyGraphKnots1;
//vec2_t *originalAccuracyGraphKnots[2];
vec2_t* originalAccuracyGraphKnots0;
vec2_t* originalAccuracyGraphKnots1;
int accuracyGraphKnotCount[2];
int originalAccuracyGraphKnotCount[2];
int iPositionReloadTransTime;
@ -3833,6 +4064,26 @@ namespace T5
const char* spawnSound;
};
enum FxElemType : char
{
FX_ELEM_TYPE_SPRITE_BILLBOARD = 0x0,
FX_ELEM_TYPE_SPRITE_ORIENTED = 0x1,
FX_ELEM_TYPE_SPRITE_ROTATED = 0x2,
FX_ELEM_TYPE_TAIL = 0x3,
FX_ELEM_TYPE_LINE = 0x4,
FX_ELEM_TYPE_TRAIL = 0x5,
FX_ELEM_TYPE_CLOUD = 0x6,
FX_ELEM_TYPE_MODEL = 0x7,
FX_ELEM_TYPE_OMNI_LIGHT = 0x8,
FX_ELEM_TYPE_SPOT_LIGHT = 0x9,
FX_ELEM_TYPE_SOUND = 0xA,
FX_ELEM_TYPE_DECAL = 0xB,
FX_ELEM_TYPE_RUNNER = 0xC,
FX_ELEM_TYPE_COUNT = 0xD,
FX_ELEM_TYPE_LAST_SPRITE = 0x5,
FX_ELEM_TYPE_LAST_DRAWN = 0x9,
};
struct FxElemDef
{
int flags;
@ -4038,15 +4289,15 @@ namespace T5
GlassDef* glassDef;
unsigned int index;
unsigned int brushModel;
float origin[3];
float angles[3];
float absmin[3];
float absmax[3];
vec3_t origin;
vec3_t angles;
vec3_t absmin;
vec3_t absmax;
bool isPlanar;
char numOutlineVerts;
float(*outline)[2];
float outlineAxis[3][3];
float outlineOrigin[3];
vec2_t* outline;
vec3_t outlineAxis[3];
vec3_t outlineOrigin;
float uvScale;
float thickness;
};

View File

@ -30,6 +30,7 @@ asset FxEffectDef ASSET_TYPE_FX;
asset FxImpactTable ASSET_TYPE_IMPACT_FX;
asset RawFile ASSET_TYPE_RAWFILE;
asset StringTable ASSET_TYPE_STRINGTABLE;
asset PackIndex ASSET_TYPE_PACK_INDEX;
asset XGlobals ASSET_TYPE_XGLOBALS;
asset ddlRoot_t ASSET_TYPE_DDL;
asset Glasses ASSET_TYPE_GLASSES;
@ -72,6 +73,7 @@ block normal XFILE_BLOCK_PHYSICAL;
#include "XAssets/FxImpactTable.txt"
#include "XAssets/RawFile.txt"
#include "XAssets/StringTable.txt"
#include "XAssets/PackIndex.txt"
#include "XAssets/XGlobals.txt"
#include "XAssets/ddlRoot_t.txt"
#include "XAssets/Glasses.txt"

View File

@ -0,0 +1,16 @@
// =========================================
// ComWorld
// =========================================
use ComWorld;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count primaryLights primaryLightCount;
set count waterCells numWaterCells;
set count burnableCells numBurnableCells;
// ComPrimaryLight
set string ComPrimaryLight::defName;
// ComBurnableCell
set count ComBurnableCell::data 32;

View File

@ -0,0 +1,21 @@
// =========================================
// DestructibleDef
// =========================================
use DestructibleDef;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count pieces numPieces;
// DestructiblePiece
use DestructiblePiece;
set string damageSound;
set string burnSound;
set scriptstring enableLabel;
// DestructibleStage
use DestructibleStage;
set string breakSound;
set string breakNotify;
set string loopSound;
set scriptstring showBone;

View File

@ -0,0 +1,21 @@
// =========================================
// EmblemSet
// =========================================
use EmblemSet;
set block XFILE_BLOCK_TEMP;
set count layers layerCount;
set count categories categoryCount;
set count icons iconCount;
set count backgrounds backgroundCount;
set count backgroundLookup backgroundLookupCount;
// EmblemCategory
use EmblemCategory;
set string name;
set string description;
// EmblemIcon
set string EmblemIcon::description;
// EmblemBackground
set string EmblemBackground::description;

View File

@ -0,0 +1,9 @@
// =========================================
// Font_s
// =========================================
use Font_s;
set block XFILE_BLOCK_TEMP;
set string fontName;
set name fontName;
set reusable glyphs;
set count glyphs glyphCount;

View File

@ -0,0 +1,48 @@
// =========================================
// FxEffectDef
// =========================================
use FxEffectDef;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count elemDefs elemDefCountLooping + elemDefCountOneShot + elemDefCountEmission;
// FxElemDef
use FxElemDef;
set count velSamples velIntervalCount + 1;
set count visSamples visStateIntervalCount + 1;
// FxElemDefVisuals
use FxElemDefVisuals;
set condition markArray FxElemDef::elemType == FX_ELEM_TYPE_DECAL;
set count markArray FxElemDef::visualCount;
set condition array FxElemDef::visualCount > 1;
set count array FxElemDef::visualCount;
// FxElemVisuals
use FxElemVisuals;
set condition anonymous never;
set condition model FxElemDef::elemType == FX_ELEM_TYPE_MODEL;
set condition effectDef FxElemDef::elemType == FX_ELEM_TYPE_RUNNER;
set condition soundName FxElemDef::elemType == FX_ELEM_TYPE_SOUND;
set string soundName;
set condition material FxElemDef::elemType == FX_ELEM_TYPE_SPRITE_BILLBOARD
|| FxElemDef::elemType == FX_ELEM_TYPE_SPRITE_ORIENTED
|| FxElemDef::elemType == FX_ELEM_TYPE_SPRITE_ROTATED
|| FxElemDef::elemType == FX_ELEM_TYPE_TAIL
|| FxElemDef::elemType == FX_ELEM_TYPE_LINE
|| FxElemDef::elemType == FX_ELEM_TYPE_TRAIL
|| FxElemDef::elemType == FX_ELEM_TYPE_CLOUD;
// FxEffectDefRef
use FxEffectDefRef;
set condition handle never;
set string name;
// FxTrailDef
use FxTrailDef;
set count verts vertCount;
set count inds indCount;
// FxElemSpawnSound
set string FxElemSpawnSound::spawnSound;

View File

@ -0,0 +1,8 @@
// =========================================
// FxImpactTable
// =========================================
use FxImpactTable;
set block XFILE_BLOCK_TEMP;
set string name;
//set name name;
set count table 21;

View File

@ -0,0 +1,7 @@
// =========================================
// GameWorldMp
// =========================================
use GameWorldMp;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;

View File

@ -0,0 +1,38 @@
// =========================================
// GameWorldSp
// =========================================
use GameWorldSp;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
// PathData
use PathData;
set count nodes nodeCount + 128;
set block basenodes XFILE_BLOCK_RUNTIME;
set count basenodes nodeCount + 128;
set count chainNodeForNode nodeCount;
set count nodeForChainNode nodeCount;
set count pathVis visBytes;
set count nodeTree nodeTreeCount;
// pathnode_t
set condition pathnode_t::transient never;
// pathnode_constant_t
use pathnode_constant_t;
set scriptstring targetname;
set scriptstring script_linkName;
set scriptstring script_noteworthy;
set scriptstring target;
set scriptstring animscript;
set count Links totalLinkCount;
// pathnode_tree_t
use pathnode_tree_t;
set condition u::s axis < 0;
set reusable u::child;
// pathnode_tree_nodes_t
use pathnode_tree_nodes_t;
set count nodes nodeCount;

View File

@ -0,0 +1,23 @@
// =========================================
// GfxImage
// =========================================
use GfxImage;
set block XFILE_BLOCK_TEMP;
set action OnImageLoaded(GfxImage);
set string name;
set name name;
set condition pixels never;
reorder:
name
texture;
// GfxTexture
use GfxTexture;
set reusable loadDef;
set block loadDef XFILE_BLOCK_TEMP;
set condition texture never;
// GfxImageLoadDef
use GfxImageLoadDef;
set action LoadImageData(GfxImageLoadDef, GfxImage);
set arraysize data resourceSize;

View File

@ -0,0 +1,7 @@
// =========================================
// GfxLightDef
// =========================================
use GfxLightDef;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;

View File

@ -0,0 +1,159 @@
// =========================================
// GfxWorld
// =========================================
use GfxWorld;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set string baseName;
set count skyStartSurfs skySurfCount;
set string skyBoxModel;
set reusable sunLight;
set count coronas coronaCount;
set count shadowMapVolumes shadowMapVolumeCount;
set count shadowMapVolumePlanes shadowMapVolumePlaneCount;
set count exposureVolumes exposureVolumeCount;
set count exposureVolumePlanes exposureVolumePlaneCount;
set count cells dpvsPlanes::cellCount;
set count models modelCount;
set count materialMemory materialMemoryCount;
set block cellCasterBits XFILE_BLOCK_RUNTIME;
set count cellCasterBits dpvsPlanes::cellCount * ((dpvsPlanes::cellCount + 31) / 32);
set block sceneDynModel XFILE_BLOCK_RUNTIME;
set count sceneDynModel dpvsDyn::dynEntClientCount[0];
set block sceneDynBrush XFILE_BLOCK_RUNTIME;
set count sceneDynBrush dpvsDyn::dynEntClientCount[1];
set block primaryLightEntityShadowVis XFILE_BLOCK_RUNTIME;
set count primaryLightEntityShadowVis (primaryLightCount - sunPrimaryLightIndex - 1) * 0x2000;
set block primaryLightDynEntShadowVis XFILE_BLOCK_RUNTIME;
set count primaryLightDynEntShadowVis[0] dpvsDyn::dynEntClientCount[0] * (primaryLightCount - sunPrimaryLightIndex - 1);
set count primaryLightDynEntShadowVis[1] dpvsDyn::dynEntClientCount[1] * (primaryLightCount - sunPrimaryLightIndex - 1);
set block nonSunPrimaryLightForModelDynEnt XFILE_BLOCK_RUNTIME;
set count nonSunPrimaryLightForModelDynEnt dpvsDyn::dynEntClientCount[0];
set count shadowGeom primaryLightCount;
set count lightRegion primaryLightCount;
set count worldLodChains worldLodChainCount;
set count worldLodInfos worldLodInfoCount;
set count worldLodSurfaces worldLodSurfaceCount;
set count occluders numOccluders;
set count outdoorBounds numOutdoorBounds;
set count heroLights heroLightCount;
set count heroLightTree heroLightTreeCount;
// GfxWorldStreamInfo
use GfxWorldStreamInfo;
set count aabbTrees aabbTreeCount;
set count leafRefs leafRefCount;
// GfxWorldDpvsPlanes
use GfxWorldDpvsPlanes;
set reusable planes;
set count planes GfxWorld::planeCount;
set count nodes GfxWorld::nodeCount;
set block sceneEntCellBits XFILE_BLOCK_RUNTIME;
set count sceneEntCellBits cellCount * 0x200;
// GfxCell
use GfxCell;
set count aabbTree aabbTreeCount;
set count portals portalCount;
set count cullGroups cullGroupCount;
set count reflectionProbes reflectionProbeCount;
// GfxAabbTree
use GfxAabbTree;
set reusable smodelIndexes;
set count smodelIndexes smodelIndexCount;
// GfxPortal
use GfxPortal;
set condition writable never;
set reusable cell;
set count vertices vertexCount;
// GfxWorldDraw
use GfxWorldDraw;
set count reflectionProbes reflectionProbeCount;
set block reflectionProbeTextures XFILE_BLOCK_RUNTIME;
set count reflectionProbeTextures reflectionProbeCount;
set count lightmaps lightmapCount;
set block lightmapPrimaryTextures XFILE_BLOCK_RUNTIME;
set count lightmapPrimaryTextures lightmapCount;
set block lightmapSecondaryTextures XFILE_BLOCK_RUNTIME;
set count lightmapSecondaryTextures lightmapCount;
set block lightmapSecondaryTexturesB XFILE_BLOCK_RUNTIME;
set count lightmapSecondaryTexturesB lightmapCount;
set count indices indexCount;
// GfxReflectionProbe
use GfxReflectionProbe;
set count probeVolumes probeVolumeCount;
// GfxWorldVertexData
use GfxWorldVertexData;
set count vertices GfxWorldDraw::vertexCount;
set condition worldVb never;
// GfxWorldVertexLayerData
use GfxWorldVertexLayerData;
set count data GfxWorldDraw::vertexLayerDataSize;
set condition layerVb never;
// GfxLightGrid
use GfxLightGrid;
set count rowDataStart maxs[rowAxis] - mins[rowAxis] + 1;
set count rawRowData rawRowDataSize;
set count entries entryCount;
set count colors colorCount;
// GfxShadowGeometry
use GfxShadowGeometry;
set count sortedSurfIndex surfaceCount;
set count smodelIndex smodelCount;
// GfxLightRegion
use GfxLightRegion;
set count hulls hullCount;
// GfxLightRegionHull
use GfxLightRegionHull;
set count axis axisCount;
// GfxWorldDpvsStatic
use GfxWorldDpvsStatic;
set block smodelVisData XFILE_BLOCK_RUNTIME;
set count smodelVisData smodelCount;
set block surfaceVisData XFILE_BLOCK_RUNTIME;
set count surfaceVisData staticSurfaceCount;
set block smodelVisDataCameraSaved XFILE_BLOCK_RUNTIME;
set count smodelVisDataCameraSaved smodelCount;
set block surfaceVisDataCameraSaved XFILE_BLOCK_RUNTIME;
set count surfaceVisDataCameraSaved staticSurfaceCount;
set block lodData XFILE_BLOCK_RUNTIME;
set count lodData 2 * smodelVisDataCount;
set count sortedSurfIndex staticSurfaceCount;
set count smodelInsts smodelCount;
set count surfaces GfxWorld::surfaceCount;
set count cullGroups GfxWorld::cullGroupCount;
set count smodelDrawInsts smodelCount;
set block surfaceMaterials XFILE_BLOCK_RUNTIME;
set count surfaceMaterials staticSurfaceCount;
set block surfaceCastsSunShadow XFILE_BLOCK_RUNTIME;
set count surfaceCastsSunShadow surfaceVisDataCount;
// GfxWorldDpvsDynamic
use GfxWorldDpvsDynamic;
set block dynEntCellBits XFILE_BLOCK_RUNTIME;
set count dynEntCellBits[0] dynEntClientWordCount[0] * GfxWorld::dpvsPlanes::cellCount;
set count dynEntCellBits[1] dynEntClientWordCount[1] * GfxWorld::dpvsPlanes::cellCount;
set block dynEntVisData XFILE_BLOCK_RUNTIME;
set count dynEntVisData[0][0] 32 * dynEntClientWordCount[0];
set count dynEntVisData[1][0] 32 * dynEntClientWordCount[1];
set count dynEntVisData[0][1] 32 * dynEntClientWordCount[0];
set count dynEntVisData[1][1] 32 * dynEntClientWordCount[1];
set count dynEntVisData[0][2] 32 * dynEntClientWordCount[0];
set count dynEntVisData[1][2] 32 * dynEntClientWordCount[1];
// GfxWaterBuffer
use GfxWaterBuffer;
set count buffer bufferSize / 16;

View File

@ -0,0 +1,21 @@
// =========================================
// Glasses
// =========================================
use Glasses;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count glasses numGlasses;
set condition workMemory never;
// Glass
use Glass;
set reusable glassDef;
set count outline numOutlineVerts;
// GlassDef
use GlassDef;
set string name;
set string crackSound;
set string shatterShound;
set string autoShatterShound;

View File

@ -0,0 +1,8 @@
// =========================================
// LocalizeEntry
// =========================================
use LocalizeEntry;
set block XFILE_BLOCK_TEMP;
set string value;
set string name;
set name name;

View File

@ -0,0 +1,8 @@
// =========================================
// MapEnts
// =========================================
use MapEnts;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count entityString numEntityChars;

View File

@ -0,0 +1,23 @@
// =========================================
// Material
// =========================================
use Material;
set block XFILE_BLOCK_TEMP;
set string info::name;
set name info::name;
set reusable textureTable;
set count textureTable textureCount;
set reusable constantTable;
set count constantTable constantCount;
set reusable stateBitsTable;
set count stateBitsTable stateBitsCount;
// MaterialTextureDef
use MaterialTextureDef;
set condition u::water semantic == TS_WATER_MAP;
set reusable u::water;
// water_t
use water_t;
set count H0 N * M;
set count wTerm N * M;

View File

@ -0,0 +1,50 @@
// =========================================
// MaterialTechniqueSet
// =========================================
use MaterialTechniqueSet;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set reusable techniques;
// MaterialTechnique
use MaterialTechnique;
set string name;
set arraysize passArray passCount;
reorder:
passArray
name;
// MaterialPass
use MaterialPass;
set count args perPrimArgCount + perObjArgCount + stableArgCount;
set reusable vertexShader;
set reusable vertexDecl;
set reusable pixelShader;
// MaterialVertexStreamRouting
set condition MaterialVertexStreamRouting::decl never;
// MaterialVertexShader
set string MaterialVertexShader::name;
// MaterialVertexShaderProgram
set condition MaterialVertexShaderProgram::vs never;
// GfxVertexShaderLoadDef
set count GfxVertexShaderLoadDef::program programSize;
// MaterialPixelShader;
set string MaterialPixelShader::name;
// MaterialPixelShaderProgram
set condition MaterialPixelShaderProgram::ps never;
// GfxPixelShaderLoadDef
set count GfxPixelShaderLoadDef::program programSize;
// MaterialShaderArgument
use MaterialShaderArgument;
set condition u::literalConst type == MTL_ARG_LITERAL_VERTEX_CONST
|| type == MTL_ARG_LITERAL_PIXEL_CONST;
set reusable u::literalConst;

View File

@ -0,0 +1,8 @@
// =========================================
// MenuList
// =========================================
use MenuList;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count menus menuCount;

View File

@ -0,0 +1,8 @@
// =========================================
// PackIndex
// =========================================
use PackIndex;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count entries header::count;

View File

@ -0,0 +1,14 @@
// =========================================
// PhysConstraints
// =========================================
use PhysConstraints;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
use PhysConstraint;
set scriptstring targetname;
set scriptstring target_ent1;
set string target_bone1;
set scriptstring target_ent2;
set string target_bone2;

View File

@ -0,0 +1,8 @@
// =========================================
// PhysPreset
// =========================================
use PhysPreset;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set string sndAliasPrefix;

View File

@ -0,0 +1,8 @@
// =========================================
// RawFile
// =========================================
use RawFile;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count buffer len + 1;

View File

@ -0,0 +1,50 @@
// =========================================
// SndBank
// =========================================
use SndBank;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count alias aliasCount;
set count aliasIndex aliasCount;
set count radverbs radverbCount;
set count snapshots snapshotCount;
// snd_alias_list_t
use snd_alias_list_t;
set string name;
set reusable head;
set count head count;
// snd_alias_t
use snd_alias_t;
set string name;
set string subtitle;
set string secondaryname;
set reusable soundFile;
// SoundFile
use SoundFile;
set condition u::loadSnd type == SAT_LOADED;
set reusable u::loadSnd;
set reusable u::streamSnd;
// LoadedSound
set string LoadedSound::name;
// snd_asset
use snd_asset;
set count seek_table seek_table_count;
set count data data_size;
set block data XFILE_BLOCK_PHYSICAL;
// StreamedSound
use StreamedSound;
set string filename;
set reusable primeSnd;
// PrimedSound
use PrimedSound;
set string name;
set count buffer size;
set block buffer XFILE_BLOCK_LARGE;

View File

@ -0,0 +1,13 @@
// =========================================
// SndDriverGlobals
// =========================================
use SndDriverGlobals;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count groups groupCount;
set count curves curveCount;
set count pans panCount;
set count snapshotGroups snapshotGroupCount;
set count contexts contextCount;
set count masters masterCount;

View File

@ -0,0 +1,10 @@
// =========================================
// SndPatch
// =========================================
use SndPatch;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count elements elementCount;
set count files fileCount;
set reusable files;

View File

@ -0,0 +1,12 @@
// =========================================
// StringTable
// =========================================
use StringTable;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count values columnCount * rowCount;
set count cellIndex columnCount * rowCount;
// StringTableCell
set string StringTableCell::string;

View File

@ -0,0 +1,166 @@
// =========================================
// WeaponVariantDef
// =========================================
use WeaponVariantDef;
set block XFILE_BLOCK_TEMP;
set string szInternalName;
set name szInternalName;
set reusable weapDef;
set string szDisplayName;
set string szAltWeaponName;
set string szXAnims;
set count szXAnims NUM_WEAP_ANIMS;
set reusable szXAnims;
set scriptstring hideTags;
set count hideTags 32;
set reusable hideTags;
set string szAmmoName;
set string szClipName;
// WeaponDef
use WeaponDef;
set string szOverlayName;
set count gunXModel 16;
set reusable gunXModel;
set string szModeName;
set scriptstring notetrackSoundMapKeys;
set count notetrackSoundMapKeys 20;
set reusable notetrackSoundMapKeys;
set scriptstring notetrackSoundMapValues;
set count notetrackSoundMapValues 20;
set reusable notetrackSoundMapValues;
set string parentWeaponName;
set string pickupSound;
set string pickupSoundPlayer;
set string ammoPickupSound;
set string ammoPickupSoundPlayer;
set string projectileSound;
set string pullbackSound;
set string pullbackSoundPlayer;
set string fireSound;
set string fireSoundPlayer;
set string fireLoopSound;
set string fireLoopSoundPlayer;
set string fireLoopEndSound;
set string fireLoopEndSoundPlayer;
set string fireStopSound;
set string fireStopSoundPlayer;
set string fireLastSound;
set string fireLastSoundPlayer;
set string emptyFireSound;
set string emptyFireSoundPlayer;
set string crackSound;
set string whizbySound;
set string meleeSwipeSound;
set string meleeSwipeSoundPlayer;
set string meleeHitSound;
set string meleeMissSound;
set string rechamberSound;
set string rechamberSoundPlayer;
set string reloadSound;
set string reloadSoundPlayer;
set string reloadEmptySound;
set string reloadEmptySoundPlayer;
set string reloadStartSound;
set string reloadStartSoundPlayer;
set string reloadEndSound;
set string reloadEndSoundPlayer;
set string rotateLoopSound;
set string rotateLoopSoundPlayer;
set string deploySound;
set string deploySoundPlayer;
set string finishDeploySound;
set string finishDeploySoundPlayer;
set string breakdownSound;
set string breakdownSoundPlayer;
set string finishBreakdownSound;
set string finishBreakdownSoundPlayer;
set string detonateSound;
set string detonateSoundPlayer;
set string nightVisionWearSound;
set string nightVisionWearSoundPlayer;
set string nightVisionRemoveSound;
set string nightVisionRemoveSoundPlayer;
set string altSwitchSound;
set string altSwitchSoundPlayer;
set string raiseSound;
set string raiseSoundPlayer;
set string firstRaiseSound;
set string firstRaiseSoundPlayer;
set string putawaySound;
set string putawaySoundPlayer;
set string overheatSound;
set string overheatSoundPlayer;
set string adsZoomSound;
set string bounceSound;
set count bounceSound SURF_TYPE_NUM;
set reusable bounceSound;
set string standMountedWeapdef;
set string crouchMountedWeapdef;
set string proneMountedWeapdef;
set count worldModel 16;
set reusable worldModel;
set string szSharedAmmoCapName;
set scriptstring explosionTag;
set string spinLoopSound;
set string spinLoopSoundPlayer;
set string startSpinSound;
set string startSpinSoundPlayer;
set string stopSpinSound;
set string stopSpinSoundPlayer;
set string stackSound;
set string szSpawnedGrenadeWeaponName;
set string szDualWieldWeaponName;
set string projExplosionSound;
set string projDudSound;
set string mortarShellSound;
set string tankShellSound;
set count parallelBounce SURF_TYPE_NUM;
set reusable parallelBounce;
set count perpendicularBounce SURF_TYPE_NUM;
set reusable perpendicularBounce;
set string projIgnitionSound;
set string accuracyGraphName0;
set string accuracyGraphName1;
set reusable accuracyGraphKnots0;
set reusable accuracyGraphKnots1;
set count accuracyGraphKnots0 accuracyGraphKnotCount[0];
set count accuracyGraphKnots1 accuracyGraphKnotCount[1];
set reusable originalAccuracyGraphKnots0;
set reusable originalAccuracyGraphKnots1;
set count originalAccuracyGraphKnots0 accuracyGraphKnotCount[0];
set count originalAccuracyGraphKnots1 accuracyGraphKnotCount[1];
set string szUseHintString;
set string dropHintString;
set string szScript;
set count locationDamageMultipliers HITLOC_NUM;
set reusable locationDamageMultipliers;
set string fireRumble;
set string meleeImpactRumble;
set string reloadRumble;
set string flameTableFirstPerson;
set string flameTableThirdPerson;
set reusable flameTableFirstPersonPtr;
set reusable flameTableThirdPersonPtr;
reorder:
...
accuracyGraphName0
accuracyGraphKnots0
originalAccuracyGraphKnots0
accuracyGraphName1
accuracyGraphKnots1
originalAccuracyGraphKnots1;
reorder:
...
killIcon
indicatorIcon;
// flameTable
use flameTable;
set string name;
set string flameOffLoopSound;
set string flameIgniteSound;
set string flameOnLoopSound;
set string flameCooldownSound;

View File

@ -0,0 +1,69 @@
// =========================================
// XAnimParts
// =========================================
use XAnimParts;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set scriptstring names;
set count names boneCount[9];
set count notify notifyCount;
set count deltaPart 1;
set count dataByte dataByteCount;
set count dataShort dataShortCount;
set count dataInt dataIntCount;
set count randomDataShort randomDataShortCount;
set count randomDataByte randomDataByteCount;
set count randomDataInt randomDataIntCount;
set count indices::_1 indexCount;
set count indices::_2 indexCount;
set condition indices::_1 numframes < 256;
set condition indices::data never;
reorder:
name
names
notify
deltaPart
dataByte
dataShort
dataInt
randomDataShort
randomDataByte
randomDataInt
indices;
// XAnimNotifyInfo
set scriptstring XAnimNotifyInfo::name;
// XAnimDeltaPart
use XAnimDeltaPart;
set count trans 1;
set count quat 1;
// XAnimPartTrans
use XAnimPartTrans;
set condition u::frames size > 0;
set condition u::frames::indices::_1 XAnimParts::numframes < 256;
set arraysize u::frames::indices::_1 size + 1;
set arraysize u::frames::indices::_2 size + 1;
set condition u::frames::frames::_1 smallTrans;
set count u::frames::frames::_1 size + 1;
set count u::frames::frames::_2 size + 1;
// XAnimPartTransFrames
reorder XAnimPartTransFrames:
indices
frames;
// XAnimDeltaPartQuat
use XAnimDeltaPartQuat;
set condition u::frames size > 0;
set condition u::frames::indices::_1 XAnimParts::numframes < 256;
set arraysize u::frames::indices::_1 size + 1;
set arraysize u::frames::indices::_2 size + 1;
set count u::frames::frames size + 1;
// XAnimDeltaPartQuatDataFrames
reorder XAnimDeltaPartQuatDataFrames:
indices
frames;

View File

@ -0,0 +1,7 @@
// =========================================
// XGlobals
// =========================================
use XGlobals;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;

View File

@ -0,0 +1,90 @@
// =========================================
// XModel
// =========================================
use XModel;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set scriptstring boneNames;
set reusable boneNames;
set count boneNames numBones;
set reusable parentList;
set count parentList numBones - numRootBones;
set reusable quats;
set count quats numBones - numRootBones;
set reusable trans;
set count trans numBones - numRootBones;
set reusable partClassification;
set count partClassification numBones;
set reusable baseMat;
set count baseMat numBones;
set count surfs numsurfs;
set count materialHandles numsurfs;
set count collSurfs numCollSurfs;
set count boneInfo numBones;
set count streamInfo::highMipBounds numsurfs;
set count collmaps numCollmaps;
// XSurface
use XSurface;
set reusable verts0;
set count verts0 vertCount;
set condition vb0 never;
set reusable vertList;
set count vertList vertListCount;
set reusable triIndices;
set count triIndices triCount;
set condition indexBuffer never;
reorder:
vertInfo
verts0
vertList
triIndices;
// XSurfaceVertexInfo
use XSurfaceVertexInfo;
set reusable vertsBlend;
set count vertsBlend vertCount[0]
+ 3 * vertCount[1]
+ 5 * vertCount[2]
+ 7 * vertCount[3];
set reusable tensionData;
set count tensionData vertCount[0]
+ vertCount[1]
+ vertCount[2]
+ vertCount[3];
// XRigidVertList
set reusable XRigidVertList::collisionTree;
// XSurfaceCollisionTree
use XSurfaceCollisionTree;
set count nodes nodeCount;
set count leafs leafCount;
// XModelCollSurf_s
set count XModelCollSurf_s::collTris numCollTris;
// Collmap
set count Collmap::geomList 1;
// PhysGeomList
set count PhysGeomList::geoms count;
// PhysGeomInfo
use PhysGeomInfo;
set reusable brush;
set count brush 1;
// BrushWrapper
use BrushWrapper;
set count sides numsides;
set reusable verts;
set count verts numverts;
set reusable planes;
set count planes numsides;
// cbrushside_t
use cbrushside_t;
set reusable plane;
set count plane 1;

View File

@ -0,0 +1,85 @@
// =========================================
// clipMap_t
// =========================================
use clipMap_t;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set reusable planes;
set count planes planeCount;
set count staticModelList numStaticModels;
set count materials numMaterials;
set count brushsides numBrushSides;
set count nodes numNodes;
set count leafs numLeafs;
set count leafbrushes numLeafBrushes;
set count leafbrushNodes leafbrushNodesCount;
set count leafsurfaces numLeafSurfaces;
set count verts vertCount;
set count brushVerts numBrushVerts;
set count uinds nuinds;
set count triIndices 3 * triCount;
set count triEdgeIsWalkable ((3 * triCount + 31) / 32) * 4;
set count borders borderCount;
set count partitions partitionCount;
set count aabbTrees aabbTreeCount;
set count cmodels numSubModels;
set count brushes numBrushes;
set count visibility numClusters * clusterBytes;
set reusable box_brush;
set count dynEntDefList[0] dynEntCount[0];
set count dynEntDefList[1] dynEntCount[1];
set block dynEntPoseList XFILE_BLOCK_RUNTIME;
set count dynEntPoseList[0] dynEntCount[0];
set count dynEntPoseList[1] dynEntCount[1];
set block dynEntClientList XFILE_BLOCK_RUNTIME;
set count dynEntClientList[0] dynEntCount[0];
set count dynEntClientList[1] dynEntCount[1];
set block dynEntServerList XFILE_BLOCK_RUNTIME;
set count dynEntServerList[0] dynEntCount[2];
set count dynEntServerList[1] dynEntCount[3];
set block dynEntCollList XFILE_BLOCK_RUNTIME;
set count dynEntCollList[0] dynEntCount[0];
set count dynEntCollList[1] dynEntCount[1];
set count dynEntCollList[2] dynEntCount[2];
set count dynEntCollList[3] dynEntCount[3];
set count constraints num_constraints;
set block ropes XFILE_BLOCK_RUNTIME;
set count ropes max_ropes;
reorder:
leafs
leafbrushes
leafbrushNodes
leafsurfaces;
// cbrushside_t
set reusable cbrushside_t::plane;
// cNode_t
set reusable cNode_t::plane;
// cLeafBrushNode_s
use cLeafBrushNode_s;
set condition data::leaf leafBrushCount > 0;
set reusable data::leaf::brushes;
set count data::leaf::brushes leafBrushCount;
// CollisionPartition
set reusable CollisionPartition::borders;
// cbrush_t
use cbrush_t;
set reusable sides;
set reusable verts;
// DynEntityDef
use DynEntityDef;
set reusable destroyPieces;
set scriptstring targetname;
set scriptstring target;
// XModelPieces
use XModelPieces;
set string name;
set name name;
set count pieces numpieces;

View File

@ -0,0 +1,28 @@
// =========================================
// ddlRoot_t
// =========================================
use ddlRoot_t;
set block XFILE_BLOCK_TEMP;
set string name;
set name name;
set count ddlDef 1;
// ddlDef_t
use ddlDef_t;
set count structList structCount;
set count enumList enumCount;
set count next 1;
// ddlStructDef_t
use ddlStructDef_t;
set string name;
set count members memberCount;
// ddlMemberDef_t
set string ddlMemberDef_t::name;
// ddlEnumDef_t
use ddlEnumDef_t;
set string name;
set string members;
set count members memberCount;

View File

@ -0,0 +1,127 @@
// =========================================
// menuDef_t
// =========================================
use menuDef_t;
set block XFILE_BLOCK_TEMP;
set string window::name;
set name window::name;
set string font;
set string allowedBinding;
set string soundName;
set count items itemCount;
// windowDef_t
use windowDef_t;
set string group;
// GenericEventHandler
use GenericEventHandler;
set string name;
// GenericEventScript
use GenericEventScript;
set string action;
// ExpressionStatement
use ExpressionStatement;
set string filename;
set count rpn numRpn;
set reusable rpn;
// expressionRpn
use expressionRpn;
set condition data::constant type == RPN_CONSTANT;
set condition data::cmd never;
// Operand
use Operand;
set condition internals::intVal dataType == VAL_INT;
set condition internals::floatVal dataType == VAL_FLOAT;
set condition internals::string dataType == VAL_STRING;
set string internals::string;
// itemDef_s
use itemDef_s;
set string dvar;
set string dvarTest;
set string enableDvar;
set condition parent never;
set condition typeData::textDef
type == 1 || type == 3 || type == 4
|| type == 5 || type == 7 || type == 8
|| type == 9 || type == 10 || type == 11
|| type == 12 || type == 13 || type == 14
|| type == 15 || type == 16 || type == 18
|| type == 20 || type == 22;
set condition typeData::imageDef type == 2;
set condition typeData::blankButtonDef type == 19 || type == 21;
set condition typeData::ownerDrawDef type == 6;
set condition typeData::data never;
// textDef_s
use textDef_s;
set string text;
set condition textTypeData::focusItemDef itemDef_s::type == 3
|| itemDef_s::type == 4 || itemDef_s::type == 5
|| itemDef_s::type == 7 || itemDef_s::type == 8
|| itemDef_s::type == 9 || itemDef_s::type == 10
|| itemDef_s::type == 11 || itemDef_s::type == 12
|| itemDef_s::type == 13 || itemDef_s::type == 14
|| itemDef_s::type == 16 || itemDef_s::type == 20
|| itemDef_s::type == 21 || itemDef_s::type == 22
|| itemDef_s::type == 30;
set condition textTypeData::gameMsgDef itemDef_s::type == 15;
set condition textTypeData::data never;
// focusItemDef_s
use focusItemDef_s;
set string mouseEnterText;
set string mouseExitText;
set string mouseEnter;
set string mouseExit;
set condition focusTypeData::listBox itemDef_s::type == 4;
set condition focusTypeData::multi itemDef_s::type == 10;
set condition focusTypeData::editField itemDef_s::type == 5
|| itemDef_s::type == 7
|| itemDef_s::type == 8
|| itemDef_s::type == 9
|| itemDef_s::type == 12
|| itemDef_s::type == 13
|| itemDef_s::type == 14
|| itemDef_s::type == 16
|| itemDef_s::type == 22
|| itemDef_s::type == 30;
set condition focusTypeData::enumDvar itemDef_s::type == 11;
set condition focusTypeData::data never;
// listBoxDef_s
use listBoxDef_s;
set count rows maxRows;
// MenuRow
use MenuRow;
set count cells listBoxDef_s::numColumns;
set count eventName 32;
set count onFocusEventName 32;
// MenuCell
use MenuCell;
set count stringValue maxChars;
// multiDef_s
use multiDef_s;
set string dvarList;
set string dvarStr;
// enumDvarDef_s
set string enumDvarDef_s::enumDvarName;
// UIAnimInfo
use UIAnimInfo;
set count animStates animStateCount;
set condition currentAnimState never;
set condition nextAnimState never;
// animParamsDef_t
use animParamsDef_t;
set string name;

View File

@ -14,7 +14,7 @@ set reusable attachments;
set count attachmentUniques 95;
set reusable attachmentUniques;
set string szXAnims;
set count szXAnims 88;
set count szXAnims NUM_WEAP_ANIMS;
set reusable szXAnims;
set scriptstring hideTags;
set count hideTags 32;
@ -119,7 +119,7 @@ set string adsZoomSound;
set string shellCasing;
set string shellCasingPlayer;
set string bounceSound;
set count bounceSound 32;
set count bounceSound SURF_TYPE_NUM;
set reusable bounceSound;
set string standMountedWeapdef;
set string crouchMountedWeapdef;
@ -141,9 +141,9 @@ set string projExplosionSound;
set string projDudSound;
set string mortarShellSound;
set string tankShellSound;
set count parallelBounce 32;
set count parallelBounce SURF_TYPE_NUM;
set reusable parallelBounce;
set count perpendicularBounce 32;
set count perpendicularBounce SURF_TYPE_NUM;
set reusable perpendicularBounce;
set string projIgnitionSound;
set string accuracyGraphName0;
@ -159,7 +159,7 @@ set count originalAccuracyGraphKnots1 accuracyGraphKnotCount[1];
set string szUseHintString;
set string dropHintString;
set string szScript;
set count locationDamageMultipliers 21;
set count locationDamageMultipliers HITLOC_NUM;
set reusable locationDamageMultipliers;
set string fireRumble;
set string meleeImpactRumble;

View File

@ -0,0 +1,379 @@
#include "GameAssetPoolT5.h"
#include <cassert>
#include <type_traits>
#include "Pool/AssetPoolStatic.h"
#include "Pool/AssetPoolDynamic.h"
using namespace T5;
const char* GameAssetPoolT5::ASSET_TYPE_NAMES[]
{
"xmodelpieces",
"physpreset",
"physconstraints",
"destructibledef",
"xanim",
"xmodel",
"material",
"techniqueset",
"image",
"soundbank",
"soundpatch",
"clipmap",
"clipmap",
"comworld",
"gameworldsp",
"gameworldmp",
"mapents",
"gfxworld",
"gfxlightdef",
"uimap",
"font",
"menulist",
"menu",
"localize",
"weapon",
"weapondef",
"weaponvariant",
"snddriverglobals",
"fx",
"fximpacttable",
"aitype",
"mptype",
"mpbody",
"mphead",
"character",
"xmodelalias",
"rawfile",
"stringtable",
"packindex",
"xglobals",
"ddl",
"glasses",
"emblemset"
};
GameAssetPoolT5::GameAssetPoolT5(Zone* zone, const int priority)
: ZoneAssetPools(zone),
m_priority(priority)
{
assert(std::extent<decltype(ASSET_TYPE_NAMES)>::value == ASSET_TYPE_COUNT);
m_phys_preset = nullptr;
m_phys_constraints = nullptr;
m_destructible_def = nullptr;
m_xanim_parts = nullptr;
m_xmodel = nullptr;
m_material = nullptr;
m_technique_set = nullptr;
m_image = nullptr;
m_sound_bank = nullptr;
m_sound_patch = nullptr;
m_clip_map = nullptr;
m_com_world = nullptr;
m_game_world_sp = nullptr;
m_game_world_mp = nullptr;
m_map_ents = nullptr;
m_gfx_world = nullptr;
m_gfx_light_def = nullptr;
m_font = nullptr;
m_menu_list = nullptr;
m_menu_def = nullptr;
m_localize = nullptr;
m_weapon = nullptr;
m_snd_driver_globals = nullptr;
m_fx = nullptr;
m_fx_impact_table = nullptr;
m_raw_file = nullptr;
m_string_table = nullptr;
m_pack_index = nullptr;
m_xglobals = nullptr;
m_ddl = nullptr;
m_glasses = nullptr;
m_emblem_set = nullptr;
}
GameAssetPoolT5::~GameAssetPoolT5()
{
#define DELETE_POOL(poolName) \
delete (poolName); (poolName) = nullptr;
DELETE_POOL(m_phys_preset);
DELETE_POOL(m_phys_constraints);
DELETE_POOL(m_destructible_def);
DELETE_POOL(m_xanim_parts);
DELETE_POOL(m_xmodel);
DELETE_POOL(m_material);
DELETE_POOL(m_technique_set);
DELETE_POOL(m_image);
DELETE_POOL(m_sound_bank);
DELETE_POOL(m_sound_patch);
DELETE_POOL(m_clip_map);
DELETE_POOL(m_com_world);
DELETE_POOL(m_game_world_sp);
DELETE_POOL(m_game_world_mp);
DELETE_POOL(m_map_ents);
DELETE_POOL(m_gfx_world);
DELETE_POOL(m_gfx_light_def);
DELETE_POOL(m_font);
DELETE_POOL(m_menu_list);
DELETE_POOL(m_menu_def);
DELETE_POOL(m_localize);
DELETE_POOL(m_weapon);
DELETE_POOL(m_snd_driver_globals);
DELETE_POOL(m_fx);
DELETE_POOL(m_fx_impact_table);
DELETE_POOL(m_raw_file);
DELETE_POOL(m_string_table);
DELETE_POOL(m_pack_index);
DELETE_POOL(m_xglobals);
DELETE_POOL(m_ddl);
DELETE_POOL(m_glasses);
DELETE_POOL(m_emblem_set);
#undef DELETE_POOL
}
void GameAssetPoolT5::InitPoolStatic(const asset_type_t type, const size_t capacity)
{
#define CASE_INIT_POOL_STATIC(assetType, poolName, poolType) \
case assetType: \
{ \
if((poolName) == nullptr && capacity > 0) \
{ \
(poolName) = new AssetPoolStatic<poolType>(capacity, m_priority, (assetType)); \
} \
break; \
}
switch (type)
{
CASE_INIT_POOL_STATIC(ASSET_TYPE_PHYSPRESET, m_phys_preset, PhysPreset);
CASE_INIT_POOL_STATIC(ASSET_TYPE_PHYSCONSTRAINTS, m_phys_constraints, PhysConstraints);
CASE_INIT_POOL_STATIC(ASSET_TYPE_DESTRUCTIBLEDEF, m_destructible_def, DestructibleDef);
CASE_INIT_POOL_STATIC(ASSET_TYPE_XANIMPARTS, m_xanim_parts, XAnimParts);
CASE_INIT_POOL_STATIC(ASSET_TYPE_XMODEL, m_xmodel, XModel);
CASE_INIT_POOL_STATIC(ASSET_TYPE_MATERIAL, m_material, Material);
CASE_INIT_POOL_STATIC(ASSET_TYPE_TECHNIQUE_SET, m_technique_set, MaterialTechniqueSet);
CASE_INIT_POOL_STATIC(ASSET_TYPE_IMAGE, m_image, GfxImage);
CASE_INIT_POOL_STATIC(ASSET_TYPE_SOUND, m_sound_bank, SndBank);
CASE_INIT_POOL_STATIC(ASSET_TYPE_SOUND_PATCH, m_sound_patch, SndPatch);
CASE_INIT_POOL_STATIC(ASSET_TYPE_CLIPMAP, m_clip_map, clipMap_t);
CASE_INIT_POOL_STATIC(ASSET_TYPE_CLIPMAP_PVS, m_clip_map, clipMap_t);
CASE_INIT_POOL_STATIC(ASSET_TYPE_COMWORLD, m_com_world, ComWorld);
CASE_INIT_POOL_STATIC(ASSET_TYPE_GAMEWORLD_SP, m_game_world_sp, GameWorldSp);
CASE_INIT_POOL_STATIC(ASSET_TYPE_GAMEWORLD_MP, m_game_world_mp, GameWorldMp);
CASE_INIT_POOL_STATIC(ASSET_TYPE_MAP_ENTS, m_map_ents, MapEnts);
CASE_INIT_POOL_STATIC(ASSET_TYPE_GFXWORLD, m_gfx_world, GfxWorld);
CASE_INIT_POOL_STATIC(ASSET_TYPE_LIGHT_DEF, m_gfx_light_def, GfxLightDef);
CASE_INIT_POOL_STATIC(ASSET_TYPE_FONT, m_font, Font_s);
CASE_INIT_POOL_STATIC(ASSET_TYPE_MENULIST, m_menu_list, MenuList);
CASE_INIT_POOL_STATIC(ASSET_TYPE_MENU, m_menu_def, menuDef_t);
CASE_INIT_POOL_STATIC(ASSET_TYPE_LOCALIZE_ENTRY, m_localize, LocalizeEntry);
CASE_INIT_POOL_STATIC(ASSET_TYPE_WEAPON, m_weapon, WeaponVariantDef);
CASE_INIT_POOL_STATIC(ASSET_TYPE_SNDDRIVER_GLOBALS, m_snd_driver_globals, SndDriverGlobals);
CASE_INIT_POOL_STATIC(ASSET_TYPE_FX, m_fx, FxEffectDef);
CASE_INIT_POOL_STATIC(ASSET_TYPE_IMPACT_FX, m_fx_impact_table, FxImpactTable);
CASE_INIT_POOL_STATIC(ASSET_TYPE_RAWFILE, m_raw_file, RawFile);
CASE_INIT_POOL_STATIC(ASSET_TYPE_STRINGTABLE, m_string_table, StringTable);
CASE_INIT_POOL_STATIC(ASSET_TYPE_PACK_INDEX, m_pack_index, PackIndex);
CASE_INIT_POOL_STATIC(ASSET_TYPE_XGLOBALS, m_xglobals, XGlobals);
CASE_INIT_POOL_STATIC(ASSET_TYPE_DDL, m_ddl, ddlRoot_t);
CASE_INIT_POOL_STATIC(ASSET_TYPE_GLASSES, m_glasses, Glasses);
CASE_INIT_POOL_STATIC(ASSET_TYPE_EMBLEMSET, m_emblem_set, EmblemSet);
default:
assert(type >= 0 && type < ASSET_TYPE_COUNT);
break;
}
#undef CASE_INIT_POOL_STATIC
}
void GameAssetPoolT5::InitPoolDynamic(const asset_type_t type)
{
#define CASE_INIT_POOL_DYNAMIC(assetType, poolName, poolType) \
case assetType: \
{ \
if((poolName) == nullptr) \
{ \
(poolName) = new AssetPoolDynamic<poolType>(m_priority, (assetType)); \
} \
break; \
}
switch (type)
{
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_PHYSPRESET, m_phys_preset, PhysPreset);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_PHYSCONSTRAINTS, m_phys_constraints, PhysConstraints);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_DESTRUCTIBLEDEF, m_destructible_def, DestructibleDef);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_XANIMPARTS, m_xanim_parts, XAnimParts);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_XMODEL, m_xmodel, XModel);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_MATERIAL, m_material, Material);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_TECHNIQUE_SET, m_technique_set, MaterialTechniqueSet);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_IMAGE, m_image, GfxImage);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_SOUND, m_sound_bank, SndBank);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_SOUND_PATCH, m_sound_patch, SndPatch);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_CLIPMAP, m_clip_map, clipMap_t);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_CLIPMAP_PVS, m_clip_map, clipMap_t);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_COMWORLD, m_com_world, ComWorld);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_GAMEWORLD_SP, m_game_world_sp, GameWorldSp);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_GAMEWORLD_MP, m_game_world_mp, GameWorldMp);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_MAP_ENTS, m_map_ents, MapEnts);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_GFXWORLD, m_gfx_world, GfxWorld);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_LIGHT_DEF, m_gfx_light_def, GfxLightDef);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_FONT, m_font, Font_s);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_MENULIST, m_menu_list, MenuList);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_MENU, m_menu_def, menuDef_t);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_LOCALIZE_ENTRY, m_localize, LocalizeEntry);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_WEAPON, m_weapon, WeaponVariantDef);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_SNDDRIVER_GLOBALS, m_snd_driver_globals, SndDriverGlobals);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_FX, m_fx, FxEffectDef);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_IMPACT_FX, m_fx_impact_table, FxImpactTable);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_RAWFILE, m_raw_file, RawFile);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_STRINGTABLE, m_string_table, StringTable);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_PACK_INDEX, m_pack_index, PackIndex);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_XGLOBALS, m_xglobals, XGlobals);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_DDL, m_ddl, ddlRoot_t);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_GLASSES, m_glasses, Glasses);
CASE_INIT_POOL_DYNAMIC(ASSET_TYPE_EMBLEMSET, m_emblem_set, EmblemSet);
default:
assert(type >= 0 && type < ASSET_TYPE_COUNT);
break;
}
#undef CASE_INIT_POOL_STATIC
}
XAssetInfoGeneric* GameAssetPoolT5::AddAssetToPool(asset_type_t type, std::string name, void* asset, std::vector<XAssetInfoGeneric*> dependencies, std::vector<scr_string_t> usedScriptStrings,
Zone* zone)
{
XAsset xAsset{};
xAsset.type = static_cast<XAssetType>(type);
xAsset.header.data = asset;
#define CASE_ADD_TO_POOL(assetType, poolName, headerName) \
case assetType: \
{ \
assert((poolName) != nullptr); \
return (poolName)->AddAsset(std::move(name), xAsset.header.headerName, zone, std::move(dependencies), std::move(usedScriptStrings)); \
}
switch (xAsset.type)
{
CASE_ADD_TO_POOL(ASSET_TYPE_PHYSPRESET, m_phys_preset, physPreset);
CASE_ADD_TO_POOL(ASSET_TYPE_PHYSCONSTRAINTS, m_phys_constraints, physConstraints);
CASE_ADD_TO_POOL(ASSET_TYPE_DESTRUCTIBLEDEF, m_destructible_def, destructibleDef);
CASE_ADD_TO_POOL(ASSET_TYPE_XANIMPARTS, m_xanim_parts, parts);
CASE_ADD_TO_POOL(ASSET_TYPE_XMODEL, m_xmodel, model);
CASE_ADD_TO_POOL(ASSET_TYPE_MATERIAL, m_material, material);
CASE_ADD_TO_POOL(ASSET_TYPE_TECHNIQUE_SET, m_technique_set, techniqueSet);
CASE_ADD_TO_POOL(ASSET_TYPE_IMAGE, m_image, image);
CASE_ADD_TO_POOL(ASSET_TYPE_SOUND, m_sound_bank, sound);
CASE_ADD_TO_POOL(ASSET_TYPE_SOUND_PATCH, m_sound_patch, soundPatch);
CASE_ADD_TO_POOL(ASSET_TYPE_CLIPMAP, m_clip_map, clipMap);
CASE_ADD_TO_POOL(ASSET_TYPE_CLIPMAP_PVS, m_clip_map, clipMap);
CASE_ADD_TO_POOL(ASSET_TYPE_COMWORLD, m_com_world, comWorld);
CASE_ADD_TO_POOL(ASSET_TYPE_GAMEWORLD_SP, m_game_world_sp, gameWorldSp);
CASE_ADD_TO_POOL(ASSET_TYPE_GAMEWORLD_MP, m_game_world_mp, gameWorldMp);
CASE_ADD_TO_POOL(ASSET_TYPE_MAP_ENTS, m_map_ents, mapEnts);
CASE_ADD_TO_POOL(ASSET_TYPE_GFXWORLD, m_gfx_world, gfxWorld);
CASE_ADD_TO_POOL(ASSET_TYPE_LIGHT_DEF, m_gfx_light_def, lightDef);
CASE_ADD_TO_POOL(ASSET_TYPE_FONT, m_font, font);
CASE_ADD_TO_POOL(ASSET_TYPE_MENULIST, m_menu_list, menuList);
CASE_ADD_TO_POOL(ASSET_TYPE_MENU, m_menu_def, menu);
CASE_ADD_TO_POOL(ASSET_TYPE_LOCALIZE_ENTRY, m_localize, localize);
CASE_ADD_TO_POOL(ASSET_TYPE_WEAPON, m_weapon, weapon);
CASE_ADD_TO_POOL(ASSET_TYPE_SNDDRIVER_GLOBALS, m_snd_driver_globals, sndDriverGlobals);
CASE_ADD_TO_POOL(ASSET_TYPE_FX, m_fx, fx);
CASE_ADD_TO_POOL(ASSET_TYPE_IMPACT_FX, m_fx_impact_table, impactFx);
CASE_ADD_TO_POOL(ASSET_TYPE_RAWFILE, m_raw_file, rawfile);
CASE_ADD_TO_POOL(ASSET_TYPE_STRINGTABLE, m_string_table, stringTable);
CASE_ADD_TO_POOL(ASSET_TYPE_PACK_INDEX, m_pack_index, packIndex);
CASE_ADD_TO_POOL(ASSET_TYPE_XGLOBALS, m_xglobals, xGlobals);
CASE_ADD_TO_POOL(ASSET_TYPE_DDL, m_ddl, ddlRoot);
CASE_ADD_TO_POOL(ASSET_TYPE_GLASSES, m_glasses, glasses);
CASE_ADD_TO_POOL(ASSET_TYPE_EMBLEMSET, m_emblem_set, emblemSet);
default:
assert(false);
break;
}
return nullptr;
#undef CASE_ADD_TO_POOL
}
XAssetInfoGeneric* GameAssetPoolT5::GetAsset(const asset_type_t type, std::string name) const
{
#define CASE_GET_ASSET(assetType, poolName) \
case assetType: \
{ \
if((poolName) != nullptr) \
return (poolName)->GetAsset(std::move(name)); \
break; \
}
switch (type)
{
CASE_GET_ASSET(ASSET_TYPE_PHYSPRESET, m_phys_preset);
CASE_GET_ASSET(ASSET_TYPE_PHYSCONSTRAINTS, m_phys_constraints);
CASE_GET_ASSET(ASSET_TYPE_DESTRUCTIBLEDEF, m_destructible_def);
CASE_GET_ASSET(ASSET_TYPE_XANIMPARTS, m_xanim_parts);
CASE_GET_ASSET(ASSET_TYPE_XMODEL, m_xmodel);
CASE_GET_ASSET(ASSET_TYPE_MATERIAL, m_material);
CASE_GET_ASSET(ASSET_TYPE_TECHNIQUE_SET, m_technique_set);
CASE_GET_ASSET(ASSET_TYPE_IMAGE, m_image);
CASE_GET_ASSET(ASSET_TYPE_SOUND, m_sound_bank);
CASE_GET_ASSET(ASSET_TYPE_SOUND_PATCH, m_sound_patch);
CASE_GET_ASSET(ASSET_TYPE_CLIPMAP, m_clip_map);
CASE_GET_ASSET(ASSET_TYPE_CLIPMAP_PVS, m_clip_map);
CASE_GET_ASSET(ASSET_TYPE_COMWORLD, m_com_world);
CASE_GET_ASSET(ASSET_TYPE_GAMEWORLD_SP, m_game_world_sp);
CASE_GET_ASSET(ASSET_TYPE_GAMEWORLD_MP, m_game_world_mp);
CASE_GET_ASSET(ASSET_TYPE_MAP_ENTS, m_map_ents);
CASE_GET_ASSET(ASSET_TYPE_GFXWORLD, m_gfx_world);
CASE_GET_ASSET(ASSET_TYPE_LIGHT_DEF, m_gfx_light_def);
CASE_GET_ASSET(ASSET_TYPE_FONT, m_font);
CASE_GET_ASSET(ASSET_TYPE_MENULIST, m_menu_list);
CASE_GET_ASSET(ASSET_TYPE_MENU, m_menu_def);
CASE_GET_ASSET(ASSET_TYPE_LOCALIZE_ENTRY, m_localize);
CASE_GET_ASSET(ASSET_TYPE_WEAPON, m_weapon);
CASE_GET_ASSET(ASSET_TYPE_SNDDRIVER_GLOBALS, m_snd_driver_globals);
CASE_GET_ASSET(ASSET_TYPE_FX, m_fx);
CASE_GET_ASSET(ASSET_TYPE_IMPACT_FX, m_fx_impact_table);
CASE_GET_ASSET(ASSET_TYPE_RAWFILE, m_raw_file);
CASE_GET_ASSET(ASSET_TYPE_STRINGTABLE, m_string_table);
CASE_GET_ASSET(ASSET_TYPE_PACK_INDEX, m_pack_index);
CASE_GET_ASSET(ASSET_TYPE_XGLOBALS, m_xglobals);
CASE_GET_ASSET(ASSET_TYPE_DDL, m_ddl);
CASE_GET_ASSET(ASSET_TYPE_GLASSES, m_glasses);
CASE_GET_ASSET(ASSET_TYPE_EMBLEMSET, m_emblem_set);
default:
assert(false);
break;
}
return nullptr;
#undef CASE_GET_ASSET
}
const char* GameAssetPoolT5::AssetTypeNameByType(asset_type_t assetType)
{
if (assetType >= 0 && assetType < static_cast<int>(std::extent<decltype(ASSET_TYPE_NAMES)>::value))
return ASSET_TYPE_NAMES[assetType];
return ASSET_TYPE_INVALID;
}
const char* GameAssetPoolT5::GetAssetTypeName(const asset_type_t assetType) const
{
return AssetTypeNameByType(assetType);
}

View File

@ -0,0 +1,60 @@
#pragma once
#include "Pool/ZoneAssetPools.h"
#include "Pool/AssetPool.h"
#include "Game/T5/T5.h"
class GameAssetPoolT5 final : public ZoneAssetPools
{
int m_priority;
static constexpr const char* ASSET_TYPE_INVALID = "invalid_asset_type";
static const char* ASSET_TYPE_NAMES[];
protected:
XAssetInfoGeneric* AddAssetToPool(asset_type_t type, std::string name, void* asset, std::vector<XAssetInfoGeneric*> dependencies, std::vector<scr_string_t> usedScriptStrings, Zone* zone) override;
public:
AssetPool<T5::PhysPreset>* m_phys_preset;
AssetPool<T5::PhysConstraints>* m_phys_constraints;
AssetPool<T5::DestructibleDef>* m_destructible_def;
AssetPool<T5::XAnimParts>* m_xanim_parts;
AssetPool<T5::XModel>* m_xmodel;
AssetPool<T5::Material>* m_material;
AssetPool<T5::MaterialTechniqueSet>* m_technique_set;
AssetPool<T5::GfxImage>* m_image;
AssetPool<T5::SndBank>* m_sound_bank;
AssetPool<T5::SndPatch>* m_sound_patch;
AssetPool<T5::clipMap_t>* m_clip_map;
AssetPool<T5::ComWorld>* m_com_world;
AssetPool<T5::GameWorldSp>* m_game_world_sp;
AssetPool<T5::GameWorldMp>* m_game_world_mp;
AssetPool<T5::MapEnts>* m_map_ents;
AssetPool<T5::GfxWorld>* m_gfx_world;
AssetPool<T5::GfxLightDef>* m_gfx_light_def;
AssetPool<T5::Font_s>* m_font;
AssetPool<T5::MenuList>* m_menu_list;
AssetPool<T5::menuDef_t>* m_menu_def;
AssetPool<T5::LocalizeEntry>* m_localize;
AssetPool<T5::WeaponVariantDef>* m_weapon;
AssetPool<T5::SndDriverGlobals>* m_snd_driver_globals;
AssetPool<T5::FxEffectDef>* m_fx;
AssetPool<T5::FxImpactTable>* m_fx_impact_table;
AssetPool<T5::RawFile>* m_raw_file;
AssetPool<T5::StringTable>* m_string_table;
AssetPool<T5::PackIndex>* m_pack_index;
AssetPool<T5::XGlobals>* m_xglobals;
AssetPool<T5::ddlRoot_t>* m_ddl;
AssetPool<T5::Glasses>* m_glasses;
AssetPool<T5::EmblemSet>* m_emblem_set;
GameAssetPoolT5(Zone* zone, int priority);
~GameAssetPoolT5() override;
void InitPoolStatic(asset_type_t type, size_t capacity) override;
void InitPoolDynamic(asset_type_t type) override;
XAssetInfoGeneric* GetAsset(asset_type_t type, std::string name) const override;
static const char* AssetTypeNameByType(asset_type_t assetType);
const char* GetAssetTypeName(asset_type_t assetType) const override;
};

View File

@ -0,0 +1,24 @@
#include "gfximage_actions.h"
#include <cassert>
#include <cstring>
using namespace T5;
Actions_GfxImage::Actions_GfxImage(Zone* zone)
: AssetLoadingActions(zone)
{
}
void Actions_GfxImage::OnImageLoaded(GfxImage* image) const
{
image->loadedSize = 0;
}
void Actions_GfxImage::LoadImageData(GfxImageLoadDef* loadDef, GfxImage* image) const
{
const size_t loadDefSize = offsetof(GfxImageLoadDef, data) + loadDef->resourceSize;
image->texture.loadDef = static_cast<GfxImageLoadDef*>(m_zone->GetMemory()->Alloc(loadDefSize));
memcpy(image->texture.loadDef, loadDef, loadDefSize);
}

View File

@ -0,0 +1,16 @@
#pragma once
#include "Loading/AssetLoadingActions.h"
#include "Game/T5/T5.h"
namespace T5
{
class Actions_GfxImage final : public AssetLoadingActions
{
public:
explicit Actions_GfxImage(Zone* zone);
void OnImageLoaded(GfxImage* image) const;
void LoadImageData(GfxImageLoadDef* loadDef, GfxImage* image) const;
};
}