#pragma once
#include "Main.hpp"

struct RumbleGraph;
struct RumbleInfo;
struct CameraDef;
struct GfxImage;
struct Material;
struct Bounds;
struct FxCombinedDef;

struct vec2_t
{
	float v[2];
};

struct vec3_t
{
	float v[3];
};

struct vec4_t
{
	float v[4];
};

typedef int scr_string_t;

struct Bounds
{
	vec3_t midPoint;
	vec3_t halfSize;
};

struct GfxDrawSurfFields
{
	unsigned __int64 indirectArgsOffset : 10;
	unsigned __int64 gpBatchIndex : 16;
	unsigned __int64 objectId : 24;
	unsigned __int64 hasGfxEntIndex : 1;
	unsigned __int64 lightmapIndex : 9;
	unsigned __int64 shadowcaster : 1;
	unsigned __int64 materialSortedIndex : 16;
	unsigned __int64 tessellation : 3;
	unsigned __int64 prepass : 2;
	unsigned __int64 viewModelRender : 1;
	unsigned __int64 lowResShading : 1;
	unsigned __int64 surfType : 4;
	unsigned __int64 primarySortKey : 6;
};

struct EffectDefMap {
	char name[64];
	char filename[256];
};

struct Packed128
{
	unsigned __int64 p0;
	unsigned __int64 p1;
};

union GfxDrawSurf
{
	GfxDrawSurfFields fields;
	Packed128 packed;
};

struct MaterialTextureDef
{
	unsigned __int8 index;
	GfxImage* image;
};

struct MaterialConstantDef
{
	unsigned __int8 index;
	vec4_t literal;
};

struct GfxDecalVolumeMaterial
{
	const char* name;
	GfxImage* channels[6];
	unsigned int flags;
	vec3_t colorTint;
	float alphaDissolveParms;
	float emissiveScale;
	unsigned int packedDisplacementScaleAndBias;
	float displacementCutoffDistance;
	float displacementCutoffFalloff;
	unsigned int packedTemperatureBaseAndScale;
	unsigned __int8 textureAtlasRowCount;
	unsigned __int8 textureAtlasColumnCount;
	unsigned __int8 padding[6];
};

struct PhysicsAssetUsageCounter
{
	int serverEnt;
	int clientEnt;
	int dynEnt;
};

struct __declspec(align(4)) PhysicsAsset
{
	const char* name;
	char* havokData;
	unsigned int havokDataSize;
	int useCategory;
	int numRigidBodies;
	int numConstraints;
	uintptr_t simulationCategories;
	unsigned int* bodyContents;
	int numSFXEventAssets;
	int numVFXEventAssets;
	uintptr_t sfxEventAssets;
	uintptr_t vfxEventAssets;
	PhysicsAssetUsageCounter usageCounter;
	bool containsDynamicBodies;
};

struct Material
{
	const char* name;
	unsigned int contents;
	unsigned int surfaceFlags;
	float maxDisplacement;
	int /*MaterialGeometryType*/ materialType;
	unsigned __int8 cameraRegion;
	unsigned __int8 sortKey;
	unsigned __int16 flags;
	unsigned __int8 textureCount;
	unsigned __int8 constantCount;
	unsigned __int8 constantBufferCount;
	unsigned __int8 layerCount;
	unsigned __int16 packedAtlasDataSize;
	unsigned __int8 textureAtlasRowCount;
	unsigned __int8 textureAtlasColumnCount;
	GfxDrawSurf drawSurf;
	unsigned __int8* packedAtlasData;
	void* /*MaterialTechniqueSet*/ techniqueSet;
	MaterialTextureDef* textureTable;
	MaterialConstantDef* constantTable;
	GfxDecalVolumeMaterial* decalVolumeMaterial;
	unsigned __int8* constantBufferIndex;
	void* /*MaterialConstantBufferDef*/ constantBufferTable;
	const char** subMaterials;
};

enum GfxTextureId : __int32
{
	NULLID = 0x0,
};

enum GfxPixelFormat : __int32
{
	GFX_PF_INVALID = 0x0,
	GFX_PF_R8 = 0x1,
	GFX_PF_A8 = 0x2,
	GFX_PF_L8 = 0x3,
	GFX_PF_R8G8 = 0x4,
	GFX_PF_L8A8 = 0x5,
	GFX_PF_R8G8B8A8 = 0x6,
	GFX_PF_R8G8B8A8_SRGB = 0x7,
	GFX_PF_R8_SNORM = 0x8,
	GFX_PF_R8G8_SNORM = 0x9,
	GFX_PF_R16 = 0xA,
	GFX_PF_R16G16 = 0xB,
	GFX_PF_R16G16B16A16 = 0xC,
	GFX_PF_R16_SNORM = 0xD,
	GFX_PF_R16F = 0xE,
	GFX_PF_R16G16F = 0xF,
	GFX_PF_R16G16B16A16F = 0x10,
	GFX_PF_R32F = 0x11,
	GFX_PF_R32G32F = 0x12,
	GFX_PF_R32G32B32A32F = 0x13,
	GFX_PF_D16 = 0x14,
	GFX_PF_D32F = 0x15,
	GFX_PF_D32F_S8 = 0x16,
	GFX_PF_R8_UINT = 0x17,
	GFX_PF_R16_UINT = 0x18,
	GFX_PF_R32_UINT = 0x19,
	GFX_PF_R32G32_UINT = 0x1A,
	GFX_PF_R32G32B32A32_UINT = 0x1B,
	GFX_PF_R10G10B10A2_UINT = 0x1C,
	GFX_PF_R5G6B5 = 0x1D,
	GFX_PF_R10G10B10A2 = 0x1E,
	GFX_PF_R9G9B9E5_SHAREDEXP = 0x1F,
	GFX_PF_R11G11B10F = 0x20,
	GFX_PF_BC1 = 0x21,
	GFX_PF_BC1_SRGB = 0x22,
	GFX_PF_BC2 = 0x23,
	GFX_PF_BC2_SRGB = 0x24,
	GFX_PF_BC3 = 0x25,
	GFX_PF_BC3_SRGB = 0x26,
	GFX_PF_BC4 = 0x27,
	GFX_PF_BC5 = 0x28,
	GFX_PF_BC5S = 0x29,
	GFX_PF_BC6H = 0x2A,
	GFX_PF_BC6HS = 0x2B,
	GFX_PF_BC7 = 0x2C,
	GFX_PF_BC7_SRGB = 0x2D,
	GFX_PF_R8G8B8A8_SNORM = 0x2E,
	GFX_PF_R1 = 0x2F,
	GFX_PF_R4G4 = 0x30,
	GFX_PF_R10G10B10A2_SNORM = 0x31,
	GFX_PF_COUNT = 0x32,
};

enum GfxImageFlags
{
	IMG_FLAG_NONE = 0x0,
	IMG_DISK_FLAG_NOPICMIP = 0x1,
	IMG_DISK_FLAG_NOMIPMAPS = 0x2,
	IMG_DISK_FLAG_UNUSED = 0x4,
	IMG_DISK_FLAG_NORMAL_OCCLUSON_GLOSS = 0x8,
	IMG_DISK_FLAG_CLAMP_U = 0x10,
	IMG_DISK_FLAG_CLAMP_V = 0x20,
	IMG_DISK_FLAG_STREAMED = 0x40,
	IMG_DISK_FLAG_USE_OODLE_COMPRESSION = 0x80,
	IMG_DISK_FLAG_GAMMA_SRGB = 0x100,
	IMG_DISK_FLAG_PACKED_ATLAS = 0x200,
	IMG_CREATE_FLAG_UNTILED = 0x400,
	IMG_CREATE_FLAG_CPU_READ = 0x800,
	IMG_CREATE_FLAG_CPU_WRITE = 0x1000,
	IMG_DISK_FLAG_AUTOMETALNESS = 0x2000,
	IMG_DISK_FLAG_AUTODISPLACEMENT = 0x4000,
	IMG_DISK_FLAG_MAPTYPE_2D = 0x0,
	IMG_DISK_FLAG_MAPTYPE_CUBE = 0x8000,
	IMG_DISK_FLAG_MAPTYPE_3D = 0x10000,
	IMG_DISK_FLAG_MAPTYPE_1D = 0x18000,
	IMG_DISK_FLAG_MAPTYPE_ARRAY = 0x20000,
	IMG_DISK_FLAG_MAPTYPE_CUBE_ARRAY = 0x28000,
	IMG_DISK_FLAG_INVERT_ALPHA = 0x40000,
	IMG_DISK_FLAG_PREMUL_ALPHA = 0x80000,
	IMG_DISK_FLAG_MIPGEN_ORIGINAL = 0x0,
	IMG_DISK_FLAG_MIPGEN_LANCZOS3 = 0x100000,
	IMG_DISK_FLAG_MIPGEN_CATMULL_ROM = 0x200000,
	IMG_DISK_FLAG_MIPGEN_CUBIC_BSPLINE = 0x300000,
	IMG_DISK_FLAG_MIPGEN_BOX = 0x400000,
	IMG_DISK_FLAG_MIPGEN_COVERAGE_PRESERVING = 0x500000,
	IMG_CREATE_FLAG_RW_VIEW = 0x800000,
	IMG_CREATE_FLAG_DYNAMIC = 0x1000000,
	IMG_DISK_FLAG_PREMUL_KEEP_ALPHA = 0x2000000,
	IMG_DISK_FLAG_RTT = 0x4000000,
	IMG_DISK_FLAG_EXTRACT_ALPHA = 0x8000000,
	IMG_DISK_FLAG_OCTAHEDRON = 0x10000000,
	IMG_CREATE_FLAG_STAGING = 0x20000000,
	IMG_CREATE_FLAG_VOLUMETRIC_LAYOUT_OVERRIDE = 0x40000000,
	IMG_CREATE_FLAG_TYPELESS = 0x80000000,
};

union GfxImageSemanticSpecific
{
	float atlasFps;
	unsigned int albedoMapScaleBias;
	unsigned int normalMapScaleBias;
	unsigned int maxMipMap;
};

struct GfxImageAtlasSize
{
	unsigned __int8 rowCount;
	unsigned __int8 colCount;
};

union GfxImageAtlasInfo
{
	GfxImageAtlasSize atlasSize;
	unsigned __int16 packedAtlasDataSize;
};

enum TextureSemantic : __int8
{
	TS_2D = 0x0,
	TS_FUNCTION = 0x1,
	TS_COLOR_MAP = 0x2,
	TS_GRAY_MAP = 0x3,
	TS_SIGNED_VELOCITY_MAP = 0x4,
	TS_NORMAL_MAP = 0x5,
	TS_METALNESS_MAP = 0x6,
	TS_NORMAL_OCCLUSION_GLOSS_MAP = 0x7,
	TS_SIGNED_DISTANCE_FIELD = 0x8,
	TS_CARD_IMPOSTER_NORMAL = 0x9,
	TS_COUNT = 0xA,
};

enum GfxImageCategory : __int8
{
	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_RENDERTARGET = 0x5,
	IMG_CATEGORY_TEMP = 0x6,
};

struct XPakEntryInfo
{
	unsigned __int64 key;
	__int64 offset;
	unsigned __int64 size;
	unsigned __int64 xpakIndex : 8;
	unsigned __int64 compressed : 1;
	unsigned __int64 valid : 1;
	unsigned __int64 adjacentLeftType : 3;
	unsigned __int64 adjacentRightType : 3;
	unsigned __int64 adjacentLeft : 19;
	unsigned __int64 adjacentRight : 19;
	unsigned __int64 padding : 10;
};

enum GfxImageStreamLevelCountAndSize : __int32
{
};

struct GfxImageStreamData
{
	XPakEntryInfo xpakEntry;
	GfxImageStreamLevelCountAndSize levelCountAndSize;
	unsigned __int16 width;
	unsigned __int16 height;
};

struct streamer_handle_t
{
	unsigned __int64 data;
};

struct GfxImageFallback
{
	unsigned __int8* pixels;
	unsigned int size;
	unsigned __int16 width;
	unsigned __int16 height;
};

union GfxImagePixels
{
	streamer_handle_t streamedDataHandle;
	unsigned __int8* residentData;
};


struct GfxImage
{
	const char* name;
	unsigned __int8* packedAtlasData;
	GfxTextureId textureId;
	GfxPixelFormat format;
	GfxImageFlags flags;
	unsigned int totalSize;
	GfxImageSemanticSpecific semanticSpecific;
	unsigned __int16 width;
	unsigned __int16 height;
	unsigned __int16 depth;
	unsigned __int16 numElements;
	GfxImageAtlasInfo atlasInfo;
	TextureSemantic semantic;
	GfxImageCategory category;
	unsigned __int8 levelCount;
	unsigned __int8 streamedPartCount;
	unsigned __int8 decalAtlasIndex;
	char freqDomainMetricBias;
	GfxImageStreamData streams[4];
	GfxImageFallback* fallback;
	GfxImagePixels pixels;
};

struct AttachmentList
{
	unsigned int attachmentCount;
	void** /*WeaponAttachment*/ attachments;
};

struct __declspec(align(4)) SceneZoomSettings
{
	int adsZoomCount;
	float adsZoomFov[3];
	float adsReloadFov[3];
	int adsZoomFovTransitionTime[3];
	int /*AdsOffsetInterpolationType*/ adsZoomFovLerpType;
	float adsZoomInFrac;
	float adsZoomOutFrac;
	float adsFOVNVG;
	float adsReloadFovNVG;
	bool adsZoomLevelIndexResetOnToggle;
};

struct __declspec(align(4)) WeaponZoomSettings
{
	float adsZoomFov;
	int /*AdsOffsetInterpolationType*/ adsZoomFovLerpType;
	float adsZoomFovXOffset;
	float adsReloadZoomFov;
	float adsReloadZoomFovXOffset;
	float adsNVGZoomFov;
	float adsNVGZoomFovXOffset;
	float adsNVGReloadZoomFov;
	float adsNVGReloadZoomFovXOffset;
	float adsZoomInFrac;
	float adsZoomOutFrac;
	bool adsZoomFovXOffsetOverride;
	bool adsReloadFovXOffsetOverride;
};

struct ZoomSettings
{
	SceneZoomSettings scene;
	WeaponZoomSettings weapon;
};


struct WeaponEntityNotify
{
	int flags;
	float radius;
	float height;
	float minSpeed;
};



struct XModelPhysicsUsageCounter {
	int serverEnt;
	int clientEnt;
	int dynEnt;
};

struct DObjAnimMat {
	float quat[4];
	float trans[3];
	float transWeight;
};

struct XModel {
	const char* name;
	unsigned __int16 numsurfs;
	unsigned __int8 numLods;
	unsigned __int8 collLod;
	unsigned __int16 mdaoVolumeCount;
	unsigned __int8 shadowCutoffLod;
	int physicsUseCategory;
	char characterCollBoundsType;
	unsigned __int8 numAimAssistBones;
	unsigned __int8 impactType;
	unsigned __int8 mdaoType;
	unsigned __int8 numBones;
	unsigned __int8 numRootBones;
	unsigned __int16 numClientBones;
	unsigned __int8 numClothAssets;
	unsigned int flags;
	int contents;
	float scale;
	float radius;
	Bounds bounds;
	float edgeLength;
	unsigned int lgvData;
	XModelPhysicsUsageCounter physicsUsageCounter;
	unsigned int noScalePartBits[8];
	void* scriptableMoverDef;
	void* proceduralBones;
	void* dynamicBones;
	scr_string_t* aimAssistBones;
	scr_string_t* boneNames;
	unsigned __int8* parentList;
	__int16* quats;
	float* trans;
	unsigned __int8* partClassification;
	DObjAnimMat* baseMat;
	vec3_t* ikHingeAxis;
	uintptr_t reactiveMotionInfo;
	uintptr_t materialHandles;
};

struct WeaponAnimPackage
{
	const char* name;
	uintptr_t anims;
	uintptr_t timers;
	int meleeAnimPrimaryType;
	int meleeAnimPrimaryCount;
	unsigned __int8 meleeAnimPrimarySet;
	bool meleeRandomizeAnims;
	int meleeAnimAltType;
	int meleeAnimAltCount;
	unsigned __int8 meleeAnimAltSet;
	bool altMeleeRandomizeAnims;
	uintptr_t blendSpaces;
	uintptr_t footstep;
};

union XAnimIndices
{
	unsigned __int8* _1;
	unsigned __int16* _2;
	void* data;
};

struct XAnimParts
{
	const char* name;
	scr_string_t* names;
	unsigned __int8* dataByte;
	__int16* dataShort;
	int* dataInt;
	__int16* randomDataShort;
	unsigned __int8* randomDataByte;
	int* randomDataInt;
	XAnimIndices indices;
	uintptr_t notify;
	uintptr_t deltaPart;
	unsigned int randomDataShortCount;
	unsigned int randomDataByteCount;
	unsigned int indexCount;
	float framerate;
	float frequency;
	unsigned int dataByteCount;
	unsigned __int16 dataShortCount;
	unsigned __int16 dataIntCount;
	unsigned __int16 randomDataIntCount;
	unsigned __int16 numframes;
	unsigned __int8 flags;
	unsigned __int8 boneCount[10];
	unsigned __int8 notifyCount;
	unsigned __int8 assetType;
	unsigned __int8 ikType;
	unsigned __int8 fingerPoseType;
	unsigned __int16 blendShapeWeightCount;
	scr_string_t* blendShapeWeightNames;
	unsigned __int16* blendShapeWeights;
};

struct WeaponDamageCommon
{
	int minDamage;
	int mid1Damage;
	int mid2Damage;
	int mid3Damage;
	int damage;
	float maxDamageRange;
	float mid1DamageRange;
	float mid2DamageRange;
	float mid3DamageRange;
	float minDamageRange;
};

struct WeaponDamageInfo
{
	WeaponDamageCommon damageData[3];
	int deathAnimDamageType;
	float terminateAtRange;
};

struct WeaponVFXPackage
{
	const char* name;
	uintptr_t vfx;
};

struct __declspec(align(4)) TriggerDisconnectSoundData
{
	float analogTriggerValue;
	bool enabledForFireType[6];
};

struct __declspec(align(8)) WeaponSFXPackage
{
	const char* name;
	uintptr_t sounds;
	WeaponSFXPackage* transientFallbackPackage;
	uintptr_t detailSoundBankNPC;
	uintptr_t detailSoundBankPlayer;
	unsigned __int8 rattleSoundType;
	const char* szAdsrBaseSetting;
	const char* szWeapSndReflectionClass;
	const char* szWeapSndReflFrontOverride;
	const char* szWeapSndReflDistantOverride;
	float weapSndFireVolumeShot1;
	float weapSndFireVolumeShot2;
	float weapSndFireVolumeShot3;
	float weapSndProneFireLFEVolume;
	float weapSndMediumRangeStart;
	float weapSndFarRangeStart;
	float weapSndDistantRangeStart;
	unsigned int projExplosionReflClass;
	int sfxImpactType;
	int sfxMeleeImpactType;
	int sfxMaterialType;
	const char* szMountEnterExitString;
	const char* szMountImpactString;
	unsigned int whizbyType;
	unsigned int adsContextType;
	unsigned int adsContextValue;
	float speedOfSoundMult;
	TriggerDisconnectSoundData triggerDisconnectSoundData;
};

struct __declspec(align(8)) ADSOverlay
{
	Material* shaderMat;
	Material* shaderLowResMat;
	Material* shaderEMPMat;
	Material* shaderEMPLowResMat;
	GfxImage* shaderImg;
	GfxImage* shaderLowResImg;
	GfxImage* shaderEMPImg;
	GfxImage* shaderEMPLowResImg;
	bool applyVisionSet;
	int reticle;
	float width;
	float height;
	float widthSplitscreen;
	float heightSplitscreen;
	const char* visionSetName;
	float visionSetADSFraction;
	int visionSetBlendInTimeMs;
	int visionSetBlendOutTimeMs;
};

struct CommonSwaySettings
{
	float maxAngle;
	float lerpSpeed;
	float pitchScale;
	float yawScale;
	float horizScale;
	float vertScale;
	float gunAngleScale;
};

struct HipSwaySettings
{
	CommonSwaySettings common;
	float maxAngleSteadyAim;
};

struct AdsSwaySettings
{
	CommonSwaySettings common;
	float swayTransitionLerpSpeed;
	float adsSwayScale[3];
};

struct AdvancedHipSwaySettings
{
	bool enabled;
	float torsoGoalSmoothSpeed;
	int torsoGoalViewSmoothDurationMs;
	vec2_t torsoGoalDeadzoneAdjustSpeed;
	RumbleGraph* torsoGoalViewSpeedToMaxDeadzone_graph;
	vec2_t torsoGoalViewSpeedToMaxDeadzone_viewspeed;
	vec2_t torsoGoalViewSpeedToMaxDeadzone_maxDeadzone;
	vec2_t torsoMass;
	vec2_t torsoSpring;
	vec2_t torsoDamper;
	int gunGoalViewSmoothDurationMs;
	RumbleGraph* gunGoalViewSpeedToOffset_graph;
	vec2_t gunGoalViewSpeedToOffset_viewspeed;
	vec2_t gunGoalViewSpeedToOffset_offset;
	vec2_t gunMass;
	vec2_t gunSpring;
	vec2_t gunDamper;
	vec3_t gunPivotPoint;
	float gunYawToRollScale;
	int fireDurationMs;
	int fireStartBlendDurationMs;
	int fireFinishBlendDurationMs;
	float fireTorsoGoalSmoothSpeed;
	float fireTorsoDeadzoneScale;
	float fireTorsoToGunDirScale;
};

struct __declspec(align(4)) SwaySettings
{
	HipSwaySettings hip;
	AdsSwaySettings ads;
	AdvancedHipSwaySettings adv;
	float shellShockScale;
	bool overrideHip;
	bool overrideAds;
};

struct WeaponOffsetCurveDescription
{
	float blendTime;
	float decayTime;
	float shotDecayFireTimeFrac;
	float holdTime;
	float adsFractionBegin;
	float adsFractionEnd;
	int interpType;
	int interpTypeOut;
};

struct WeaponOffsetPatternDescription
{
	bool active;
	scr_string_t patternKey;
	int curveType;
	int patternType;
	int transformType;
	float frequency;
	float blendTime;
	vec3_t magnitude;
	float hipScale;
	float rotationOffset;
	float bulletDirScale;
	float fullAutoScale;
	int fullAutoBullets;
	float fullAutoDecay;
	int referenceIndex;
	int kickOrSnapDecayIndex;
};

struct __declspec(align(4)) GestureWeaponSettings
{
	unsigned __int16 blendToStates;
	bool hideReticle;
	float fireDelay;
	float sprintDelay;
	bool useLeftIdleAkimbo;
	bool splitAnimsAkimbo;
	bool blendToDemeanorLoop;
	bool blendOutRaise;
	bool blendOutFingerPose;
	bool blendOutAdditiveADS;
};

struct __declspec(align(2)) GestureDirectionalSettings
{
	float maxAngle;
	float lerpAtMaxAngle;
	float widthCushionAngle;
	float lerpAtMinCushionAngle;
	float lerpAtMaxCushionAngle;
	float limitLeft;
	float limitRight;
	float limitUp;
	float limitDown;
	bool useTargetOffset;
	float targetOffsetX;
	float targetOffsetY;
	float targetOffsetZ;
	float targetOffsetYaw;
	float targetOffsetPitch;
	float targetOffsetRoll;
	bool ignoreViewPitchForTargetOffset;
	bool ignoreViewYawForTargetOffset;
	bool ignoreViewRollForTargetOffset;
};

struct __declspec(align(4)) FootstepTime
{
	float time;
	bool isLeft;
};

struct __declspec(align(4)) MovementTime
{
	float time;
	bool isLeadIn;
};

struct FootstepAnim
{
	int leftCount;
	FootstepTime step[32];
	MovementTime movement[32];
};

struct GestureLookAroundSettings
{
	float yawLerpIn;
	float yawLerpOut;
	unsigned __int16 walkTime;
	FootstepAnim walkFootStepAnim;
};

struct GestureIKTargetSettings
{
	scr_string_t targetEntityBoneName;
};

struct __declspec(align(8)) Gesture
{
	const char* name;
	int type;
	int priority;
	bool looping;
	uintptr_t anims;
	GestureWeaponSettings weaponSettings;
	GestureDirectionalSettings directionalSettings;
	GestureLookAroundSettings lookAroundSettings;
	GestureIKTargetSettings ikTargetSettings;
};

struct LaserSettings
{
	bool forceLaserOn;
	bool localPlayerADSLaserEnabled;
	bool localPlayerHipLaserEnabled;
	bool localPlayerNVGADSLaserEnabled;
	bool localPlayerNVGHipLaserEnabled;
	bool remotePlayerADSLaserEnabled;
	bool remotePlayerHipLaserEnabled;
	bool remotePlayerNVGADSLaserEnabled;
	bool remotePlayerNVGHipLaserEnabled;
	bool laserViewCenterInAds;
};

struct __declspec(align(4)) GrenadeRotationParams
{
	float initialPitch;
	float initialYaw;
	float initialRoll;
	int rotationPitchDir;
	int rotationPitchMin;
	int rotationPitchMax;
	int rotationYawDir;
	int rotationYawMin;
	int rotationYawMax;
	int rotationRollDir;
	int rotationRollMin;
	int rotationRollMax;
	bool rotate;
};

struct AnimOverride
{
	unsigned int numBindings;
	uintptr_t bindings;
	uintptr_t overrides;
	uintptr_t overridesAlt;
};

struct CarryAnimOverride
{
	int carryObjectType;
	WeaponAnimPackage* animPackage;
	WeaponAnimPackage* animPackageAlt;
};

struct SFXOverride
{
	unsigned int numBindings;
	uintptr_t bindings;
	uintptr_t overrides;
	uintptr_t overridesAlt;
};

struct VFXOverride
{
	unsigned int numBindings;
	uintptr_t bindings;
	uintptr_t overrides;
	uintptr_t overridesAlt;
};

struct WeaponOffsetPatternScaleInfo
{
	int numPatternScales;
	uintptr_t patternScales;
};

struct AdvancedIdleSettings
{
	bool useAdvancedIdleSettings;
	bool useRandomPointsAlgorithm;
	float breathGaspScaleOverride;
	float idleSwaySetting1_HipBulletDirScale;
	float idleSwaySetting1_HipIdleSpeed;
	float idleSwaySetting1_HipWeaponMagnitudeX;
	float idleSwaySetting1_HipWeaponMagnitudeY;
	float idleSwaySetting1_HipWeaponMagnitudeZ;
	float idleSwaySetting1_HipWeaponMagnitudeF;
	float idleSwaySetting1_HipWeaponRotationOffset;
	float idleSwaySetting1_HipViewMagnitudeX;
	float idleSwaySetting1_HipViewMagnitudeY;
	float idleSwaySetting1_AdsBulletDirScale;
	float idleSwaySetting1_AdsIdleSpeed;
	float idleSwaySetting1_AdsWeaponMagnitudeX;
	float idleSwaySetting1_AdsWeaponMagnitudeY;
	float idleSwaySetting1_AdsWeaponMagnitudeZ;
	float idleSwaySetting1_AdsWeaponMagnitudeF;
	float idleSwaySetting1_AdsWeaponRotationOffset;
	float idleSwaySetting1_AdsViewMagnitudeX;
	float idleSwaySetting1_AdsViewMagnitudeY;
	float idleSwaySetting2_HipBulletDirScale;
	float idleSwaySetting2_HipIdleSpeed;
	float idleSwaySetting2_HipWeaponMagnitudeX;
	float idleSwaySetting2_HipWeaponMagnitudeY;
	float idleSwaySetting2_HipWeaponMagnitudeZ;
	float idleSwaySetting2_HipWeaponMagnitudeF;
	float idleSwaySetting2_HipWeaponRotationOffset;
	float idleSwaySetting2_HipViewMagnitudeX;
	float idleSwaySetting2_HipViewMagnitudeY;
	float idleSwaySetting2_AdsBulletDirScale;
	float idleSwaySetting2_AdsIdleSpeed;
	float idleSwaySetting2_AdsWeaponMagnitudeX;
	float idleSwaySetting2_AdsWeaponMagnitudeY;
	float idleSwaySetting2_AdsWeaponMagnitudeZ;
	float idleSwaySetting2_AdsWeaponMagnitudeF;
	float idleSwaySetting2_AdsWeaponRotationOffset;
	float idleSwaySetting2_AdsViewMagnitudeX;
	float idleSwaySetting2_AdsViewMagnitudeY;
};

struct BallisticInfoCalculated
{
	float* distances;
	float zeroingAngle;
	int numDistanceEntries;
};

struct BallisticInfo
{
	float muzzleVelocity;
	float ballisticCoefficient;
	float diameter;
	float mass;
	float gravityFactor;
	float zeroingDistance;
	BallisticInfoCalculated* calculated;
	bool enableBallisticTrajectory;
	int lifeTimeMs;
};

struct FxCombinedDef
{
	const void* /*ParticleSystemDef*/ particleSystemDef;
};

struct TracerDef
{
	const char* name;
	FxCombinedDef effect;
	FxCombinedDef viewmodelEffect;
	unsigned int drawInterval;
	float speed;
	bool drawLegacyTracer;
	bool fadeOverTime;
	float fadeTime;
	Material* material;
	float beamLength;
	float beamWidth;
	float screwRadius;
	float screwDist;
	vec4_t colors[5];
};

struct LaserDef
{
	const char* name;
	Material* laserMaterial;
	Material* laserLightMaterial;
	bool ownerOnly;
	bool nightvisionOnly;
	float range;
	float radius;
	float endOffsetViewmodel;
	float endOffsetOther;
	float flarePct;
	FxCombinedDef beamEffect;
	FxCombinedDef laserEndEffect;
	bool clientCollision;
	vec4_t color;
	vec4_t hdrColorScale;
	bool laserLight;
	bool laserLightNvgOnly;
	float laserLightRadius;
	float laserLightBeginOffset;
	float laserLightEndOffset;
	float laserLightBodyTweak;
	vec4_t laserLightColor;
	vec4_t laserLightHdrColorScale;
	float range_alt;
	float radius_alt;
	float laserLightRadius_alt;
	float flarePct_alt;
};


struct SurfaceFxTable
{
	const char* name;
	void* /*SurfaceFxEntry*/ table;
	int numTableEntry;
	unsigned __int8* mapPoolBuffer;
	int mapPoolBufferSize;
};

struct RawFile
{
	const char* name;
	unsigned int compressedLen;
	unsigned int len;
	const char* buffer;
};

struct ScriptFile
{
	const char* name;
	int compressedLen;
	int len;
	int bytecodeLen;
	const char* buffer;
	unsigned __int8* bytecode;
};

struct ScriptDebugData
{
	const char* name;
	unsigned int nameCRC;
	unsigned int profileStringCount;
	void* /*ScriptDebugDataProfileString*/ profileStrings;
};

struct StringTable
{
	const char* name;
	int columnCount;
	int rowCount;
	int uniqueCellCount;
	unsigned __int16* cellIndices;
	int* hashes;
	const char** strings;
};

struct LeaderboardDef
{
	const char* name;
	int id;
	int sourceLbId;
	int sourceLbWidth;
	int columnCount;
	int xpColId;
	int prestigeColId;
	void* /*LbColumnDef*/ columns;
	int /*LbUpdateType*/ updateType;
	int trackTypes;
	int rankColIdX;
	int rankColIdY;
};

struct __declspec(align(8)) VirtualLeaderboardDef
{
	const char* name;
	const char* sourceName;
	int id;
	int sourceId;
	void* /*LbVrColumnDef*/ columns;
	int columnCount;
	int rankColIdX;
	int rankColIdY;
};

struct DDLFile
{
	char* name;
	struct DDLDef* ddlDef;
};

struct SndAliasLookup
{
	const char* name;
};

struct __declspec(align(8)) VehiclePhysicsSoundGroup
{
	SndAliasLookup alias;
	float threshold;
	float vmin;
	float vmax;
	float pmin;
	float pmax;
};

struct __declspec(align(8)) VehiclePhysicsVfxGroup
{
	void* /*FootstepVFX*/ surfaceEffects;
	float threshold;
	float range0;
	float range1;
};


struct VehiclePhysicsDef
{
	int physicsEnabled;
	int /*VehiclePhysicsNetcodeType*/ physics_netcodeType;
	char /*VehiclePhysicsGameProfile*/ physics_gameProfile;
	int /*VehiclePhysicsAnimProfile*/ physics_animProfile;
	int physics_numWheels;
	bool physics_axleRigidBodies;
	float physics_axleBodyPadding;
	int physics_axleBodySides;
	scr_string_t physics_wheelBones[12];
	float physics_wheelRadius;
	float physics_suspStiffness;
	float physics_suspDamping;
	float physics_suspNoiseAmp;
	float physics_frontalSuspension;
	float physics_ackermannRatio;
	vec3_t physics_hardPointOffset;
	vec3_t physics_comOffset;
	vec4_t physics_massFactorContact;
	vec4_t physics_inertiaDiagonal;
	float physics_extraGravityFactor;
	float physics_extraGravityFactorAir;
	float physics_camFovDelta;
	float physics_camPitchBase;
	float physics_camPitchDynamic;
	float physics_camRangeAdd;
	float physics_steeringFactor;
	float physics_steeringForce;
	float physics_steeringMaxYawSpeed;
	float physics_steeringOffsetPoint;
	float physics_steeringOffsetPointUp;
	float physics_steeringReturnSpeed;
	float physics_steeringChangeDirSpeed;
	float physics_steeringHandbrake;
	float physics_steeringSpeed;
	float physics_steeringSpeedIncrease;
	float physics_engineOffsetPoint;
	float physics_engineReductionOnHB;
	float physics_rollingFriction;
	float physics_lateralFriction;
	float physics_frictionBase;
	float physics_frictionRecoverSpeedTgt;
	float physics_frictionFwRedirect;
	float physics_frictionLost;
	float physics_frictionHandbrake;
	float physics_frictionSpeedToBlock;
	float physics_decel;
	float physics_minSpeed;
	bool physics_stabilizeRoll;
	bool physics_stabilizePitch;
	bool physics_contentsAsMissile;
	bool physics_pitchInversion;
	unsigned int physics_controlMode;
	float physics_timeAfterColl;
	int physics_cycleCamButton;
	int physics_boostButton;
	float physics_boostSpeed;
	float physics_rcpBoostAccel;
	float physics_rcpBoostDecel;
	bool physics_holdToBoost;
	SndAliasLookup physics_rcpBoostSound;
	vec3_t physics_rcpBoostShakeCam;
	bool physics_rcpUseChangeDirLogic;
	bool physics_rcpUseChangeDirLogicPitch;
	bool physics_rcpUseRollForYawSpeed;
	float physics_rcpOvershootProtection;
	float physics_rcpPitchTurnSpeed;
	float physics_rcpPitchChangeDirFactor;
	float physics_rcpPitchLerpSpeed;
	float physics_rcpPitchLerpSpeedChangeDir;
	float physics_rcpPitchLerpSpeedReturning;
	float physics_rcpPitchMaxAngle;
	float physics_rcpYawTurnSpeed;
	float physics_rcpYawChangeDirFactor;
	float physics_rcpYawLerpSpeed;
	float physics_rcpYawLerpSpeedChangeDir;
	float physics_rcpYawLerpSpeedReturning;
	float physics_rcpRollTurnSpeed;
	float physics_rcpRollLerpSpeedSteering;
	float physics_rcpRollLerpSpeedChangeDir;
	float physics_rcpRollLerpSpeedReturning;
	float physics_rcpRollMaxAngle;
	float physics_rcpAccelGoingDown;
	float physics_rcpDecelGoingUp;
	float physics_rcpTraceAhead;
	bool physics_rcpCam1stAttachToTagPlayer;
	vec2_t physics_rcpCam1stNoiseScale;
	float physics_rcpCam1stRollSpeed;
	float physics_rcpCam1stRollPercentage;
	float physics_comAdjustThreshold;
	float physics_comAdjustVertDisp;
	float physics_playersWeightFactor;
	float physics_timeToAcceptInputOnStart;
	float physics_viewDirectionHelp;
	float physics_stabilizePitchSpeed;
	float physics_stabilizeRollSpeed;
	int /*VehicleWheelSpinBoneType*/ spinWheelBones;
	float spinWheelAngleOffset;
	int treads_enabled;
	int treads_boneCount;
	scr_string_t treads_firstBones[2];
	float frictionBraking;
	float suspensionTravel;
	float maxSteeringAngle;
	float steeringLerp;
	float minSteeringScale;
	float minSteeringSpeed;
	int disableWheelsTurning;
	int disableWheelsSpinning;
	float minimumWheelCastFraction;
	float handbrakeThreshold;
	float minimumJoltForNotify;
	float pathConstraintStrengthFwd;
	float pathConstraintStrengthSide;
	float pathConstraintDampFwd;
	float pathConstraintDampSide;
	float crashPointOffsetFwd;
	float crashPointOffsetUp;
	float crashImpulseSide;
	float crashImpulseUp;
	float wreckedMassScale;
	VehiclePhysicsSoundGroup sndImpactHard;
	float sndImpactExp;
	VehiclePhysicsSoundGroup sndImpactLight;
	VehiclePhysicsSoundGroup sndDrivingFast;
	VehiclePhysicsSoundGroup sndDrivingSlow;
	VehiclePhysicsSoundGroup sndSuspension;
	VehiclePhysicsSoundGroup sndBrakingHard;
	VehiclePhysicsSoundGroup sndBrakingLight;
	VehiclePhysicsSoundGroup sndDrifting;
	VehiclePhysicsSoundGroup sndSkidding;
	VehiclePhysicsSoundGroup sndDlc1;
	VehiclePhysicsSoundGroup sndDlc2;
	VehiclePhysicsSoundGroup sndDlc3;
	VehiclePhysicsSoundGroup sndDlc4;
	VehiclePhysicsVfxGroup vfxImpactHard;
	VehiclePhysicsVfxGroup vfxImpactLight;
	VehiclePhysicsVfxGroup vfxDrivingFast;
	VehiclePhysicsVfxGroup vfxDrivingSlow;
	VehiclePhysicsVfxGroup vfxBrakingHard;
	VehiclePhysicsVfxGroup vfxBrakingLight;
	VehiclePhysicsVfxGroup vfxDrifting;
	VehiclePhysicsVfxGroup vfxSkidding;
	VehiclePhysicsVfxGroup vfxDrivingFlatFast;
	VehiclePhysicsVfxGroup vfxDrivingFlatSlow;
	VehiclePhysicsVfxGroup vfxDlc3;
	VehiclePhysicsVfxGroup vfxDlc4;
};

struct SpaceshipAnimParts
{
	void* /*XAnimParts*/ anim[2];
};

struct VehiclePhysicsRevModifier
{
	float skidSndContrib;
	float noiseAmpl;
	float sinewaveFreq;
	float sinewaveAmpl;
	float rpmMax;
	float rpmScale;
	float rpmSpeedEmaSamples;
	float inclinedThreshold;
	int gearCount;
	float inclContrib;
	float maxSpinSpeedRPMFw;
	float maxSpinSpeedRPMBw;
};

struct VehicleDef
{
	const char* name;
	char type;
	const char* useHintString;
	int health;
	int inputBindingSet;
	int hitClientScriptables;
	int hitRemoteControllers;
	int accurateShapeOverlap;
	int numDoors;
	float maxDoorAngle;
	scr_string_t doorBones[4];
	CameraDef* cameraDef;
	CameraDef* killCamDef;
	float texScrollScale;
	float topSpeed;
	float accel;
	float rotRate;
	float rotAccel;
	float maxBodyPitch;
	float maxBodyRoll;
	float rangeForBoneControllers;
	float fakeBodyAccelPitch;
	float fakeBodyAccelRoll;
	float fakeBodyVelPitch;
	float fakeBodyVelRoll;
	float fakeBodySideVelPitch;
	float fakeBodyPitchStrength;
	float fakeBodyRollStrength;
	float fakeBodyPitchDampening;
	float fakeBodyRollDampening;
	float fakeBodyBoatRockingAmplitude;
	float fakeBodyBoatRockingPeriod;
	float fakeBodyBoatRockingRotationPeriod;
	float fakeBodyBoatRockingFadeoutSpeed;
	float boatBouncingMinForce;
	float boatBouncingMaxForce;
	float boatBouncingRate;
	float boatBouncingFadeinSpeed;
	float boatBouncingFadeoutSteeringAngle;
	float collisionDamage;
	float collisionSpeed;
	bool collisionDamageIgnoresImpactAngle;
	vec3_t killcamOffset;
	int playerProtected;
	int bulletDamage;
	int armorPiercingDamage;
	int grenadeDamage;
	int projectileDamage;
	int projectileSplashDamage;
	int heavyExplosiveDamage;
	VehiclePhysicsDef vehiclePhysicsDef;
	int vehHelicopterLockAltitude;
	int vehHelicopterOffsetFromMesh;
	float vehHelicopterAltitudeOffset;
	float vehHelicopterPitchOffset;
	float vehHelicopterBoundsRadius;
	float vehHelicopterMaxSpeed;
	float vehHelicopterMaxSpeedVertical;
	float vehHelicopterMaxAccel;
	float vehHelicopterMaxAccelVertical;
	float vehHelicopterDecelerationFwd;
	float vehHelicopterDecelerationSide;
	float vehHelicopterDecelerationUp;
	float vehHelicopterMaxYawRate;
	float vehHelicopterMaxYawAccel;
	float vehHelicopterTiltFromVelocity;
	float vehHelicopterTiltFromControllerAxes;
	float vehHelicopterTiltFromAcceleration;
	float vehHelicopterTiltFromDeceleration;
	float vehHelicopterTiltFromFwdAndYaw_VelAtMaxTilt;
	float vehHelicopterTiltFromFwdAndYaw;
	float vehHelicopterTiltMomentum;
	float vehHelicopterTiltSpeed;
	float vehHelicopterMaxPitch;
	float vehHelicopterMaxRoll;
	float vehHelicopterHoverSpeedThreshold;
	float vehHelicopterJitterJerkyness;
	float vehHelicopterLookaheadTime;
	int vehHelicopterSoftCollisions;
	int vehHelicopterUseGroundFX;
	FxCombinedDef vehHelicopterGroundFx;
	FxCombinedDef vehHelicopterGroundWaterFx;
	float vehHelicopterGroundFxDefaultRepeatRate;
	float vehHelicopterGroundFxSlowestRepeatRate;
	float vehHelicopterGroundFxFastestRepeatRate;
	float vehHelicopterGroundFxMinGroundDist;
	float vehHelicopterGroundFxMaxGroundDist;
	float vehRotorMaxVelocity;
	float vehRotorMaxAccel;
	float vehRotorAccelTiltBlend;
	float vehRotorMaxVehicleSpin;
	float vehRotorMaxAngle;
	float vehRotorSpinSpeed;
	float vehRotorSpinVerticalSpeedThreshold;
	float vehRotorMaxSpinAddition;
	float ssWeaponSwitchDelaySeconds;
	float ssWeaponRaiseDelaySeconds;
	vec3_t ssFlyMaxSpeedMph;
	vec3_t ssFlyMaxAccelerationMphps;
	vec3_t ssFlyMaxCounterAccelerationMphps;
	vec3_t ssFlyFrictionMphps;
	vec3_t ssFlyJukeSpeedMph;
	vec3_t ssHoverMaxSpeedMph;
	vec3_t ssHoverMaxAccelerationMphps;
	vec3_t ssHoverMaxCounterAccelerationMphps;
	vec3_t ssHoverFrictionMphps;
	vec3_t ssHoverJukeSpeedMph;
	float ssFlyJukeRampTime;
	float ssHoverJukeRampTime;
	float ssBrakingFrictionMphps;
	float ssFlyRedirectVelocityScale;
	float ssFlySlowRedirectVelocityScale;
	float ssHoverRedirectVelocityScale;
	float ssFlyMinSpeedRatio;
	bool ssProjectVelocityDesiresToXY;
	bool ssEnforceMinGroundClearance;
	float ssMinGroundClearanceHeight;
	float ssMinGroundClearanceLiftForce;
	bool ssTerrainModeMovement;
	float ssTerrainModeGravity;
	float ssTerrainModeFlyTime;
	vec2_t ssAimOffsetClampDeg;
	vec2_t ssPitchUpSoftLimitDeg;
	vec2_t ssPitchDownSoftLimitDeg;
	float ssClutchPitchSpeedScale;
	vec2_t ssFlyAimSpeedDps;
	vec2_t ssFlySlowAimSpeedDps;
	vec2_t ssHoverAimSpeedDps;
	vec2_t ssFlyAimDriftScale;
	vec2_t ssFlySlowAimDriftScale;
	vec2_t ssHoverAimDriftScale;
	float ssMinSpringOscillation;
	float ssMaxSpringOscillation;
	float ssMinSpringStrength;
	float ssMaxSpringStrength;
	float ssMinSpringAngSpeed;
	float ssMaxSpringAngSpeed;
	float ssSpringControllerContribution;
	float ssTiltSpringOscillation;
	float ssTiltSpringStrength;
	float ssTiltSpringAngleContribution;
	int ssADSToLockOn;
	float ssLockOnMinAngle;
	float ssLockOnMaxAngle;
	float ssPilotAssistNoLockAimScale;
	float ssPilotAssistNoLockMinAngle;
	float ssPilotAssistNoLockMaxAngle;
	float ssPilotAssistAimScale;
	float ssPilotAssistMinAngle;
	float ssPilotAssistMaxAngle;
	vec2_t ssAutoLevelStrengthHover;
	vec2_t ssAutoLevelStrengthFly;
	bool ssIsRollRightStick;
	float ssRollMaxSpeedDps;
	float ssBoostSpeedScale;
	float ssBoostThrustScale;
	bool ssEnableBoostToFly;
	float ssBoostTime;
	float ssBoostRegenTime;
	float ssBoostRegenStallTime;
	float ssBoostMinThresholdRatio;
	float ssCollisionRadiusI;
	float ssCylinderHeightI;
	bool ssUseCylinder;
	bool ssUsePlayerClip;
	float ssCollisionOffsetI;
	float ssCollisionHardThresholdMph;
	float ssFOVFlyOffsetDeg;
	float ssFOVFlyBoostOffsetDeg;
	float ssFOVHoverOffsetDeg;
	float ssZoomBlendSpeedDps;
	float ssZoomMaxAngle;
	float ssZoomMinDistI;
	float ssZoomIdealDistI;
	float ssZoomMaxDistI;
	bool ssShowPilotViewmodel;
	float ssCameraAnimScale;
	vec2_t ssFlyTiltShipAngles;
	float ssFlyTiltCameraScale;
	vec2_t ssHoverTiltShipAngles;
	float ssHoverTiltCameraScale;
	float ssMotionIdleRateMinSpeed;
	float ssMotionIdleRateMaxSpeed;
	float ssMotionIdleMinRate;
	float ssMotionIdleMaxRate;
	scr_string_t ssAnimTree;
	SpaceshipAnimParts ssAnimParts[33];
	FxCombinedDef ssThrustFxLoop;
	FxCombinedDef ssJukeFx;
	RumbleInfo* ssIdleRumble;
	RumbleInfo* ssSmallRumble;
	RumbleInfo* ssMedRumble;
	RumbleInfo* ssLargeRumble;
	SndAliasLookup rattleLoop;
	float rattleLoopMinVolume;
	float rattleLoopMaxVolume;
	SndAliasLookup airLoop;
	float airLoopMinVolume;
	float airLoopMaxVolume;
	SndAliasLookup engineLoop;
	float engineLoopMinVolume;
	float engineLoopMaxVolume;
	float engineLoopMinPitch;
	float engineLoopMaxPitch;
	SndAliasLookup hoverLoop;
	float hoverLoopMinVolume;
	float hoverLoopMaxVolume;
	float hoverLoopMinPitch;
	float hoverLoopMaxPitch;
	SndAliasLookup boostLoop;
	float boostLoopMaxVolume;
	float boostLoopMaxPitch;
	SndAliasLookup ssThrustLoop;
	float ssThrustLoopMaxVolume;
	float ssThrustLoopMaxPitch;
	SndAliasLookup boostStart;
	SndAliasLookup boostStop;
	SndAliasLookup boostDepleted;
	SndAliasLookup boostUnavailable;
	SndAliasLookup jukeLeft;
	SndAliasLookup jukeRight;
	SndAliasLookup jukeUpDown;
	SndAliasLookup jukeBack;
	SndAliasLookup jukeFront;
	SndAliasLookup flightOn;
	SndAliasLookup flightOff;
	float flightOnTimer;
	float flightOffTimer;
	SndAliasLookup hardCollision;
	SndAliasLookup softCollision;
	int camLookEnabled;
	int camRelativeControl;
	int camRemoteDrive;
	float camLerp;
	float camHeight;
	float camRadius;
	float camPitchInfluence;
	float camYawInfluence;
	float camRollInfluence;
	float camFovIncrease;
	float camFovOffset;
	float camFovSpeed;
	float camReturnSpeed;
	float camReturnLerp;
	float camVehicleAnglePitchRate;
	float camVehicleAngleYawRate;
	float camVehicleAngleRollRate;
	int vehCam_UseGDT;
	float vehCam_anglesPitch;
	float vehCam_anglesYaw;
	float vehCam_anglesRoll;
	float vehCam_offsetX;
	float vehCam_offsetY;
	float vehCam_offsetZ;
	float vehCam_radius;
	float vehCam_speedInfluence;
	float vehCam_pitchTurnRate;
	float vehCam_pitchClamp;
	float vehCam_yawTurnRate;
	float vehCam_yawClamp;
	int /*VehCamZOffsetMode*/ vehCam_zOffsetMode;
	float vehCam_anglesPitch3P;
	float vehCam_anglesYaw3P;
	float vehCam_anglesRoll3P;
	float vehCam_offsetX3P;
	float vehCam_offsetY3P;
	float vehCam_offsetZ3P;
	float vehCam_radius3P;
	float vehCam_speedInfluence3P;
	float vehCam_pitchTurnRate3P;
	float vehCam_pitchClamp3P;
	float vehCam_yawTurnRate3P;
	float vehCam_yawClamp3P;
	int /*VehCamZOffsetMode*/ vehCam_zOffsetMode3P;
	const char* turretWeaponName;
	void* /*WeaponCompleteDef*/ turretWeapon;
	float turretHorizSpanLeft;
	float turretHorizSpanRight;
	float turretVertSpanUp;
	float turretVertSpanDown;
	float turretHorizResistLeft;
	float turretHorizResistRight;
	float turretVertResistUp;
	float turretVertResistDown;
	float turretRotRate;
	int /*VehicleTurretFireType*/ turretFireType;
	SndAliasLookup turretSpinSnd;
	SndAliasLookup turretStopSnd;
	int trophyEnabled;
	float trophyRadius;
	float trophyInactiveRadius;
	int trophyAmmoCount;
	float trophyReloadTime;
	scr_string_t trophyTags[4];
	FxCombinedDef trophyExplodeFx;
	FxCombinedDef trophyFlashFx;
	Material* compassFriendlyIcon;
	Material* compassEnemyIcon;
	Material* compassFriendlyAltIcon;
	Material* compassEnemyAltIcon;
	int compassIconWidth;
	int compassIconHeight;
	void* /*SndBankTransient*/ detailSoundBankNPC;
	void* /*SndBankTransient*/ detailSoundBankPlayer;
	SndAliasLookup idleLowSnd;
	SndAliasLookup idleHighSnd;
	SndAliasLookup engineLowSnd;
	SndAliasLookup engineHighSnd;
	SndAliasLookup fallbackIdleLowSnd;
	SndAliasLookup fallbackIdleHighSnd;
	SndAliasLookup fallbackEngineLowSnd;
	SndAliasLookup fallbackEngineHighSnd;
	float engineSndSpeed;
	scr_string_t audioOriginTag;
	SndAliasLookup mainRotorLowRpmSnd;
	SndAliasLookup mainRotorOperatingRpmSnd;
	SndAliasLookup mainRotorOperatingEffortSnd;
	SndAliasLookup tailRotorLowRpmSnd;
	SndAliasLookup tailRotorOperatingRpmSnd;
	SndAliasLookup tailRotorOperatingEffortSndLeft;
	SndAliasLookup tailRotorOperatingEffortSndRight;
	SndAliasLookup physicsHeliStartup;
	SndAliasLookup physicsHeliShutdown;
	SndAliasLookup turbineLowRpmSnd;
	SndAliasLookup turbineOperatingRpmSnd;
	bool useRevAudioSettings;
	SndAliasLookup revLowFidelityMod;
	SndAliasLookup revHighFidelityMod;
	float revPlayerPriority;
	VehiclePhysicsRevModifier revModifier;
	SndAliasLookup engineStartUpSnd;
	int engineStartUpLength;
	SndAliasLookup engineShutdownSnd;
	SndAliasLookup engineIdleSnd;
	SndAliasLookup engineSustainSnd;
	SndAliasLookup engineRampUpSnd;
	int engineRampUpLength;
	SndAliasLookup engineRampDownSnd;
	int engineRampDownLength;
	SndAliasLookup suspensionSoftSnd;
	float suspensionSoftCompression;
	SndAliasLookup suspensionHardSnd;
	float suspensionHardCompression;
	SndAliasLookup collisionSnd;
	float collisionBlendSpeed;
	SndAliasLookup speedSnd;
	float speedSndBlendSpeed;
	const char* surfaceSndName;
	float surfaceSndBlendSpeed;
	float slideVolume;
	float slideBlendSpeed;
	float inAirPitch;
	const char* soundTriggerOverrideZone;
	bool soundTriggerOverrideReverb;
	bool soundTriggerOverrideMix;
	bool soundTriggerOverrideFilter;
	bool soundTriggerOverrideOcclusion;
	bool soundTriggerOverrideAmbient;
	bool soundTriggerOverrideAmbientEvents;
	bool soundTriggerOverrideADSR;
	int visionBlendTime;
	const char* globalVisionSettings;
	const char* mapVisionSettings;
	const char* luiCrosshairWidget;
	float dlcFloat[8];
};

struct MapTriggers
{
	unsigned int count;
	void* /*TriggerModel*/ models;
	unsigned int hullCount;
	void* /*TriggerHull*/ hulls;
	unsigned int slabCount;
	void* /*TriggerSlab*/ slabs;
	unsigned int windingCount;
	void* /*TriggerWinding*/ windings;
	unsigned int windingPointCount;
	void* /*TriggerWindingPoint*/ windingPoints;
};


struct AddonMapEnts
{
	const char* name;
	char* entityString;
	int numEntityChars;
	MapTriggers trigger;
	unsigned int numSubModels;
	void* /*cmodel_t*/ cmodels;
	void* /*GfxBrushModel*/ models;
};

struct NetConstStrings
{
	const char* name;
	int /*NetConstStringType*/ stringType;
	int /*NetConstStringSource*/ sourceType;
	unsigned int flags;
	unsigned int entryCount;
	const char** stringList;
};

struct LuaFile
{
	const char* name;
	int len;
	unsigned __int8 strippingType;
	const unsigned __int8* buffer;
};


struct __declspec(align(8)) ScriptableDef
{
	const char* name;
	ScriptableDef* nextScriptableDef;
	int flags;
	unsigned int numParts;
	void* /*ScriptablePartDef*/ parts;
	unsigned int maxNumDynEntsRequired;
	unsigned int partCount;
	unsigned int serverInstancedPartCount;
	unsigned int serverControlledPartCount;
	unsigned int maxNumDynEntPartsBase;
	unsigned int maxNumDynEntPartsForSpawning;
	unsigned __int16 eventStreamSizeRequiredServer;
	unsigned __int16 eventStreamSizeRequiredClient;
	unsigned int usablePartCount;
	unsigned int ffMemCost;
	scr_string_t animationTreeName;
	void* /*XAnim_s*/ animationTreeDef[2];
	float viewRadius;
	bool networkLODRangeOverride;
	float networkLODRangeOverrideDistance;
	unsigned int numXModels;
	XModel** models;
	char /*DynEntitySpatialActivationMode*/ spatialActivationMode;
};

struct EquipSoundSetMoveTypes
{
	void* /*EquipmentSoundSet*/ soundSets;
};

struct EquipmentSoundSet
{
	void* /*SndAliasList*/ soundPLR;
	void* /*SndAliasList*/ soundNPC;
};

struct EquipSoundSetMeleeWorld
{
	EquipmentSoundSet soundSets[8][3][2][4];
};

struct EquipmentSoundTable
{
	const char* szName;
	unsigned int numClothTypes;
	unsigned int numWeaponRattleTypes;
	unsigned int numMoveTypes;
	unsigned int numStanceTypes;
	void* /*EquipmentClothData*/ clothTypes;
	void* /*EquipmentWeaponRattleData*/ weaponRattleTypes;
	void* /*EquipmentChanceRattleTypes*/ chancesPLR;
	void* /*EquipmentChanceRattleTypes*/ chancesNPC;
	void* /*EquipSoundSetFootsteps*/ mvmtClothFootstepSoundSets;
	void* /*EquipSoundSetFootsteps*/ mvmtClothFootstepCeilingSoundSets;
	void* /*EquipSoundSetMoveLeadTypes*/ mvmtClothFoleySoundSets;
	void* /*EquipSoundSetMoveTypes*/ mvmtRattleSoundSets;
	EquipSoundSetMoveTypes mvmtAccentSoundSets;
	void* /*EquipSoundSetMantleTypes*/ mvmtMantleSoundSets;
	void* /*EquipSoundSetStanceTypes*/ mvmtStanceSoundSets;
	void* /*EquipSoundSetMeleeVM*/ meleeAttackVMSoundSets;
	void* /*EquipSoundSetMeleeWM*/ meleeAttackWMSoundSets;
	void* /*EquipSoundSetMeleeWM*/ meleeCharacterSoundSets;
	EquipSoundSetMeleeWorld meleeWorldSoundSets;
};

struct ExtentBounds
{
	vec3_t mins;
	vec3_t maxs;
};

struct VectorField
{
	const char* name;
	void* /*VectorSubField*/ subFields;
	ExtentBounds worldBounds;
	vec3_t localOrigin;
	unsigned int numSubFields;
	unsigned int pad[2];
};

struct FxParticleSimAnimationHeader
{
	float playbackRate;
	float duration;
	unsigned int frameCount;
	float minX;
	float minY;
	float minZ;
	float boundsXDelta;
	float boundsYDelta;
	float boundsZDelta;
	float maxWidth;
	float maxHeight;
	unsigned int colorTableSize;
	unsigned int particleDataCount;
	unsigned int maxActiveParticles;
	bool evalVisStatePerParticle;
	bool sortParticlesAtRuntime;
	bool hasOrientation3D;
	bool hasIndex;
};

struct FxParticleSimAnimation
{
	const char* name;
	Material* material;
	FxParticleSimAnimationHeader header;
	void* /*FxParticleSimAnimationParticleData*/ particleData;
	void* /*FxParticleSimAnimationParticleDataOrientation3D*/ particleDataOrientation3D;
	void* /*FxParticleSimAnimationParticleDataIndex*/ particleDataIndex;
	void* /*FxParticleSimAnimationFrame*/ frames;
	vec4_t* colorTable;
};

struct StreamingInfo {
	char __padding[0x48];
};

struct TTFDef
{
	const char* name;
	int fileLen;
	const char* file;
	void* ftFace;
};

struct SuitDef
{
	const char* name;
	float cam_minVelocityForFovIncrease;
	float cam_maxVelocityForFovIncrease;
	float cam_velocityToDecreaseFov;
	float cam_fovIncreaseAtMaxVelocity;
	float cam_oneOverFovEaseInTimeMs;
	float cam_oneOverFovEaseOutTimeMs;
	CameraDef* cam_helmetCam;
	bool cam_drawHelmet;
	vec3_t cam_camtoHelmetOffsetOrigin;
	vec3_t cam_camtoHelmetOffsetAngles;
	bool enableIKOverride;
	float player_globalAccelScale;
	float player_crouchSpeedScale;
	float player_proneSpeedScale;
	float player_lastStandCrawlSpeedScale;
	float player_sprintSpeedScale;
	bool player_sprintUnlimited;
	float player_viewBobScale;
	bool jump_slowdownEnable;
	float jump_height;
	float sprintLeap_height;
	float sprintLeap_forwardVelocityScale;
	int sprintLeap_minSprintTimeMs;
	float doubleJump_accel;
	float doubleJump_speed;
	float doubleJump_speedNoBoost;
	float doubleJump_frictionMin;
	float doubleJump_frictionMax;
	float doubleJump_initialUpBoostAccel;
	float doubleJump_standardUpBoostAccel;
	float doubleJump_energyNeededForInitialUpBoost;
	float doubleJump_energyNeededForStandardUpBoost;
	float doubleJump_maxUpwardsVelocity;
	bool doubleJump_enableMinZVelocity;
	float doubleJump_minZVelocity;
	float doubleJump_energyInitialCost;
	float doubleJump_boostUpEnergyUseRate;
	float doubleJump_energyUsePerButtonPress;
	bool doubleJump_hoverOnly;
	float doubleJump_maxViewPitchDip;
	float doubleJump_maxViewBackwardsPitchDip;
	float doubleJump_maxViewRoll;
	float doubleJump_oneOverEaseInTime;
	float doubleJump_oneOverEaseOutTimeMs;
	bool doubleJump_alwaysDipView;
	SndAliasLookup doubleJump_sound;
	SndAliasLookup doubleJump_soundPlayer;
	SndAliasLookup doubleJump_releaseSound;
	SndAliasLookup doubleJump_releaseSoundPlayer;
	float slide_strafe_speed_scale;
	int slide_sprint_penalty_ms;
	bool slide_allow_firing;
	bool slide_allow_ads;
	bool slide_allow_weapon_switch;
	float slide_jump_speed_scale;
	float slide_energy_cost_ratio;
	int slide_max_time_ms;
	int slide_max_time_reduced_ms;
	int slide_max_time_base_ms;
	int slide_inTimeMs;
	float slide_inMaxSpeedScale;
	float slide_inAcceleration;
	float slide_frictionScaleNormal;
	float slide_frictionScaleDownhill;
	float slide_frictionScaleUphill;
	float slide_frictionScaleBlocked;
	int slide_gestureOutTimeForJumpMs;
	int slide_sprintDelayMs;
	bool slide_disableProneTransition;
	int slide_proneDelayMs;
	int slide_proneButtonCheckTimeMs;
	int slide_outTimeMs;
	float slide_outFrictionScaleStart;
	float slide_outFrictionScaleFinish;
	float slide_outSpeedScaleStart;
	float slide_outSpeedScaleFinish;
	int slide_inAirTimeMs;
	float slide_inAirFrictionScaleStart;
	float slide_inAirFrictionScaleFinish;
	int slide_viewBlendInTimeMs;
	int slide_viewBlendOutTimeMs;
	float wallRun_minZVel;
	float wallRun_minTriggerSpeed;
	float wallRun_minMaintainSpeed;
	int wallRun_delayPeriodMs;
	float wallRun_minJumpHeight;
	int wallRun_maxTimeMs;
	int wallRun_fallStageTimeMs;
	float wallRun_maxHeight;
	float wallRun_jumpHeight;
	float wallRun_jumpVelocity;
	float wallRun_frictionScale;
	float wallRun_speedScale;
	float wallRun_speedScaleADS;
	float wallRun_energyInitialCost;
	float wallRun_energyChangePerSecond;
	float ladder_anchorOffset;
	float ladder_anchorOffsetWM;
	float ladder_handDistance;
	int /*SuitAnimType*/ suitAnimType;
	bool isMovementCameraIndependent;
	void* /*SuitAnimPackage*/ animPackage;
	void* /*SuitAnimPackage*/ animPackageL;
	void* /*SuitAnimPackage*/ animPackageR;
	void* /*SuitAnimPackage*/ animPackageRelaxed;
	void* /*SuitAnimPackage*/ animPackageSafe;
	void* /*ASM*/ asmAsset;
	void* /*Animset*/ animsetAsset;
	unsigned __int8 facialAnimType;
	int /*SuitBodyAnimType*/ bodyAnimType;
	ScriptableDef* scriptableDef;
	int viewheight_stand;
	int viewheight_crouch;
	int viewheight_prone;
	int viewheight_laststand;
	int viewheight_dead;
	int viewheight_swim;
	int viewheight_slide;
	int viewheight_sprint;
	int bounds_radius;
	int bounds_height_stand;
	int bounds_height_crouch;
	int bounds_height_prone;
	Bounds bounds_stand;
	Bounds bounds_crouch;
	Bounds bounds_prone;
	int radialMotionBlur_interpTimeIn;
	int radialMotionBlur_interpTimeOut;
	float radialMotionBlur_sprintMinRadius;
	float radialMotionBlur_sprintMaxRadius;
	float radialMotionBlur_sprintMinStrength;
	float radialMotionBlur_sprintMaxStrength;
	float radialMotionBlur_slideMinRadius;
	float radialMotionBlur_slideMaxRadius;
	float radialMotionBlur_slideMinStrength;
	float radialMotionBlur_slideMaxStrength;
	float radialMotionBlur_doubleJumpMinRadius;
	float radialMotionBlur_doubleJumpMaxRadius;
	float radialMotionBlur_doubleJumpMinStrength;
	float radialMotionBlur_doubleJumpMaxStrength;
	float radialMotionBlur_wallRunMinRadius;
	float radialMotionBlur_wallRunMaxRadius;
	float radialMotionBlur_wallRunMinStrength;
	float radialMotionBlur_wallRunMaxStrength;
	float radialMotionBlur_groundPoundMinRadius;
	float radialMotionBlur_groundPoundMaxRadius;
	float radialMotionBlur_groundPoundMinStrength;
	float radialMotionBlur_groundPoundMaxStrength;
	float radialMotionBlur_rewindMinRadius;
	float radialMotionBlur_rewindMaxRadius;
	float radialMotionBlur_rewindMinStrength;
	float radialMotionBlur_rewindMaxStrength;
	float radialMotionBlur_dodgeMinRadius;
	float radialMotionBlur_dodgeMaxRadius;
	float radialMotionBlur_dodgeMinStrength;
	float radialMotionBlur_dodgeMaxStrength;
	float radialMotionBlur_skydiveMinRadius;
	float radialMotionBlur_skydiveMaxRadius;
	float radialMotionBlur_skydiveMinStrength;
	float radialMotionBlur_skydiveMaxStrength;
	RumbleInfo* groundPound_activationRumble;
	SndAliasLookup groundPound_activationSound;
	SndAliasLookup groundPound_activationSoundPlayer;
	RumbleInfo* groundPound_landingRumble;
	SndAliasLookup groundPound_landingSound;
	SndAliasLookup groundPound_landingSoundPlayer;
	RumbleInfo* landing_rumbleLowHeight;
	RumbleInfo* landing_rumbleMediumHeight;
	RumbleInfo* landing_rumbleHighHeight;
	RumbleInfo* landing_rumbleExtremeHeight;
	float landing_speedScale;
	float footstep_shakeBroadcastRadiusInches;
	int footstep_shakeDurationMs;
	float footstep_shakeAmplitude;
	RumbleInfo* footstep_rumble;
	void* /*FootstepVFX*/ footstepvfx_slide;
	void* /*FootstepVFX*/ footstepvfx_creep_left;
	void* /*FootstepVFX*/ footstepvfx_creep_right;
	void* /*FootstepVFX*/ footstepvfx_walk_left;
	void* /*FootstepVFX*/ footstepvfx_walk_right;
	void* /*FootstepVFX*/ footstepvfx_run_left;
	void* /*FootstepVFX*/ footstepvfx_run_right;
	void* /*FootstepVFX*/ footstepvfx_sprint_left;
	void* /*FootstepVFX*/ footstepvfx_sprint_right;
	float skydive_mass;
	float skydive_gravitatationalAcceleration;
	XModel* skydive_parachuteViewModel;
	XModel* skydive_parachuteWorldModel;
	float skydive_baseJumpMinimumHeight;
	float skydive_baseJumpClearanceRadius;
	float skydive_baseJumpAutoDeployHeight;
	float skydive_baseJumpForceFreefallHeight;
	float skydive_freefallSuperDiveCameraPitch;
	float skydive_freefallSuperDiveStickInput;
	float skydive_freefallSuperDiveFovAdjustDegrees;
	int skydive_freefallSuperDiveFovAdjustInTime;
	int skydive_freefallSuperDiveFovAdjustOutTime;
	void* /*CinematicMotionDef*/ skydive_freefallCinematicMotion;
	float skydive_freefallThrottleTrackSpeed;
	float skydive_freefallAnimTrackSpeedThrottle;
	float skydive_freefallAnimTrackSpeedStrafe;
	float skydive_freefallAnimTrackSpeedYaw;
	float skydive_freefallAnimTrackSpeedPitch;
	float skydive_freefallAnimMinWeight;
	float skydive_freefallAnimMaxWeight;
	float skydive_freefallAnimMinPlayRate;
	float skydive_freefallAnimMaxPlayRate;
	float skydive_freefallAnimSpeedForMinWeight;
	float skydive_freefallAnimSpeedForMaxWeight;
	float skydive_freefallTopGroundSpeed;
	float skydive_freefallMinPitch;
	float skydive_freefallMaxPitch;
	float skydive_freefallPitchSpeed;
	float skydive_freefallYawSpeed;
	float skydive_freefallCrossSectionalArea;
	float skydive_freefallLookHorizForceMin;
	float skydive_freefallLookHorizForceMax;
	RumbleGraph* skydive_freefallLookHorizForceGraph;
	float skydive_freefallStickHorizForceMin;
	float skydive_freefallStickHorizForceMax;
	RumbleGraph* skydive_freefallStickHorizForceGraph;
	float skydive_freefallDragCoefHoriz;
	float skydive_freefallLookHorizDragCoeff;
	RumbleGraph* skydive_freefallLookHorizDragGraph;
	float skydive_freefallStickHorizDragCoeff;
	RumbleGraph* skydive_freefallStickHorizDragGraph;
	float skydive_freefallDragCoefVert;
	float skydive_freefallLookVertDragCoeff;
	RumbleGraph* skydive_freefallLookVertDragGraph;
	float skydive_freefallStickVertDragIncreasePerc;
	RumbleGraph* skydive_freefallStickVertDragIncreaseGraph;
	float skydive_freefallStickVertDragReductionPerc;
	RumbleGraph* skydive_freefallStickVertDragReductionGraph;
	float skydive_freefallStickSidewaysForce;
	float skydive_freefallMaxBrakeForce;
	float skydive_freefallMinTurnMultiplier;
	float skydive_freefallMaxTurnMultiplier;
	RumbleGraph* skydive_freefallTurnMultiplierGraph;
	float skydive_freefallTurnMultiplierMinScale;
	float skydive_freefallTurnMultiplierMaxScale;
	RumbleGraph* skydive_freefallTurnMultiplierPitchGraph;
	SndAliasLookup skydive_freefallAmbientSound;
	float skydive_freefallAmbientSoundGroundSpeedWeight;
	float skydive_freefallAmbientSoundMinVolume;
	float skydive_freefallAmbientSoundMaxVolume;
	float skydive_freefallAmbientSoundMinPitch;
	float skydive_freefallAmbientSoundMaxPitch;
	float skydive_freefallAmbientSoundMinGroundSpeed;
	float skydive_freefallAmbientSoundMaxGroundSpeed;
	float skydive_freefallAmbientSoundMinFallSpeed;
	float skydive_freefallAmbientSoundMaxFallSpeed;
	SndAliasLookup skydive_freefallHighSpeedSound;
	float skydive_freefallHighSpeedSoundGroundSpeedWeight;
	float skydive_freefallHighSpeedSoundMinVolume;
	float skydive_freefallHighSpeedSoundMaxVolume;
	float skydive_freefallHighSpeedSoundMinPitch;
	float skydive_freefallHighSpeedSoundMaxPitch;
	float skydive_freefallHighSpeedSoundMinGroundSpeed;
	float skydive_freefallHighSpeedSoundMaxGroundSpeed;
	float skydive_freefallHighSpeedSoundMinFallSpeed;
	float skydive_freefallHighSpeedSoundMaxFallSpeed;
	float skydive_deployHorizontalDrag;
	float skydive_deployVerticalDrag;
	void* /*CinematicMotionDef*/ skydive_canopyCinematicMotion;
	float skydive_canopyThrottleTrackSpeed;
	float skydive_canopyAnimTrackSpeedThrottle;
	float skydive_canopyAnimTrackSpeedStrafe;
	float skydive_canopyAnimTrackSpeedYaw;
	float skydive_canopyAnimTrackSpeedPitch;
	float skydive_canopyAnimMinWeight;
	float skydive_canopyAnimMaxWeight;
	float skydive_canopyAnimMinPlayRate;
	float skydive_canopyAnimMaxPlayRate;
	float skydive_canopyAnimSpeedForMinWeight;
	float skydive_canopyAnimSpeedForMaxWeight;
	float skydive_canopyTopGroundSpeed;
	float skydive_canopyMinPitch;
	float skydive_canopyMaxPitch;
	float skydive_canopyPitchSpeed;
	float skydive_canopyYawSpeed;
	float skydive_canopyCrossSectionalArea;
	float skydive_canopyLookHorizForceMin;
	float skydive_canopyLookHorizForceMax;
	RumbleGraph* skydive_canopyLookHorizForceGraph;
	float skydive_canopyStickHorizForceMin;
	float skydive_canopyStickHorizForceMax;
	RumbleGraph* skydive_canopyStickHorizForceGraph;
	float skydive_canopyDragCoefHoriz;
	float skydive_canopyLookHorizDragCoeff;
	RumbleGraph* skydive_canopyLookHorizDragGraph;
	float skydive_canopyStickHorizDragCoeff;
	RumbleGraph* skydive_canopyStickHorizDragGraph;
	float skydive_canopyDragCoefVert;
	float skydive_canopyLookVertDragCoeff;
	RumbleGraph* skydive_canopyLookVertDragGraph;
	float skydive_canopyStickVertDragIncreasePerc;
	RumbleGraph* skydive_canopyStickVertDragIncreaseGraph;
	float skydive_canopyStickVertDragReductionPerc;
	RumbleGraph* skydive_canopyStickVertDragReductionGraph;
	float skydive_canopyStickSidewaysForce;
	float skydive_canopyMaxBrakeForce;
	float skydive_canopyMinTurnMultiplier;
	float skydive_canopyMaxTurnMultiplier;
	RumbleGraph* skydive_canopyTurnMultiplierGraph;
	float skydive_canopyTurnMultiplierMinScale;
	float skydive_canopyTurnMultiplierMaxScale;
	RumbleGraph* skydive_canopyTurnMultiplierPitchGraph;
	SndAliasLookup skydive_canopyAmbientSound;
	float skydive_canopyAmbientSoundGroundSpeedWeight;
	float skydive_canopyAmbientSoundMinVolume;
	float skydive_canopyAmbientSoundMaxVolume;
	float skydive_canopyAmbientSoundMinPitch;
	float skydive_canopyAmbientSoundMaxPitch;
	float skydive_canopyAmbientSoundMinGroundSpeed;
	float skydive_canopyAmbientSoundMaxGroundSpeed;
	float skydive_canopyAmbientSoundMinFallSpeed;
	float skydive_canopyAmbientSoundMaxFallSpeed;
	SndAliasLookup skydive_canopyHighSpeedSound;
	float skydive_canopyHighSpeedSoundGroundSpeedWeight;
	float skydive_canopyHighSpeedSoundMinVolume;
	float skydive_canopyHighSpeedSoundMaxVolume;
	float skydive_canopyHighSpeedSoundMinPitch;
	float skydive_canopyHighSpeedSoundMaxPitch;
	float skydive_canopyHighSpeedSoundMinGroundSpeed;
	float skydive_canopyHighSpeedSoundMaxGroundSpeed;
	float skydive_canopyHighSpeedSoundMinFallSpeed;
	float skydive_canopyHighSpeedSoundMaxFallSpeed;
	float skydive_wmAnimFreefallPitchMin;
	float skydive_wmAnimFreefallPitchMax;
	float skydive_wmAnimFreefallPitchTrackSpeed;
	float skydive_wmAnimFreefallRollTrackSpeed;
	float skydive_wmAnimFreefallRollReturnSpeed;
	RumbleGraph* skydive_wmAnimFreefallLeftStickXToRollGraph;
	RumbleGraph* skydive_wmAnimFreefallRightStickXToRollGraph;
	float skydive_camFreefallHeightOffset;
	RumbleGraph* skydive_camFreefallPitchToDistanceGraph;
	RumbleGraph* skydive_camFreefallPitchToForwardOffsetGraph;
	float skydive_camParachuteHeightOffset;
	RumbleGraph* skydive_camParachutePitchToDistanceGraph;
	RumbleGraph* skydive_camParachutePitchToForwardOffsetGraph;
	RumbleGraph* skydive_camParachutePitchToModelPitchForwardOffsetGraph;
	RumbleGraph* skydive_camParachutePitchToModelRollSideOffsetGraph;
	RumbleGraph* skydive_camParachutePitchToModelRollUpOffsetGraph;
	float skydive_camParachuteBlendInTime;
	SndAliasLookup nvg_blindSound;
	float dlcFloat[8];
};

struct SuitAnimPackage
{
	const char* name;
	void* /*SuitAnimPerWeapClass*/ animOverrides;
};

struct CameraFirstPersonProfileDef
{
	bool applyOffset;
	vec3_t offsetTranslation;
	bool disableFOVWeaponOffset;
	float cameraAnimationTransScale;
	float cameraAnimationRotScale;
	float handheldCameraTransScale;
	float handheldCameraRotScale;
	float handheldCameraImpulseTransScale;
	float handheldCameraImpulseRotScale;
};

struct CameraOrbitProfileDef
{
	float lerpSpeed;
	vec3_t pivotOffset;
	float initialAzimuth;
	float initialPolar;
	float polarMin;
	float polarMax;
	float range;
	float returnAzimuthSpeed;
	float returnPolarSpeed;
	float easeInFactor;
	float returnTimeTo;
	float turningSpeedPolar;
	float turningSpeedAzimuth;
	float traceCollRadius;
	float mouseInputMultiplier;
	float rollContrib;
	float pitchContrib;
	int buttonToggleReturn;
	int buttonCyclePerspective;
	int buttonRecenter;
	bool initialReturn;
	bool returnAzimuth;
	bool returnPolar;
	float alignToMovement;
	bool interpolateFocus;
	bool cameraReturnOnGas;
	float cameraReturnOnSpeed;
	float yawTurnAdjust;
};

struct CameraSentryDroneDef
{
	float range;
	float thresHitToSpeedUp;
	float speedUpFactor;
	float lerpSpeedEye;
	float lerpSpeedFocus;
	float lerpSpeedUp;
	float focusTraceLen;
	float eyeHeight;
	float horizontalOffset;
	float upOffsetFactorIncl;
};

struct CameraKillCamVehicleDef
{
	float lookAtRadius;
	float fov;
	float distBack;
	float distUp;
	float distBackRadiusMod;
	float distUpRadiusMod;
	float fovRadiusMod;
	float sideMag;
	float traceCollRad;
};

struct CameraTransitionDef
{
	bool active;
	float time;
	float timewaitEyepos;
	float timewaitAxis;
	int /*CameraTransitionCurve*/ curveEyepos;
	int /*CameraTransitionCurve*/ curveAxis;
};

struct CameraDef
{
	const char* name;
	int /*CameraProfile*/ profile;
	bool keepShakeCam;
	bool serverFeedback;
	bool behaveAsRemoteCont;
	bool interpolateViewTransition;
	bool overrideFOV;
	float FOV;
	int /*LensProfileMode*/ overrideLensProfile;
	float lensFocalLength;
	float lensFStop;
	float lensScale;
	float lensUVScale;
	bool overrideRadialBlur;
	float radialBlurRadius;
	float radialBlurStrength;
	bool overrideZPlanes;
	float zPlaneVMNear;
	float zPlaneSceneNear;
	CameraFirstPersonProfileDef firstPerson;
	CameraOrbitProfileDef orbit;
	CameraSentryDroneDef sentryDrone;
	CameraKillCamVehicleDef kcamVeh;
	CameraTransitionDef transitionIn;
	CameraTransitionDef transitionOut;
	vec3_t fpveh_offsetLs;
	float fpveh_offsetYaw;
	float fpveh_offsetPitch;
	float fpveh_rollContrib;
	float fpveh_rollMax;
	bool fpveh_freeLook;
	bool fpveh_freeLookReturn;
	bool dlcBool[1];
	bool fadeOutPlayerOnTransitionIn;
};

struct HudOutlineDef
{
	const char* name;
	unsigned __int8 outlineType;
	bool drawInStencil;
	bool drawNonOccludedPixels;
	bool drawOccludedPixels;
	bool drawFill;
	bool fadeOverTimeEnable;
	bool fadeOverTimeLooping;
	unsigned __int8 fadeOverTimeCurveType;
	float fadeOverTimeMinAlpha;
	float fadeOverTimeMaxAlphaTime;
	float fadeOverTimeMinAlphaTime;
	float fadeOverTimeInTime;
	float fadeOverTimeOutTime;
	bool distanceFadeEnable;
	float distanceFadeMinAlpha;
	float distanceFadeStartDistance;
	float distanceFadeEndDistance;
	unsigned int outlineColor;
	int outlineWidth;
	bool drawOnLocalPlayerCharacter;
	bool drawOnVehicleOccupants;
	bool drawOnLocalPlayerVehicleOccupants;
	bool drawOnLocalPlayerVehicle;
	bool dlcBool0;
	bool dlcBool1;
	bool dlcBool2;
	bool dlcBool3;
	bool dlcBool4;
	bool dlcBool5;
	float dlcFloat0;
	float dlcFloat1;
	float dlcFloat2;
	float dlcFloat3;
	float dlcFloat4;
	float dlcFloat5;
};

struct SpaceshipTargetDef
{
	const char* name;
	scr_string_t targetTag;
	float annotationOffsetX;
	float annotationOffsetY;
	float annotationOffsetZ;
	bool disableLeading;
	float lock_minDistance;
	float lock_maxDistance;
	float lock_cutoffDistance;
	float lock_minRate;
	float lock_maxRate;
	float lock_maxZoomFOV;
	float lock_followDistance;
	float lockCooldown_rate;
	float aa_closeDistance;
	float aa_farDistance;
	float aa_closeMinAngle;
	float aa_closeMaxAngle;
	float aa_closeBlendMax;
	float aa_farMinAngle;
	float aa_farMaxAngle;
	float aa_farBlendMax;
	float aaLocked_closeDistance;
	float aaLocked_farDistance;
	float aaLocked_closeMinAngle;
	float aaLocked_closeMaxAngle;
	float aaLocked_closeBlendMax;
	float aaLocked_farMinAngle;
	float aaLocked_farMaxAngle;
	float aaLocked_farBlendMax;
	float pilotAssistScale;
	float callout_maxDistance;
	float callout_maxAngle;
};

struct __declspec(align(8)) RumbleInfo
{
	const char* name;
	int duration;
	float range;
	RumbleGraph* highRumbleGraph;
	RumbleGraph* lowRumbleGraph;
	RumbleGraph* leftTriggerRumbleGraph;
	RumbleGraph* rightTriggerRumbleGraph;
	bool swapTriggerRumblesOnLefty;
	bool panTriggerRumbles;
	bool fadeWithDistance;
	bool broadcast;
};

struct __declspec(align(8)) RumbleGraph
{
	const char* name;
	vec2_t knots[16];
	unsigned __int16 knotCount;
};

struct LocalizeEntry
{
	const char* name;
	const char* value;
};

struct StaticModelCollisionInstance
{
	vec3_t origin;
	vec3_t angles;
	float scale;
};

struct XModelDetailCollision
{
	const char* name;
	unsigned int physicsLODDataSize;
	char* physicsLODData;
	unsigned int physicsLODDataNameCount;
	scr_string_t* physicsLODDataNames;
};

struct StaticModelCollisionModel
{
	scr_string_t name;
	PhysicsAsset* physicsAsset;
	XModelDetailCollision* detailCollision;
	unsigned int numInstances;
	StaticModelCollisionInstance* instances;
};

struct __declspec(align(8)) StaticModelCollisionModelList
{
	unsigned int numModels;
	StaticModelCollisionModel* models;
	unsigned int structureMemoryCost;
};

struct PhysicsCapacities
{
	int maxNumRigidBodiesServer;
	int maxNumDetailRigidBodiesServer;
	int maxNumConstraintsServer;
	int maxNumMotionsServer;
	int maxNumRigidBodiesClient;
	int maxNumDetailRigidBodiesClient;
	int maxNumConstraintsClient;
	int maxNumMotionsClient;
};

struct SpawnPointEntityRecord
{
	unsigned __int16 index;
	scr_string_t name;
	scr_string_t target;
	scr_string_t script_noteworthy;
	vec3_t origin;
	vec3_t angles;
};

struct SpawnPointRecordList
{
	unsigned __int16 spawnsCount;
	SpawnPointEntityRecord* spawns;
};

struct ClientMapTriggers
{
	unsigned int count;
	uintptr_t models;
	unsigned int hullCount;
	uintptr_t hulls;
	unsigned int slabCount;
	uintptr_t slabs;
};

struct ClientTriggers
{
	ClientMapTriggers trigger;
	unsigned int triggerStringLength;
	char* triggerString;
	__int16* visionSetTriggers;
	unsigned __int16* triggerType;
	vec3_t* origins;
	float* scriptDelay;
	float* priority;
	__int16* audioTriggers;
	__int16* blendLookup;
	__int16* npcTriggers;
	__int16* audioStateIds;
	uintptr_t detailSoundBank;
	uintptr_t audioRvbPanInfo;
	__int16* parent;
	uintptr_t linkTo;
	uintptr_t spatialTree;
};

struct ClientTriggerBlend
{
	unsigned __int16 numClientTriggerBlendNodes;
	uintptr_t blendNodes;
};

struct SplinePointEntityRecord
{
	int splineId;
	int splineNodeId;
	scr_string_t splineNodeLabel;
	scr_string_t targetname;
	scr_string_t target;
	scr_string_t string;
	float speed;
	float splineNodeTension;
	vec3_t origin;
	vec3_t angles;
	float throttle;
	vec2_t corridorDims;
	vec3_t tangent;
	float distToNextNode;
	vec3_t positionCubic[4];
	vec3_t tangentQuadratic[3];
};

struct SplinePointRecordList
{
	unsigned __int16 splinePointCount;
	float splineLength;
	SplinePointEntityRecord* splinePoints;
};

struct SplineRecordList
{
	unsigned __int16 splineCount;
	SplinePointRecordList* splines;
};

struct __declspec(align(8)) cmodel_t
{
	Bounds bounds;
	float radius;
	uintptr_t physicsAsset;
	unsigned __int16 physicsShapeOverrideIdx;
	unsigned __int16 navObstacleIdx;
	unsigned int edgeFirstIndex;
	unsigned int edgeTotalCount;
};

struct MapEdgeList
{
	const char* name;
	vec3_t mins;
	vec3_t maxs;
	unsigned int transientIndex;
	unsigned int dynamicQueryTypes;
	unsigned int staticQueryTypes;
	unsigned int numDynamicEdges;
	unsigned int numStaticEdges;
	bool valid;
	unsigned int numEdges;
	vec4_t(*edges)[2];
	uintptr_t edgeMetadata;
	unsigned int numEdgeOctrees;
	uintptr_t edgeOctrees;
	unsigned int numEdgeOctreeNodeSet;
	uintptr_t edgeOctreeNodeSets;
	unsigned int numEdgeIndices;
	unsigned int* edgeIndices;
	unsigned int numEdgeAdjacencyMetadata;
	uintptr_t edgeAdjacencyMetadata;
	unsigned int numEdgeAdjacency;
	uintptr_t edgeAdjacency;
};

struct __declspec(align(4)) CM_ClientModel
{
	vec3_t spawnOrigin;
	vec3_t spawnAngles;
	const XModel* model;
	scr_string_t animationTreeName;
	XAnimParts* animation;
	scr_string_t name;
	bool noPhysics;
	bool noCloth;
};

struct __declspec(align(8)) MapEnts
{
	const char* name;
	char* entityString;
	int numEntityChars;
	unsigned __int8 field_14;
	unsigned __int8 field_15;
	unsigned __int8 field_16;
	unsigned __int8 field_17;
	MapTriggers trigger;
	ClientTriggers clientTrigger;
	ClientTriggerBlend clientTriggerBlend;
	SpawnPointRecordList spawnList;
	SplineRecordList splineList;
	unsigned int havokEntsShapeDataSize;
	unsigned __int8 field_14C;
	unsigned __int8 field_14D;
	unsigned __int8 field_14E;
	unsigned __int8 field_14F;
	char* havokEntsShapeData;
	int numSubModels;
	unsigned __int8 field_15C;
	unsigned __int8 field_15D;
	unsigned __int8 field_15E;
	unsigned __int8 field_15F;
	cmodel_t* cmodels;
	unsigned __int8 field_168;
	unsigned __int8 field_169;
	unsigned __int8 field_16A;
	unsigned __int8 field_16B;
	int numEdgeLists;
	MapEdgeList** edgeLists;
	uintptr_t edgeListSpatialTree;
	int numClientModels;
	unsigned __int8 field_184;
	unsigned __int8 field_185;
	unsigned __int8 field_186;
	unsigned __int8 field_187;
	CM_ClientModel* clientModels;
	unsigned __int8 field_190;
	unsigned __int8 field_191;
	unsigned __int8 field_192;
	unsigned __int8 field_193;
	unsigned __int8 field_194;
	unsigned __int8 field_195;
	unsigned __int8 field_196;
	unsigned __int8 field_197;
	unsigned __int8 field_198;
	unsigned __int8 field_199;
	unsigned __int8 field_19A;
	unsigned __int8 field_19B;
	int dynEntityListsCount[2];
	__declspec(align(8)) unsigned __int8 field_1A8;
	unsigned __int8 field_1A9;
	unsigned __int8 field_1AA;
	unsigned __int8 field_1AB;
	unsigned __int8 field_1AC;
	unsigned __int8 field_1AD;
	unsigned __int8 field_1AE;
	unsigned __int8 field_1AF;
	unsigned __int8 field_1B0;
	unsigned __int8 field_1B1;
	unsigned __int8 field_1B2;
	unsigned __int8 field_1B3;
	unsigned __int8 field_1B4;
	unsigned __int8 field_1B5;
	unsigned __int8 field_1B6;
	unsigned __int8 field_1B7;
	unsigned __int8 field_1B8;
	unsigned __int8 field_1B9;
	unsigned __int8 field_1BA;
	unsigned __int8 field_1BB;
	unsigned __int8 field_1BC;
	unsigned __int8 field_1BD;
	unsigned __int8 field_1BE;
	unsigned __int8 field_1BF;
	unsigned __int8 field_1C0;
	unsigned __int8 field_1C1;
	unsigned __int8 field_1C2;
	unsigned __int8 field_1C3;
	unsigned __int8 field_1C4;
	unsigned __int8 field_1C5;
	unsigned __int8 field_1C6;
	unsigned __int8 field_1C7;
	uintptr_t dynEntSpatialPopulation[2];
	uintptr_t dynEntSpatialTransientMap[2];
	unsigned __int8 field_1E8;
	unsigned __int8 field_1E9;
	unsigned __int8 field_1EA;
	unsigned __int8 field_1EB;
	int clientEntAnchorCount;
	uintptr_t clientEntAnchors;
	unsigned __int8 scriptableMapEnts;
	unsigned __int8 field_1F9;
	unsigned __int8 field_1FA;
	unsigned __int8 field_1FB;
	unsigned __int8 field_1FC;
	unsigned __int8 field_1FD;
	unsigned __int8 field_1FE;
	unsigned __int8 field_1FF;
	unsigned __int8 field_200;
	unsigned __int8 field_201;
	unsigned __int8 field_202;
	unsigned __int8 field_203;
	unsigned __int8 field_204;
	unsigned __int8 field_205;
	unsigned __int8 field_206;
	unsigned __int8 field_207;
	unsigned __int8 field_208;
	unsigned __int8 field_209;
	unsigned __int8 field_20A;
	unsigned __int8 field_20B;
	unsigned __int8 field_20C;
	unsigned __int8 field_20D;
	unsigned __int8 field_20E;
	unsigned __int8 field_20F;
	unsigned __int8 field_210;
	unsigned __int8 field_211;
	unsigned __int8 field_212;
	unsigned __int8 field_213;
	unsigned __int8 field_214;
	unsigned __int8 field_215;
	unsigned __int8 field_216;
	unsigned __int8 field_217;
	unsigned __int8 field_218;
	unsigned __int8 field_219;
	unsigned __int8 field_21A;
	unsigned __int8 field_21B;
	unsigned __int8 field_21C;
	unsigned __int8 field_21D;
	unsigned __int8 field_21E;
	unsigned __int8 field_21F;
	unsigned __int8 field_220;
	unsigned __int8 field_221;
	unsigned __int8 field_222;
	unsigned __int8 field_223;
	unsigned __int8 field_224;
	unsigned __int8 field_225;
	unsigned __int8 field_226;
	unsigned __int8 field_227;
	unsigned __int8 field_228;
	unsigned __int8 field_229;
	unsigned __int8 field_22A;
	unsigned __int8 field_22B;
	unsigned __int8 field_22C;
	unsigned __int8 field_22D;
	unsigned __int8 field_22E;
	unsigned __int8 field_22F;
	unsigned __int8 field_230;
	unsigned __int8 field_231;
	unsigned __int8 field_232;
	unsigned __int8 field_233;
	unsigned __int8 field_234;
	unsigned __int8 field_235;
	unsigned __int8 field_236;
	unsigned __int8 field_237;
	unsigned __int8 field_238;
	unsigned __int8 field_239;
	unsigned __int8 field_23A;
	unsigned __int8 field_23B;
	unsigned __int8 field_23C;
	unsigned __int8 field_23D;
	unsigned __int8 field_23E;
	unsigned __int8 field_23F;
	unsigned __int8 field_240;
	unsigned __int8 field_241;
	unsigned __int8 field_242;
	unsigned __int8 field_243;
	unsigned __int8 field_244;
	unsigned __int8 field_245;
	unsigned __int8 field_246;
	unsigned __int8 field_247;
	unsigned __int8 field_248;
	unsigned __int8 field_249;
	unsigned __int8 field_24A;
	unsigned __int8 field_24B;
	unsigned __int8 field_24C;
	unsigned __int8 field_24D;
	unsigned __int8 field_24E;
	unsigned __int8 field_24F;
	unsigned __int8 field_250;
	unsigned __int8 field_251;
	unsigned __int8 field_252;
	unsigned __int8 field_253;
	unsigned __int8 field_254;
	unsigned __int8 field_255;
	unsigned __int8 field_256;
	unsigned __int8 field_257;
	unsigned __int8 field_258;
	unsigned __int8 field_259;
	unsigned __int8 field_25A;
	unsigned __int8 field_25B;
	unsigned __int8 field_25C;
	unsigned __int8 field_25D;
	unsigned __int8 field_25E;
	unsigned __int8 field_25F;
	unsigned __int8 field_260;
	unsigned __int8 field_261;
	unsigned __int8 field_262;
	unsigned __int8 field_263;
	unsigned __int8 field_264;
	unsigned __int8 field_265;
	unsigned __int8 field_266;
	unsigned __int8 field_267;
	unsigned __int8 field_268;
	unsigned __int8 field_269;
	unsigned __int8 field_26A;
	unsigned __int8 field_26B;
	unsigned __int8 field_26C;
	unsigned __int8 field_26D;
	unsigned __int8 field_26E;
	unsigned __int8 field_26F;
	unsigned __int8 field_270;
	unsigned __int8 field_271;
	unsigned __int8 field_272;
	unsigned __int8 field_273;
	unsigned __int8 field_274;
	unsigned __int8 field_275;
	unsigned __int8 field_276;
	unsigned __int8 field_277;
	unsigned __int8 field_278;
	unsigned __int8 field_279;
	unsigned __int8 field_27A;
	unsigned __int8 field_27B;
	unsigned __int8 field_27C;
	unsigned __int8 field_27D;
	unsigned __int8 field_27E;
	unsigned __int8 field_27F;
	unsigned __int8 field_280;
	unsigned __int8 field_281;
	unsigned __int8 field_282;
	unsigned __int8 field_283;
	unsigned __int8 field_284;
	unsigned __int8 field_285;
	unsigned __int8 field_286;
	unsigned __int8 field_287;
	unsigned __int8 field_288;
	unsigned __int8 field_289;
	unsigned __int8 field_28A;
	unsigned __int8 field_28B;
	unsigned __int8 field_28C;
	unsigned __int8 field_28D;
	unsigned __int8 field_28E;
	unsigned __int8 field_28F;
	unsigned __int8 field_290;
	unsigned __int8 field_291;
	unsigned __int8 field_292;
	unsigned __int8 field_293;
	unsigned __int8 field_294;
	unsigned __int8 field_295;
	unsigned __int8 field_296;
	unsigned __int8 field_297;
	unsigned __int8 field_298;
	unsigned __int8 field_299;
	unsigned __int8 field_29A;
	unsigned __int8 field_29B;
	unsigned __int8 field_29C;
	unsigned __int8 field_29D;
	unsigned __int8 field_29E;
	unsigned __int8 field_29F;
	unsigned __int8 field_2A0;
	unsigned __int8 field_2A1;
	unsigned __int8 field_2A2;
	unsigned __int8 field_2A3;
	unsigned __int8 field_2A4;
	unsigned __int8 field_2A5;
	unsigned __int8 field_2A6;
	unsigned __int8 field_2A7;
	unsigned __int8 field_2A8;
	unsigned __int8 field_2A9;
	unsigned __int8 field_2AA;
	unsigned __int8 field_2AB;
	unsigned __int8 field_2AC;
	unsigned __int8 field_2AD;
	unsigned __int8 field_2AE;
	unsigned __int8 field_2AF;
	unsigned __int8 field_2B0;
	unsigned __int8 field_2B1;
	unsigned __int8 field_2B2;
	unsigned __int8 field_2B3;
	unsigned __int8 field_2B4;
	unsigned __int8 field_2B5;
	unsigned __int8 field_2B6;
	unsigned __int8 field_2B7;
	unsigned __int8 field_2B8;
	unsigned __int8 field_2B9;
	unsigned __int8 field_2BA;
	unsigned __int8 field_2BB;
	unsigned __int8 field_2BC;
	unsigned __int8 field_2BD;
	unsigned __int8 field_2BE;
	unsigned __int8 field_2BF;
	unsigned __int8 field_2C0;
	unsigned __int8 field_2C1;
	unsigned __int8 field_2C2;
	unsigned __int8 field_2C3;
	unsigned __int8 field_2C4;
	unsigned __int8 field_2C5;
	unsigned __int8 field_2C6;
	unsigned __int8 field_2C7;
	unsigned __int8 field_2C8;
	unsigned __int8 field_2C9;
	unsigned __int8 field_2CA;
	unsigned __int8 field_2CB;
	unsigned __int8 field_2CC;
	unsigned __int8 field_2CD;
	unsigned __int8 field_2CE;
	unsigned __int8 field_2CF;
	unsigned __int8 field_2D0;
	unsigned __int8 field_2D1;
	unsigned __int8 field_2D2;
	unsigned __int8 field_2D3;
	unsigned __int8 field_2D4;
	unsigned __int8 field_2D5;
	unsigned __int8 field_2D6;
	unsigned __int8 field_2D7;
	unsigned __int8 field_2D8;
	unsigned __int8 field_2D9;
	unsigned __int8 field_2DA;
	unsigned __int8 field_2DB;
	unsigned __int8 field_2DC;
	unsigned __int8 field_2DD;
	unsigned __int8 field_2DE;
	unsigned __int8 field_2DF;
	unsigned __int8 field_2E0;
	unsigned __int8 field_2E1;
	unsigned __int8 field_2E2;
	unsigned __int8 field_2E3;
	unsigned __int8 field_2E4;
	unsigned __int8 field_2E5;
	unsigned __int8 field_2E6;
	unsigned __int8 field_2E7;
	unsigned __int8 field_2E8;
	unsigned __int8 field_2E9;
	unsigned __int8 field_2EA;
	unsigned __int8 field_2EB;
	unsigned __int8 field_2EC;
	unsigned __int8 field_2ED;
	unsigned __int8 field_2EE;
	unsigned __int8 field_2EF;
	unsigned __int8 field_2F0;
	unsigned __int8 field_2F1;
	unsigned __int8 field_2F2;
	unsigned __int8 field_2F3;
	unsigned __int8 field_2F4;
	unsigned __int8 field_2F5;
	unsigned __int8 field_2F6;
	unsigned __int8 field_2F7;
	unsigned __int8 field_2F8;
	unsigned __int8 field_2F9;
	unsigned __int8 field_2FA;
	unsigned __int8 field_2FB;
	unsigned __int8 field_2FC;
	unsigned __int8 field_2FD;
	unsigned __int8 field_2FE;
	unsigned __int8 field_2FF;
	unsigned __int8 field_300;
	unsigned __int8 field_301;
	unsigned __int8 field_302;
	unsigned __int8 field_303;
	unsigned __int8 field_304;
	unsigned __int8 field_305;
	unsigned __int8 field_306;
	unsigned __int8 field_307;
	unsigned __int8 field_308;
	unsigned __int8 field_309;
	unsigned __int8 field_30A;
	unsigned __int8 field_30B;
	unsigned __int8 field_30C;
	unsigned __int8 field_30D;
	unsigned __int8 field_30E;
	unsigned __int8 field_30F;
	unsigned __int8 field_310;
	unsigned __int8 field_311;
	unsigned __int8 field_312;
	unsigned __int8 field_313;
	unsigned __int8 field_314;
	unsigned __int8 field_315;
	unsigned __int8 field_316;
	unsigned __int8 field_317;
	unsigned __int8 field_318;
	unsigned __int8 field_319;
	unsigned __int8 field_31A;
	unsigned __int8 field_31B;
	unsigned __int8 field_31C;
	unsigned __int8 field_31D;
	unsigned __int8 field_31E;
	unsigned __int8 field_31F;
	unsigned __int8 field_320;
	unsigned __int8 field_321;
	unsigned __int8 field_322;
	unsigned __int8 field_323;
	unsigned __int8 field_324;
	unsigned __int8 field_325;
	unsigned __int8 field_326;
	unsigned __int8 field_327;
	unsigned __int8 field_328;
	unsigned __int8 field_329;
	unsigned __int8 field_32A;
	unsigned __int8 field_32B;
	unsigned __int8 field_32C;
	unsigned __int8 field_32D;
	unsigned __int8 field_32E;
	unsigned __int8 field_32F;
	unsigned __int8 field_330;
	unsigned __int8 field_331;
	unsigned __int8 field_332;
	unsigned __int8 field_333;
	unsigned __int8 field_334;
	unsigned __int8 field_335;
	unsigned __int8 field_336;
	unsigned __int8 field_337;
	unsigned __int8 field_338;
	unsigned __int8 field_339;
	unsigned __int8 field_33A;
	unsigned __int8 field_33B;
	unsigned __int8 field_33C;
	unsigned __int8 field_33D;
	unsigned __int8 field_33E;
	unsigned __int8 field_33F;
	unsigned __int8 field_340;
	unsigned __int8 field_341;
	unsigned __int8 field_342;
	unsigned __int8 field_343;
	unsigned __int8 field_344;
	unsigned __int8 field_345;
	unsigned __int8 field_346;
	unsigned __int8 field_347;
	unsigned __int8 field_348;
	unsigned __int8 field_349;
	unsigned __int8 field_34A;
	unsigned __int8 field_34B;
	unsigned __int8 field_34C;
	unsigned __int8 field_34D;
	unsigned __int8 field_34E;
	unsigned __int8 field_34F;
	unsigned __int8 field_350;
	unsigned __int8 field_351;
	unsigned __int8 field_352;
	unsigned __int8 field_353;
	unsigned __int8 field_354;
	unsigned __int8 field_355;
	unsigned __int8 field_356;
	unsigned __int8 field_357;
	unsigned __int8 field_358;
	unsigned __int8 field_359;
	unsigned __int8 field_35A;
	unsigned __int8 field_35B;
	unsigned __int8 field_35C;
	unsigned __int8 field_35D;
	unsigned __int8 field_35E;
	unsigned __int8 field_35F;
	unsigned __int8 field_360;
	unsigned __int8 field_361;
	unsigned __int8 field_362;
	unsigned __int8 field_363;
	unsigned __int8 field_364;
	unsigned __int8 field_365;
	unsigned __int8 field_366;
	unsigned __int8 field_367;
	unsigned __int8 field_368;
	unsigned __int8 field_369;
	unsigned __int8 field_36A;
	unsigned __int8 field_36B;
	unsigned __int8 field_36C;
	unsigned __int8 field_36D;
	unsigned __int8 field_36E;
	unsigned __int8 field_36F;
	unsigned __int8 field_370;
	unsigned __int8 field_371;
	unsigned __int8 field_372;
	unsigned __int8 field_373;
	unsigned __int8 field_374;
	unsigned __int8 field_375;
	unsigned __int8 field_376;
	unsigned __int8 field_377;
	unsigned __int8 field_378;
	unsigned __int8 field_379;
	unsigned __int8 field_37A;
	unsigned __int8 field_37B;
	unsigned __int8 field_37C;
	unsigned __int8 field_37D;
	unsigned __int8 field_37E;
	unsigned __int8 field_37F;
	unsigned __int8 field_380;
	unsigned __int8 field_381;
	unsigned __int8 field_382;
	unsigned __int8 field_383;
	unsigned __int8 field_384;
	unsigned __int8 field_385;
	unsigned __int8 field_386;
	unsigned __int8 field_387;
	unsigned __int8 field_388;
	unsigned __int8 field_389;
	unsigned __int8 field_38A;
	unsigned __int8 field_38B;
	unsigned __int8 field_38C;
	unsigned __int8 field_38D;
	unsigned __int8 field_38E;
	unsigned __int8 field_38F;
	unsigned __int8 field_390;
	unsigned __int8 field_391;
	unsigned __int8 field_392;
	unsigned __int8 field_393;
	unsigned __int8 field_394;
	unsigned __int8 field_395;
	unsigned __int8 field_396;
	unsigned __int8 field_397;
	unsigned __int8 field_398;
	unsigned __int8 field_399;
	unsigned __int8 field_39A;
	unsigned __int8 field_39B;
	unsigned __int8 field_39C;
	unsigned __int8 field_39D;
	unsigned __int8 field_39E;
	unsigned __int8 field_39F;
	unsigned __int8 field_3A0;
	unsigned __int8 field_3A1;
	unsigned __int8 field_3A2;
	unsigned __int8 field_3A3;
	unsigned __int8 field_3A4;
	unsigned __int8 field_3A5;
	unsigned __int8 field_3A6;
	unsigned __int8 field_3A7;
	unsigned __int8 field_3A8;
	unsigned __int8 field_3A9;
	unsigned __int8 field_3AA;
	unsigned __int8 field_3AB;
	unsigned __int8 field_3AC;
	unsigned __int8 field_3AD;
	unsigned __int8 field_3AE;
	unsigned __int8 field_3AF;
	unsigned __int8 field_3B0;
	unsigned __int8 field_3B1;
	unsigned __int8 field_3B2;
	unsigned __int8 field_3B3;
	unsigned __int8 field_3B4;
	unsigned __int8 field_3B5;
	unsigned __int8 field_3B6;
	unsigned __int8 field_3B7;
	unsigned __int8 field_3B8;
	unsigned __int8 field_3B9;
	unsigned __int8 field_3BA;
	unsigned __int8 field_3BB;
	unsigned __int8 field_3BC;
	unsigned __int8 field_3BD;
	unsigned __int8 field_3BE;
	unsigned __int8 field_3BF;
	unsigned __int8 field_3C0;
	unsigned __int8 field_3C1;
	unsigned __int8 field_3C2;
	unsigned __int8 field_3C3;
	unsigned __int8 field_3C4;
	unsigned __int8 field_3C5;
	unsigned __int8 field_3C6;
	unsigned __int8 field_3C7;
	unsigned __int8 field_3C8;
	unsigned __int8 field_3C9;
	unsigned __int8 field_3CA;
	unsigned __int8 field_3CB;
	unsigned __int8 field_3CC;
	unsigned __int8 field_3CD;
	unsigned __int8 field_3CE;
	unsigned __int8 field_3CF;
	unsigned __int8 field_3D0;
	unsigned __int8 field_3D1;
	unsigned __int8 field_3D2;
	unsigned __int8 field_3D3;
	unsigned __int8 field_3D4;
	unsigned __int8 field_3D5;
	unsigned __int8 field_3D6;
	unsigned __int8 field_3D7;
	unsigned __int8 field_3D8;
	unsigned __int8 field_3D9;
	unsigned __int8 field_3DA;
	unsigned __int8 field_3DB;
	unsigned __int8 field_3DC;
	unsigned __int8 field_3DD;
	unsigned __int8 field_3DE;
	unsigned __int8 field_3DF;
	unsigned __int8 field_3E0;
	unsigned __int8 field_3E1;
	unsigned __int8 field_3E2;
	unsigned __int8 field_3E3;
	unsigned __int8 field_3E4;
	unsigned __int8 field_3E5;
	unsigned __int8 field_3E6;
	unsigned __int8 field_3E7;
	unsigned __int8 field_3E8;
	unsigned __int8 field_3E9;
	unsigned __int8 field_3EA;
	unsigned __int8 field_3EB;
	unsigned __int8 field_3EC;
	unsigned __int8 field_3ED;
	unsigned __int8 field_3EE;
	unsigned __int8 field_3EF;
	unsigned __int8 field_3F0;
	unsigned __int8 field_3F1;
	unsigned __int8 field_3F2;
	unsigned __int8 field_3F3;
	unsigned __int8 field_3F4;
	unsigned __int8 field_3F5;
	unsigned __int8 field_3F6;
	unsigned __int8 field_3F7;
	unsigned __int8 field_3F8;
	unsigned __int8 field_3F9;
	unsigned __int8 field_3FA;
	unsigned __int8 field_3FB;
	unsigned __int8 field_3FC;
	unsigned __int8 field_3FD;
	unsigned __int8 field_3FE;
	unsigned __int8 field_3FF;
	unsigned __int8 field_400;
	unsigned __int8 field_401;
	unsigned __int8 field_402;
	unsigned __int8 field_403;
	unsigned __int8 field_404;
	unsigned __int8 field_405;
	unsigned __int8 field_406;
	unsigned __int8 field_407;
};


struct CollisionHeatmapEntry
{
	int vertexCount;
	float vertexDensity;
	vec3_t minExtent;
	vec3_t maxExtent;
};

struct Stage
{
	const char* name;
	vec3_t origin;
	unsigned __int16 triggerIndex;
	unsigned __int8 sunPrimaryLightIndex;
	unsigned int entityUID;
	vec3_t skyRotationAngles;
};

struct __declspec(align(8)) clipMap_t
{
	const char* name;
	int isInUse;
	unsigned int numStaticModelCollisionModelLists;
	StaticModelCollisionModelList* staticModelCollisionModelLists;
	MapEnts* mapEnts;
	Stage* stages;
	unsigned __int8 stageCount;
	MapTriggers stageTrigger;
	vec3_t broadphaseMin;
	vec3_t broadphaseMax;
	PhysicsCapacities physicsCapacities;
	unsigned int havokWorldShapeDataSize;
	char* havokWorldShapeData;
	unsigned int numCollisionHeatmapEntries;
	CollisionHeatmapEntry* collisionHeatmap;
	unsigned int totalGlassInitPieceCount;
	unsigned int totalGlassPieceLimit;
	uintptr_t topDownMapData;
	const char* visionSetName;
	unsigned int checksum;
};

struct __declspec(align(8)) WeaponDef
{
	const char* szOverlayName;
	XModel* gunXModel;
	XModel* gunXModelLeftHand;
	XModel* gunXModelRightHand;
	XModel* defaultViewModel;
	XModel* defaultWorldModelLeftHand;
	XModel* defaultWorldModelRightHand;
	XModel* worldModel;
	XModel* worldXModelLeftHand;
	XModel* worldXModelRightHand;
	XModel* defaultWorldModel;
	XModel* censorshipWorldModel;
	XModel* censorshipWorldModelLeftHand;
	XModel* censorshipWorldModelRightHand;
	XModel* playerShadowModel;
	XModel* playerShadowModelLeftHand;
	XModel* playerShadowModelRightHand;
	XModel* handXModel;
	WeaponAnimPackage* szXAnims;
	WeaponAnimPackage* szXAnimsRightHanded;
	WeaponAnimPackage* szXAnimsLeftHanded;
	XAnimParts* turretRaiseAnim;
	XAnimParts* turretIdleAnim;
	XAnimParts* turretFireAnim;
	WeaponDamageInfo damageInfo;
	int iFireTime;
	int iFireDelay;
	int iFireTimeAkimbo;
	int iFireDelayAkimbo;
	float sprintOutTimerScale;
	const char* szModeName;
	scr_string_t* notetrackRumbleMapKeys;
	scr_string_t* notetrackRumbleMapValues;
	scr_string_t* notetrackFXMapKeys;
	FxCombinedDef* notetrackFXMapValues;
	scr_string_t* notetrackFXMapTagValues;
	int playerAnimType;
	int scriptedAnimEvent;
	int scriptedAnimType;
	int weapType;
	int weapClass;
	int penetrateType;
	int inventoryType;
	int fireType;
	int turretFireType;
	int burstCount;
	int targetAssistType;
	int targetAssistBehavior;
	float targetAssistRange;
	float targetAssistAngle;
	float targetAssistLosOffsetForward;
	float targetAssistLosOffsetRight;
	float targetAssistLosOffsetUp;
	bool targetAssistOnlyAvailableInAds;
	int reloadType;
	float burstFireCooldown;
	bool burstFireAuto;
	float viewPitchMaxSpeed;
	float viewYawMaxSpeed;
	bool alignBarrelWithTurretBody;
	bool keepOrientationOnExit;
	float kickBackForceMultiplier;
	bool autoAdjust;
	bool networkLODRangeOverride;
	float networkLODRangeOverrideDistance;
	int offhandClass;
	int stance;
	WeaponVFXPackage* vfxPackage;
	WeaponSFXPackage* sfxPackage;
	bool disableBreathOffhand;
	int reticleType;
	int hitmarkerType;
	Material* reticleCenter;
	Material* reticleSide;
	Material* reticleOnePiece;
	int iReticleCenterSize;
	int iReticleSideSize;
	int iReticleMinOfs;
	bool reticleCenterPulse;
	int iReticleShakeDuration;
	int iReticleSettleDuration;
	int iReticleNumBulletsToRapidFire;
	int activeReticleType;
	bool useTurretViewmodelAnims;
	bool useTurret3pIK;
	int turret3pAnimType;
	float turretFireAnimMinTime;
	vec3_t vStandOfs;
	vec3_t vStandOfsRot;
	vec3_t vStandOfsRotPivot;
	vec3_t vStandMove;
	vec3_t vStandRot;
	vec3_t strafeMove;
	vec3_t strafeRot;
	int hipOffsetLerpType;
	vec3_t vDuckedOfs;
	vec3_t vDuckedOfsRot;
	vec3_t vDuckedOfsRotPivot;
	vec3_t vDuckedMove;
	vec3_t vDuckedRot;
	vec3_t vProneOfs;
	vec3_t vProneMove;
	vec3_t vProneRot;
	float adsForwardOffset;
	float adsRoll;
	float fPosMoveRate;
	float fPosProneMoveRate;
	float fStandMoveMinSpeed;
	float fDuckedMoveMinSpeed;
	float fProneMoveMinSpeed;
	float fPosRotRate;
	float fPosProneRotRate;
	float fDuckedOfsRotRate;
	float fStandRotMinSpeed;
	float fDuckedRotMinSpeed;
	float fProneRotMinSpeed;
	float fReticleShakeMagnitude;
	float fReticleRapidFireMultiplier;
	XModel* worldClipModel;
	XModel* rocketModel;
	GfxImage* hudIcon;
	GfxImage* pickupIcon;
	GfxImage* dangerIconImg;
	GfxImage* throwBackIconImg;
	Material* dangerIconMat;
	Material* throwBackIconMat;
	bool hideWarningIcons;
	float warningIconsDelay;
	int ammoCounterClip;
	int iStartAmmo;
	int iPerkStartAmmo;
	int iPerkMaxAmmo;
	const char* szAmmoName;
	int iAmmoIndex;
	int iMaxAmmo;
	int shotCount;
	const char* szSharedAmmoCapName;
	int iSharedAmmoCapIndex;
	int iSharedAmmoCap;
	int iAmmoUsedPerShot;
	bool requireAmmoUsedPerShot;
	bool disableNoAmmoWarning;
	float lowAmmoWarningThreshold;
	int lowAmmoWarningCount;
	int iDamageType;
	int iMeleeDamage;
	int iMeleeCountToFinisher;
	bool hasMeleeFinisher;
	float autoAimRange;
	float aimAssistRange;
	float aimAssistRangeAds;
	float aimAssistPitchSlowdown;
	float aimAssistPitchSlowdownAds;
	float aimAssistYawSlowdown;
	float aimAssistYawSlowdownAds;
	float aimAssistLockonStrength;
	float aimPadding;
	float enemyCrosshairRange;
	float moveSpeedScale;
	float adsMoveSpeedScale;
	float sprintDurationScale;
	float sprintRestoreDelay;
	ADSOverlay overlay;
	int overlayInterface;
	float fAdsBobFactor;
	float fAdsViewBobMult;
	float fAdsGunBobPitchScale;
	float fAdsGunBobYawScale;
	float fAdsGunBobTiltPitchScale;
	float fAdsGunBobTiltYawScale;
	float fAdsGunBobTiltRollScale;
	float fAdsGunBobTiltBulletDirScale;
	float fAdsGunBobTiltOffset;
	float fAdsGunBobCrouchFactor;
	float adsCrouchViewKickFactor;
	float adsCrouchGunKickFactor;
	float adsProneViewKickFactor;
	float adsProneGunKickFactor;
	float fHipSpreadStandMin;
	float fHipSpreadDuckedMin;
	float fHipSpreadProneMin;
	float hipSpreadSprintMin;
	float hipSpreadInAirMin;
	float hipSpreadStandMax;
	float hipSpreadDuckedMax;
	float hipSpreadProneMax;
	float hipSpreadSprintMax;
	float hipSpreadInAirMax;
	float fHipSpreadDecayRate;
	float fHipSpreadFireAdd;
	float fHipSpreadTurnAdd;
	float fHipSpreadMoveAdd;
	float fHipSpreadDuckedDecay;
	float fHipSpreadProneDecay;
	float hipSpreadSprintDecay;
	float hipSpreadInAirDecay;
	float fHipReticleSidePos;
	float fAdsIdleAmount;
	float fHipIdleAmount;
	float adsIdleSpeed;
	float hipIdleSpeed;
	float fIdleCrouchFactor;
	float fIdleProneFactor;
	float fGunMaxPitch;
	float fGunMaxYaw;
	float fViewMaxPitch;
	float fViewMaxYaw;
	float adsIdleLerpStartTime;
	float adsIdleLerpTime;
	bool useUninterruptedAdsIdleMotion;
	bool disableInputDrivenViewReturnDampening;
	float slideSpreadMin;
	float slideSpreadMax;
	float slideSpreadDecayRate;
	float slideSpreadFireAdd;
	float slideSpreadTurnAdd;
	SwaySettings swaySettings;
	float adsFireRateScale;
	float adsDamageRangeScale;
	float adsFireAnimFrac;
	float fireTimerLerpToAdsScale;
	bool alwaysFireAtMaxRangeInAds;
	bool adsAlignEnabled;
	bool disableTagAlignX;
	vec3_t adsAlignOffset;
	int adsAlignOffsetLerpType;
	int adsAlignLerpType;
	float adsMovementAnimLerpStart;
	float adsMovementAnimLerpEnd;
	float dualWieldViewModelOffset;
	float fScopeDriftDelay;
	float fScopeDriftLerpInTime;
	float fScopeDriftSteadyTime;
	float fScopeDriftLerpOutTime;
	float fScopeDriftSteadyFactor;
	float fScopeDriftUnsteadyFactor;
	int killIconRatio;
	int iReloadAmmoAdd;
	int iReloadStartAdd;
	bool reloadTwoRound;
	int ammoDropStockMin;
	int ammoDropClipPercentMin;
	int ammoDropClipPercentMax;
	float cameraShakeScale;
	int cameraShakeDuration;
	float cameraShakeRadius;
	int iExplosionRadius;
	int iExplosionRadiusMin;
	int iExplosionForceRadius;
	int iExplosionInnerDamage;
	int iExplosionOuterDamage;
	float explosionForceScalar;
	float damageConeAngle;
	float bulletExplDmgMultMin;
	float bulletExplDmgMult;
	float bulletExplRadiusMult;
	int iProjectileSpeed;
	int iProjectileSpeedUp;
	int iProjectileSpeedForward;
	int iProjectileActivateDist;
	int iProjectileDetonationRadius;
	float projLifetime;
	float projLifetimeStdDeviation;
	float timeToAccelerate;
	float projectileCurvature;
	XModel* projectileModel;
	int projExplosion;
	FxCombinedDef projExplosionEffect;
	FxCombinedDef projDudEffect;
	FxCombinedDef projTimeoutEffect;
	int iExplosionSteppedRadiusInner;
	int iExplosionSteppedRadiusMid;
	int iExplosionSteppedRadiusOuter;
	int iExplosionSteppedDamageInner;
	int iExplosionSteppedDamageMid;
	int iExplosionSteppedDamageOuter;
	float* parallelBounce;
	float* perpendicularBounce;
	FxCombinedDef vmProjBodyEffect;
	FxCombinedDef projBodyEffect;
	FxCombinedDef projTrailEffect;
	FxCombinedDef projBeaconEffect;
	vec3_t vProjectileColor;
	int guidedMissileType;
	float maxSteeringAccel;
	int projIgnitionDelay;
	FxCombinedDef projIgnitionEffect;
	float fAdsAimPitch;
	float adsInCrosshairAlphaStart;
	float adsInCrosshairAlphaEnd;
	float adsOutCrosshairAlphaStart;
	float adsOutCrosshairAlphaEnd;
	bool adsShouldShowCrosshair;
	float fAdsGunKickPitchMin;
	float fAdsGunKickPitchMax;
	float fAdsGunKickYawMin;
	float fAdsGunKickYawMax;
	float fAdsGunKickMagMin;
	float fAdsGunKickAccel;
	float fAdsGunKickSpeedMax;
	float fAdsGunKickSpeedDecay;
	float fAdsGunKickStaticDecay;
	float fAdsViewKickPitchMin;
	float fAdsViewKickPitchMax;
	float fAdsViewKickYawMin;
	float fAdsViewKickYawMax;
	float fAdsViewKickMagMin;
	float fAdsViewScatterMin;
	float fAdsViewScatterMax;
	float fAdsSpread;
	float fAdsSpreadNVG;
	float adsSpreadStartFrac;
	float adsSpreadEndFrac;
	int iVisibilityAxis;
	float fVisibilityUpOffset;
	float fHipGunKickPitchMin;
	float fHipGunKickPitchMax;
	float fHipGunKickYawMin;
	float fHipGunKickYawMax;
	float fHipGunKickMagMin;
	float fHipGunKickAccel;
	float fHipGunKickSpeedMax;
	float fHipGunKickSpeedDecay;
	float fHipGunKickStaticDecay;
	float fHipViewKickPitchMin;
	float fHipViewKickPitchMax;
	float fHipViewKickYawMin;
	float fHipViewKickYawMax;
	float fHipViewKickMagMin;
	float fHipViewScatterMin;
	float fHipViewScatterMax;
	float multipleReloadClipPercentage;
	float hipStartingGunKickPercent;
	float hipStartingViewKickPercent;
	int adsStartingKickBullets;
	float adsStartingGunKickPercent;
	float adsStartingViewKickPercent;
	float hipEndingGunKickPercent;
	float hipEndingViewKickPercent;
	int adsEndingKickBullets;
	float adsEndingGunKickPercent;
	float adsEndingViewKickPercent;
	float kickAlignedInputScalar;
	float kickOpposedInputScalar;
	float viewKickMaintainFraction;
	float adsGunTiltPitchFactor;
	float adsGunTiltYawFactor;
	float adsGunTiltRollFactor;
	float adsGunTiltOffset;
	float hipGunTiltPitchFactor;
	float hipGunTiltYawFactor;
	float hipGunTiltRollFactor;
	float hipGunTiltOffset;
	bool useNewViewKick;
	bool useNewGunKick;
	bool useAngularViewKick;
	bool useAngularGunKick;
	float hipAngularViewKickDir[6];
	float hipAngularViewKickDev[6];
	float hipAngularViewKickStrengthMin[6];
	float hipAngularViewKickStrengthMax[6];
	float hipAngularViewKickPitchScale[6];
	float adsAngularViewKickDir[6];
	float adsAngularViewKickDev[6];
	float adsAngularViewKickStrengthMin[6];
	float adsAngularViewKickStrengthMax[6];
	float adsAngularViewKickPitchScale[6];
	int adsAngularViewKickBullet[6];
	bool adsAngularViewKickUseSet[6];
	float hipAngularGunKickDir[6];
	float hipAngularGunKickDev[6];
	float hipAngularGunKickStrengthMin[6];
	float hipAngularGunKickStrengthMax[6];
	float hipAngularGunKickPitchScale[6];
	float adsAngularGunKickDir[6];
	float adsAngularGunKickDev[6];
	float adsAngularGunKickStrengthMin[6];
	float adsAngularGunKickStrengthMax[6];
	float adsAngularGunKickPitchScale[6];
	int adsAngularGunKickBullet[6];
	bool adsAngularGunKickUseSet[6];
	float hipViewKickReturnAccelScale;
	float adsViewKickReturnAccelScale;
	float hipViewKickReturnSpeedCurveScale;
	float adsViewKickReturnSpeedCurveScale;
	float hipGunKickReturnAccelScale;
	float adsGunKickReturnAccelScale;
	float hipGunKickReturnSpeedCurveScale;
	float adsGunKickReturnSpeedCurveScale;
	float hipSpreadStandMoveMax;
	float hipSpreadDuckedMoveMax;
	float hipSpreadProneMoveMax;
	float hipSpreadSprintMoveMax;
	float hipSpreadInAirMoveMax;
	float slideSpreadMoveMax;
	WeaponOffsetCurveDescription weaponOffsetCurveHoldFireSlow;
	WeaponOffsetCurveDescription weaponOffsetCurveHoldFireFast;
	WeaponOffsetCurveDescription weaponOffsetCurveAds;
	WeaponOffsetCurveDescription weaponOffsetCurveAlwaysOn;
	WeaponOffsetCurveDescription weaponOffsetCurveKick;
	WeaponOffsetCurveDescription weaponOffsetCurveSnapDecay;
	int numWeaponOffsetPatterns;
	WeaponOffsetPatternDescription* weaponOffsetPatterns;
	int numWeaponOffsetPatternsKickOrSnapDecay;
	WeaponOffsetPatternDescription** weaponOffsetPatternsKickOrSnapDecay;
	float fightDist;
	float maxDist;
	const char* accuracyGraphName[2];
	vec2_t* originalAccuracyGraphKnots[2];
	unsigned __int16 originalAccuracyGraphKnotCount[2];
	int iPositionReloadTransTime;
	float leftArc;
	float rightArc;
	float topArc;
	float bottomArc;
	float visualPitchLimitTop;
	float visualPitchLimitBottom;
	bool softLeftRightArc;
	float accuracy;
	float aiSpread;
	float playerSpread;
	float minTurnSpeed[2];
	float maxTurnSpeed[2];
	float pitchConvergenceTime;
	float yawConvergenceTime;
	float suppressTime;
	float suppressTimeTargetKilled;
	float aiReturnToDefaultSpeed[2];
	float maxRange;
	float fAnimHorRotateInc;
	float fPlayerPositionDist;
	const char* szUseHintString;
	const char* dropHintString;
	unsigned int iUseHintStringIndex;
	unsigned int dropHintStringIndex;
	float horizViewJitter;
	float vertViewJitter;
	bool enableViewBounceFire;
	float viewBounceFireDecay;
	float viewBounceFireFrequency;
	float viewBounceFirePitchScale;
	float viewBounceFireRollScale;
	float scanSpeed;
	float scanAccel;
	int scanPauseTime;
	const char* szScript;
	float adsSpeedMs[2];
	float adsAccelSec[2];
	bool deferDamageToParentVehicle;
	bool useSteppedExplosionDamage;
	float destabilizationRateTime;
	float destabilizationCurvatureMax;
	int destabilizeDistance;
	float robotechMaxPitch;
	float robotechMaxYaw;
	float robotechFrequency;
	float robotechVariancePitch;
	float robotechVarianceYaw;
	float robotechVarianceFrequency;
	float* locationDamageMultipliers;
	unsigned __int8* hitLocPriorityMap;
	float unittypeMultipliers[7];
	RumbleInfo* fireRumble;
	RumbleInfo* meleeImpactRumble;
	float heatAccumulationPerShot;
	float heatDissipationPerSecond;
	float heatSmokeStartThreshold;
	float heatSmokeStopThreshold;
	bool heatIsOpenBolt;
	int tracerStyle;
	TracerDef* tracerType;
	TracerDef* overchargeTracerType;
	LaserDef* laserTypeViewModel;
	LaserDef* laserTypeViewModelAlt;
	LaserDef* laserTypeFriendly;
	LaserDef* laserTypeEnemy;
	bool turretADSEnabled;
	float turretADSTime;
	float turretFov;
	float turretFovADS;
	float turretScopeZoomRate;
	float turretScopeZoomMin;
	float turretScopeZoomMax;
	float turretOverheatPenalty;
	SndAliasLookup turretOverheatSound;
	FxCombinedDef turretOverheatEffect;
	RumbleInfo* turretBarrelSpinRumble;
	float turretBarrelSpinSpeed;
	float turretBarrelSpinUpTime;
	float turretBarrelSpinDownTime;
	SndAliasLookup turretBarrelSpinMaxSnd;
	SndAliasLookup turretBarrelSpinUpSnd[4];
	SndAliasLookup turretBarrelSpinDownSnd[4];
	SndAliasLookup missileConeSoundAlias;
	SndAliasLookup missileConeSoundAliasAtBase;
	float missileConeSoundRadiusAtTop;
	float missileConeSoundRadiusAtBase;
	float missileConeSoundHeight;
	float missileConeSoundOriginOffset;
	float missileConeSoundVolumescaleAtCore;
	float missileConeSoundVolumescaleAtEdge;
	float missileConeSoundVolumescaleCoreSize;
	float missileConeSoundPitchAtTop;
	float missileConeSoundPitchAtBottom;
	float missileConeSoundPitchTopSize;
	float missileConeSoundPitchBottomSize;
	float missileConeSoundCrossfadeTopSize;
	float missileConeSoundCrossfadeBottomSize;
	bool meleeOverrideValues;
	float aim_automelee_lerp;
	float aim_automelee_region_height;
	float aim_automelee_region_width;
	float aim_automelee_maxPitchMovement;
	float aim_automelee_maxYawMovement;
	float player_meleeHeight;
	float player_meleeWidth;
	float playerMeleeRangeStanding;
	float playerMeleeRangeCrouched;
	float playerMeleeRangeProne;
	float playerMeleeRangeChargeStanding;
	float playerMeleeRangeChargeCrouched;
	float playerMeleeChargeHeightTolerance;
	bool shieldAllowFiring;
	int shieldMaxSpeed;
	bool shieldAlwaysDisplay;
	Gesture* shieldDeployGesture;
	Gesture* shieldFireWeapGesture;
	Gesture* shieldDeployWhileFiring;
	Gesture* shieldRetractWhileFiring;
	Gesture* shieldBashGesture;
	FxCombinedDef shieldMeleeFx;
	float shieldMeleeFxDelay;
	float HitEarthquakeScale;
	float HitEarthquakeDuration;
	float HitEarthquakeRadius;
	RumbleInfo* shieldHitRumble;
	float MissEarthquakeScale;
	float MissEarthquakeDuration;
	float MissEarthquakeRadius;
	RumbleInfo* shieldMissRumble;
	int shieldDeployButton;
	bool shieldUsesEnergy;
	float shieldMaxEnergy;
	float shieldConsumptionRate;
	float shieldMeleeEnergyCost;
	float shieldMeleeHitEnergyCost;
	float reactiveMotionRadiusScale;
	float reactiveMotionFrequencyScale;
	float reactiveMotionAmplitudeScale;
	float reactiveMotionFalloff;
	float reactiveMotionLifetime;
	unsigned __int8 transientBaseViewFlags;
	unsigned __int8 transientBaseWorldFlags;
	bool hasAnyTransientModels;
	bool blendFireAnimations;
	bool sharedAmmo;
	bool lockonSupported;
	bool requireLockonToFire;
	bool isAirburstWeapon;
	bool bigExplosion;
	bool noAdsWhenMagEmpty;
	bool avoidDropCleanup;
	bool allowGrenadeSwitching;
	bool inheritsPerks;
	bool forceUse;
	bool ladderWeapon;
	bool executionVictimHiddenWeapon;
	bool crosshairColorChange;
	bool bRifleBullet;
	bool bEnergyBullet;
	bool bIncendiaryBullet;
	bool armorPiercing;
	bool impaling;
	bool bBoltAction;
	bool aimDownSight;
	bool canHoldBreath;
	bool meleeOnly;
	bool supportsAlternateMelee;
	bool bRechamberWhileAds;
	bool reloadWhileAds;
	bool bBulletExplosiveDamage;
	bool bCookOffHold;
	bool overCookIsNotLethal;
	bool reticleSpin45;
	bool bClipOnly;
	bool bDoesNotConsumeAmmo;
	bool bRemoveWeaponOnEmpty;
	bool noAmmoPickup;
	bool adsFireOnly;
	bool cancelAutoHolsterWhenEmpty;
	bool disableSwitchToWhenEmpty;
	bool suppressAmmoPrimaryDisplay;
	bool suppressAmmoReserveDisplay;
	LaserSettings laserSettings;
	bool markableViewmodel;
	bool isPredictedProjectile;
	int clientTrajectoryBlendOutTime;
	int serverTrajectoryBlendInTime;
	int dualWieldType;
	bool flipKillIcon;
	bool bNoPartialReload;
	bool reloadDisabled;
	bool blocksProne;
	bool silenced;
	bool doNotSuppressAI;
	bool isRollingGrenade;
	bool dropGrenadeHeldOnDeath;
	bool projExplosionEffectForceNormalUp;
	bool projExplosionEffectInheritParentDirection;
	bool bProjImpactExplode;
	bool spawnProjAtMuzzle;
	bool correctBulletTrajectory;
	float maxCorrectionAngle;
	bool disableProjectileCrumpleCheck;
	bool bProjTrajectoryEvents;
	bool bProjWhizByEnabled;
	bool stickToPlayers;
	bool stickToVehicles;
	bool stickToTurrets;
	bool stickToNonStick;
	bool projEnableMissileStickiness;
	bool enableMissileRicochet;
	bool thrownSideways;
	bool disableFiring;
	bool firesOnWeaponSwitch;
	bool disableHolding;
	bool timedDetonation;
	float missileRicochetMinAngleOfIncidence;
	float missileCrumpleMinSpeed;
	int detonateType;
	XModel* detonatorWorldModel;
	int explosiveDamageDelay;
	int fuseTime;
	int aiFuseTime;
	int maxHoldTime;
	GrenadeRotationParams rotationParams;
	bool holdButtonToThrow;
	bool autoHold;
	bool infiniteHold;
	bool freezeMovementWhenFiring;
	bool offhandAllowsSprint;
	bool thermalScope;
	bool thermalToggle;
	bool outlineEnemies;
	bool outlineDepthTest;
	bool outlineFill;
	float enemyOutlineR;
	float enemyOutlineG;
	float enemyOutlineB;
	float enemyOutlineA;
	float allyOutlineR;
	float allyOutlineG;
	float allyOutlineB;
	float allyOutlineA;
	bool depthScan;
	float depthScanThickness;
	float depthScanR;
	float depthScanG;
	float depthScanB;
	float depthScanA;
	float depthScanOutlineThickness;
	float depthScanOutlineR;
	float depthScanOutlineG;
	float depthScanOutlineB;
	float depthScanOutlineA;
	bool depthScanOverlay;
	float depthScanOverlayStrength;
	float depthScanOverlayXTiles;
	float depthScanOverlayYTiles;
	float depthScanOverlayXScroll;
	float depthScanOverlayYScroll;
	float blurSceneAdsInFraction;
	float blurSceneAdsOutFraction;
	bool altModeSameWeapon;
	bool playAltGesturesForOffhandWeapons;
	bool turretBarrelSpinEnabled;
	bool missileConeSoundEnabled;
	bool missileConeSoundPitchshiftEnabled;
	bool missileConeSoundCrossfadeEnabled;
	bool offhandHoldIsCancelable;
	bool doNotAllowAttachmentsToOverrideSpread;
	bool useScopeDrift;
	bool alwaysShatterGlassOnImpact;
	bool jumpSpread;
	bool noFullViewmodelAnimations;
	float killcamOffset;
	bool useDualFOV;
	bool showViewModelInDualFOV;
	bool syncedFOVInDualFOV;
	bool disableDrop;
	bool preferredDrop;
	Gesture* gestureAnimation;
	float gestureFireStateTime;
	Gesture* gesturePullback;
	Gesture* gesturePullbackAlt;
	float minPullbackTime;
	float minPullbackToThrowBlendTime;
	float maxPullbackToThrowBlendTime;
	Gesture* gestureThrow;
	Gesture* gestureThrowAlt;
	float gestureFireTime;
	Gesture* gestureDetonate;
	Gesture* gestureDetonateAlt;
	float gestureDetonationTime;
	bool gesturesDisablePrimary;
	FxCombinedDef cameraFireEffect;
	float cameraFireEffectDurationSec;
	float changedFireTime;
	float changedFireTimeAkimbo;
	int changedFireTimeNumBullets;
	int chargeType;
	float chargeGain;
	float chargeCostPerShot;
	float chargeLossWhenIdle;
	float chargeEmptyCooldown;
	float chargeFireAtMaxDamageMultiplier;
	int chargeMeterEffectBoneCount;
	FxCombinedDef chargeMeterEffect;
	SndAliasLookup chargeUpSound;
	SndAliasLookup chargeDownSound;
	SndAliasLookup chargeUpSoundPlayer;
	SndAliasLookup chargeDownSoundPlayer;
	SndAliasLookup chargeDownToUpSound;
	SndAliasLookup chargeDownToUpSoundPlayer;
	SndAliasLookup chargeUpToDownSound;
	SndAliasLookup chargeUpToDownSoundPlayer;
	SndAliasLookup chargeMaxSound;
	SndAliasLookup chargeMaxSoundPlayer;
	bool chargeHudReveal;
	RumbleInfo* chargeRumble;
	scr_string_t stowTag;
	XModel* stowOffsetModel;
	scr_string_t stowOffsetAttachTag;
	int slot;
	float maxTargetAngle;
	bool spaceshipSecondaryWeapon;
	float impulseFieldRadius;
	float impulseFieldInitialSpeed;
	float impulseFieldMaxSpeed;
	float impulseFieldAcceleration;
	float impulseFieldInAirImpulseMultiplier;
	float impulseFieldInAirImpulseMultiplierInterpTime;
	float impulseFieldSlideMultiplier;
	float impulseFieldSlideMultiplierInterpTime;
	bool impulseFieldIsPush;
	bool impulseFieldAffectsFriendlies;
	bool impulseFieldAffectsSelf;
	bool impulseFieldAffectsProne;
	bool regenerationEnabled;
	int regenerationTimeMs;
	int regenerationAddTimeMs;
	int regenerationAmount;
	bool regenerationConsumeStock;
	bool regenerationDisableWhileFiring;
	int deployType;
	bool deployRequireOnWalkableSurface;
	bool deployRequireOnNavmesh;
	bool deployRequireSkyAbove;
	bool deployRequireNoOverhang;
	bool deployAlwaysUpright;
	bool deployEdgeSnap;
	float deployCylinderRadius;
	float deployCylinderHeight;
	float deployMaxDistance;
	float deployMaxHeightAboveEye;
	float deployEffectHeightOffset;
	float deployMaxSlope;
	FxCombinedDef deployEffect;
	int deployValidGroupId;
	int deployIndoorGroupId;
	int deployInvalidGroupId;
	int deployOutOfRangeGroupId;
	int numAnimOverrides;
	AnimOverride* animOverrides;
	CarryAnimOverride carryAnimOverrides[5];
	int numSfxOverrides;
	SFXOverride* sfxOverrides;
	int numVfxOverrides;
	VFXOverride* vfxOverrides;
	float reactiveEmitterDelay;
	float grenadeDangerIconDistance;
	float bulletDirGunAngleModifierIdleHip;
	float bulletDirGunAngleModifierIdleAds;
	float bulletDirGunAngleModifierGunKickHip;
	float bulletDirGunAngleModifierGunKickAds;
	float bulletDirGunAngleModifierGunTiltHip;
	float bulletDirGunAngleModifierGunTiltAds;
	float viewClampPitchCatchUpTimeSec;
	float viewClampYawCatchUpTimeSec;
	bool mountTopEnable;
	bool mountTopYawClamp;
	float mountTopYawMax;
	float mountTopGunKickScale;
	float mountTopGunCenterScale;
	float mountTopViewKickScale;
	float mountTopViewCenterScale;
	float mountTopGunIdleMotionScale;
	float mountTopViewIdleMotionScale;
	int mountTopEnterDurationMs;
	int mountTopExitDurationMs;
	float mountTopEdgeToEyeDistanceForward;
	float mountTopEdgeToEyeDistanceAbove;
	bool mountSideEnable;
	bool mountSideTransitionEnable;
	float mountSideRoll;
	float mountSideRollStartFrac;
	float mountSideRollEndFrac;
	float mountSideGunKickScale;
	float mountSideGunCenterScale;
	float mountSideViewKickScale;
	float mountSideViewCenterScale;
	float mountSideGunIdleMotionScale;
	float mountSideViewIdleMotionScale;
	int mountSideEnterDurationMs;
	int mountSideExitDurationMs;
	float mountSideEdgeToEyeDistanceForward;
	float mountSideEdgeToEyeDistanceAbove;
	float mountViewmodelOffset;
	float mountFOVScale;
	RumbleInfo* mountRumble;
	WeaponOffsetPatternScaleInfo mountWeaponOffsetPatternScaleInfo;
	float adsFireMotionBlur;
	int adsFireMotionBlurDurationMs;
	float adsFireMotionBlurDecayExponent;
	float hipFireMotionBlur;
	int hipFireMotionBlurDurationMs;
	float hipFireMotionBlurDecayExponent;
	float adsCameraShakeRotationScale;
	float adsCameraShakeTranslationScale;
	AdvancedIdleSettings advancedIdleSettings;
	WeaponOffsetPatternScaleInfo crouchedWeaponOffsetPatternScaleInfo;
	WeaponOffsetPatternScaleInfo proneWeaponOffsetPatternScaleInfo;
	BallisticInfo ballisticInfo;
	WeaponEntityNotify* notifyTypes[2];
	float dlcFloat[6];
	bool dlcBool[3];
	bool enableWeaponInspect;
	bool stowedOcclusionTestEnabled;
	bool ignoreMinTracerSpawnDistance;
	bool tracerOverrideEnabled;
	bool boltActionReloadIncludesRechamber;
};


struct WeaponCompleteDef
{
	const char* szInternalName;
	WeaponDef* weapDef;
	const char* szDisplayName;
	const char* szLootTable;
	scr_string_t* hideTags;
	AttachmentList attachments[14];
	unsigned int numLootVariants;
	unsigned int numNotetrackSoundMappings;
	scr_string_t* notetrackSoundMapKeys;
	scr_string_t* notetrackSoundMapValues;
	unsigned int numNotetrackOverrides;
	void* /*NoteTrackToSoundEntry*/ notetrackOverrides;
	unsigned int numNotetrackSuitEntries;
	void* /*NoteTrackToSuitSoundEntry*/ notetrackSuitEntries;
	ZoomSettings zoomSettings;
	int iAdsTransInTime;
	int iAdsTransOutTime;
	int iAdsTransInToOutTime;
	int iAdsTransOutToInTime;
	int iClipSize;
	int vfxImpactType;
	float penetrateMultiplier;
	float fAdsViewKickCenterSpeed;
	float fHipViewKickCenterSpeed;
	Material* killIconMat;
	Material* dpadIconMat;
	Material* dpadIconInactiveMat;
	GfxImage* killIconImg;
	GfxImage* dpadIconImg;
	GfxImage* dpadIconInactiveImg;
	int ammoDropStockMax;
	bool useSceneDof;
	float adsDofPhysicalFstop;
	float adsDofPhysicalFocusDistance;
	bool adsDofPhysicalFocalTag;
	float adsDofPhysicalReloadFstop;
	float adsDofPhysicalReloadFocusDistance;
	unsigned __int16 accuracyGraphKnotCount[2];
	vec2_t* accuracyGraphKnots[2];
	bool enhanced;
	bool dpadIconShowsAmmo;
	bool luiWeaponInfoWidgetUsesScopeStencil;
	const char* szAltModeInactiveName;
	const char* dynamicIconAnimationName;
	bool isUsingDynamicIcon;
	const char* szLUIWeaponInfoWidgetName;
	const char* szLUIWeaponInfoWidgetTag;
	const char* szLUICrosshairWidget;
};

union XAssetHeader
{
	//PhysicsLibrary* physicsLibrary;
	//PhysicsSFXEventAsset* physicsSFXEventAsset;
	//PhysicsVFXEventAsset* physicsVFXEventAsset;
	PhysicsAsset* physicsAsset;
	//PhysicsFXPipeline* physicsFXPipeline;
	//PhysicsFXShape* physicsFXShape;
	//PhysicsDebugData* physicsDebugData;
	//XAnimParts* parts;
	//XModelSurfs* modelSurfs;
	XModel* model;
	//MayhemData* mayhem;
	Material* material;
	//ComputeShader* computeShader;
	//MaterialSerializedShader* serializedShader;
	//MaterialTechniqueSet* techniqueSet;
	GfxImage* image;
	//SndGlobals* soundGlobals;
	//SndBankResident* soundBankResident;
	//SndBankTransient* soundBankTransient;
	clipMap_t* clipMap;
	//ComWorld* comWorld;
	//GlassWorld* glassWorld;
	//PathData* pathData;
	//NavMeshData* navMeshData;
	//TacticalGraphData* tacGraphData;
	MapEnts* mapEnts;
	//FxWorld* fxWorld;
	//GfxWorld* gfxWorld;
	//GfxWorldTransientZone* gfxWorldTransientZone;
	//GfxIESProfile* iesProfile;
	//GfxLightDef* lightDef;
	//GfxGradingClut* gradingClut;
	//GfxFogSpline* fogSpline;
	//AnimationClass* animClass;
	//PlayerAnimScript* playerAnim;
	Gesture* gesture;
	LocalizeEntry* localize;
	//WeaponAttachment* attachment;
	WeaponCompleteDef* weapon;
	//ParticleSystemDef* vfx;
	//FxImpactTable* impactFx;
	SurfaceFxTable* surfaceFx;
	RawFile* rawfile;
	ScriptFile* scriptfile;
	ScriptDebugData* scriptDebugData;
	StringTable* stringTable;
	LeaderboardDef* leaderboardDef;
	VirtualLeaderboardDef* virtualLeaderboardDef;
	DDLFile* ddlFile;
	TracerDef* tracerDef;
	VehicleDef* vehDef;
	AddonMapEnts* addonMapEnts;
	NetConstStrings* netConstStrings;
	LuaFile* luaFile;
	ScriptableDef* scriptable;
	EquipmentSoundTable* equipSndTable;
	VectorField* vectorField;
	FxParticleSimAnimation* particleSimAnimation;
	StreamingInfo* streamingInfo;
	LaserDef* laserDef;
	TTFDef* ttfDef;
	SuitDef* suitDef;
	SuitAnimPackage* suitAnimPackage;
	CameraDef* cameraDef;
	HudOutlineDef* hudOutlineDef;
	SpaceshipTargetDef* spaceshipTargetDef;
	RumbleInfo* rumble;
	RumbleGraph* rumbleGraph;
	//WeaponAnimPackage* weaponAnimPackage;
	//WeaponSFXPackage* weaponSFXPackage;
	//WeaponVFXPackage* weaponVFXPackage;
	//FootstepVFX* footstepVFX;
	//BehaviorTree* behaviorTree;
	//Animset* animset;
	//ASM* asmAsset;
	//XAnimProceduralBones* proceduralBones;
	//XAnimDynamicBones* dynamicBones;
	//ReticleDef* reticleDef;
	//XAnimCurve* xanimCurve;
	//CoverSelector* coverSelector;
	//EnemySelector* enemySelector;
	//ClientCharacter* clientCharacter;
	//ClothAsset* clothAsset;
	//CinematicMotionDef* cinematicMotion;
	//AccessoryDef* accessory;
	//LocDmgTable* locDmgTable;
	//BulletPenetration* bulletPenetration;
	//ScriptBundle* scriptBundle;
	//BlendSpace2DDef* blendSpace2DDef;
	//XCam* xcam;
	//Camo* camo;
	//XCompositeModelDef* compositeModel;
	//XModelDetailCollision* modelDetailCollision;
	//StreamKey* streamKey;
	//StreamTreeOverride* streamTreeOverride;
	//KeyValuePairs* keyValuePairs;
	//StTerrain* stTerrain;
	//NativeScriptPatchFile* nativeScriptPatch;
	//CollisionTile* collisionTile;
	//ExecutionDef* executionDef;
	//CarryObjectDef* carryObjectDef;
	//SoundBankListDef* soundBankListDef;
	//GfxDecalVolumeMaterial* decalVolumeMaterial;
	//GfxDecalVolumeMask* decalVolumeMask;
	//DynEntityList* dynEntityList;
	void* data;
	//FxWorldTransientZone* fxWorldTransientZone;
	//DLogSchema* dlogSchema;
	//MapEdgeList* mapEdgeList;
};

enum XAssetType
{
	ASSET_TYPE_PHYSICSLIBRARY = 0x0,
	ASSET_TYPE_PHYSICSSFXEVENTASSET = 0x1,
	ASSET_TYPE_PHYSICSVFXEVENTASSET = 0x2,
	ASSET_TYPE_PHYSICSASSET = 0x3,
	ASSET_TYPE_PHYSICSFXPIPELINE = 0x4,
	ASSET_TYPE_PHYSICSFXSHAPE = 0x5,
	ASSET_TYPE_PHYSICSDEBUGDATA = 0x6,
	ASSET_TYPE_XANIM = 0x7,
	ASSET_TYPE_XMODELSURFS = 0x8,
	ASSET_TYPE_XMODEL = 0x9,
	ASSET_TYPE_MAYHEM = 0xA,
	ASSET_TYPE_MATERIAL = 0xB,
	ASSET_TYPE_COMPUTESHADER = 0xC,
	ASSET_TYPE_LIBSHADER = 0xD,
	ASSET_TYPE_VERTEXSHADER = 0xE,
	ASSET_TYPE_HULLSHADER = 0xF,
	ASSET_TYPE_DOMAINSHADER = 0x10,
	ASSET_TYPE_PIXELSHADER = 0x11,
	ASSET_TYPE_TECHSET = 0x12,
	ASSET_TYPE_IMAGE = 0x13,
	ASSET_TYPE_SOUNDGLOBALS = 0x14,
	ASSET_TYPE_SOUNDBANK = 0x15,
	ASSET_TYPE_SOUNDBANKTRANSIENT = 0x16,
	ASSET_TYPE_COL_MAP = 0x17,
	ASSET_TYPE_COM_MAP = 0x18,
	ASSET_TYPE_GLASS_MAP = 0x19,
	ASSET_TYPE_AIPATHS = 0x1A,
	ASSET_TYPE_NAVMESH = 0x1B,
	ASSET_TYPE_TACGRAPH = 0x1C,
	ASSET_TYPE_MAP_ENTS = 0x1D,
	ASSET_TYPE_FX_MAP = 0x1E,
	ASSET_TYPE_GFX_MAP = 0x1F,
	ASSET_TYPE_GFX_MAP_TRZONE = 0x20,
	ASSET_TYPE_IESPROFILE = 0x21,
	ASSET_TYPE_LIGHTDEF = 0x22,
	ASSET_TYPE_GRADINGCLUT = 0x23,
	ASSET_TYPE_UI_MAP = 0x24,
	ASSET_TYPE_FOGSPLINE = 0x25,
	ASSET_TYPE_ANIMCLASS = 0x26,
	ASSET_TYPE_PLAYERANIM = 0x27,
	ASSET_TYPE_GESTURE = 0x28,
	ASSET_TYPE_LOCALIZE = 0x29,
	ASSET_TYPE_ATTACHMENT = 0x2A,
	ASSET_TYPE_WEAPON = 0x2B,
	ASSET_TYPE_VFX = 0x2C,
	ASSET_TYPE_IMPACTFX = 0x2D,
	ASSET_TYPE_SURFACEFX = 0x2E,
	ASSET_TYPE_AITYPE = 0x2F,
	ASSET_TYPE_MPTYPE = 0x30,
	ASSET_TYPE_CHARACTER = 0x31,
	ASSET_TYPE_XMODELALIAS = 0x32,
	ASSET_TYPE_RAWFILE = 0x33,
	ASSET_TYPE_SCRIPTFILE = 0x34,
	ASSET_TYPE_SCRIPTDEBUGDATA = 0x35,
	ASSET_TYPE_STRINGTABLE = 0x36,
	ASSET_TYPE_LEADERBOARDDEF = 0x37,
	ASSET_TYPE_VIRTUALLEADERBOARDDEF = 0x38,
	ASSET_TYPE_DDL = 0x39,
	ASSET_TYPE_TRACER = 0x3A,
	ASSET_TYPE_VEHICLE = 0x3B,
	ASSET_TYPE_ADDON_MAP_ENTS = 0x3C,
	ASSET_TYPE_NETCONSTSTRINGS = 0x3D,
	ASSET_TYPE_LUAFILE = 0x3E,
	ASSET_TYPE_SCRIPTABLE = 0x3F,
	ASSET_TYPE_EQUIPSNDTABLE = 0x40,
	ASSET_TYPE_VECTORFIELD = 0x41,
	ASSET_TYPE_PARTICLESIMANIMATION = 0x42,
	ASSET_TYPE_STREAMINGINFO = 0x43,
	ASSET_TYPE_LASER = 0x44,
	ASSET_TYPE_TTF = 0x45,
	ASSET_TYPE_SUIT = 0x46,
	ASSET_TYPE_SUITANIMPACKAGE = 0x47,
	ASSET_TYPE_CAMERA = 0x48,
	ASSET_TYPE_HUDOUTLINE = 0x49,
	ASSET_TYPE_SPACESHIPTARGET = 0x4A,
	ASSET_TYPE_RUMBLE = 0x4B,
	ASSET_TYPE_RUMBLEGRAPH = 0x4C,
	ASSET_TYPE_ANIMPKG = 0x4D,
	ASSET_TYPE_SFXPKG = 0x4E,
	ASSET_TYPE_VFXPKG = 0x4F,
	ASSET_TYPE_FOOTSTEPVFX = 0x50,
	ASSET_TYPE_BEHAVIORTREE = 0x51,
	ASSET_TYPE_AIANIMSET = 0x52,
	ASSET_TYPE_AIASM = 0x53,
	ASSET_TYPE_PROCEDURALBONES = 0x54,
	ASSET_TYPE_DYNAMICBONES = 0x55,
	ASSET_TYPE_RETICLE = 0x56,
	ASSET_TYPE_XANIMCURVE = 0x57,
	ASSET_TYPE_COVERSELECTOR = 0x58,
	ASSET_TYPE_ENEMYSELECTOR = 0x59,
	ASSET_TYPE_CLIENTCHARACTER = 0x5A,
	ASSET_TYPE_CLOTHASSET = 0x5B,
	ASSET_TYPE_CINEMATICMOTION = 0x5C,
	ASSET_TYPE_ACCESSORY = 0x5D,
	ASSET_TYPE_LOCDMGTABLE = 0x5E,
	ASSET_TYPE_BULLETPENETRATION = 0x5F,
	ASSET_TYPE_SCRIPTBUNDLE = 0x60,
	ASSET_TYPE_BLENDSPACE2D = 0x61,
	ASSET_TYPE_XCAM = 0x62,
	ASSET_TYPE_CAMO = 0x63,
	ASSET_TYPE_XCOMPOSITEMODEL = 0x64,
	ASSET_TYPE_XMODELDETAILCOLLISION = 0x65,
	ASSET_TYPE_STREAMKEY = 0x66,
	ASSET_TYPE_STREAMTREEOVERRIDE = 0x67,
	ASSET_TYPE_KEYVALUEPAIRS = 0x68,
	ASSET_TYPE_STTERRAIN = 0x69,
	ASSET_TYPE_NATIVESCRIPTPATCH = 0x6A,
	ASSET_TYPE_COLLISIONTILE = 0x6B,
	ASSET_TYPE_EXECUTION = 0x6C,
	ASSET_TYPE_CARRYOBJECT = 0x6D,
	ASSET_TYPE_SOUNDBANKLIST = 0x6E,
	ASSET_TYPE_DECALVOLUMEMATERIAL = 0x6F,
	ASSET_TYPE_DECALVOLUMEMASK = 0x70,
	ASSET_TYPE_DYNENTITYLIST = 0x71,
	ASSET_TYPE_FX_MAP_TRZONE = 0x72,
	ASSET_TYPE_DLOGSCHEMA = 0x73,
	ASSET_TYPE_EDGELIST = 0x74,
};

struct XAsset
{
	XAssetType type;
	XAssetHeader header;
};

struct ScriptStringList
{
	int count;
	bool loaded;
	const char** strings;
};

struct XAssetList
{
	ScriptStringList stringList;
	unsigned int assetCount;
	unsigned int assetReadPos;
	XAsset* assets;
};