// Game: Modern Warfare 2 (IW4) game IW4; // Game Assets asset PhysPreset ASSET_TYPE_PHYSPRESET; asset PhysCollmap ASSET_TYPE_PHYSCOLLMAP; asset XAnimParts ASSET_TYPE_XANIMPARTS; asset XModel ASSET_TYPE_XMODEL; asset Material ASSET_TYPE_MATERIAL; asset MaterialPixelShader ASSET_TYPE_PIXELSHADER; asset MaterialVertexShader ASSET_TYPE_VERTEXSHADER; asset MaterialVertexDeclaration ASSET_TYPE_VERTEXDECL; asset MaterialTechniqueSet ASSET_TYPE_TECHNIQUE_SET; asset GfxImage ASSET_TYPE_IMAGE; asset snd_alias_list_t ASSET_TYPE_SOUND; asset SndCurve ASSET_TYPE_SOUND_CURVE; asset LoadedSound ASSET_TYPE_LOADED_SOUND; // asset clipMap_t ASSET_TYPE_CLIPMAP_MP; // asset ComWorld ASSET_TYPE_COMWORLD; // asset GameWorldSp ASSET_TYPE_GAMEWORLD_SP; // asset GameWorldMp ASSET_TYPE_GAMEWORLD_MP; // asset MapEnts ASSET_TYPE_MAP_ENTS; // asset FxWorld ASSET_TYPE_FXWORLD; // asset GfxWorld ASSET_TYPE_GFXWORLD; // asset GfxLightDef ASSET_TYPE_LIGHT_DEF; // asset Font_s ASSET_TYPE_FONT; asset MenuList ASSET_TYPE_MENULIST; asset menuDef_t ASSET_TYPE_MENU; asset LocalizeEntry ASSET_TYPE_LOCALIZE_ENTRY; // asset WeaponCompleteDef ASSET_TYPE_WEAPON; // asset SndDriverGlobals ASSET_TYPE_SNDDRIVER_GLOBALS; // asset FxEffectDef ASSET_TYPE_FX; // asset FxImpactTable ASSET_TYPE_IMPACT_FX; asset RawFile ASSET_TYPE_RAWFILE; asset StringTable ASSET_TYPE_STRINGTABLE; // asset LeaderboardDef ASSET_TYPE_LEADERBOARD; // asset StructuredDataDefSet ASSET_TYPE_STRUCTURED_DATA_DEF; // asset TracerDef ASSET_TYPE_TRACER; // asset VehicleDef ASSET_TYPE_VEHICLE; // asset AddonMapEnts ASSET_TYPE_ADDON_MAP_ENTS; // Setup blocks block temp XFILE_BLOCK_TEMP default; block normal XFILE_BLOCK_PHYSICAL; block runtime XFILE_BLOCK_RUNTIME default; block normal XFILE_BLOCK_VIRTUAL default; block normal XFILE_BLOCK_LARGE; block normal XFILE_BLOCK_CALLBACK; block normal XFILE_BLOCK_VERTEX; block normal XFILE_BLOCK_INDEX; // ========================================= // PhysPreset // ========================================= use PhysPreset; set string name; set name name; set string sndAliasPrefix; block normal XFILE_BLOCK_INDEX; // ========================================= // PhysCollmap // ========================================= use PhysCollmap; set string name; set name name; set count geoms count; // PhysGeomInfo use PhysGeomInfo; set count brushWrapper 1; // BrushWrapper use BrushWrapper; set reusable planes; set count planes brush::numsides; // cbrushWrapper_t use cbrushWrapper_t; set count sides numsides; set count baseAdjacentSide BrushWrapper::totalEdgeCount; // cbrushside_t use cbrushside_t; set reusable plane; set count plane 1; // ========================================= // XAnimParts // ========================================= use XAnimParts; 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 quat2 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; // XAnimDeltaPartQuat2 use XAnimDeltaPartQuat2; 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; // XAnimDeltaPartQuatDataFrames2 reorder XAnimDeltaPartQuatDataFrames2: 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; // ========================================= // XModel // ========================================= use XModel; 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 materialHandles numsurfs; set count collSurfs numCollSurfs; set count boneInfo numBones; // XModelLodInfo use XModelLodInfo; set block modelSurfs XFILE_BLOCK_TEMP; set reusable modelSurfs; set condition surfs never; // XModelSurfs use XModelSurfs; set string name; set count surfs XModelLodInfo::numsurfs; // No this is not a mistake. This is how the game does it. // XSurface use XSurface; set reusable verts0; set block verts0 XFILE_BLOCK_VERTEX; set count verts0 vertCount; set reusable vertList; set count vertList vertListCount; set reusable triIndices; set block triIndices XFILE_BLOCK_INDEX; set count triIndices triCount; reorder: zoneHandle vertInfo verts0 vertList triIndices; // XSurfaceVertexInfo use XSurfaceVertexInfo; set reusable vertsBlend; set count vertsBlend vertCount[0] + 3 * vertCount[1] + 5 * vertCount[2] + 7 * 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; // ========================================= // Material // ========================================= use Material; 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; // ========================================= // MaterialTechniqueSet // ========================================= use MaterialTechniqueSet; set string name; set name name; set condition remappedTechniqueSet never; 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; // MaterialShaderArgument use MaterialShaderArgument; set condition u::literalConst type == MTL_ARG_LITERAL_VERTEX_CONST || type == MTL_ARG_LITERAL_PIXEL_CONST; set reusable u::literalConst; // ========================================= // MaterialVertexDeclaration // ========================================= use MaterialVertexDeclaration; set string name; set name name; // MaterialVertexStreamRouting set condition MaterialVertexStreamRouting::decl never; // ========================================= // MaterialVertexShader // ========================================= use MaterialVertexShader; set string name; set name name; // GfxVertexShaderLoadDef set count GfxVertexShaderLoadDef::program programSize; // MaterialVertexShaderProgram set condition MaterialVertexShaderProgram::vs never; // ========================================= // MaterialPixelShader // ========================================= use MaterialPixelShader; set string name; set name name; // GfxPixelShaderLoadDef set count GfxPixelShaderLoadDef::program programSize; // MaterialPixelShaderProgram set condition MaterialPixelShaderProgram::ps never; // ========================================= // GfxImage // ========================================= use GfxImage; set action OnImageLoaded(GfxImage); set string name; set name name; 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; // ========================================= // snd_alias_list_t // ========================================= use snd_alias_list_t; set string aliasName; set name aliasName; 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 string mixerGroup; set reusable soundFile; set reusable speakerMap; // SoundFile set condition SoundFile::u::loadSnd type == SAT_LOADED; // SpeakerMap set string SpeakerMap::name; // StreamedSound use StreamedSound; set string dir; set string name; // ========================================= // SndCurve // ========================================= use SndCurve; set string filename; set name filename; // ========================================= // LoadedSound // ========================================= use LoadedSound; set string name; set name name; // MssSound use MssSound; set block data XFILE_BLOCK_TEMP; set reusable data; set count data info::data_len; set condition info::data_ptr never; set condition info::initial_ptr never; set action SetSoundData(MssSound); // ========================================= // LocalizeEntry // ========================================= use LocalizeEntry; set string name; set name name; set string value; // ========================================= // MenuList // ========================================= use MenuList; set string name; set name name; set count menus menuCount; // ========================================= // menuDef_t // ========================================= use menuDef_t; set string window::name; set name window::name; set string font; set reusable visibleExp; set string allowedBinding; set string soundName; set reusable rectXExp; set reusable rectYExp; set reusable rectWExp; set reusable rectHExp; set reusable openSoundExp; set reusable closeSoundExp; set count items itemCount; set reusable expressionData; reorder: expressionData window font onOpen onClose onCloseRequest onESC onKey visibleExp allowedBinding soundName rectXExp rectYExp rectWExp rectHExp openSoundExp closeSoundExp items; // windowDef_t use windowDef_t; set string name; set string group; // MenuEventHandlerSet set count MenuEventHandlerSet::eventHandlers eventHandlerCount; // MenuEventHandler use MenuEventHandler; set string eventData::unconditionalScript; set condition eventData::unconditionalScript eventType == EVENT_UNCONDITIONAL; set condition eventData::conditionalScript eventType == EVENT_IF; set condition eventData::elseScript eventType == EVENT_ELSE; set condition eventData::setLocalVarData eventType == EVENT_SET_LOCAL_VAR_BOOL || eventType == EVENT_SET_LOCAL_VAR_INT || eventType == EVENT_SET_LOCAL_VAR_FLOAT || eventType == EVENT_SET_LOCAL_VAR_STRING; // ConditionalScript use ConditionalScript; set reusable eventExpression; reorder: eventExpression eventHandlerSet; // SetLocalVarData use SetLocalVarData; set string localVarName; set reusable expression; // Statement_s use Statement_s; set count entries numEntries; set reusable supportingData; set condition lastResult never; // expressionEntry set condition expressionEntry::data::operand type == EET_OPERAND; // Operand use Operand; set reusable internals::function; set condition internals::intVal dataType == VAL_INT; set condition internals::floatVal dataType == VAL_FLOAT; set condition internals::stringVal dataType == VAL_STRING; set condition internals::function dataType == VAL_FUNCTION; // ExpressionString set string ExpressionString::string; // itemDef_s use itemDef_s; set string text; set condition parent never; set string dvar; set string dvarTest; set string enableDvar; set string localVar; set count floatExpressions floatExpressionCount; set reusable visibleExp; set reusable disabledExp; set reusable textExp; set reusable materialExp; // itemDefData_t use itemDefData_t; set string enumDvarName; set condition data never; set condition listBox itemDef_s::type == 6; set condition editField itemDef_s::type == 0 || itemDef_s::type == 4 || itemDef_s::type == 9 || itemDef_s::type == 10 || itemDef_s::type == 11 || itemDef_s::type == 14 || itemDef_s::type == 16 || itemDef_s::type == 17 || itemDef_s::type == 18 || itemDef_s::type == 22 || itemDef_s::type == 23; set condition multi itemDef_s::type == 12; set condition enumDvarName itemDef_s::type == 13; set condition ticker itemDef_s::type == 20; set condition scroll itemDef_s::type == 21; // multiDef_s use multiDef_s; set string dvarList; set string dvarStr; // ItemFloatExpression set reusable ItemFloatExpression::expression; // UIFunctionList use UIFunctionList; set count functions totalFunctions; set reusable functions; // This statement makes both the array of pointers and the pointers in the array reusable. only the second one is correct however this shouldn't be a problem with vanilla fastfiles. // StaticDvarList set count StaticDvarList::staticDvars numStaticDvars; // StaticDvar use StaticDvar; set condition dvar never; set string dvarName; // StringList use StringList; set count strings totalStrings; set string strings; // ========================================= // RawFile // ========================================= use RawFile; set string name; set name name; set condition data::compressedBuffer compressedLen > 0; set count data::compressedBuffer compressedLen; set count data::buffer len + 1; // ========================================= // StringTable // ========================================= use StringTable; set string name; set name name; set count values columnCount * rowCount; // StringTableCell set string StringTableCell::string; // EOF