#pragma once // clang-format off: Order of includes matters here // #include #include "Game/IAsset.h" #include "IW4_Assets.h" // clang-format on namespace IW4 { enum XAssetType { ASSET_TYPE_PHYSPRESET, ASSET_TYPE_PHYSCOLLMAP, ASSET_TYPE_XANIMPARTS, ASSET_TYPE_XMODEL_SURFS, ASSET_TYPE_XMODEL, ASSET_TYPE_MATERIAL, ASSET_TYPE_PIXELSHADER, ASSET_TYPE_VERTEXSHADER, ASSET_TYPE_VERTEXDECL, ASSET_TYPE_TECHNIQUE_SET, ASSET_TYPE_IMAGE, ASSET_TYPE_SOUND, ASSET_TYPE_SOUND_CURVE, ASSET_TYPE_LOADED_SOUND, ASSET_TYPE_CLIPMAP_SP, ASSET_TYPE_CLIPMAP_MP, ASSET_TYPE_COMWORLD, ASSET_TYPE_GAMEWORLD_SP, ASSET_TYPE_GAMEWORLD_MP, ASSET_TYPE_MAP_ENTS, ASSET_TYPE_FXWORLD, ASSET_TYPE_GFXWORLD, ASSET_TYPE_LIGHT_DEF, ASSET_TYPE_UI_MAP, ASSET_TYPE_FONT, ASSET_TYPE_MENULIST, ASSET_TYPE_MENU, ASSET_TYPE_LOCALIZE_ENTRY, ASSET_TYPE_WEAPON, ASSET_TYPE_SNDDRIVER_GLOBALS, ASSET_TYPE_FX, ASSET_TYPE_IMPACT_FX, ASSET_TYPE_AITYPE, ASSET_TYPE_MPTYPE, ASSET_TYPE_CHARACTER, ASSET_TYPE_XMODELALIAS, ASSET_TYPE_RAWFILE, ASSET_TYPE_STRINGTABLE, ASSET_TYPE_LEADERBOARD, ASSET_TYPE_STRUCTURED_DATA_DEF, ASSET_TYPE_TRACER, ASSET_TYPE_VEHICLE, ASSET_TYPE_ADDON_MAP_ENTS, ASSET_TYPE_COUNT }; enum SubAssetType { SUB_ASSET_TYPE_TECHNIQUE, SUB_ASSET_TYPE_ACCURACY_GRAPH, SUB_ASSET_TYPE_COUNT }; struct DB_AuthHash { char bytes[32]; }; struct DB_AuthSignature { char bytes[256]; }; struct DB_AuthSubHeader { char fastfileName[32]; unsigned int reserved; DB_AuthHash masterBlockHashes[244]; }; struct DB_AuthHeader { char magic[8]; // + 0 unsigned int reserved; // + 8 DB_AuthHash subheaderHash; // + 12 DB_AuthSignature signedSubheaderHash; // + 44 DB_AuthSubHeader subheader; // + 300 }; struct ScriptStringList { int count; const char** strings; }; struct XAsset { XAssetType type; XAssetHeader header; }; struct XAssetList { ScriptStringList stringList; int assetCount; XAsset* assets; }; struct cspField_t { const char* szName; int iOffset; int iFieldType; }; enum csParseFieldType_t { CSPFT_STRING = 0, CSPFT_STRING_MAX_STRING_CHARS, CSPFT_STRING_MAX_QPATH, CSPFT_STRING_MAX_OSPATH, CSPFT_INT, CSPFT_QBOOLEAN, CSPFT_BOOL, CSPFT_FLOAT, CSPFT_MPH_TO_INCHES_PER_SEC, CSPFT_MILLISECONDS, CSPFT_FX, CSPFT_XMODEL, CSPFT_MATERIAL, CSPFT_PHYS_COLLMAP, CSPFT_SOUND, CSPFT_TRACER, CSPFT_NUM_BASE_FIELD_TYPES, }; enum weapFieldType_t { WFT_WEAPONTYPE = CSPFT_NUM_BASE_FIELD_TYPES, WFT_WEAPONCLASS, WFT_OVERLAYRETICLE, WFT_PENETRATE_TYPE, WFT_IMPACT_TYPE, WFT_STANCE, WFT_PROJ_EXPLOSION, WFT_OFFHAND_CLASS, WFT_ANIMTYPE, WFT_ACTIVE_RETICLE_TYPE, WFT_GUIDED_MISSILE_TYPE, WFT_BOUNCE_SOUND, WFT_STICKINESS, WFT_OVERLAYINTERFACE, WFT_INVENTORYTYPE, WFT_FIRETYPE, WFT_AMMOCOUNTER_CLIPTYPE, WFT_ICONRATIO_HUD, WFT_ICONRATIO_PICKUP, WFT_ICONRATIO_AMMOCOUNTER, WFT_ICONRATIO_KILL, WFT_ICONRATIO_DPAD, WFT_HIDETAGS, WFT_NOTETRACKSOUNDMAP, WFT_NOTETRACKRUMBLEMAP, // Custom WFT_ANIM_NAME, WFT_NUM_FIELD_TYPES, }; enum VehicleFieldType { VFT_TYPE = CSPFT_NUM_BASE_FIELD_TYPES, VFT_AXLE_STEERING, VFT_AXLE_POWER, VFT_AXLE_BRAKING, VFT_TROPHY_TAGS, VFT_NUM, }; struct AccuracyGraph { vec2_t* graphKnots; int graphKnotCount; }; using AssetPhysPreset = Asset; using AssetPhysCollMap = Asset; using AssetXAnim = Asset; using AssetXModelSurfs = Asset; using AssetXModel = Asset; using AssetMaterial = Asset; using AssetPixelShader = Asset; using AssetVertexShader = Asset; using AssetVertexDecl = Asset; using AssetTechniqueSet = Asset; using AssetImage = Asset; using AssetSound = Asset; using AssetSoundCurve = Asset; using AssetLoadedSound = Asset; using AssetClipMapSp = Asset; using AssetClipMapMp = Asset; using AssetComWorld = Asset; using AssetGameWorldSp = Asset; using AssetGameWorldMp = Asset; using AssetMapEnts = Asset; using AssetFxWorld = Asset; using AssetGfxWorld = Asset; using AssetLightDef = Asset; using AssetFont = Asset; using AssetMenuList = Asset; using AssetMenu = Asset; using AssetLocalize = Asset; using AssetWeapon = Asset; using AssetFx = Asset; using AssetImpactFx = Asset; using AssetRawFile = Asset; using AssetStringTable = Asset; using AssetLeaderboard = Asset; using AssetStructuredDataDef = Asset; using AssetTracer = Asset; using AssetVehicle = Asset; using AssetAddonMapEnts = Asset; using SubAssetTechnique = SubAsset; using SubAssetAccuracyGraph = SubAsset; } // namespace IW4 DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPhysPreset, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPhysCollMap, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetXAnim, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetXModelSurfs, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetXModel, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMaterial, info.name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPixelShader, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetVertexShader, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetVertexDecl, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetTechniqueSet, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetImage, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetSound, aliasName); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetSoundCurve, filename); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLoadedSound, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetClipMapSp, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetClipMapMp, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetComWorld, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetGameWorldSp, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetGameWorldMp, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMapEnts, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetFxWorld, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetGfxWorld, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLightDef, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetFont, fontName); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMenuList, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMenu, window.name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLocalize, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetWeapon, szInternalName); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetFx, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetImpactFx, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetRawFile, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetStringTable, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLeaderboard, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetStructuredDataDef, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetTracer, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetVehicle, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetAddonMapEnts, name);