Weapon Asset (Ghosts)

From COD Engine Research
Jump to: navigation, search

The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Ghosts continues on the Modern Warfare 2 idea of the "WeaponVariantDef". Tthe WeaponVariantDef is 0xBC bytes, while the WeaponDef is 0x848.

enum ImpactType
{
  IMPACT_TYPE_NONE = 0x0,
  IMPACT_TYPE_BULLET_SMALL = 0x1,
  IMPACT_TYPE_BULLET_LARGE = 0x2,
  IMPACT_TYPE_BULLET_AP = 0x3,
  IMPACT_TYPE_BULLET_EXPLODE = 0x4,
  IMPACT_TYPE_SHOTGUN = 0x5,
  IMPACT_TYPE_SHOTGUN_EXPLODE = 0x6,
  IMPACT_TYPE_GRENADE_BOUNCE = 0x7,
  IMPACT_TYPE_GRENADE_EXPLODE = 0x8,
  IMPACT_TYPE_ROCKET_EXPLODE = 0x9,
  IMPACT_TYPE_PROJECTILE_DUD = 0xA,
  IMPACT_TYPE_COUNT = 0xB,
};
 
enum weaponIconRatioType_t : int
{
  WEAPON_ICON_RATIO_1TO1 = 0,
  WEAPON_ICON_RATIO_2TO1 = 1,
  WEAPON_ICON_RATIO_4TO1 = 2,
  WEAPON_ICON_RATIO_MAX
};
 
enum weapType_t : int
{
  WEAPTYPE_NONE,
  WEAPTYPE_BULLET,
  WEAPTYPE_GRENADE,
  WEAPTYPE_PROJECTILE,
  WEAPTYPE_RIOTSHIELD,
  WEAPTYPE_NUM
};
 
enum weapClass_t : int
{
  WEAPCLASS_RIFLE = 0,
  WEAPCLASS_SNIPER = 1,
  WEAPCLASS_MG = 2,
  WEAPCLASS_SMG = 3,
  WEAPCLASS_SPREAD = 4,
  WEAPCLASS_PISTOL = 5,
  WEAPCLASS_GRENADE = 6,
  WEAPCLASS_ROCKETLAUNCHER = 7,
  WEAPCLASS_TURRET = 8,
  WEAPCLASS_THROWINGKNIFE = 9,
  WEAPCLASS_NON_PLAYER = 10,
  WEAPCLASS_ITEM = 11,
  WEAPCLASS_NUM
};
 
enum PenetrateType : int
{
  PENETRATE_TYPE_NONE = 0,
  PENETRATE_TYPE_SMALL = 1,
  PENETRATE_TYPE_MEDIUM = 2,
  PENETRATE_TYPE_LARGE = 3,
  PENETRATE_TYPE_COUNT
};
 
enum weapInventoryType_t : int
{
  WEAPINVENTORY_PRIMARY = 0,
  WEAPINVENTORY_OFFHAND = 1,
  WEAPINVENTORY_ITEM = 2,
  WEAPINVENTORY_ALTMODE = 3,
  WEAPINVENTORY_EXCLUSIVE = 4,
  WEAPINVENTORY_SCAVENGER = 5,
  WEAPINVENTORYCOUNT
};
 
enum weapFireType_t : int
{
  WEAPON_FIRETYPE_FULLAUTO = 0x0,
  WEAPON_FIRETYPE_SINGLESHOT = 0x1,
  WEAPON_FIRETYPE_BURSTFIRE2 = 0x2,
  WEAPON_FIRETYPE_BURSTFIRE3 = 0x3,
  WEAPON_FIRETYPE_BURSTFIRE4 = 0x4,
  WEAPON_FIRETYPE_DOUBLEBARREL = 0x5,
  WEAPON_FIRETYPECOUNT = 0x6,
  WEAPON_FIRETYPE_BURSTFIRE_FIRST = 0x2,
  WEAPON_FIRETYPE_BURSTFIRE_LAST = 0x4
};
 
enum OffhandClass
{
  OFFHAND_CLASS_NONE = 0x0,
  OFFHAND_CLASS_FRAG_GRENADE = 0x1,
  OFFHAND_CLASS_SMOKE_GRENADE = 0x2,
  OFFHAND_CLASS_FLASH_GRENADE = 0x3,
  OFFHAND_CLASS_THROWINGKNIFE = 0x4,
  OFFHAND_CLASS_OTHER = 0x5,
  OFFHAND_CLASS_COUNT = 0x6
};
 
enum weapStance_t
{
  WEAPSTANCE_STAND = 0x0,
  WEAPSTANCE_DUCK = 0x1,
  WEAPSTANCE_PRONE = 0x2,
  WEAPSTANCE_NUM = 0x3
};
 
enum activeReticleType_t : int
{
  VEH_ACTIVE_RETICLE_NONE = 0,
  VEH_ACTIVE_RETICLE_PIP_ON_A_STICK = 1,
  VEH_ACTIVE_RETICLE_BOUNCING_DIAMOND = 2,
  VEH_ACTIVE_RETICLE_MAX
};
 
enum ammoCounterClipType_t
{
  AMMO_COUNTER_CLIP_NONE = 0x0,
  AMMO_COUNTER_CLIP_MAGAZINE = 0x1,
  AMMO_COUNTER_CLIP_SHORTMAGAZINE = 0x2,
  AMMO_COUNTER_CLIP_SHOTGUN = 0x3,
  AMMO_COUNTER_CLIP_ROCKET = 0x4,
  AMMO_COUNTER_CLIP_BELTFED = 0x5,
  AMMO_COUNTER_CLIP_ALTWEAPON = 0x6,
  AMMO_COUNTER_CLIP_COUNT = 0x7
};
 
enum weapOverlayReticle_t
{
  WEAPOVERLAYRETICLE_NONE = 0x0,
  WEAPOVERLAYRETICLE_CROSSHAIR = 0x1,
  WEAPOVERLAYRETICLE_NUM = 0x2
};
 
enum WeapOverlayInteface_t
{
  WEAPOVERLAYINTERFACE_NONE = 0x0,
  WEAPOVERLAYINTERFACE_JAVELIN = 0x1,
  WEAPOVERLAYINTERFACE_TURRETSCOPE = 0x2,
  WEAPOVERLAYINTERFACECOUNT = 0x3
};
 
enum weapProjExposion_t
{
  WEAPPROJEXP_GRENADE = 0x0,
  WEAPPROJEXP_ROCKET = 0x1,
  WEAPPROJEXP_FLASHBANG = 0x2,
  WEAPPROJEXP_NONE = 0x3,
  WEAPPROJEXP_DUD = 0x4,
  WEAPPROJEXP_SMOKE = 0x5,
  WEAPPROJEXP_HEAVY = 0x6,
  WEAPPROJEXP_NUM = 0x7,
};
 
enum WeapStickinessType
{
  WEAPSTICKINESS_NONE = 0x0,
  WEAPSTICKINESS_ALL = 0x1,
  WEAPSTICKINESS_ALL_ORIENT = 0x2,
  WEAPSTICKINESS_GROUND = 0x3,
  WEAPSTICKINESS_GROUND_WITH_YAW = 0x4,
  WEAPSTICKINESS_KNIFE = 0x5,
  WEAPSTICKINESS_COUNT = 0x6
};
 
enum guidedMissileType_t
{
  MISSILE_GUIDANCE_NONE = 0x0,
  MISSILE_GUIDANCE_SIDEWINDER = 0x1,
  MISSILE_GUIDANCE_HELLFIRE = 0x2,
  MISSILE_GUIDANCE_JAVELIN = 0x3,
  MISSILE_GUIDANCE_COUNT = 0x4
};
 
enum playerAnimType_t : int
{
  none = 0x0,
  other = 0x1,
  pistol = 0x2,
  smg = 0x3,
  autorifle = 0x4,
  mg = 0x5,
  sniper = 0x6,
  rocketlauncher = 0x7,
  explosive = 0x8,
  grenade = 0x9,
  turret = 0xA,
  c4 = 0xB, 
  m203 = 0xC, 
  hold = 0xD,
  briefcase = 0xE,
  riotshield = 0xF,
  laptop = 0x10,
  throwingknife = 0x11,
  mortar = 0x12,
  juggernautmaniac = 0x13,
  claymore = 0x14,
  minigun = 0x15,
  drill = 0x16,
  dogwhistle = 0x17,
  smg_bullpup = 0x18,
  autorifle_bullpup = 0x19,
  sniper_bullpup = 0x1A,
  killstreaktrigger = 0x1B,
  trophysystem = 0x1C,
  PLAYER_ANIM_TYPE_MAX
};
 
struct StateTimers
{
  int iFireDelay;
  int iMeleeDelay;
  int meleeChargeDelay;
  int iDetonateDelay;
  int iRechamberTime;
  int rechamberTimeOneHanded;
  int iRechamberBoltTime;
  int iHoldFireTime;
  int iHoldPrimeTime;
  int iDetonateTime;
  int iMeleeTime;
  int meleeChargeTime;
  int iReloadTime;
  int reloadShowRocketTime;
  int iReloadEmptyTime;
  int iReloadAddTime;
  int iReloadEmptyAddTime;
  int iReloadStartTime;
  int iReloadStartAddTime;
  int iReloadEndTime;
  int iDropTime;
  int iRaiseTime;
  int iAltDropTime;
  int quickDropTime;
  int quickRaiseTime;
  int iBreachRaiseTime;
  int iEmptyRaiseTime;
  int iEmptyDropTime;
  int sprintInTime;
  int sprintLoopTime;
  int sprintOutTime;
  int stunnedTimeBegin;
  int stunnedTimeLoop;
  int stunnedTimeEnd;
  int nightVisionWearTime;
  int nightVisionWearTimeFadeOutEnd;
  int nightVisionWearTimePowerUp;
  int nightVisionRemoveTime;
  int nightVisionRemoveTimePowerDown;
  int nightVisionRemoveTimeFadeInStart;
  int fuseTime;
  int aiFuseTime;
  int primeTime;
  bool bHoldFullPrime;
  int blastFrontTime;
  int blastRightTime;
  int blastBackTime;
  int blastLeftTime;
  int slideInTime;
  int slideLoopTime;
  int slideOutTime;
};
 
struct __declspec(align(8)) ADSOverlay
{
  Material *shader;
  Material *shaderLowRes;
  Material *shaderEMP;
  Material *shaderEMPLowRes;
  weapOverlayReticle_t reticle;
  float width;
  float height;
  float widthSplitscreen;
  float heightSplitscreen;
};
 
struct WeaponDef
{
  const char *szOverlayName;
  XModel **gunXModel;           //Count = 0x40
  XModel *handXModel;
  XModel *camoWorldModel;
  XModel *camoViewModel;
  Material *camoWorldModelMaterialOverride;
  Material *camoViewModelMaterialOverride;
  Material **camoMaterialTarget;	//Count = 0x3F
  XAnimParts **szXAnimsRightHanded;					//Count = 0x7C
  XAnimParts **szXAnimsLeftHanded;					//Count = 0x7C
  const char *szModeName;
  scr_string_t (*notetrackSoundMapKeys)[0x18];
  scr_string_t (*notetrackSoundMapValues)[0x18];
  scr_string_t (*notetrackRumbleMapKeys)[0x18];
  scr_string_t (*notetrackRumbleMapValues)[0x18];
  scr_string_t (*notetrackFXMapKeys)[0x18];
  FxEffectDef ** notetrackFXMapValues;				//Count = 0x10
  scr_string_t (*notetrackFXMapTagValues)[0x10];
  playerAnimType_t playerAnimType;
  weapType_t weapType;
  weapClass_t weaponClass;
  PenetrateType penetrateType;
  weapInventoryType_t inventoryType;
  weapFireType_t fireType;
  float burstFireCooldown;
  OffhandClass offhandClass;
  weapStance_t stance;
  char rattleSoundType;
  FxEffectDef * viewFlashEffect;
  FxEffectDef * worldFlashEffect;
  FxEffectDef * viewADSFlashEffect;
  snd_alias_list_name pickUpSound;
  snd_alias_list_name pickUpSoundPlayer;
  snd_alias_list_name ammoPickupSound;
  snd_alias_list_name ammoPickupSoundPlayer;
  snd_alias_list_name projectileSound;
  snd_alias_list_name pullbackSound;
  snd_alias_list_name pullbackSoundPlayer;
  snd_alias_list_name fireSound;
  snd_alias_list_name fireSoundPlayer;
  snd_alias_list_name fireSoundPlayerAkimbo;
  snd_alias_list_name loopFireSound;
  snd_alias_list_name loopFireSoundPlayer;
  snd_alias_list_name stopFireSound;
  snd_alias_list_name stopFireSoundPlayer;
  snd_alias_list_name lastShotSound;
  snd_alias_list_name lastShotSoundPlayer;
  snd_alias_list_name emptyFireSound;
  snd_alias_list_name emptyFireSoundPlayer;
  snd_alias_list_name meleeSwipeSound;
  snd_alias_list_name meleeSwipeSoundPlayer;
  snd_alias_list_name meleeHitSound;
  snd_alias_list_name meleeMissSound;
  snd_alias_list_name rechamberSound;
  snd_alias_list_name rechamberSoundPlayer;
  snd_alias_list_name reloadSound;
  snd_alias_list_name reloadSoundPlayer;
  snd_alias_list_name reloadEmptySound;
  snd_alias_list_name reloadEmptySoundPlayer;
  snd_alias_list_name reloadStartSound;
  snd_alias_list_name reloadStartSoundPlayer;
  snd_alias_list_name reloadEndSound;
  snd_alias_list_name reloadEndSoundPlayer;
  snd_alias_list_name detonateSound;
  snd_alias_list_name detonateSoundPlayer;
  snd_alias_list_name nightVisionWearSound;
  snd_alias_list_name nightVisionWearSoundPlayer;
  snd_alias_list_name nightVisionRemoveSound;
  snd_alias_list_name nightVisionRemoveSoundPlayer;
  snd_alias_list_name altSwitchSound;
  snd_alias_list_name altSwitchSoundPlayer;
  snd_alias_list_name raiseSound;
  snd_alias_list_name raiseSoundPlayer;
  snd_alias_list_name firstRaiseSound;
  snd_alias_list_name firstRaiseSoundPlayer;
  snd_alias_list_name putawaySound;
  snd_alias_list_name putawaySoundPlayer;
  snd_alias_list_name scanSound;
  snd_alias_list_name changeVariableZoomSound;
  snd_alias_list_name * parallelBounceSound;
  snd_alias_list_name * perpendicularBounceSound;
  FxEffectDef * viewShellEjectEffect;
  FxEffectDef * worldShellEjectEffect;
  FxEffectDef * viewLastShotEjectEffect;
  FxEffectDef * worldLastShotEjectEffect;
  FxEffectDef * viewMagEjectEffect;
  Material * reticleCenter;
  Material * reticleSide;
  int iReticleCenterSize;
  int iReticleSideSize;
  int iReticleMinOfs;
  activeReticleType_t activeReticleType;
  float vStandMove[3];
  float vStandRot[3];
  float vStrafeMove[3];
  float vStrafeRot[3];
  float vDuckedOfs[3];
  float vDuckedMove[3];
  float vDuckedRot[3];
  float vProneOfs[3];
  float vProneMove[3];
  float vProneRot[3];
  float fPosMoveRate;
  float fPosProneMoveRate;
  float fStandMoveMinSpeed;
  float fDuckedMoveMinSpeed;
  float fProneMoveMinSpeed;
  float fPosRotRate;
  float fPosProneRotRate;
  float fStandRotMinSpeed;
  float fDuckedRotMinSpeed;
  float fProneRotMinSpeed;
  XModel * * worldModel;          //Count = 0x40
  XModel * worldClipModel;
  XModel * rocketModel;
  XModel * knifeModel;
  XModel * worldKnifeModel;
  Material * hudIcon;
  weaponIconRatioType_t hudIconRatio;
  Material * pickupIcon;
  weaponIconRatioType_t pickupIconRatio;
  Material * ammoCounterIcon;
  weaponIconRatioType_t ammoCounterIconRatio;
  ammoCounterClipType_t ammoCounterClip;
  int iStartAmmo;
  const char *szAmmoName;
  int iAmmoIndex;
  const char *szClipName;
  int iClipIndex;
  int iMaxAmmo;
  int shotCount;
  const char *szSharedAmmoCapName;
  int iSharedAmmoCapIndex;
  int iSharedAmmoCap;
  int damage;
  int playerDamage;
  int iMeleeDamage;
  int iDamageType;
  StateTimers stateTimers;
  StateTimers akimboStateTimers;
  float autoAimRange;
  float aimAssistRange;
  float aimAssistRangeAds;
  float aimPadding;
  float enemyCrosshairRange;
  float moveSpeedScale;
  float adsMoveSpeedScale;
  float sprintDurationScale;
  float fAdsZoomInFrac;
  float fAdsZoomOutFrac;
  ADSOverlay overlay;
  WeapOverlayInteface_t overlayInterface;
  float fAdsBobFactor;
  float fAdsViewBobMult;
  float fHipSpreadStandMin;
  float fHipSpreadDuckedMin;
  float fHipSpreadProneMin;
  float hipSpreadStandMax;
  float hipSpreadDuckedMax;
  float hipSpreadProneMax;
  float fHipSpreadDecayRate;
  float fHipSpreadFireAdd;
  float fHipSpreadTurnAdd;
  float fHipSpreadMoveAdd;
  float fHipSpreadDuckedDecay;
  float fHipSpreadProneDecay;
  float fHipReticleSidePos;
  float fAdsIdleAmount;
  float fHipIdleAmount;
  float adsIdleSpeed;
  float hipIdleSpeed;
  float fIdleCrouchFactor;
  float fIdleProneFactor;
  float fGunMaxPitch;
  float fGunMaxYaw;
  float adsIdleLerpStartTime;
  float adsIdleLerpTime;
  float swayMaxAngleSteadyAim;
  float swayMaxAngle;
  float swayLerpSpeed;
  float swayPitchScale;
  float swayYawScale;
  float swayHorizScale;
  float swayVertScale;
  float swayShellShockScale;
  float adsSwayMaxAngle;
  float adsSwayLerpSpeed;
  float adsSwayPitchScale;
  float adsSwayYawScale;
  float adsSwayHorizScale;
  float adsSwayVertScale;
  float adsViewErrorMin;
  float adsViewErrorMax;
  float adsFireAnimFrac;
  PhysCollmap *physCollmap;
  float dualWieldViewModelOffset;
  float fScopeDriftDelay;
  float fScopeDriftLerpInTime;
  float fScopeDriftSteadyTime;
  float fScopeDriftLerpOutTime;
  float fScopeDriftSteadyFactor;
  float fScopeDriftUnsteadyFactor;
  weaponIconRatioType_t killIconRatio;
  int iReloadAmmoAdd;
  int iReloadStartAdd;
  int ammoDropStockMin;
  int ammoDropClipPercentMin;
  int ammoDropClipPercentMax;
  int iExplosionRadius;
  int iExplosionRadiusMin;
  int iExplosionInnerDamage;
  int iExplosionOuterDamage;
  float damageConeAngle;
  float bulletExplDmgMult;
  float bulletExplRadiusMult;
  int iProjectileSpeed;
  int iProjectileSpeedUp;
  int iProjectileSpeedForward;
  int iProjectileActivateDist;
  float projLifetime;
  float timeToAccelerate;
  float projectileCurvature;
  const char *projectileName;
  XModel *projectileModel;
  weapProjExposion_t projExplosion;
  FxEffectDef * projExplosionEffect;
  FxEffectDef * projDudEffect;
  snd_alias_list_name projExplosionSound;
  snd_alias_list_name projDudSound;
  WeapStickinessType stickiness;
  float lowAmmoWarningThreshold;
  float ricochetChance;
  bool riotShieldEnableDamage;
  int riotShieldHealth;
  float riotShieldDamageMult;
  float (*parallelBounce)[31];
  float (*perpendicularBounce)[31];
  FxEffectDef * projTrailEffect;
  FxEffectDef * projBeaconEffect;
  float vProjectileColor[3];
  guidedMissileType_t guidedMissileType;
  float maxSteeringAccel;
  float projIgnitionDelay;
  FxEffectDef * projIgnitionEffect;
  snd_alias_list_name projIgnitionSound;
  float fAdsAimPitch;
  float fAdsCrosshairInFrac;
  float fAdsCrosshairOutFrac;
  bool adsShouldShowCrosshair;
  int adsGunKickReducedKickBullets;
  float adsGunKickReducedKickPercent;
  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;
  int hipGunKickReducedKickBullets;
  float hipGunKickReducedKickPercent;
  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 fightDist;
  float maxDist;
  const char *accuracyGraphName[2];
  vec2_t * accuracyGraphKnots;
  vec2_t * originalAccuracyGraphKnots;
  short accuracyGraphKnotCount;
  short originalAccuracyGraphKnotCount;
  int iPositionReloadTransTime;
  float leftArc;
  float rightArc;
  float topArc;
  float bottomArc;
  float accuracy;
  float aiSpread;
  float playerSpread;
  float minVertTurnSpeed;
  float minHorTurnSpeed;
  float maxVertTurnSpeed;
  float maxHorTurnSpeed;
  float pitchConvergenceTime;
  float yawConvergenceTime;
  float suppressTime;
  float maxRange;
  float fAnimHorRotateInc;
  float fPlayerPositionDist;
  const char *szUseHintString;
  const char *dropHintString;
  unsigned int iUseHintStringIndex;
  unsigned int dropHintStringIndex;
  float horizViewJitter;
  float vertViewJitter;
  float scanSpeed;
  float scanAccel;
  int scanPauseTime;
  const char *szScript;
  float fOOPosAnimLength[2];
  int minDamage;
  int minPlayerDamage;
  float fMaxDamageRange;
  float fMinDamageRange;
  float destabilizationRateTime;
  float destabilizationCurvatureMax;
  int destabilizeDistance;
  float (*locationDamageMultipliers)[22];
  const char *fireRumble;
  const char *meleeImpactRumble;
  TracerDef *tracerType;
  bool turretADSEnabled;
  float turretADSTime;
  float turretFov;
  float turretFovADS;
  float turretScopeZoomRate;
  float turretScopeZoomMin;
  float turretScopeZoomMax;
  float turretOverheatUpRate;
  float turretOverheatDownRate;
  float turretOverheatPenalty;
  snd_alias_list_name *turretOverheatSound;
  FxEffectDef *turretOverheatEffect;
  const char *turretBarrelSpinRumble;
  float turretBarrelSpinSpeed;
  float turretBarrelSpinUpTime;
  float turretBarrelSpinDownTime;
  snd_alias_list_name turretBarrelSpinMaxSnd;
  snd_alias_list_name turretBarrelSpinUpSnds[4];
  snd_alias_list_name turretBarrelSpinDownSnds[4];
  snd_alias_list_name missileConeSoundAlias;
  snd_alias_list_name 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;
  scr_string_t knifeAttachTagOverride;
  bool knifeAlwaysAttached;
  bool meleeOverrideValues;
  float aim_automelee_lerp;
  float aim_automelee_range;
  float aim_automelee_region_height;
  float aim_automelee_region_width;
  float player_meleeHeight;
  float player_meleeRange;
  float player_meleeWidth;
  bool sharedAmmo;
  bool lockonSupported;
  bool requireLockonToFire;
  bool isAirburstWeapon;
  bool bigExplosion;
  bool noAdsWhenMagEmpty;
  bool avoidDropCleanup;
  bool inheritsPerks;
  bool crosshairColorChange;
  bool bRifleBullet;
  bool armorPiercing;
  bool bBoltAction;
  bool aimDownSight;
  bool canHoldBreath;
  bool meleeOnly;
  bool canVariableZoom;
  bool bRechamberWhileAds;
  bool bBulletExplosiveDamage;
  bool bCookOffHold;
  bool reticleSpin45;
  bool bClipOnly;
  bool noAmmoPickup;
  bool adsFireOnly;
  bool cancelAutoHolsterWhenEmpty;
  bool disableSwitchToWhenEmpty;
  bool suppressAmmoReserveDisplay;
  bool laserSightDuringNightvision;
  bool markableViewmodel;
  bool noDualWield;
  bool flipKillIcon;
  bool bNoPartialReload;
  bool bSegmentedReload;
  bool bMultipleReload;
  bool blocksProne;
  bool silenced;
  bool isRollingGrenade;
  bool projExplosionEffectForceNormalUp;
  bool projExplosionEffectInheritParentDirection;
  bool bProjImpactExplode;
  bool bProjTrajectoryEvents;
  bool bProjWhizByEnabled;
  bool stickToPlayers;
  bool stickToVehicles;
  bool stickToTurrets;
  bool thrownSideways;
  bool hasDetonator;
  bool disableFiring;
  bool timedDetonation;
  bool rotate;
  bool holdButtonToThrow;
  bool freezeMovementWhenFiring;
  bool thermalScope;
  bool thermalToggle;
  bool outlineEnemies;
  bool altModeSameWeapon;
  bool turretBarrelSpinEnabled;
  bool missileConeSoundEnabled;
  bool missileConeSoundPitchshiftEnabled;
  bool missileConeSoundCrossfadeEnabled;
  bool offhandHoldIsCancelable;
  bool doNotAllowAttachmentsToOverrideSpread;
  bool useFastReloadAnims;
  bool useScopeDrift;
  bool alwaysShatterGlassOnImpact;
  bool oldWeapon;
  scr_string_t stowTag;
  XModel *stowOffsetModel;
};
 
struct __declspec(align(8)) AnimOverrideEntry
{
  unsigned __int16 attachment1;
  unsigned __int16 attachment2;
  XAnimParts *overrideAnim;
  XAnimParts *altmodeAnim;
  unsigned int animTreeType;
  int animTime;
  int altTime;
};
 
struct __declspec(align(8)) FXOverrideEntry
{
  unsigned __int16 attachment1;
  unsigned __int16 attachment2;
  snd_alias_list_name overrideSound;
  snd_alias_list_name altmodeSound;
  unsigned int fxType;
};
 
struct __declspec(align(8)) FXOverrideEntry
{
  unsigned __int16 attachment1;
  unsigned __int16 attachment2;
  FxEffectDef *overrideFX;
  FxEffectDef *altmodeFX;
  unsigned int fxType;
};
 
struct ReloadStateTimerEntry
{
  int attachment;
  int reloadAddTime;
  int reloadEmptyAddTime;
  int reloadStartAddTime;
};
 
struct NoteTrackToSoundEntry
{
  int attachment;
  scr_string_t (*notetrackSoundMapKeys)[0x18];
  scr_string_t (*notetrackSoundMapValues)[0x18];
};
 
struct WeaponCompleteDef
{
  const char *szInternalName;
  WeaponDef *weapDef;
  const char *szDisplayName;
  scr_string_t (*hideTags)[0x20];
  WeaponAttachment **scopes;				//Count = 6
  WeaponAttachment **underBarrels;				//Count = 3
  WeaponAttachment **others;				//Count = 8
  XAnimParts *const *szXAnims;							//Count = 0x7C
  unsigned int numAnimOverrides;
  AnimOverrideEntry *animOverrides;
  unsigned int numSoundOverrides;
  SoundOverrideEntry *soundOverrides;
  unsigned int numFXOverrides;
  FXOverrideEntry *fxOverrides;
  unsigned int numReloadStateTimerOverrides;
  ReloadStateTimerEntry *reloadOverrides;
  unsigned int numNotetrackOverrides;
  NoteTrackToSoundEntry *notetrackOverrides;
  float fAdsZoomFov;
  int iAdsTransInTime;
  int iAdsTransOutTime;
  int iClipSize;
  ImpactType impactType;
  int iFireTime;
  int iFireTimeAkimbo;
  weaponIconRatioType_t dpadIconRatio;
  float penetrateMultiplier;
  float fAdsViewKickCenterSpeed;
  float fHipViewKickCenterSpeed;
  const char *szAltWeaponName;
  int altWeapon;
  int iAltRaiseTime;
  int iAltRaiseTimeAkimbo;
  Material * killIcon;
  Material * dpadIcon;
  int fireAnimLength;
  int fireAnimLengthAkimbo;
  int iFirstRaiseTime;
  int iFirstRaiseTimeAkimbo;
  int ammoDropStockMax;
  float adsDofStart;
  float adsDofEnd;
  unsigned __int16 accuracyGraphKnotCount;
  unsigned __int16 originalAccuracyGraphKnotCount;
  vec2_t *accuracyGraphKnots;
  vec2_t *originalAccuracyGraphKnots;
  bool motionTracker;
  bool enhanced;
  bool dpadIconShowsAmmo;
  const char *szAdsrBaseSetting;
};

Source Format

The weapon source files are raw text files with no extension, located at "raw/weapons/sp/" for SP weapons and "raw/weapons/mp/" for MP weapons. They use the same format as many other assets, with each setting name and value separated by a back-slash. The first setting identifies the file, and for weapons the identifier string is "WEAPONFILE".