feat: QOS (007: Quantum of Solace) support (#894)

* feat: QOS (007: Quantum of Solace) support

* feat: add qos localize loader

* feat: add qos stringtable loader

* chore: comment about official zones

* fix: add qos gfximage runtime fields

* chore: remove useless dev time comments

* fix: remove all `static_asserts`s from asset headers causing build fail on x64

* chore: change union ordering of qos `entryInternalData`

* chore: move qos asset type enum to qos.h

* fix: qos and t4 xsurface index buffer

* chore: implement qos MaterialInfo struct

* chore: adjust some gfxworld struct members

* chore: implement qos PhysPreset and PhysConstraints

* chore: fix and adjust slight inconsistencies with qos zone code

* chore: reorder qos ZoneCode.lua entries in order of asset type enum

* chore: remove asset types that are not actual asset types in zones

* chore: check common asset arrays with static_assert

* chore: rename qos assets

* chore: reorder qos in templates to be in alphabetical order

* chore: use function for CopyMipLevel in Dx9TextureLoader

* chore: use templates for qos MapEntsDumper

* chore: add missing braces in XModelToCommonConverter

* chore: add generic way to peek at zone data

* Qos does not use a classic ZoneHeader so code needs to be more generic

* fix: do not use raw_byte and raw_uint typedefs for qos

* fix: not being able to write clipmapmp

* chore: additional research on qos vertex property and stuff

---------

Co-authored-by: Jan Laupetin <[email protected]>
This commit is contained in:
mo
2026-08-05 00:32:23 +02:00
committed by GitHub
co-authored by Jan Laupetin
parent 5c0a7257fd
commit 9f49e0e31c
142 changed files with 6000 additions and 97 deletions
+1
View File
@@ -0,0 +1 @@
// Game: 007 Quantum of Solace (QOS)
+73
View File
@@ -0,0 +1,73 @@
// Game: 007 Quantum of Solace (QOS)
game QOS;
wordsize 32;
// Game Assets
asset PhysPreset AssetPhysPreset;
asset PhysConstraints AssetPhysConstraints;
asset DestructibleDef AssetDestructibleDef;
asset XAnimParts AssetXAnim;
asset XModel AssetXModel;
asset Material AssetMaterial;
asset MaterialTechniqueSet AssetTechniqueSet;
asset GfxImage AssetImage;
asset snd_alias_list_t AssetSound;
asset SndCurve AssetSoundCurve;
asset clipMap_t AssetClipMapMp;
asset ComWorld AssetComWorld;
asset GameWorldSp AssetGameWorldSp;
asset GameWorldMp AssetGameWorldMp;
asset MapEnts AssetMapEnts;
asset GfxWorld AssetGfxWorld;
asset GfxLightDef AssetLightDef;
asset Font_s AssetFont;
asset MenuList AssetMenuList;
asset menuDef_t AssetMenu;
asset LocalizeEntry AssetLocalize;
asset WeaponDef AssetWeapon;
asset FxEffectDef AssetFx;
asset FxImpactTable AssetImpactFx;
asset RawFile AssetRawFile;
asset StringTable AssetStringTable;
asset XmlTree AssetXmlTree;
asset SceneAnimation AssetSceneAnimation;
asset Cutscene AssetCutscene;
asset CustomCamera AssetCustomCamera;
// Setup blocks
block temp XFILE_BLOCK_TEMP default;
block runtime XFILE_BLOCK_RUNTIME default;
block normal XFILE_BLOCK_VIRTUAL default;
block normal XFILE_BLOCK_LARGE;
block normal XFILE_BLOCK_PHYSICAL;
#include "XAssets/PhysPreset.txt"
#include "XAssets/PhysConstraints.txt"
#include "XAssets/DestructibleDef.txt"
#include "XAssets/XAnimParts.txt"
#include "XAssets/XModel.txt"
#include "XAssets/Material.txt"
#include "XAssets/MaterialTechniqueSet.txt"
#include "XAssets/GfxImage.txt"
#include "XAssets/snd_alias_list_t.txt"
#include "XAssets/SndCurve.txt"
#include "XAssets/clipMap_t.txt"
#include "XAssets/ComWorld.txt"
#include "XAssets/GameWorldSp.txt"
#include "XAssets/GameWorldMp.txt"
#include "XAssets/MapEnts.txt"
#include "XAssets/GfxWorld.txt"
#include "XAssets/GfxLightDef.txt"
#include "XAssets/Font_s.txt"
#include "XAssets/MenuList.txt"
#include "XAssets/menuDef_t.txt"
#include "XAssets/LocalizeEntry.txt"
#include "XAssets/WeaponDef.txt"
#include "XAssets/FxEffectDef.txt"
#include "XAssets/FxImpactTable.txt"
#include "XAssets/RawFile.txt"
#include "XAssets/StringTable.txt"
#include "XAssets/XmlTree.txt"
#include "XAssets/SceneAnimation.txt"
#include "XAssets/Cutscene.txt"
#include "XAssets/CustomCamera.txt"
+12
View File
@@ -0,0 +1,12 @@
#pragma once
// Entry point for QOS code generation
// clang-format off: Order of includes matters here
#include "../Common.h"
#include "../../../Common/Game/QOS/QOS_Assets.h"
// clang-format on
// EOF
@@ -0,0 +1,16 @@
// =========================================
// ComWorld
// =========================================
use ComWorld;
set block XFILE_BLOCK_TEMP;
set string name;
set count primaryLights primaryLightCount;
set count unknownCells unknownCellCount;
// ComPrimaryLight
use ComPrimaryLight;
set string defName;
// ComWorldUnknownCell
use ComWorldUnknownCell;
set count data 5120;
@@ -0,0 +1,13 @@
// =========================================
// CustomCamera
// =========================================
use CustomCamera;
set block XFILE_BLOCK_TEMP;
set string name;
set count cameras cameraCount;
// CustomCameraDef
use CustomCameraDef;
set string name;
set string unknownString0;
set string unknownString1;
@@ -0,0 +1,25 @@
// =========================================
// Cutscene
// =========================================
use Cutscene;
set block XFILE_BLOCK_TEMP;
set string name;
set count entities entityCount;
set count sections sectionCount;
// CutsceneEntityDef
use CutsceneEntityDef;
set string unknownString0;
set string unknownString1;
set scriptstring unknownScriptString0;
set count modelAttachments modelAttachmentCount;
// CutsceneModelAttachment
use CutsceneModelAttachment;
set string unknownString0;
set string unknownString1;
// CutsceneSectionDef
use CutsceneSectionDef;
set count entities entityCount;
set count sceneAnimations sceneAnimationCount;
@@ -0,0 +1,25 @@
// =========================================
// DestructibleDef
// =========================================
use DestructibleDef;
set block XFILE_BLOCK_TEMP;
set string name;
set count pieces numPieces;
// DestructiblePiece
use DestructiblePiece;
set string attachBone;
set scriptstring attachBoneHash;
// DestructibleModel
use DestructibleModel;
set string breakNotify;
// SndAliasCustom
use SndAliasCustom;
set count name 1;
set reusable name;
set condition sound never;
// snd_alias_list_name
set string snd_alias_list_name::soundName;
+8
View File
@@ -0,0 +1,8 @@
// =========================================
// Font_s
// =========================================
use Font_s;
set block XFILE_BLOCK_TEMP;
set string fontName;
set reusable glyphs;
set count glyphs glyphCount;
@@ -0,0 +1,43 @@
// =========================================
// FxEffectDef
// =========================================
use FxEffectDef;
set block XFILE_BLOCK_TEMP;
set string name;
set count elemDefs elemDefCountEmission + elemDefCountLooping + elemDefCountOneShot;
// 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_TAIL
|| FxElemDef::elemType == FX_ELEM_TYPE_TRAIL
|| FxElemDef::elemType == FX_ELEM_TYPE_CLOUD;
// FxEffectDefRef
use FxEffectDefRef;
set condition handle never;
set string name;
set assetref name AssetFx;
// FxTrailDef
use FxTrailDef;
set count verts vertCount;
set count inds indCount;
@@ -0,0 +1,7 @@
// =========================================
// FxImpactTable
// =========================================
use FxImpactTable;
set block XFILE_BLOCK_TEMP;
set string name;
set count table 13;
@@ -0,0 +1,6 @@
// =========================================
// GameWorldMp
// =========================================
use GameWorldMp;
set block XFILE_BLOCK_TEMP;
set string name;
@@ -0,0 +1,39 @@
// =========================================
// GameWorldSp
// =========================================
use GameWorldSp;
set block XFILE_BLOCK_TEMP;
set string name;
// PathData
use PathData;
set count nodes nodeCount;
set condition basenodes never;
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_dynamic_t
set condition pathnode_dynamic_t::pOwner never;
// pathnode_tree_t
use pathnode_tree_t;
set condition u::child axis >= 0;
set reusable u::child;
// pathnode_tree_nodes_t
set count pathnode_tree_nodes_t::nodes nodeCount;
set reusable pathnode_tree_nodes_t::nodes;
@@ -0,0 +1,20 @@
// =========================================
// GfxImage
// =========================================
use GfxImage;
set block XFILE_BLOCK_TEMP;
set action OnImageLoaded(GfxImage);
set string name;
reorder:
name
texture;
// GfxTexture
use GfxTexture;
set reusable loadDef;
set block loadDef XFILE_BLOCK_TEMP;
// GfxImageLoadDef
use GfxImageLoadDef;
set action LoadImageData(GfxImageLoadDef, GfxImage);
set arraysize data resourceSize;
@@ -0,0 +1,6 @@
// =========================================
// GfxLightDef
// =========================================
use GfxLightDef;
set block XFILE_BLOCK_TEMP;
set string name;
+190
View File
@@ -0,0 +1,190 @@
// =========================================
// GfxWorld
// =========================================
use GfxWorld;
set block XFILE_BLOCK_TEMP;
set string name;
set string baseName;
set reusable planes;
set count planes planeCount;
set count nodes nodeCount;
set count indices indexCount;
set count surfaces surfaceCount;
set count skyStartSurfs skySurfCount;
set string skyBoxModel;
set reusable sunLight;
set count reflectionProbes reflectionProbeCount;
set count cullGroups cullGroupCount;
set count smodelDrawInsts smodelCount;
set count smodelInsts smodelCount;
set count cells cellCount;
set count lightmaps lightmapCount;
set count models modelCount;
set count materialMemory materialMemoryCount;
set block smodelVisData0 XFILE_BLOCK_RUNTIME;
set count smodelVisData0 smodelCount;
set block smodelVisData1 XFILE_BLOCK_RUNTIME;
set count smodelVisData1 smodelCount;
set block smodelVisData2 XFILE_BLOCK_RUNTIME;
set count smodelVisData2 smodelCount;
set block smodelVisData3 XFILE_BLOCK_RUNTIME;
set count smodelVisData3 smodelCount;
set block surfaceVisData0 XFILE_BLOCK_RUNTIME;
set count surfaceVisData0 models::surfaceCount;
set block surfaceVisData1 XFILE_BLOCK_RUNTIME;
set count surfaceVisData1 models::surfaceCount;
set block surfaceVisData2 XFILE_BLOCK_RUNTIME;
set count surfaceVisData2 models::surfaceCount;
set block surfaceVisData3 XFILE_BLOCK_RUNTIME;
set count surfaceVisData3 models::surfaceCount;
set block surfaceMaterials XFILE_BLOCK_RUNTIME;
set count surfaceMaterials models::surfaceCount;
set allocalign surfaceMaterials 4;
set block surfaceCastsSunShadow XFILE_BLOCK_RUNTIME;
set count surfaceCastsSunShadow (models::surfaceCount / 32) + 1;
set block cellCasterBits XFILE_BLOCK_RUNTIME;
set count cellCasterBits cellCount * ((cellCount + 31) / 32);
set block cellHasSunLitSurfsBits XFILE_BLOCK_RUNTIME;
set count cellHasSunLitSurfsBits (cellCount * 512) + 1;
set block dynEntVisData0_0 XFILE_BLOCK_RUNTIME;
set count dynEntVisData0_0 gfxSceneDynModelCount;
set block dynEntVisData0_1 XFILE_BLOCK_RUNTIME;
set count dynEntVisData0_1 gfxSceneDynModelCount;
set block dynEntVisData0_2 XFILE_BLOCK_RUNTIME;
set count dynEntVisData0_2 gfxSceneDynModelCount;
set block dynEntVisData0_3 XFILE_BLOCK_RUNTIME;
set count dynEntVisData0_3 gfxSceneDynModelCount;
set block dynEntVisData1_0 XFILE_BLOCK_RUNTIME;
set count dynEntVisData1_0 gfxSceneDynBrushCount;
set block dynEntVisData1_1 XFILE_BLOCK_RUNTIME;
set count dynEntVisData1_1 gfxSceneDynBrushCount;
set block dynEntVisData1_2 XFILE_BLOCK_RUNTIME;
set count dynEntVisData1_2 gfxSceneDynBrushCount;
set block dynEntVisData1_3 XFILE_BLOCK_RUNTIME;
set count dynEntVisData1_3 gfxSceneDynBrushCount;
set block dynEntCellBits0 XFILE_BLOCK_RUNTIME;
set count dynEntCellBits0 (cellCount * gfxSceneDynModelCount / 8) + 1;
set block dynEntCellBits1 XFILE_BLOCK_RUNTIME;
set count dynEntCellBits1 (cellCount * gfxSceneDynBrushCount / 8) + 1;
set block dynEntSortList0 XFILE_BLOCK_RUNTIME;
set count dynEntSortList0 gfxSceneDynModelCount;
set block dynEntSortList1 XFILE_BLOCK_RUNTIME;
set count dynEntSortList1 gfxSceneDynBrushCount;
set block unknownGfxDynEntCellRef0 XFILE_BLOCK_RUNTIME;
set count unknownGfxDynEntCellRef0 unknownGfxDynEntCellRefCount0;
set block unknownGfxDynEntCellRef1 XFILE_BLOCK_RUNTIME;
set count unknownGfxDynEntCellRef1 unknownGfxDynEntCellRefCount1;
set block gfxSceneDynModel XFILE_BLOCK_RUNTIME;
set count gfxSceneDynModel gfxSceneDynModelCount;
set block gfxSceneDynBrush XFILE_BLOCK_RUNTIME;
set count gfxSceneDynBrush gfxSceneDynBrushCount;
set count sortedSurfIndex models::surfaceCount;
set block primaryLightEntityShadowVis XFILE_BLOCK_RUNTIME;
set count primaryLightEntityShadowVis (primaryLightCount - sunPrimaryLightIndex - 1) * 0x1000;
set block primaryLightDynEntShadowVis0 XFILE_BLOCK_RUNTIME;
set count primaryLightDynEntShadowVis0 gfxSceneDynModelCount * (primaryLightCount - sunPrimaryLightIndex - 1);
set block primaryLightDynEntShadowVis1 XFILE_BLOCK_RUNTIME;
set count primaryLightDynEntShadowVis1 gfxSceneDynBrushCount * (primaryLightCount - sunPrimaryLightIndex - 1);
set count shadowGeom primaryLightCount;
set count massiveAdSurface massiveAdSurfaceCount;
reorder:
name
baseName
planes
nodes
indices
surfaces
skyStartSurfs
skyImage
skyBoxModel
sunLight
reflectionProbes
cullGroups
smodelDrawInsts
smodelInsts
cells
lightmaps
lightGrid
models
materialMemory
vd
vld
sun
outdoorImage
smodelVisData0
smodelVisData1
smodelVisData2
smodelVisData3
surfaceVisData0
surfaceVisData1
surfaceVisData2
surfaceVisData3
surfaceMaterials
surfaceCastsSunShadow
cellCasterBits
cellHasSunLitSurfsBits
dynEntVisData0_0
dynEntVisData1_0
dynEntVisData0_1
dynEntVisData1_1
dynEntVisData0_2
dynEntVisData1_2
dynEntVisData0_3
dynEntVisData1_3
dynEntCellBits0
dynEntCellBits1
dynEntSortList0
dynEntSortList1
unknownGfxDynEntCellRef0
unknownGfxDynEntCellRef1
gfxSceneDynModel
gfxSceneDynBrush
primaryLightEntityShadowVis
primaryLightDynEntShadowVis0
primaryLightDynEntShadowVis1
sortedSurfIndex
shadowGeom
massiveAdSurface
unknownMaterial;
// GfxWorldVertexData
use GfxWorldVertexData;
set count vertices GfxWorld::vertexCount;
set condition worldVb never;
// GfxWorldVertexLayerData
use GfxWorldVertexLayerData;
set count data GfxWorld::vertexLayerDataSize;
set condition layerVb never;
// GfxCell
use GfxCell;
set count portals portalCount;
set count cullGroups cullGroupCount;
set count reflectionProbes reflectionProbeCount;
// GfxAabbTree
use GfxAabbTree;
set reusable smodelIndexes;
set count smodelIndexes smodelIndexCount;
set count children childCount;
// GfxAabbTreeChildren
use GfxAabbTreeChildren;
// GfxPortal
use GfxPortal;
set reusable cell;
set count vertices vertexCount;
// 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;
@@ -0,0 +1,7 @@
// =========================================
// LocalizeEntry
// =========================================
use LocalizeEntry;
set block XFILE_BLOCK_TEMP;
set string name;
set string value;
@@ -0,0 +1,7 @@
// =========================================
// MapEnts
// =========================================
use MapEnts;
set block XFILE_BLOCK_TEMP;
set string name;
set count entityString numEntityChars;
@@ -0,0 +1,28 @@
// =========================================
// Material
// =========================================
use Material;
set block XFILE_BLOCK_TEMP;
set allocalign Material 4;
set string info::name;
set reusable textureTable;
set count textureTable textureCount;
set reusable constantTable;
set block constantTable XFILE_BLOCK_VIRTUAL;
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;
// MaterialWaterDef
use MaterialWaterDef;
set reusable water;
// water_t
use water_t;
set count H0 N * M;
set count wTerm N * M;
@@ -0,0 +1,52 @@
// =========================================
// MaterialTechniqueSet
// =========================================
use MaterialTechniqueSet;
set block XFILE_BLOCK_TEMP;
set string 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 vertexDecl;
set reusable vertexShader;
set reusable pixelShader;
// MaterialShaderArgument
use MaterialShaderArgument;
set condition u::literalConst type == MTL_ARG_LITERAL_VERTEX_CONST
|| type == MTL_ARG_LITERAL_PIXEL_CONST;
set reusable u::literalConst;
set condition u::codeConst type == MTL_ARG_CODE_VERTEX_CONST
|| type == MTL_ARG_CODE_PIXEL_CONST;
set condition u::codeSampler type == MTL_ARG_CODE_PIXEL_SAMPLER;
set condition u::nameHash type == MTL_ARG_MATERIAL_VERTEX_CONST
|| type == MTL_ARG_MATERIAL_PIXEL_CONST || type == MTL_ARG_MATERIAL_PIXEL_SAMPLER;
// MaterialVertexShader
use MaterialVertexShader;
set string name;
// GfxVertexShaderLoadDef
use GfxVertexShaderLoadDef;
set count program programSize;
// MaterialPixelShader
use MaterialPixelShader;
set string name;
// GfxPixelShaderLoadDef
use GfxPixelShaderLoadDef;
set count program programSize;
// MaterialVertexStreamRouting
set condition MaterialVertexStreamRouting::decl never;
@@ -0,0 +1,7 @@
// =========================================
// MenuList
// =========================================
use MenuList;
set block XFILE_BLOCK_TEMP;
set string name;
set count menus menuCount;
@@ -0,0 +1,11 @@
// =========================================
// PhysConstraints
// =========================================
use PhysConstraints;
set block XFILE_BLOCK_TEMP;
set string name;
// PhysConstraint
use PhysConstraint;
set string target_bone1;
set string target_bone2;
@@ -0,0 +1,7 @@
// =========================================
// PhysPreset
// =========================================
use PhysPreset;
set block XFILE_BLOCK_TEMP;
set string name;
set string sndAliasPrefix;
@@ -0,0 +1,7 @@
// =========================================
// RawFile
// =========================================
use RawFile;
set block XFILE_BLOCK_TEMP;
set string name;
set count buffer len + 1;
@@ -0,0 +1,12 @@
// =========================================
// SceneAnimation
// =========================================
use SceneAnimation;
set block XFILE_BLOCK_TEMP;
set string name;
set count animReferences animReferenceCount;
// AnimReference
use AnimReference;
set string unknownString0;
set scriptstring unknownScriptString0;
@@ -0,0 +1,6 @@
// =========================================
// SndCurve
// =========================================
use SndCurve;
set block XFILE_BLOCK_TEMP;
set string name;
@@ -0,0 +1,7 @@
// =========================================
// StringTable
// =========================================
use StringTable;
set string name;
set string values;
set count values columnCount * rowCount;
@@ -0,0 +1,48 @@
// =========================================
// WeaponDef
// =========================================
use WeaponDef;
set block XFILE_BLOCK_TEMP;
set string name;
set string displayName;
set string overlayName;
set string szXAnims;
set assetref szXAnims AssetXAnim;
set string modeName;
set string unknownString196;
set reusable bounceSound;
set count bounceSound 30;
set string unknownString616;
set string unknownString620;
set string unknownString652;
set string unknownString660;
set string unknownString680;
set string unknownString992;
set string unknownString1220;
set string unknownString1300;
set string unknownString1308;
set string unknownStrings1380;
set string aiVsAiAccuracyGraphName;
set string aiVsPlayerAccuracyGraphName;
set reusable aiVsAiAccuracyGraphKnots;
set count aiVsAiAccuracyGraphKnots aiVsAiAccuracyGraphKnotCount;
set reusable aiVsPlayerAccuracyGraphKnots;
set count aiVsPlayerAccuracyGraphKnots aiVsPlayerAccuracyGraphKnotCount;
set reusable originalAiVsAiAccuracyGraphKnots;
set count originalAiVsAiAccuracyGraphKnots aiVsAiAccuracyGraphKnotCount;
set reusable originalAiVsPlayerAccuracyGraphKnots;
set count originalAiVsPlayerAccuracyGraphKnots aiVsPlayerAccuracyGraphKnotCount;
set string unknownString2192;
set string unknownString2196;
set string unknownString2216;
set string unknownString2332;
set string unknownString2336;
reorder:
...
aiVsAiAccuracyGraphName
aiVsAiAccuracyGraphKnots
originalAiVsAiAccuracyGraphKnots
aiVsPlayerAccuracyGraphName
aiVsPlayerAccuracyGraphKnots
originalAiVsPlayerAccuracyGraphKnots;
@@ -0,0 +1,70 @@
// =========================================
// XAnimParts
// =========================================
use XAnimParts;
set block XFILE_BLOCK_TEMP;
set string name;
set string unknownString;
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
unknownString
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;
+83
View File
@@ -0,0 +1,83 @@
// =========================================
// XModel
// =========================================
use XModel;
set block XFILE_BLOCK_TEMP;
set string 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) * 4;
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 reusable physGeoms;
set count physGeoms 1;
// PhysGeomList
set count PhysGeomList::geoms count;
// PhysGeomInfo
use PhysGeomInfo;
set reusable brush;
// BrushWrapper
use BrushWrapper;
set count sides numsides;
set count baseAdjacentSide totalEdgeCount;
set reusable verts;
set count verts numverts;
set reusable planes;
set count planes numsides;
// cbrushside_t
use cbrushside_t;
set reusable plane;
// XSurface
use XSurface;
set reusable verts0;
set allocalign verts0 16;
set count verts0 vertCount;
set condition vb0 never;
set reusable verts1;
set count verts1 vertCount;
set condition vb1 never;
set reusable vertList;
set count vertList vertListCount;
set reusable triIndices;
set count triIndices triCount;
set condition indexBuffer never;
reorder:
vertInfo
verts0
verts1
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 12 * (vertCount[0]
+ vertCount[1]
+ vertCount[2]
+ vertCount[3]);
// XModelCollSurf_s
use XModelCollSurf_s;
set count collTris numCollTris;
+23
View File
@@ -0,0 +1,23 @@
// =========================================
// XmlTree
// =========================================
use XmlTree;
set block XFILE_BLOCK_TEMP;
set string name;
// xmlNodeList
use xmlNodeList;
set count nodes nodeCount;
// xmlNode
use xmlNode;
set string name;
// xmlNodeComplex
use xmlNodeComplex;
set string name;
// xmlAttribute
use xmlAttribute;
set string name;
set string value;
@@ -0,0 +1,80 @@
// =========================================
// clipMap_t
// =========================================
use clipMap_t;
set block XFILE_BLOCK_TEMP;
set string name;
set reusable planes;
set count planes planeCount;
set count staticModelList numStaticModels;
set count materials numMaterials;
set count brushsides numBrushSides;
set count brushEdges numBrushEdges;
set count nodes numNodes;
set count leafs numLeafs;
set count leafbrushNodes leafbrushNodesCount;
set count leafbrushes numLeafBrushes;
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 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;
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
use CollisionPartition;
set reusable borders;
// cbrush_t
use cbrush_t;
set reusable sides;
set reusable baseAdjacentSide;
set reusable verts;
// DynEntityDef
use DynEntityDef;
set reusable destroyPieces;
// XModelPieces
use XModelPieces;
set string name;
set count pieces numpieces;
@@ -0,0 +1,86 @@
// =========================================
// menuDef_t
// =========================================
use menuDef_t;
set block XFILE_BLOCK_TEMP;
set string window::name;
set string font;
set string onOpen;
set string onClose;
set string onESC;
set reusable visibleExp;
set string allowedBinding;
set string soundName;
set reusable rectXExp;
set reusable rectYExp;
set count items itemCount;
// windowDef_t
use windowDef_t;
set string name;
set string group;
// ItemKeyHandler
set string ItemKeyHandler::action;
// statement_s
set count statement_s::entries numEntries;
// expressionEntry
set condition expressionEntry::data::operand type == EET_OPERAND;
// 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 text;
set condition parent never;
set string mouseEnterText;
set string mouseExitText;
set string mouseEnter;
set string mouseExit;
set string action;
set string onAccept;
set string onFocus;
set string leaveFocus;
set string dvar;
set string dvarTest;
set string enableDvar;
set reusable visibleExp;
set reusable textExp;
set reusable materialExp;
set reusable rectXExp;
set reusable rectYExp;
set reusable rectWExp;
set reusable rectHExp;
set reusable unknownStatement0;
// itemDefData_t
use itemDefData_t;
set string enumDvarName;
set condition data never;
set condition listBox itemDef_s::type == ITEM_TYPE_LISTBOX;
set condition editField itemDef_s::type == ITEM_TYPE_TEXT
|| itemDef_s::type == ITEM_TYPE_EDITFIELD
|| itemDef_s::type == ITEM_TYPE_NUMERICFIELD
|| itemDef_s::type == ITEM_TYPE_SLIDER
|| itemDef_s::type == ITEM_TYPE_YESNO
|| itemDef_s::type == ITEM_TYPE_BIND
|| itemDef_s::type == ITEM_TYPE_VALIDFILEFIELD
|| itemDef_s::type == ITEM_TYPE_DECIMALFIELD
|| itemDef_s::type == ITEM_TYPE_UPREDITFIELD;
set condition multi itemDef_s::type == ITEM_TYPE_MULTI;
set condition enumDvarName itemDef_s::type == ITEM_TYPE_DVARENUM;
// listBoxDef_s
set string listBoxDef_s::doubleClick;
// multiDef_s
use multiDef_s;
set string dvarList;
set string dvarStr;
@@ -0,0 +1,35 @@
// =========================================
// snd_alias_list_t
// =========================================
use snd_alias_list_t;
set block XFILE_BLOCK_TEMP;
set string name;
set reusable head;
set count head count;
// snd_alias_t
use snd_alias_t;
set string aliasName;
set string subtitle;
set string secondaryAliasName;
set string chainAliasName;
set reusable soundFile;
// SoundFile
use SoundFile;
set string unknownString0;
set string unknownString1;
set condition u::primeSnd type == QOS_SOUND_FILE_TYPE_PRIMED;
set reusable u::primeSnd;
// QosMssSound
use QosMssSound;
set arraysize data dataSize;
set condition unknownDataPtr0 never;
set condition unknownDataPtr1 never;
// QosPrimedSound
use QosPrimedSound;
set string name;
set count buffer size;
set block buffer XFILE_BLOCK_LARGE;