Weapon Asset (BO2): Difference between revisions

From COD Engine Research
Created page with "__NOTOC__ Category:Assets Category:BO2 The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Black Ops 2 continu..."
 
mNo edit summary
 
(11 intermediate revisions by 2 users not shown)
Line 4: Line 4:
The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Black Ops 2 continues on the Modern Warfare 2 idea of the "WeaponVariantDef". On Xbox 360 the WeaponVariantDef is 0x2CC bytes, while the WeaponDef is 0x990.
The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Black Ops 2 continues on the Modern Warfare 2 idea of the "WeaponVariantDef". On Xbox 360 the WeaponVariantDef is 0x2CC bytes, while the WeaponDef is 0x990.
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
enum AnimationType : int
enum AnimationType : int
{
{
  none = 0,
  none = 0,
  default = 1,
  default = 1,
  other = 2,
  other = 2,
  sniper = 3,
  sniper = 3,
  m203 = 4,
  m203 = 4,
  hold = 5,
  hold = 5,
  briefcase = 6,
  briefcase = 6,
  reviver = 7,
  reviver = 7,
  radio = 8,
  radio = 8,
  dualwield = 9,
  dualwield = 9,
  remotecontrol = 10,
  remotecontrol = 10,
  crossbow = 11,
  crossbow = 11,
  minigun = 12,
  minigun = 12,
  beltfed = 13,  
  beltfed = 13,  
  g11 = 14,
  g11 = 14,
  rearclip = 15,
  rearclip = 15,
  handleclip = 16,
  handleclip = 16,
  rearclipsniper = 17,
  rearclipsniper = 17,
  ballisticknife = 18,
  ballisticknife = 18,
  singleknife = 19,
  singleknife = 19,
  nopump = 20,
  nopump = 20,
  hatchet = 21,
  hatchet = 21,
  grimreaper = 22,
  grimreaper = 22,
  zipline = 23,
  zipline = 23,
  riotshield = 24,
  riotshield = 24,
  tablet = 25,
  tablet = 25,
  turned = 26,
  turned = 26,
  screecher = 27,
  screecher = 27,
  PLAYER_ANIM_TYPE_MAX
  PLAYER_ANIM_TYPE_MAX
};
};
 
enum meansOfDeath_t//WeaponDef->iDamageType
enum weapType_t : int
{
{
  MOD_UNKNOWN = 0x0,
  WEAPTYPE_BULLET = 0,
  MOD_PISTOL_BULLET = 0x1,
  WEAPTYPE_GRENADE = 1,
  MOD_RIFLE_BULLET = 0x2,
  WEAPTYPE_PROJECTILE = 2,
  MOD_GRENADE = 0x3,
  WEAPTYPE_BINOCULARS = 3,
  MOD_GRENADE_SPLASH = 0x4,
  WEAPTYPE_GAS = 4,
  MOD_PROJECTILE = 0x5,
  WEAPTYPE_BOMB = 5,
  MOD_PROJECTILE_SPLASH = 0x6,
  WEAPTYPE_MINE = 6,
  MOD_MELEE = 0x7,
  WEAPTYPE_MELEE = 7,
  MOD_BAYONET = 0x8,
  WEAPTYPE_RIOTSHIELD = 8,
  MOD_HEAD_SHOT = 0x9,
  WEAPTYPE_MAX
  MOD_CRUSH = 0xA,
};
  MOD_TELEFRAG = 0xB,
  MOD_FALLING = 0xC,
enum weapClass_t : int
  MOD_SUICIDE = 0xD,
{
  MOD_TRIGGER_HURT = 0xE,
  WEAPCLASS_RIFLE = 0,
  MOD_EXPLOSIVE = 0xF,
  WEAPCLASS_MG = 1,
  MOD_IMPACT = 0x10,
  WEAPCLASS_SMG = 2,
  MOD_BURNED = 0x11,
  WEAPCLASS_SPREAD = 3,
  MOD_HIT_BY_OBJECT = 0x12,
  WEAPCLASS_PISTOL = 4,
  MOD_DROWN = 0x13,
  WEAPCLASS_GRENADE = 5,
  MOD_GAS = 0x14,
  WEAPCLASS_ROCKETLAUNCHER = 6,
  MOD_NUM = 0x15
  WEAPCLASS_TURRET = 7,
};
  WEAPCLASS_NON_PLAYER = 8,
 
  WEAPCLASS_GAS = 9,
enum weapAnimFiles_t//WeaponDef->szXAnims
  WEAPCLASS_ITEM  = 10,
{
  WEAPCLASS_MELEE = 11,
  WEAP_ANIM_ROOT = 0x0,
  WEAPCLASS_KILLSTREAK_ALT_STORED_WEAPON = 12,
  WEAP_ANIM_IDLE = 0x1,
  WEAPCLASS_PISTOL_SPREAD = 13,
  WEAP_ANIM_EMPTY_IDLE = 0x2,
  WEAPCLASS_MAX
  WEAP_ANIM_FIRE_INTRO = 0x3,
};
  WEAP_ANIM_FIRE = 0x4,
  WEAP_ANIM_HOLD_FIRE = 0x5,
enum weapClass_t : int
  WEAP_ANIM_LASTSHOT = 0x6,
{
  WEAP_ANIM_FINALSHOT = 0x7,
  WEAPCLASS_RIFLE = 0,
  WEAP_ANIM_RECHAMBER = 0x8,
  WEAPCLASS_MG = 1,
  WEAP_ANIM_MELEE = 0x9,
  WEAPCLASS_SMG = 2,
  WEAP_ANIM_MELEE1 = 0xA,
  WEAPCLASS_SPREAD = 3,
  WEAP_ANIM_MELEE2 = 0xB,
  WEAPCLASS_PISTOL = 4,
  WEAP_ANIM_MELEE3 = 0xC,
  WEAPCLASS_GRENADE = 5,
  WEAP_ANIM_MELEE_EMPTY = 0xD,
  WEAPCLASS_ROCKETLAUNCHER = 6,
  WEAP_ANIM_MELEE_CHARGE = 0xE,
  WEAPCLASS_TURRET = 7,
  WEAP_ANIM_MELEE_CHARGE_EMPTY = 0xF,
  WEAPCLASS_NON_PLAYER = 8,
  WEAP_ANIM_RELOAD = 0x10,
  WEAPCLASS_GAS = 9,
  WEAP_ANIM_RELOAD_RIGHT = 0x11,
  WEAPCLASS_ITEM  = 10,
  WEAP_ANIM_RELOAD_EMPTY = 0x12,
  WEAPCLASS_MELEE = 11,
  WEAP_ANIM_RELOAD_START = 0x13,
  WEAPCLASS_KILLSTREAK_ALT_STORED_WEAPON = 12,
  WEAP_ANIM_RELOAD_END = 0x14,
  WEAPCLASS_PISTOL_SPREAD = 13,
  WEAP_ANIM_RELOAD_QUICK = 0x15,
  WEAPCLASS_MAX
  WEAP_ANIM_RELOAD_QUICK_EMPTY = 0x16,
};
  WEAP_ANIM_RAISE = 0x17,
  WEAP_ANIM_FIRST_RAISE = 0x18,
enum weaponIconRatioType_t : int
  WEAP_ANIM_DROP = 0x19,
{
  WEAP_ANIM_ALT_RAISE = 0x1A,
  WEAPON_ICON_RATIO_1TO1 = 0,
  WEAP_ANIM_ALT_DROP = 0x1B,
  WEAPON_ICON_RATIO_2TO1 = 1,
  WEAP_ANIM_QUICK_RAISE = 0x1C,
  WEAPON_ICON_RATIO_4TO1 = 2,
  WEAP_ANIM_QUICK_DROP = 0x1D,
  WEAPON_ICON_RATIO_MAX
  WEAP_ANIM_EMPTY_RAISE = 0x1E,
};
  WEAP_ANIM_EMPTY_DROP = 0x1F,
  WEAP_ANIM_SPRINT_IN = 0x20,
enum PenetrateType : int
  WEAP_ANIM_SPRINT_LOOP = 0x21,
{
  WEAP_ANIM_SPRINT_OUT = 0x22,
  PENETRATE_TYPE_NONE = 0,
  WEAP_ANIM_SPRINT_EMPTY_IN = 0x23,
  PENETRATE_TYPE_SMALL = 1,
  WEAP_ANIM_SPRINT_EMPTY_LOOP = 0x24,
  PENETRATE_TYPE_MEDIUM = 2,
  WEAP_ANIM_SPRINT_EMPTY_OUT = 0x25,
  PENETRATE_TYPE_LARGE = 3,
  WEAP_ANIM_LOWREADY_IN = 0x26,
  PENETRATE_TYPE_MAX
  WEAP_ANIM_LOWREADY_LOOP = 0x27,
};
  WEAP_ANIM_LOWREADY_OUT = 0x28,
  WEAP_ANIM_CONT_FIRE_IN = 0x29,
enum weapStance_t : int
  WEAP_ANIM_CONT_FIRE_LOOP = 0x2A,
{
  WEAP_ANIM_CONT_FIRE_OUT = 0x2B,
  WEAPSTANCE_STAND = 0x0,
  WEAP_ANIM_CRAWL_IN = 0x2C,
  WEAPSTANCE_DUCK = 0x1,
  WEAP_ANIM_CRAWL_FORWARD = 0x2D,
  WEAPSTANCE_PRONE = 0x2,
  WEAP_ANIM_CRAWL_BACK = 0x2E,
  WEAPSTANCE_MAX
  WEAP_ANIM_CRAWL_RIGHT = 0x2F,
};
  WEAP_ANIM_CRAWL_LEFT = 0x30,
  WEAP_ANIM_CRAWL_OUT = 0x31,
enum ammoCounterClipType_t : int
  WEAP_ANIM_CRAWL_EMPTY_IN = 0x32,
{
  WEAP_ANIM_CRAWL_EMPTY_FORWARD = 0x33,
  AMMO_COUNTER_CLIP_NONE = 0,
  WEAP_ANIM_CRAWL_EMPTY_BACK = 0x34,
  AMMO_COUNTER_CLIP_MAGAZINE = 1,
  WEAP_ANIM_CRAWL_EMPTY_RIGHT = 0x35,
  AMMO_COUNTER_CLIP_SHORTMAGAZINE = 2,
  WEAP_ANIM_CRAWL_EMPTY_LEFT = 0x36,
  AMMO_COUNTER_CLIP_SHOTGUN = 3,
  WEAP_ANIM_CRAWL_EMPTY_OUT = 0x37,
  AMMO_COUNTER_CLIP_ROCKET = 4,
  WEAP_ANIM_DEPLOY = 0x38,
  AMMO_COUNTER_CLIP_BELTFED = 5,
  WEAP_ANIM_BREAKDOWN = 0x39,
  AMMO_COUNTER_CLIP_ALTWEAPON = 6,
  WEAP_ANIM_DETONATE = 0x3A,
  AMMO_COUNTER_CLIP_MAX
  WEAP_ANIM_NIGHTVISION_WEAR = 0x3B,
};
  WEAP_ANIM_NIGHTVISION_REMOVE = 0x3C,
  WEAP_ANIM_ADS_FIRE = 0x3D,
enum weapOverlayReticle_t
  WEAP_ANIM_ADS_LASTSHOT = 0x3E,
{
  WEAP_ANIM_ADS_FIRE_INTRO = 0x3F,
  WEAPOVERLAYRETICLE_NONE = 0x0,
  WEAP_ANIM_ADS_RECHAMBER = 0x40,
  WEAPOVERLAYRETICLE_CROSSHAIR = 0x1,
  WEAP_ANIM_DTP_IN = 0x41,
  WEAPOVERLAYRETICLE_MAX
  WEAP_ANIM_DTP_LOOP = 0x42,
};
  WEAP_ANIM_DTP_OUT = 0x43,
  WEAP_ANIM_DTP_EMPTY_IN = 0x44,
enum weapOverlayInterface_t
  WEAP_ANIM_DTP_EMPTY_LOOP = 0x45,
{
  WEAP_ANIM_DTP_EMPTY_OUT = 0x46,
  WEAPOVERLAYINTERFACE_NONE = 0x0,
  WEAP_ANIM_SLIDE_IN = 0x47,
  WEAPOVERLAYINTERFACE_JAVELIN = 0x1,
  WEAP_ANIM_MANTLE = 0x48,
  WEAPOVERLAYINTERFACE_TURRETSCOPE = 0x2,
  WEAP_ANIM_CAMERA_SPRINT_LOOP = 0x49,
  WEAPOVERLAYINTERFACE_MAX
  WEAP_ANIM_CAMERA_DTP_IN = 0x4A,
};
  WEAP_ANIM_CAMERA_DTP_LOOP = 0x4B,
  WEAP_ANIM_CAMERA_DTP_OUT = 0x4C,
enum weapInventoryType_t : int
  WEAP_ANIM_CAMERA_MANTLE = 0x4D,
{
  WEAP_ANIM_FIRE_LEFT = 0x4E,
  WEAPINVENTORY_PRIMARY = 0,
  WEAP_ANIM_LASTSHOT_LEFT = 0x4F,
  WEAPINVENTORY_OFFHAND = 1,
  WEAP_ANIM_FINALSHOT_LEFT = 0x50,
  WEAPINVENTORY_ITEM = 2,
  WEAP_ANIM_IDLE_LEFT = 0x51,
  WEAPINVENTORY_ALTMODE = 3,
  WEAP_ANIM_EMPTY_IDLE_LEFT = 0x52,
  WEAPINVENTORY_MELEE = 4,
  WEAP_ANIM_RELOAD_EMPTY_LEFT = 0x53,
  WEAPINVENTORY_DW_LEFT_HAND = 5,
  WEAP_ANIM_RELOAD_LEFT = 0x54,
  WEAPINVENTORY_MAX
  WEAP_ANIM_ADS_UP = 0x55,
};
  WEAP_ANIM_ADS_DOWN = 0x56,
  WEAP_ANIM_ADS_UP_OTHER_SCOPE = 0x57,
enum ImpactType : int
  NUM_WEAP_ANIMS = 0x58
{
};
  IMPACT_TYPE_NONE = 0,
 
  IMPACT_TYPE_BULLET_SMALL = 1,
enum weapType_t : int
  IMPACT_TYPE_BULLET_LARGE = 2,
{
  IMPACT_TYPE_BULLET_AP = 3,
  WEAPTYPE_BULLET = 0,
  IMPACT_TYPE_BULLET_XTREME = 4,
  WEAPTYPE_GRENADE = 1,
  IMPACT_TYPE_SHOTGUN = 5,
  WEAPTYPE_PROJECTILE = 2,
  IMPACT_TYPE_GRENADE_BOUNCE = 6,
  WEAPTYPE_BINOCULARS = 3,
  IMPACT_TYPE_GRENADE_EXPLODE = 7,
  WEAPTYPE_GAS = 4,
  IMPACT_TYPE_RIFLE_GRENADE = 8,
  WEAPTYPE_BOMB = 5,
  IMPACT_TYPE_ROCKET_EXPLODE = 9,
  WEAPTYPE_MINE = 6,
  IMPACT_TYPE_ROCKET_EXPLODE_XTREME = 10,
  WEAPTYPE_MELEE = 7,
  IMPACT_TYPE_PROJECTILE_DUD = 11,
  WEAPTYPE_RIOTSHIELD = 8,
  IMPACT_TYPE_MORTAR_SHELL = 12,
  WEAPTYPE_MAX
  IMPACT_TYPE_TANK_SHELL = 13,
};
  IMPACT_TYPE_BOLT = 14,
 
  IMPACT_TYPE_BLADE = 15,
enum weapClass_t : int
  IMPACT_TYPE_MAX
{
};
  WEAPCLASS_RIFLE = 0,
  WEAPCLASS_MG = 1,
enum weapFireType_t : int
  WEAPCLASS_SMG = 2,
{
  WEAPCLASS_SPREAD = 3,
  WEAPON_FIRETYPE_FULLAUTO = 0,
  WEAPCLASS_PISTOL = 4,
  WEAPON_FIRETYPE_SINGLESHOT = 1,
  WEAPCLASS_GRENADE = 5,
  WEAPON_FIRETYPE_2ROUNDBURST = 2,
  WEAPCLASS_ROCKETLAUNCHER = 6,
  WEAPON_FIRETYPE_3ROUNDBURST = 3,
  WEAPCLASS_TURRET = 7,
  WEAPON_FIRETYPE_4ROUNDBURST = 4,
  WEAPCLASS_NON_PLAYER = 8,
  WEAPON_FIRETYPE_5ROUNDBURST = 5,
  WEAPCLASS_GAS = 9,
  WEAPON_FIRETYPE_STACKEDFIRE = 6,
  WEAPCLASS_ITEM  = 10,
  WEAPON_FIRETYPE_MINIGUN = 7,
  WEAPCLASS_MELEE = 11,
  WEAPON_FIRETYPE_CHARGESHOT = 8,
  WEAPCLASS_KILLSTREAK_ALT_STORED_WEAPON = 12,
  WEAPON_FIRETYPE_JETGUN = 9,
  WEAPCLASS_PISTOL_SPREAD = 13,
  WEAPON_FIRETYPE_MAX
  WEAPCLASS_MAX
};
};
 
enum ClipTypes : int
enum weaponIconRatioType_t : int
{
{
  bottom = 0,
  WEAPON_ICON_RATIO_1TO1 = 0,
  top = 1,
  WEAPON_ICON_RATIO_2TO1 = 1,
  left = 2,
  WEAPON_ICON_RATIO_4TO1 = 2,
  dp28 = 3,
  WEAPON_ICON_RATIO_MAX
  ptrs = 4,
};
  lmg = 5,
 
  CLIPTYPE_MAX
enum PenetrateType : int
};
{
  PENETRATE_TYPE_NONE = 0,
enum BarrelType : int
  PENETRATE_TYPE_SMALL = 1,
{
  PENETRATE_TYPE_MEDIUM = 2,
  SINGLE = 0,
  PENETRATE_TYPE_LARGE = 3,
  DUAL = 1,
  PENETRATE_TYPE_MAX
  DUAL_ALT = 2,
};
  QUAD = 3,
 
  QUAD_ALT = 4,
enum weapStance_t : int
  QUAD_DOUBLE_ALT = 5,
{
  BARRELTYPE_MAX
  WEAPSTANCE_STAND = 0x0,
};
  WEAPSTANCE_DUCK = 0x1,
  WEAPSTANCE_PRONE = 0x2,
enum surfaceNames_t
  WEAPSTANCE_MAX
{
};
  bark,
 
  brick,
enum ammoCounterClipType_t : int
  carpet,
{
  cloth,
  AMMO_COUNTER_CLIP_NONE = 0,
  concrete,
  AMMO_COUNTER_CLIP_MAGAZINE = 1,
  dirt,
  AMMO_COUNTER_CLIP_SHORTMAGAZINE = 2,
  flesh,
  AMMO_COUNTER_CLIP_SHOTGUN = 3,
  foliage,
  AMMO_COUNTER_CLIP_ROCKET = 4,
  glass,
  AMMO_COUNTER_CLIP_BELTFED = 5,
  grass,
  AMMO_COUNTER_CLIP_ALTWEAPON = 6,
  gravel,
  AMMO_COUNTER_CLIP_MAX
  ice,
};
  metal,
 
  mud,
enum weapOverlayReticle_t
  paper,
{
  plaster,
  WEAPOVERLAYRETICLE_NONE = 0x0,
  rock,
  WEAPOVERLAYRETICLE_CROSSHAIR = 0x1,
  sand,
  WEAPOVERLAYRETICLE_MAX
  snow,
};
  water,
 
  wood,
enum weapOverlayInterface_t
  asphalt,
{
  ceramic,
  WEAPOVERLAYINTERFACE_NONE = 0x0,
  plastic,
  WEAPOVERLAYINTERFACE_JAVELIN = 0x1,
  rubber,
  WEAPOVERLAYINTERFACE_TURRETSCOPE = 0x2,
  cushion,
  WEAPOVERLAYINTERFACE_MAX
  fruit,
};
  paintedmetal,
 
  player,
enum weapInventoryType_t : int
  tallgrass,
{
  riotshield,
  WEAPINVENTORY_PRIMARY = 0,
  opaqueglass
  WEAPINVENTORY_OFFHAND = 1,
};
  WEAPINVENTORY_ITEM = 2,
  WEAPINVENTORY_ALTMODE = 3,
enum StickType : int
  WEAPINVENTORY_MELEE = 4,
{
  WEAPINVENTORY_DW_LEFT_HAND = 5,
  DONT = 0,
  WEAPINVENTORY_MAX
  ALL = 1,
};
  ALL_EXCEPT_PLAYER = 2,
 
  GROUND = 3,
enum ImpactType : int
  GROUND_MAINTAIN_YAW = 4,
{
  FLESH = 5,
  IMPACT_TYPE_NONE = 0,
  STICK_MAX
  IMPACT_TYPE_BULLET_SMALL = 1,
};
  IMPACT_TYPE_BULLET_LARGE = 2,
  IMPACT_TYPE_BULLET_AP = 3,
enum RotType : int
  IMPACT_TYPE_BULLET_XTREME = 4,
{
  IMPACT_TYPE_SHOTGUN = 5,
  BOTH_AXIS = 0,
  IMPACT_TYPE_GRENADE_BOUNCE = 6,
  ONE_AXIS = 1,
  IMPACT_TYPE_GRENADE_EXPLODE = 7,
  CYLINDER = 2,
  IMPACT_TYPE_RIFLE_GRENADE = 8,
  ROTATION_MAX
  IMPACT_TYPE_ROCKET_EXPLODE = 9,
};
  IMPACT_TYPE_ROCKET_EXPLODE_XTREME = 10,
  IMPACT_TYPE_PROJECTILE_DUD = 11,
enum guidedMissileType_t
  IMPACT_TYPE_MORTAR_SHELL = 12,
{
  IMPACT_TYPE_TANK_SHELL = 13,
  MISSILE_GUIDANCE_NONE = 0x0,
  IMPACT_TYPE_BOLT = 14,
  MISSILE_GUIDANCE_SIDEWINDER = 0x1,
  IMPACT_TYPE_BLADE = 15,
  MISSILE_GUIDANCE_HELLFIRE = 0x2,
  IMPACT_TYPE_MAX
  MISSILE_GUIDANCE_JAVELIN = 0x3,
};
  MISSILE_GUIDANCE_BALLISTIC = 0x4,
 
  MISSILE_GUIDANCE_WIRE = 0x5,
enum weapFireType_t : int
  MISSILE_GUIDANCE_TV = 0x6,
{
  MISSILE_GUIDANCE_DRONE = 0x7,
  WEAPON_FIRETYPE_FULLAUTO = 0,
  MISSILE_GUIDANCE_HEAT = 0x8,
  WEAPON_FIRETYPE_SINGLESHOT = 1,
  MISSILE_GUIDANCE_MAX
  WEAPON_FIRETYPE_2ROUNDBURST = 2,
};
  WEAPON_FIRETYPE_3ROUNDBURST = 3,
  WEAPON_FIRETYPE_4ROUNDBURST = 4,
enum bodyParts_t
  WEAPON_FIRETYPE_5ROUNDBURST = 5,
{
  WEAPON_FIRETYPE_STACKEDFIRE = 6,
  none,
  WEAPON_FIRETYPE_MINIGUN = 7,
  helmet,
  WEAPON_FIRETYPE_CHARGESHOT = 8,
  head,
  WEAPON_FIRETYPE_JETGUN = 9,
  neck,
  WEAPON_FIRETYPE_MAX
  torso_upper,
};
  torso_mid,  
 
  torso_lower,
enum weapClipType_t : int
  right_arm_upper,
{
  left_arm_upper,
  WEAPON_CLIPTYPE_BOTTOM = 0x0,
  right_arm_lower,
  WEAPON_CLIPTYPE_TOP = 0x1,
  left_arm_lower,
  WEAPON_CLIPTYPE_LEFT = 0x2,
  right_hand,
  WEAPON_CLIPTYPE_DP28 = 0x3,
  left_hand,
  WEAPON_CLIPTYPE_PTRS = 0x4,
  right_leg_upper,
  WEAPON_CLIPTYPE_LMG = 0x5,
  left_leg_upper,
  WEAPON_CLIPTYPECOUNT = 0x6,
  right_leg_lower,
};
  left_leg_lower,  
 
  right_foot,
enum barrelType_t : int
  left_foot,
{
  gun,
  BARREL_TYPE_SINGLE = 0x0,
  riotshield
  BARREL_TYPE_DUAL = 0x1,
};
  BARREL_TYPE_DUAL_ALTERNATE = 0x2,
  BARREL_TYPE_QUAD = 0x3,
struct ProjectileExplosionEffect
  BARREL_TYPE_QUAD_ALTERNATE = 0x4,
{
  BARREL_TYPE_QUAD_DOUBLE_ALTERNATE = 0x5,
  FxEffectDef * projExplosionEffect;
  BARREL_TYPE_COUNT = 0x6
  bool projExplosionEffectForceNormalUp;
};
};
 
enum surfaceNames_t
struct FlameTable
{
{
  bark,
  float streamChunkGravityStart;
  brick,
  float streamChunkGravityEnd;
  carpet,
  float streamChunkMaxSize;
  cloth,
  float streamChunkStartSize;
  concrete,
  float streamChunkEndSize;
  dirt,
  float streamChunkStartSizeRand;
  flesh,
  float streamChunkEndSizeRand;
  foliage,
  float streamChunkDistScalar;
  glass,
  float streamChunkDistSwayScale;
  grass,
  float streamChunkDistSwayVelMax;
  gravel,
  float streamChunkSpeed;
  ice,
  float streamChunkDecel;
  metal,
  float streamChunkVelocityAddScale;
  mud,
  float streamChunkDuration;
  paper,
  float streamChunkDurationScaleMaxVel;
  plaster,
  float streamChunkDurationVelScalar;
  rock,
  float streamChunkSizeSpeedScale;
  sand,
  float streamChunkSizeAgeScale;
  snow,
  float streamChunkSpawnFireIntervalSt;
  water,
  float streamChunkSpawnFireIntervalEn;
  wood,
  float streamChunkSpawnFireMinLifeFra;
  asphalt,
  float streamChunkSpawnFireMaxLifeFra;
  ceramic,
  float streamChunkFireMinLifeFrac;
  plastic,
  float streamChunkFireMinLifeFracStar;
  rubber,
  float streamChunkFireMinLifeFracEnd;
  cushion,
  float streamChunkDripsMinLifeFrac;
  fruit,
  float streamChunkDripsMinLifeFracSta;
  paintedmetal,
  float streamChunkDripsMinLifeFracEnd;
  player,
  float streamChunkRotationRange;
  tallgrass,
  float streamSizeRandSinWave;
  riotshield,
  float streamSizeRandCosWave;
  opaqueglass
  float streamDripsChunkInterval;
};
  float streamDripsChunkMinFrac;
 
  float streamDripsChunkRandFrac;
enum WeapStickinessType
  float streamSmokeChunkInterval;
{
  float streamSmokeChunkMinFrac;
  WEAPSTICKINESS_NONE = 0x0,
  float streamSmokeChunkRandFrac;
  WEAPSTICKINESS_ALL = 0x1,
  float streamChunkCullDistSizeFrac;
  WEAPSTICKINESS_ALL_NO_SENTIENTS = 0x2,
  float streamChunkCullMinLife;
  WEAPSTICKINESS_GROUND = 0x3,
  float streamChunkCullMaxLife;
  WEAPSTICKINESS_GROUND_WITH_YAW = 0x4,
  float streamFuelSizeStart;
  WEAPSTICKINESS_FLESH = 0x5,
  float streamFuelSizeEnd;
  WEAPSTICKINESS_COUNT = 0x6
  float streamFuelLength;
};
  float streamFuelNumSegments;
 
  float streamFuelAnimLoopTime;
enum WeapRotateType
  float streamFlameSizeStart;
{
  float streamFlameSizeEnd;
  WEAPROTATE_GRENADE_ROTATE = 0x0,
  float streamFlameLength;
  WEAPROTATE_BLADE_ROTATE = 0x1,
  float streamFlameNumSegments;
  WEAPROTATE_CYLINDER_ROTATE = 0x2,
  float streamFlameAnimLoopTime;
  WEAPROTATE_COUNT = 0x3
  float streamPrimaryLightRadius;
};
  float streamPrimaryLightRadiusFlutte;
 
  float streamPrimaryLightR;
enum guidedMissileType_t
  float streamPrimaryLightG;
{
  float streamPrimaryLightB;
  MISSILE_GUIDANCE_NONE = 0x0,
  float streamPrimaryLightFlutterR;
  MISSILE_GUIDANCE_SIDEWINDER = 0x1,
  float streamPrimaryLightFlutterG;
  MISSILE_GUIDANCE_HELLFIRE = 0x2,
  float streamPrimaryLightFlutterB;
  MISSILE_GUIDANCE_JAVELIN = 0x3,
  float fireLife;
  MISSILE_GUIDANCE_BALLISTIC = 0x4,
  float fireLifeRand;
  MISSILE_GUIDANCE_WIRE = 0x5,
  float fireSpeedScale;
  MISSILE_GUIDANCE_TV = 0x6,
  float fireSpeedScaleRand;
  MISSILE_GUIDANCE_DRONE = 0x7,
  float fireVelocityAddZ;
  MISSILE_GUIDANCE_HEAT = 0x8,
  float fireVelocityAddZRand;
  MISSILE_GUIDANCE_MAX
  float fireVelocityAddSideways;
};
  float fireGravity;
 
  float fireGravityEnd;
enum hitLocation_t
  float fireMaxRotVel;
{
  float fireFriction;
  HITLOC_NONE = 0x0,
  float fireEndSizeAdd;
  HITLOC_HELMET = 0x1,
  float fireStartSizeScale;
  HITLOC_HEAD = 0x2,
  float fireEndSizeScale;
  HITLOC_NECK = 0x3,
  float fireBrightness;
  HITLOC_TORSO_UPR = 0x4,
  float dripsLife;
  HITLOC_TORSO_MID = 0x5,
  float dripsLifeRand;
  HITLOC_TORSO_LWR = 0x6,
  float dripsSpeedScale;
  HITLOC_R_ARM_UPR = 0x7,
  float dripsSpeedScaleRand;
  HITLOC_L_ARM_UPR = 0x8,
  float dripsVelocityAddZ;
  HITLOC_R_ARM_LWR = 0x9,
  float dripsVelocityAddZRand;
  HITLOC_L_ARM_LWR = 0xA,
  float dripsVelocityAddSideways;
  HITLOC_R_HAND = 0xB,
  float dripsGravity;
  HITLOC_L_HAND = 0xC,
  float dripsGravityEnd;
  HITLOC_R_LEG_UPR = 0xD,
  float dripsMaxRotVel;
  HITLOC_L_LEG_UPR = 0xE,
  float dripsFriction;
  HITLOC_R_LEG_LWR = 0xF,
  float dripsEndSizeAdd;
  HITLOC_L_LEG_LWR = 0x10,
  float dripsStartSizeScale;
  HITLOC_R_FOOT = 0x11,
  float dripsEndSizeScale;
  HITLOC_L_FOOT = 0x12,
  float dripsBrightness;
  HITLOC_GUN = 0x13,
  float smokeLife;
  HITLOC_RIOT = 0x14,
  float smokeLifeRand;
  HITLOC_NUM = 0x15,
  float smokeSpeedScale;
};
  float smokeVelocityAddZ;
 
  float smokeGravity;
struct ProjectileExplosionEffect
  float smokeGravityEnd;
{
  float smokeMaxRotation;
  FxEffectDef * projExplosionEffect;
  float smokeMaxRotVel;
  bool projExplosionEffectForceNormalUp;
  float smokeFriction;
};
  float smokeEndSizeAdd;
 
  float smokeStartSizeAdd;
struct FlameTable
  float smokeOriginSizeOfsZScale;
{
  float smokeOriginOfsZ;
  float streamChunkGravityStart;
  float smokeFadein;
  float streamChunkGravityEnd;
  float smokeFadeout;
  float streamChunkMaxSize;
  float smokeMaxAlpha;
  float streamChunkStartSize;
  float smokeBrightness;
  float streamChunkEndSize;
  float smokeOriginOffset;
  float streamChunkStartSizeRand;
  float collisionSpeedScale;
  float streamChunkEndSizeRand;
  float collisionVolumeScale;
  float streamChunkDistScalar;
  const char * name;
  float streamChunkDistSwayScale;
  Material * fire;
  float streamChunkDistSwayVelMax;
  Material * smoke;
  float streamChunkSpeed;
  Material * heat;
  float streamChunkDecel;
  Material * drips;
  float streamChunkVelocityAddScale;
  Material * streamFuel;
  float streamChunkDuration;
  Material * streamFuel2;
  float streamChunkDurationScaleMaxVel;
  Material * streamFlame;
  float streamChunkDurationVelScalar;
  Material * streamFlame2;
  float streamChunkSizeSpeedScale;
  const char * flameOffLoopSound;
  float streamChunkSizeAgeScale;
  const char * flameIgniteSound;
  float streamChunkSpawnFireIntervalSt;
  const char * flameOnLoopSound;
  float streamChunkSpawnFireIntervalEn;
  const char * flameCooldownSound;
  float streamChunkSpawnFireMinLifeFra;
};
  float streamChunkSpawnFireMaxLifeFra;
  float streamChunkFireMinLifeFrac;
struct WeaponDef
  float streamChunkFireMinLifeFracStar;
{
  float streamChunkFireMinLifeFracEnd;
  const char * AIOverlayDescription;
  float streamChunkDripsMinLifeFrac;
  XModel * * gunModel;
  float streamChunkDripsMinLifeFracSta;
  XModel * handModel;
  float streamChunkDripsMinLifeFracEnd;
  const char * modeName;
  float streamChunkRotationRange;
  ScriptString (*noteTrackSoundMapKeys[0x14]);
  float streamSizeRandSinWave;
  ScriptString (*notetrackSoundMapValues[0x14]);
  float streamSizeRandCosWave;
  AnimationType playerAnimType;
  float streamDripsChunkInterval;
  weapType_t weaponType;
  float streamDripsChunkMinFrac;
  weapClass_t weaponClass;
  float streamDripsChunkRandFrac;
  PenetrateType penetrateType;
  float streamSmokeChunkInterval;
  ImpactType impactType;
  float streamSmokeChunkMinFrac;
  weapInventoryType_t inventoryType;
  float streamSmokeChunkRandFrac;
  weapFireType_t fireType;
  float streamChunkCullDistSizeFrac;
  ClipTypes clipType;
  float streamChunkCullMinLife;
  BarrelType barrelType;
  float streamChunkCullMaxLife;
        int unknown1;
  float streamFuelSizeStart;
  const char * parentWeaponName;
  float streamFuelSizeEnd;
  int jamFireTime;
  float streamFuelLength;
  int overheatWeapon;
  float streamFuelNumSegments;
  float overheatRate;
  float streamFuelAnimLoopTime;
  float cooldownRate;
  float streamFlameSizeStart;
  float overheatEndVal;
  float streamFlameSizeEnd;
  bool coolWhileFiring;
  float streamFlameLength;
  bool fuelTankWeapon;
  float streamFlameNumSegments;
  int tankLifeTime;
  float streamFlameAnimLoopTime;
  OffhandClass offhandClass;
  float streamPrimaryLightRadius;
  int offhandSlot;
  float streamPrimaryLightRadiusFlutte;
  weapStance_t stance;
  float streamPrimaryLightR;
  FxEffectDef * viewFlashEffect;
  float streamPrimaryLightG;
  FxEffectDef * worldFlashEffect;
  float streamPrimaryLightB;
  FxEffectDef * barrelCooldownEffect;
  float streamPrimaryLightFlutterR;
  int barrelCooldownMinCount;
  float streamPrimaryLightFlutterG;
  float viewFlashOffset[3];
  float streamPrimaryLightFlutterB;
  float worldFlashOffset[3];
  float fireLife;
  char * pickupSound;
  float fireLifeRand;
  char * pickupSoundPlayer;
  float fireSpeedScale;
  char * ammoPickupSound;
  float fireSpeedScaleRand;
  char * ammoPickupSoundPlayer;
  float fireVelocityAddZ;
  char * projectileSound;
  float fireVelocityAddZRand;
  char * pullbackSound;
  float fireVelocityAddSideways;
  char * pullbackSoundPlayer;
  float fireGravity;
  char * fireSound;
  float fireGravityEnd;
  char * fireSoundPlayer;
  float fireMaxRotVel;
  char * loopFireSound;
  float fireFriction;
  char * loopFireSoundPlayer;
  float fireEndSizeAdd;
  char * loopFireEndSound;
  float fireStartSizeScale;
  char * loopFireEndSoundPlayer;
  float fireEndSizeScale;
  char * startFireSound;
  float fireBrightness;
  char * stopFireSound;
  float dripsLife;
  char * killcamStartFireSound;
  float dripsLifeRand;
  char * startFireSoundPlayer;
  float dripsSpeedScale;
  char * stopFireSoundPlayer;
  float dripsSpeedScaleRand;
  char * killcamStartFireSoundPlayer;
  float dripsVelocityAddZ;
  char * lastShotSound;
  float dripsVelocityAddZRand;
  char * lastShotSoundPlayer;
  float dripsVelocityAddSideways;
  char * emptyFireSound;
  float dripsGravity;
  char * emptyFireSoundPlayer;
  float dripsGravityEnd;
  char * crackSound;
  float dripsMaxRotVel;
  char * whizbySound;
  float dripsFriction;
  char * meleeSwipeSound;
  float dripsEndSizeAdd;
  char * meleeSwipeSoundPlayer;
  float dripsStartSizeScale;
  char * meleeHitSound;
  float dripsEndSizeScale;
  char * meleeMissSound;
  float dripsBrightness;
  char * rechamberSound;
  float smokeLife;
  char * rechamberSoundPlayer;
  float smokeLifeRand;
  char * reloadSound;
  float smokeSpeedScale;
  char * reloadSoundPlayer;
  float smokeVelocityAddZ;
  char * reloadEmptySound;
  float smokeGravity;
  char * reloadEmptySoundPlayer;
  float smokeGravityEnd;
  char * reloadStartSound;
  float smokeMaxRotation;
  char * reloadStartSoundPlayer;
  float smokeMaxRotVel;
  char * reloadEndSound;
  float smokeFriction;
  char * reloadEndSoundPlayer;
  float smokeEndSizeAdd;
  char * rotateLoopSound;
  float smokeStartSizeAdd;
  char * rotateLoopSoundPlayer;
  float smokeOriginSizeOfsZScale;
  char * rotateStopSound;
  float smokeOriginOfsZ;
  char * rotateStopSoundPlayer;
  float smokeFadein;
  char * deploySound;
  float smokeFadeout;
  char * deploySoundPlayer;
  float smokeMaxAlpha;
  char * finishDeploySound;
  float smokeBrightness;
  char * finishDeploySoundPlayer;
  float smokeOriginOffset;
  char * breakdownSound;
  float collisionSpeedScale;
  char * breakdownSoundPlayer;
  float collisionVolumeScale;
  char * finishBreakdownSound;
  const char * name;
  char * finishBreakdownSoundPlayer;
  Material * fire;
  char * detonateSound;
  Material * smoke;
  char * detonateSoundPlayer;
  Material * heat;
  char * nightVisionWearSound;
  Material * drips;
  char * nightVisionWearSoundPlayer;
  Material * streamFuel;
  char * nightVisionRemoveSound;
  Material * streamFuel2;
  char * nightVisionRemoveSoundPlayer;
  Material * streamFlame;
  char * altSwitchSound;
  Material * streamFlame2;
  char * altSwitchSoundPlayer;
  const char * flameOffLoopSound;
  char * raiseSound;
  const char * flameIgniteSound;
  char * raiseSoundPlayer;
  const char * flameOnLoopSound;
  char * firstRaiseSound;
  const char * flameCooldownSound;
  char * firstRaiseSoundPlayer;
};
  char * adsRaiseSoundPlayer;
 
  char * adsLowerSoundPlayer;
enum OffhandClass
  char * putawaySound;
{
  char * putawaySoundPlayer;
  OFFHAND_CLASS_NONE = 0x0,
  char * overheatSound;
  OFFHAND_CLASS_FRAG_GRENADE = 0x1,
  char * overheatSoundPlayer;
  OFFHAND_CLASS_SMOKE_GRENADE = 0x2,
  char * adsZoomSound;
  OFFHAND_CLASS_FLASH_GRENADE = 0x3,
  char * shellCasing;
  OFFHAND_CLASS_GEAR = 0x4,
  char * shellCasingPlayer;
  OFFHAND_CLASS_SUPPLYDROP_MARKER = 0x5,
  char * * bounceSounds;   //Refer to surfaceNames_t
  OFFHAND_CLASS_COUNT = 0x6,
  const char * standMountedWeapdef;
};
  const char * crouchMountedWeapdef;
 
  const char * proneMountedWeapdef;
enum OffhandSlot
  unsigned int standMountedWeapIndex;
{
  unsigned int crouchMountedWeapIndex;
  OFFHAND_SLOT_NONE = 0x0,
  unsigned int proneMountedWeapIndex;
  OFFHAND_SLOT_LETHAL_GRENADE = 0x1,
  FxEffectDef * viewShellEjectEffect;
  OFFHAND_SLOT_TACTICAL_GRENADE = 0x2,
  FxEffectDef * worldShellEjectEffect;
  OFFHAND_SLOT_EQUIPMENT = 0x3,
  FxEffectDef * viewLastShotEjectEffect;
  OFFHAND_SLOT_SPECIFIC_USE = 0x4,
  FxEffectDef * worldLastShotEjectEffect;
  OFFHAND_SLOT_COUNT = 0x5,
  Material *reticleCenter;
};
  Material *reticleSide;
 
  int iReticleCenterSize;
struct WeaponDef
  int iReticleSideSize;
{
  int iReticleMinOfs;
  const char *szOverlayName;
  activeReticleType_t activeReticleType;
  XModel **gunXModel;
  float vStandMove[3];
  XModel *handXModel;
  float vStandRot[3];
  const char *szModeName;
  float vDuckedOfs[3];
  ScriptString (*noteTrackSoundMapKeys)[0x14];
  float vDuckedMove[3];
  ScriptString (*notetrackSoundMapValues)[0x14];
  float vDuckedSprintOfs[3];
  AnimationType playerAnimType;
  float vDuckedSprintRot[3];
  weapType_t weaponType;
  float vDuckedSprintBob[2];
  weapClass_t weaponClass;
  float duckedSprintScale;
  PenetrateType penetrateType;
  float vSprintOfs[3];
  ImpactType impactType;
  float vSprintRot[3];
  weapInventoryType_t inventoryType;
  float vSprintBob[2];
  weapFireType_t fireType;
  float sprintScale;
  weapClipType_t clipType;
  float vLowReadyOfs[3];
  barrelType_t barrelType;
  float vLowReadyRot[3];
  int itemIndex;
  float vRideOfs[3];
  const char * parentWeaponName;
  float vRideRot[3];
  int iJamFireTime;
  float vDTPOfs[3];
  int overheatWeapon;
  float vDTPRot[3];
  float overheatRate;
  float vDTPBob[2];
  float cooldownRate;
  float DTPScale;
  float overheatEndVal;
  float vMantleOfs[3];
  bool coolWhileFiring;
  float vMantleRot[3];
  bool fuelTankWeapon;
  float vSlideOfs[3];
  int iTankLifeTime;
  float vSlideRot[3];
  OffhandClass offhandClass;
  float vDuckedRot[3];
  OffhandSlot offhandSlot;
  float vProneOfs[3];
  weapStance_t stance;
  float vProneMove[3];
  FxEffectDef * viewFlashEffect;
  float vProneRot[3];
  FxEffectDef * worldFlashEffect;
  float vStrafeMove[3];
  FxEffectDef * barrelCooldownEffect;
  float vStrafeRot[3];
  int barrelCooldownMinCount;
  float fPosMoveRate;
  vec3_t vViewFlashOffset;
  float fPosProneMoveRate;
  vec3_t vWorldFlashOffset;
  float fStandMoveMinSpeed;
  char * pickupSound;
  float fDuckedMoveMinSpeed;
  char * pickupSoundPlayer;
  float fProneMoveMinSpeed;
  char * ammoPickupSound;
  float fPosRotRate;
  char * ammoPickupSoundPlayer;
  float fPosProneRotRate;
  char * projectileSound;
  float fStandRotMinSpeed;
  char * pullbackSound;
  float fDuckedRotMinSpeed;
  char * pullbackSoundPlayer;
  float fProneRotMinSpeed;
  char * fireSound;
  XModel * *worldModel;
  char * fireSoundPlayer;
  XModel *worldClipModel;
  char * loopFireSound;
  XModel *rocketModel;
  char * loopFireSoundPlayer;
  XModel *mountedModel;
  char * loopFireEndSound;
  XModel *additionalMeleeModel;
  char * loopFireEndSoundPlayer;
  Material * fireTypeIcon;
  char * startFireSound;
  Material * hudIcon;
  char * stopFireSound;
  weaponIconRatioType_t hudIconRatio;
  char * killcamStartFireSound;
  Material * indicatorIcon;
  char * startFireSoundPlayer;
  weaponIconRatioType_t indicatorIconRatio;
  char * stopFireSoundPlayer;
  Material * ammoCounterIcon;
  char * killcamStartFireSoundPlayer;
  weaponIconRatioType_t ammoCounterIconRatio;
  char * lastShotSound;
  ammoCounterClipType_t ammoCounterClip;
  char * lastShotSoundPlayer;
  int iStartAmmo;
  char * emptyFireSound;
  int iMaxAmmo;
  char * emptyFireSoundPlayer;
  int shotCount;
  char * crackSound;
  const char *szSharedAmmoCapName;
  char * whizbySound;
  int iSharedAmmoCapIndex;
  char * meleeSwipeSound;
  int iSharedAmmoCap;
  char * meleeSwipeSoundPlayer;
  bool unlimitedAmmo;
  char * meleeHitSound;
  bool ammoCountClipRelative;
  char * meleeMissSound;
  int damage[6];
  char * rechamberSound;
  float damageRange[6];
  char * rechamberSoundPlayer;
  int minPlayerDamage;
  char * reloadSound;
  float damageDuration;
  char * reloadSoundPlayer;
  float damageInterval;
  char * reloadEmptySound;
  int playerDamage;
  char * reloadEmptySoundPlayer;
  int iMeleeDamage;
  char * reloadStartSound;
  int iDamageType;
  char * reloadStartSoundPlayer;
  ScriptString explosionTag;
  char * reloadEndSound;
  int iFireDelay;
  char * reloadEndSoundPlayer;
  int iMeleeDelay;
  char * rotateLoopSound;
  int meleeChargeDelay;
  char * rotateLoopSoundPlayer;
  int iDetonateDelay;
  char * rotateStopSound;
  int iSpinUpTime;
  char * rotateStopSoundPlayer;
  int iSpinDownTime;
  char * deploySound;
  float spinRate;
  char * deploySoundPlayer;
  char * spinLoopSound;
  char * finishDeploySound;
  char * spinLoopSoundPlayer;
  char * finishDeploySoundPlayer;
  char * startSpinSound;
  char * breakdownSound;
  char * startSpinSoundPlayer;
  char * breakdownSoundPlayer;
  char * stopSpinSound;
  char * finishBreakdownSound;
  char * stopSpinSoundPlayer;
  char * finishBreakdownSoundPlayer;
  bool applySpinPitch;
  char * detonateSound;
  int fireTime;
  char * detonateSoundPlayer;
  int iFireTime;
  char * nightVisionWearSound;
  int iLastFireTime;
  char * nightVisionWearSoundPlayer;
  int iRechamberTime;
  char * nightVisionRemoveSound;
  int iRechamberBoltTime;
  char * nightVisionRemoveSoundPlayer;
  int iHoldFireTime;
  char * altSwitchSound;
  int iDetonateTime;
  char * altSwitchSoundPlayer;
  int iMeleeTime;
  char * raiseSound;
  int iBurstFireDelay;
  char * raiseSoundPlayer;
  int meleeChargeTime;
  char * firstRaiseSound;
        char unknown2[0x8];
  char * firstRaiseSoundPlayer;
  int reloadShowRocketTime;
  char * adsRaiseSoundPlayer;
  int iReloadEmtpyTime;
  char * adsLowerSoundPlayer;
  int iReloadAddTime;
  char * putawaySound;
  int iReloadEmptyAddTime;
  char * putawaySoundPlayer;
  int iReloadQuickAddTime;
  char * overheatSound;
  int iReloadQuickEmptyAddTime;
  char * overheatSoundPlayer;
  int iReloadStartTime;
  char * adsZoomSound;
  int iReloadStartAddTime;
  char * shellCasing;
  int iReloadEndTime;
  char * shellCasingPlayer;
  int iDropTime;
  char * * bounceSounds;   //Refer to surfaceNames_t
  int iRaiseTime;
  const char * standMountedWeapdef;
  int iAltDropTime;
  const char * crouchMountedWeapdef;
  int iQuickDropTime;
  const char * proneMountedWeapdef;
  int iQuickRaiseTime;
  unsigned int standMountedWeapIndex;
  int iFirstRaiseTime;
  unsigned int crouchMountedWeapIndex;
  int iEmptyRaiseTime;
  unsigned int proneMountedWeapIndex;
  int iEmptyDropTime;
  FxEffectDef * viewShellEjectEffect;
  int sprintInTime;
  FxEffectDef * worldShellEjectEffect;
  int sprintLoopTime;
  FxEffectDef * viewLastShotEjectEffect;
  int sprintOutTime;
  FxEffectDef * worldLastShotEjectEffect;
  int lowReadyInTime;
  vec3_t vViewShellEjectOffset;
  int lowReadyLoopTime;
  vec3_t vWorldShellEjectOffset;
  int lowReadyOutTime;
  vec3_t vViewShellEjectRotation;
  int contFireInTime;
  vec3_t vWorldShellEjectRotation;
  int contFireLoopTime;
  Material *reticleCenter;
  int contFireOutTime;
  Material *reticleSide;
  int DTPInTime;
  int iReticleCenterSize;
  int DTPLoopTime;
  int iReticleSideSize;
  int DTPOutTime;
  int iReticleMinOfs;
  int crawlInTime;
  activeReticleType_t activeReticleType;
  int crawlForwardTime;
  vec3_t vStandMove;
  int crawlBackTime;
  vec3_t vStandRot;
  int crawlRightTime;
  vec3_t vDuckedOfs;
  int crawlLeftTime;
  vec3_t vDuckedMove;
  int crawlOutFireTime;
  vec3_t vDuckedSprintOfs;
  int crawlOutTime;
  vec3_t vDuckedSprintRot;
  int slideInTime;
  vec2_t vDuckedSprintBob;
  int deployTime;
  float fDuckedSprintCycleScale;
  int breakdownTime;
  vec3_t vSprintOfs;
  int fireTime2;       //For some reason, BO2 has 2 instances of these. I have never seen them not equal.
  vec3_t vSprintRot;
  int nightVisionWearTime;
  vec2_t vSprintBob;
  int nightVisionWearTimeFadeOutEnd;
  float fSprintCycleScale;
  int nightVisionWearTimePowerUp;
  vec3_t vLowReadyOfs;
  int nightVisionRemoveTime;
  vec3_t vLowReadyRot;
  int nightVisionRemoveTimePowerDown;
  vec3_t vRideOfs;
  int nightVisionRemoveTimeFadeInStart;
  vec3_t vRideRot;
  int fuseTime;
  vec3_t vDtpOfs;
  int aifuseTime;
  vec3_t vDtpRot;
  int lockOnRadius;
  vec2_t vDtpBob;
  int lockOnSpeed;
  float fDtpCycleScale;
  bool requireLockonToFire;
  vec3_t vMantleOfs;
  bool noAdsWhenMagEmpty;
  vec3_t vMantleRot;
  bool avoidDropCleanup;
  vec3_t vSlideOfs;
  int stackFire;
  vec3_t vSlideRot;
  float stackFireSpread;
  vec3_t vDuckedRot;
  float stackFireAccuracyDecay;
  vec3_t vProneOfs;
  char * stackSound;
  vec3_t vProneMove;
  float autoAimRange;
  vec3_t vProneRot;
  float aimAssistRange;
  vec3_t vStrafeMove;
  bool mountableWeapon;
  vec3_t vStrafeRot;
  float aimPadding;
  float fPosMoveRate;
  float enemyCrosshairRange;
  float fPosProneMoveRate;
  bool crosshairColorChange;
  float fStandMoveMinSpeed;
  float moveSpeedScale;
  float fDuckedMoveMinSpeed;
  float adsMoveSpeedScale;
  float fProneMoveMinSpeed;
  float sprintDurationScale;
  float fPosRotRate;
  weapOverlayReticle_t adsOverlayReticle;
  float fPosProneRotRate;
  weapOverlayInterface_t adsOverlayInterface;
  float fStandRotMinSpeed;
  float adsOverlayWidth;
  float fDuckedRotMinSpeed;
  float adsOverlayHeight;
  float fProneRotMinSpeed;
  float fAdsBobFactor;
  XModel * *worldModel;
  float fAdsViewBobMult;
  XModel *worldClipModel;
  bool holdBreathToSteady;
  XModel *rocketModel;
  float fHipSpreadStandMin;
  XModel *mountedModel;
  float fHipSpreadDuckedMin;
  XModel *additionalMeleeModel;
  float fHipSpreadProneMin;
  Material * fireTypeIcon;
  float hipSpreadStandMax;
  Material * hudIcon;
  float hipSpreadDuckedMax;
  weaponIconRatioType_t hudIconRatio;
  float hipSpreadProneMax;
  Material * indicatorIcon;
  float fHipSpreadDecayRate;
  weaponIconRatioType_t indicatorIconRatio;
  float fHipSpreadFireAdd;
  Material * ammoCounterIcon;
  float fHipSpreadTurnAdd;
  weaponIconRatioType_t ammoCounterIconRatio;
  float fHipSpreadMoveAdd;
  ammoCounterClipType_t ammoCounterClip;
  float fHipSpreadDuckedDecay;
  int iStartAmmo;
  float fHipSpreadProneDecay;
  int iMaxAmmo;
  float fHipReticleSidePos;
  int shotCount;
  float fAdsIdleAmount;
  const char *szSharedAmmoCapName;
  float fHipIdleAmount;
  int iSharedAmmoCapIndex;
  float adsIdleSpeed;
  int iSharedAmmoCap;
  float hipIdleSpeed;
  bool unlimitedAmmo;
  float fIdleCrouchFactor;
  bool ammoCountClipRelative;
  float fIdleProneFactor;
  int damage[6];
  float fGunMaxPitch;
  float damageRange[6];
  float fGunMaxYaw;
  int minPlayerDamage;
  float swayMaxAngle;
  float damageDuration;
  float swayLerpSpeed;
  float damageInterval;
  float swayPitchScale;
  int playerDamage;
  float swayYawScale;
  int iMeleeDamage;
  float swayHorizScale;
  int iDamageType;
  float swayVertScale;
  ScriptString explosionTag;
  float swayShellShockScale;
  int iFireDelay;
  float adsSwayMaxAngle;
  int iMeleeDelay;
  float adsSwayLerpSpeed;
  int meleeChargeDelay;
  float adsSwayPitchScale;
  int iDetonateDelay;
  float adsSwayYawScale;
  int iSpinUpTime;
  bool sharedAmmo;
  int iSpinDownTime;
  bool rifleBullet;
  float spinRate;
  bool armorPiercing;
  const char *spinLoopSound;
  bool airburstWeapon;
  const char *spinLoopSoundPlayer;
  bool boltAction;
  const char *startSpinSound;
  bool useAltTagFlash;
  const char *startSpinSoundPlayer;
  bool useAntiLagRewind;
  const char *stopSpinSound;
  bool isCarriedKillstreakWeapon;
  const char *stopSpinSoundPlayer;
  bool aimDownSight;
  bool applySpinPitch;
  bool rechamberWhileAds;
  int iFireTime;
  bool reloadWhileAds;
  int iLastFireTime;
  float adsViewErrorMin;
  int iRechamberTime;
  float adsViewErrorMax;
  int iRechamberBoltTime;
  bool cookOffHold;
  int iHoldFireTime;
  bool clipOnly;
  int iDetonateTime;
  bool canUseInVehicle;
  int iMeleeTime;
  bool noDropsOrRaises;
  int iBurstDelayTime;
  bool adsFire;
  int meleeChargeTime;
  bool cancelAutoHolsterWhenEmpty;
  int iReloadTimeRight;
  bool suppressAmmoReserveDisplay;
  int iReloadTimeLeft;
  bool laserSight;
  int reloadShowRocketTime;
  bool laserSightDuringNightvision;
  int iReloadEmptyTimeLeft;
  bool hideThirdPerson;
  int iReloadAddTime;
  bool bayonet;
  int iReloadEmptyAddTime;
  bool dualWield;
  int iReloadQuickAddTime;
  bool explodeOnGround;
  int iReloadQuickEmptyAddTime;
  bool throwBack;
  int iReloadStartTime;
  bool retrievable;
  int iReloadStartAddTime;
  bool dieOnRespawn;
  int iReloadEndTime;
  bool noThirdPersonDropsOrRaises;
  int iDropTime;
  bool continuousFire;
  int iRaiseTime;
  bool noPing;
  int iAltDropTime;
  bool forceBounce;
  int quickDropTime;
  bool useDroppedModelAsStowed;
  int quickRaiseTime;
  bool noQuickDropWhenEmpty;
  int iFirstRaiseTime;
  bool keepCrosshairWhenAds;
  int iEmptyRaiseTime;
  bool useOnlyAltWeaponHideTagsInAltMode;
  int iEmptyDropTime;
  bool altWeaponAdsOnly;
  int sprintInTime;
  bool altWeaponDisableSwitching;
  int sprintLoopTime;
  Material *killIcon;
  int sprintOutTime;
  weaponIconRatioType_t killIconRatio;
  int lowReadyInTime;
  bool flipKillIcon;
  int lowReadyLoopTime;
  bool noPartialReload;
  int lowReadyOutTime;
  bool segmentedReload;
  int contFireInTime;
  bool noADSAutoReload;
  int contFireLoopTime;
  int iReloadAmmoAdd;
  int contFireOutTime;
  int iReloadStartAdd;
  int dtpInTime;
  const char * grenadeWeapon;
  int dtpLoopTime;
  const char * dualWieldWeapon;
  int dtpOutTime;
  unsigned int dualWieldWeaponIndex;
  int crawlInTime;
  int iDropAmmoMin;
  int crawlForwardTime;
  int iDropAmmoMax;
  int crawlBackTime;
  int iDropClipAmmoMin;
  int crawlRightTime;
  int iDropClipAmmoMax;
  int crawlLeftTime;
  int iShotsBeforeRechamber;
  int crawlOutFireTime;
  bool blocksProne;
  int crawlOutTime;
  bool showIndicator;
  int slideInTime;
  int isRollingGrenade;  
  int deployTime;
  int useBallisticPrediction;
  int breakdownTime;
  int isValuable;
  int iFlourishTime;
  int isTacticalInsertion;
  int nightVisionWearTime;
  bool isReviveWeapon;
  int nightVisionWearTimeFadeOutEnd;
  bool bUseRigidBodyOnVehicle;
  int nightVisionWearTimePowerUp;
  int iExplosionRadius;
  int nightVisionRemoveTime;
  int iExplosionRadiusMin;
  int nightVisionRemoveTimePowerDown;
  int iIndicatorRadius;
  int nightVisionRemoveTimeFadeInStart;
  int iExplosionInnerDamage;
  int fuseTime;
  int iExplosionOuterDamage;
  int aiFuseTime;
  float damageConeAngle;
  int lockOnRadius;
  int iProjectileSpeed;
  int lockOnSpeed;
  int iProjectileSpeedUp;
  bool requireLockonToFire;
  int iProjectileSpeedRelativeUp;
  bool noAdsWhenMagEmpty;
  int iProjectileSpeedForward;
  bool avoidDropCleanup;
  float projectileTakeParentVel;
  unsigned int stackFire;
  int iProjectileActivateDist;
  float stackFireSpread;
  float projLifetime;
  float stackFireAccuracyDecay;
  float timeToAccelerate;
  const char *stackSound;
  float projectileCurvature;
  float autoAimRange;
  XModel *projectileModel;
  float aimAssistRange;
  weapProjExposion_t projExplosion;
  bool mountableWeapon;
  ProjectileExplosionEffect projExplosionEffect[5];
  float aimPadding;
  FxEffectDef * projDudEffect;
  float enemyCrosshairRange;
  char * projExplosionSound;
  bool crosshairColorChange;
  char * projDudSound;
  float moveSpeedScale;
  char * mortarShellSound;
  float adsMoveSpeedScale;
  char * tankShellSound;
  float sprintDurationScale;
  bool projImpactExplode;
  weapOverlayReticle_t adsOverlayReticle;
  bool sentientImpactExplode;
  weapOverlayInterface_t adsOverlayInterface;
  bool explodeWhenStationary;
  float overlayWidth;
  bool bulletImpactExplode;
  float overlayHeight;
  StickType stickiness;
  float fAdsBobFactor;
  RotType rotateType;
  float fAdsViewBobMult;
  bool plantable;
  bool bHoldBreathToSteady;
  bool hasDetonator;
  float fHipSpreadStandMin;
  bool timedDetonation;
  float fHipSpreadDuckedMin;
  bool noCrumpleMissile;
  float fHipSpreadProneMin;
  bool rotate;
  float hipSpreadStandMax;
  bool keepRolling;  
  float hipSpreadDuckedMax;
  bool holdButtonToThrow;
  float hipSpreadProneMax;
  bool offhandHoldIsCancelable;
  float fHipSpreadDecayRate;
  bool freezeMovementWhenFiring;
  float fHipSpreadFireAdd;
  float lowAmmoWarningThreshold;
  float fHipSpreadTurnAdd;
  bool bDisallowAtMatchStart;
  float fHipSpreadMoveAdd;
  float meleeChargeRange;
  float fHipSpreadDuckedDecay;
  bool useAsMelee;
  float fHipSpreadProneDecay;
  bool isCameraSensor;
  float fHipReticleSidePos;
  bool isAcousticSensor;
  float fAdsIdleAmount;
  bool isLaserSensor;
  float fHipIdleAmount;
  bool isHoldeUseGrenade;
  float adsIdleSpeed;
char unknown3[0xB];
  float hipIdleSpeed;
  FxEffectDef * projTrailEffect;
  float fIdleCrouchFactor;
  float vPorjectileColor[3];
  float fIdleProneFactor;
  guidedMissileType_t guidedMissileType;
  float fGunMaxPitch;
  float maxSteeringAccel;
  float fGunMaxYaw;
  int projIgnitionDelay;
  float swayMaxAngle;
  FxEffectDef *projIgnitionEffect;
  float swayLerpSpeed;
  [[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] projIgnitionSound;
  float swayPitchScale;
  float fAdsAimPitch;
  float swayYawScale;
  float fAdsCrosshairInFrac;
  float swayHorizScale;
  float fAdsCrosshairOutFrac;
  float swayVertScale;
  int adsGunKickReducedKickBullets;
  float swayShellShockScale;
  float adsGunKickReducedKickPercent;
  float adsSwayMaxAngle;
  float fAdsGunKickPitchMin;
  float adsSwayLerpSpeed;
  float fAdsGunKickPitchMax;
  float adsSwayPitchScale;
  float fAdsGunKickYawMin;
  float adsSwayYawScale;
  float fAdsGunKickYawMax;
  bool sharedAmmo;
  float fAdsGunKickAccel;
  bool bRifleBullet;
  float fAdsGunKickSpeedMax;
  bool armorPiercing;
  float fAdsGunKickSpeedDecay;
  bool bAirburstWeapon;
  float fAdsGunKickStaticDecay;
  bool bBoltAction;
  float fAdsViewKickPitchMin;
  bool bUseAltTagFlash;
  float fAdsViewKickPitchMax;
  bool bUseAntiLagRewind;
  float fAdsViewKickMinMagnitude;
  bool bIsCarriedKillstreakWeapon;
  float fAdsViewKickYawMin;
  bool aimDownSight;
  float fAdsViewKickYawMax;
  bool bRechamberWhileAds;
  float fAdsRecoilReductionRate;
  bool bReloadWhileAds;
  float fAdsRecoilReductionLimit;
  float adsViewErrorMin;
  float fAdsRecoilReturnRate;
  float adsViewErrorMax;
  float fAdsViewScatterMin;
  bool bCookOffHold;
  float fAdsViewScatterMax;
  bool bClipOnly;
  float fAdsSpread;
  bool bCanUseInVehicle;
  int hipGunKickReducedKickBullets;
  bool bNoDropsOrRaises;
  float hipGunKickReducedKickPercent;
  bool adsFireOnly;
  float fHipGunKickPitchMin;
  bool cancelAutoHolsterWhenEmpty;
  float fHipGunKickPitchMax;
  bool suppressAmmoReserveDisplay;
  float fHipGunKickYawMin;
  bool laserSight;
  float fHipGunKickYawMax;
  bool laserSightDuringNightvision;
  float fHipGunKickAccel;
  bool bHideThirdPerson;
  float fHipGunKickSpeedMax;
  bool bHasBayonet;
  float fHipGunKickSpeedDecay;
  bool bDualWield;
  float fHipGunKickStaticDecay;
  bool bExplodeOnGround;
  float fHipViewKickPitchMin;
  bool bThrowBack;
  float fHipViewKickPitchMax;
  bool bRetrievable;
  float fHipViewKickMinMagnitude;
  bool bDieOnRespawn;
  float fHipViewKickYawMin;
  bool bNoThirdPersonDropsOrRaises;
  float fHipViewKickYawMax;
  bool bContinuousFire;
  float fHipViewScatterMin;
  bool bNoPing;
  float fHipViewScatterMax;
  bool bForceBounce;
  float fAdsViewKickCenterDuckedScale;
  bool bUseDroppedModelAsStowed;
  float fAdsViewKickCenterProneScale;
  bool bNoQuickDropWhenEmpty;
  float fAntiQuickScopeTime;
  bool bKeepCrosshairWhenADS;
  float fAntiQuickScopeScale;
  bool bUseOnlyAltWeaoponHideTagsInAltMode;
  float fAntiQuickScopeSpreadMultiplier;
  bool bAltWeaponAdsOnly;
  float fAntiQuickScopeSpreadMax;
  bool bAltWeaponDisableSwitching;
  float fAntiQuickScopeSwayFactor;
  Material *killIcon;
  float fightDist;
  weaponIconRatioType_t killIconRatio;
  float maxDist;
  bool flipKillIcon;
  const char * aiVsAiAccuracyGraphName;
  bool bNoPartialReload;
  const char * aiVsPlayerAccuracyGraphName;
  bool bSegmentedReload;
  [[:Vectors#vec2_t|vec2_t]] * aiVsAiAccuracyGraphKnots;
  bool bNoADSAutoReload;
  [[:Vectors#vec2_t|vec2_t]] * aiVsPlayerAccuracyGraphKnots;
  int iReloadAmmoAdd;
  [[:Vectors#vec2_t|vec2_t]] * aiVsAiOriginalAccuracyGraphKnots;
  int iReloadStartAdd;
  [[:Vectors#vec2_t|vec2_t]] * aiVsPlayerOriginalAccuracyGraphKnots;
  const char *szSpawnedGrenadeWeaponName;
  int aiVsAiAccuracyGraphKnotCount;
  const char *szDualWieldWeaponName;
  int aiVsPlayerAccuracyGraphKnotCount;
  unsigned int dualWieldWeaponIndex;
  int aiVsAiOriginalAccuracyGraphKnotCount;
  int iDropAmmoMin;
  int aiVsPlayerOriginalAccuracyGraphKnotCount;
  int iDropAmmoMax;
  int iPositionReloadTransTime;
  int iDropClipAmmoMin;
  float leftArc;
  int iDropClipAmmoMax;
  float rightArc;
  int iShotsBeforeRechamber;
  float topArc;
  bool blocksProne;
  float bottomArc;
  bool bShowIndicator;
  float accuracy;
  int isRollingGrenade;
  float aiSpread;
  int useBallisticPrediction;
  float playerSpread;
  int isValuable;
  float minTurnSpeed[2];
  int isTacticalInsertion;
  float maxTurnSpeed[2];
  bool isReviveWeapon;
  float pitchConvergenceTime;
  bool bUseRigidBodyOnVehicle;
  float yawConvergenceTime;
  int iExplosionRadius;
  float suppressTime;
  int iExplosionRadiusMin;
  float maxRange;
  int iIndicatorRadius;
  float fAnimHorRotateInc;
  int iExplosionInnerDamage;
  float fPlayerPositionDist;
  int iExplosionOuterDamage;
  const char *szUseHintString;
  float damageConeAngle;
  const char *dropHintString;
  int iProjectileSpeed;
  int iUseHintStringIndex;
  int iProjectileSpeedUp;
  int dropHintStringIndex;
  int iProjectileSpeedRelativeUp;
  float horizViewJitter;
  int iProjectileSpeedForward;
  float vertViewJitter;
  float fProjectileTakeParentVelocity;
  float cameraShakeScale;
  int iProjectileActivateDist;
  int cameraShakeDuration;
  float projLifetime;
  int cameraShakeRadius;
  float timeToAccelerate;
  float explosionCameraShakeScale;
  float projectileCurvature;
  int explosionCameraShakeDuration;
  XModel *projectileModel;
  int explosionCameraSHakeRadius;
  weapProjExposion_t projExplosion;
  const char *szScript;
  ProjectileExplosionEffect projExplosionEffect[5];
  float destabilizationRateTime;
  FxEffectDef * projDudEffect;
  float destabilizationCurvatureMax;
  const char *projExplosionSound;
  int destabilizeDistance;
  const char *projDudSound;
  float * locationDamageMultipliers;     //Refer to bodyParts_t
  const char *mortarShellSound;
  const char *fireRumble;
  const char *tankShellSound;
  const char *meleeImpactRumble;
  bool bProjImpactExplode;
  const char *reloadRumble;
  bool bProjSentientImpactExplode;
  const char *explosionRumble;
  bool bProjExplodeWhenStationary;
  Tracer * tracer;
  bool bBulletImpactExplode;
  Tracer * enemyTracer;
  WeapStickinessType stickiness;
  float adsDofStart;
  WeapRotateType rotateType;
  float adsDofEnd;
  bool plantable;
  float hipDofStart;
  bool hasDetonator;
  float hipDofEnd;
  bool timedDetonation;
  float scanSpeed;
  bool noCrumpleMissile;
  float scanAccel;
  bool rotate;
  int scanPauseTime;
  bool keepRolling;  
  const char * flameTableFirstPerson;
  bool holdButtonToThrow;
  const char * flameTableThirdPerson;
  bool offhandHoldIsCancelable;
  FlameTable * firstPersonFlameTable;
  bool freezeMovementWhenFiring;
  FlameTable * thirdPersonFlameTable;
  float lowAmmoWarningThreshold;
  FxEffectDef * tagFx_preparationEffect;
  bool bDisallowAtMatchStart;
  FxEffectDef * tagFlash_preparationEffect;
  float meleeChargeRange;
  bool doGibbing;
  bool bUseAsMelee;
  float maxGibDistance;
  bool isCameraSensor;
  float altScopeADSTransInTime;
  bool isAcousticSensor;
  float altScopeADSTransOutTime;
  bool isLaserSensor;
  int introFireTime;
  bool isHoldUseGrenade;
  int introFireLength;
  float *parallelBounce;
  FxEffectDef * meleeSwipeEffect; //FxEffectDef
  float *perpendicularBounce;
  FxEffectDef * meleeImpactEffect; //FxEffectDef
  FxEffectDef * projTrailEffect;
  FxEffectDef * meleeImpactNoBloodEffect;
  vec3_t vProjectileColor;
  char * throwBackType;
  guidedMissileType_t guidedMissileType;
  WeaponCamo * camo;
  float maxSteeringAccel;
  float customFloat[3];
  int projIgnitionDelay;
  __declspec(align(4)) bool customBool0;
  FxEffectDef *projIgnitionEffect;
  __declspec(align(4)) bool customBool1;
  const char *projIgnitionSound;
  __declspec(align(4)) bool customBool2;
  float fAdsAimPitch;
};
  float fAdsCrosshairInFrac;
  float fAdsCrosshairOutFrac;
struct WeaponVarientDef
  int adsGunKickReducedKickBullets;
{
  float adsGunKickReducedKickPercent;
  char * name;
  float fAdsGunKickPitchMin;
        int unknown1;
  float fAdsGunKickPitchMax;
  WeaponDef * info;
  float fAdsGunKickYawMin;
  const char * szDisplayName;
  float fAdsGunKickYawMax;
  const char * altWeapon;
  float fAdsGunKickAccel;
  const char * attachmentUnique;
  float fAdsGunKickSpeedMax;
  WeaponAttachment **attachments;     //Count = 0x3F
  float fAdsGunKickSpeedDecay;
  WeaponUniqueAttachment **unqAttachments;     //Count = 0x5F
  float fAdsGunKickStaticDecay;
char * * unknownStringArray1; //Count = 0x58
  float fAdsViewKickPitchMin;
  ScriptString (*hideTags[0x20]);
  float fAdsViewKickPitchMax;
        XModel **unknownModelArray1;     //Count = 8
  float fAdsViewKickMinMagnitude;
        XModel **unknownModelArray2;     //Count = 8
  float fAdsViewKickYawMin;
char * * unknownStringArray2; //Count = 8
  float fAdsViewKickYawMax;
char * * unknownStringArray3; //Count = 8
  float fAdsRecoilReductionRate;
  float attachViewModelOffset[8][3];
  float fAdsRecoilReductionLimit;
  float attachWorldModelOffset[8][3];
  float fAdsRecoilReturnRate;
  float attachViewModelRotation[8][3];
  float fAdsViewScatterMin;
  float attachWorldModelRotation[8][3];
  float fAdsViewScatterMax;
  float stowedModelOffsets[3];
  float fAdsSpread;
  float stowedModelRotation[3];
  int hipGunKickReducedKickBullets;
        char unknown2[0x8];
  float hipGunKickReducedKickPercent;
  bool ignoreAttachments;
  float fHipGunKickPitchMin;
  int iClipSize;
  float fHipGunKickPitchMax;
  int iReloadTime;
  float fHipGunKickYawMin;
  int iReloadEmptyTime;
  float fHipGunKickYawMax;
  int iReloadQuickTime;
  float fHipGunKickAccel;
  int iReloadQuickEmptyTime;
  float fHipGunKickSpeedMax;
  int iAdsTransInTime;
  float fHipGunKickSpeedDecay;
  int iAdsTransOutTime;
  float fHipGunKickStaticDecay;
  int iAltRaiseTime;
  float fHipViewKickPitchMin;
  const char *szAmmoDisplayName;
  float fHipViewKickPitchMax;
  const char *szAmmoName;
  float fHipViewKickMinMagnitude;
  int iAmmoIndex;
  float fHipViewKickYawMin;
  const char *szClipName;
  float fHipViewKickYawMax;
  int iClipIndex;
  float fHipViewScatterMin;
  float aimAssistRangeAds;
  float fHipViewScatterMax;
  float adsSwayHorizScale;
  float fAdsViewKickCenterDuckedScale;
  float adsSwayVertScale;
  float fAdsViewKickCenterProneScale;
  float fAdsViewKickCenterSpeed;
  float fAntiQuickScopeTime;
  float fHipViewKickCenterSpeed;
  float fAntiQuickScopeScale;
  float fAdsZoomFov[3];
  float fAntiQuickScopeSpreadMultiplier;
  float adsZoomInFrac;
  float fAntiQuickScopeSpreadMax;
  float adsZoomOutFrac;
  float fAntiQuickScopeSwayFactor;
  float adsOverlayAlphaScale;
  float fightDist;
        int unknown3;
  float maxDist;
        int unknown4;
  const char * aiVsAiAccuracyGraphName;
  bool silenced;
  const char * aiVsPlayerAccuracyGraphName;
  bool dualMag;
  vec2_t * aiVsAiAccuracyGraphKnots;
  bool infrared;
  vec2_t * aiVsPlayerAccuracyGraphKnots;
  bool tvguided;
  vec2_t * aiVsAiOriginalAccuracyGraphKnots;
  int perks[2];
  vec2_t * aiVsPlayerOriginalAccuracyGraphKnots;
  bool antiQuickScope;
  int aiVsAiAccuracyGraphKnotCount;
  Material * AdsOverlayShader;
  int aiVsPlayerAccuracyGraphKnotCount;
  Material * AdsOverlayShaderLowRes;
  int aiVsAiOriginalAccuracyGraphKnotCount;
  Material * dpadIcon;
  int aiVsPlayerOriginalAccuracyGraphKnotCount;
  weaponIconRatioType_t dpadIconRatio;
  int iPositionReloadTransTime;
  bool noAmmoOnDpadIcon;
  float leftArc;
  bool mmsWeapon;
  float rightArc;
  bool mssInScope;
  float topArc;
  float mmsFOV;
  float bottomArc;
  float mmsAspect;
  float accuracy;
  float mmsMaxDist;
  float aiSpread;
  float ikLeftHandIdlePos[3];
  float playerSpread;
  float ikLeftHandOffset[3];
  float minTurnSpeed[2];
  float ikLeftHandRotation[3];
  float maxTurnSpeed[2];
  bool usingLeftHandProneIK;
  float pitchConvergenceTime;
  float ikLeftHandProneOffset[3];
  float yawConvergenceTime;
  float ikLeftHandProneRotation[3];
  float suppressTime;
  float ikLeftHandUiViewerOffset[3];
  float maxRange;
  float ikLeftHandUiViewerRotation[3];
  float fAnimHorRotateInc;
};
  float fPlayerPositionDist;
  const char *szUseHintString;
  const char *dropHintString;
  int iUseHintStringIndex;
  int dropHintStringIndex;
  float horizViewJitter;
  float vertViewJitter;
  float cameraShakeScale;
  int cameraShakeDuration;
  int cameraShakeRadius;
  float explosionCameraShakeScale;
  int explosionCameraShakeDuration;
  int explosionCameraSHakeRadius;
  const char *szScript;
  float destabilizationRateTime;
  float destabilizationCurvatureMax;
  int destabilizeDistance;
  float * locationDamageMultipliers;     //Refer to hitLocation_t
  const char *fireRumble;
  const char *meleeImpactRumble;
  const char *reloadRumble;
  const char *explosionRumble;
  TracerDef *tracerType;
  TracerDef *enemyTracerType;
  float adsDofStart;
  float adsDofEnd;
  float hipDofStart;
  float hipDofEnd;
  float scanSpeed;
  float scanAccel;
  int scanPauseTime;
  const char * flameTableFirstPerson;
  const char * flameTableThirdPerson;
  flameTable * firstPersonFlameTable;
  flameTable * thirdPersonFlameTable;
  FxEffectDef * tagFx_preparationEffect;
  FxEffectDef * tagFlash_preparationEffect;
  bool doGibbing;
  float maxGibDistance;
  float altScopeADSTransInTime;
  float altScopeADSTransOutTime;
  int iIntroFireTime;
  int iIntroFireLength;
  FxEffectDef * meleeSwipeEffect; //FxEffectDef
  FxEffectDef * meleeImpactEffect; //FxEffectDef
  FxEffectDef * meleeImpactNoBloodEffect;
  const char *throwBackType;
  WeaponCamo * camo;
  float customFloat[3];
  __declspec(align(4)) bool customBool0;
  __declspec(align(4)) bool customBool1;
  __declspec(align(4)) bool customBool2;
};
 
struct WeaponVariantDef
{
  char * name;
  int iVariantCount;
  WeaponDef *weapDef;
  const char *szDisplayName;
  const char *szAltWeaponName;
  const char *szAttachmentUnique;
  WeaponAttachment **attachments; //Count = 0x3F
  WeaponAttachmentUnique **attachmentUniques; //Count = 0x5F
  const char **szXAnims; //Count = 0x58
  ScriptString (*hideTags)[0x20];
  XModel **attachViewModel; //Count = 8
  XModel **attachWorldModel; //Count = 8
  const char **attachViewModelTag; //Count = 8
  const char **attachWorldModelTag; //Count = 8
  vec3_t attachViewModelOffset[8];
  vec3_t attachWorldModelOffset[8];
  vec3_t attachViewModelRotation[8];
  vec3_t attachWorldModelRotation[8];
  vec3_t stowedModelOffsets;
  vec3_t stowedModelRotations;
  unsigned int altWeaponIndex;
  int iAttachments;
  bool bIgnoreAttachments;
  int iClipSize;
  int iReloadTime;
  int iReloadEmptyTime;
  int iReloadQuickTime;
  int iReloadQuickEmptyTime;
  int iAdsTransInTime;
  int iAdsTransOutTime;
  int iAltRaiseTime;
  const char *szAmmoDisplayName;
  const char *szAmmoName;
  int iAmmoIndex;
  const char *szClipName;
  int iClipIndex;
  float fAimAssistRangeAds;
  float fAdsSwayHorizScale;
  float fAdsSwayVertScale;
  float fAdsViewKickCenterSpeed;
  float fHipViewKickCenterSpeed;
  float fAdsZoomFov[3];
  float fAdsZoomInFrac;
  float fAdsZoomOutFrac;
  float fOverlayAlphaScale;
  float fOOPosAnimLength[2];
  bool bSilenced;
  bool bDualMag;
  bool bInfraRed;
  bool bTVGuided;
  unsigned int perks[2];
  bool bAntiQuickScope;
  Material *overlayMaterial;
  Material *overlayMaterialLowRes;
  Material *dpadIcon;
  weaponIconRatioType_t dpadIconRatio;
  bool noAmmoOnDpadIcon;
  bool mmsWeapon;
  bool mmsInScope;
  float mmsFOV;
  float mmsAspect;
  float mmsMaxDist;
  vec3_t ikLeftHandIdlePos;
  vec3_t ikLeftHandOffset;
  vec3_t ikLeftHandRotation;
  bool bUsingLeftHandProneIK;
  vec3_t ikLeftHandProneOffset;
  vec3_t ikLeftHandProneRotation;
  vec3_t ikLeftHandUiViewerOffset;
  vec3_t ikLeftHandUiViewerRotation;
};
</syntaxhighlight>
== Source Format ==
== 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 (Speculation is that zombie weapons go in "raw/weapons/zm/"). 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".
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 (Speculation is that zombie weapons go in "raw/weapons/zm/"). 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".

Latest revision as of 07:54, 25 December 2014

The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Black Ops 2 continues on the Modern Warfare 2 idea of the "WeaponVariantDef". On Xbox 360 the WeaponVariantDef is 0x2CC bytes, while the WeaponDef is 0x990.

enum AnimationType : int
{
  none = 0,
  default = 1,
  other = 2,
  sniper = 3,
  m203 = 4,
  hold = 5,
  briefcase = 6,
  reviver = 7,
  radio = 8,
  dualwield = 9,
  remotecontrol = 10,
  crossbow = 11,
  minigun = 12,
  beltfed = 13, 
  g11 = 14,
  rearclip = 15,
  handleclip = 16,
  rearclipsniper = 17,
  ballisticknife = 18,
  singleknife = 19,
  nopump = 20,
  hatchet = 21,
  grimreaper = 22,
  zipline = 23,
  riotshield = 24,
  tablet = 25,
  turned = 26,
  screecher = 27,
  PLAYER_ANIM_TYPE_MAX
};

enum meansOfDeath_t//WeaponDef->iDamageType
{
  MOD_UNKNOWN = 0x0,
  MOD_PISTOL_BULLET = 0x1,
  MOD_RIFLE_BULLET = 0x2,
  MOD_GRENADE = 0x3,
  MOD_GRENADE_SPLASH = 0x4,
  MOD_PROJECTILE = 0x5,
  MOD_PROJECTILE_SPLASH = 0x6,
  MOD_MELEE = 0x7,
  MOD_BAYONET = 0x8,
  MOD_HEAD_SHOT = 0x9,
  MOD_CRUSH = 0xA,
  MOD_TELEFRAG = 0xB,
  MOD_FALLING = 0xC,
  MOD_SUICIDE = 0xD,
  MOD_TRIGGER_HURT = 0xE,
  MOD_EXPLOSIVE = 0xF,
  MOD_IMPACT = 0x10,
  MOD_BURNED = 0x11,
  MOD_HIT_BY_OBJECT = 0x12,
  MOD_DROWN = 0x13,
  MOD_GAS = 0x14,
  MOD_NUM = 0x15
};

enum weapAnimFiles_t//WeaponDef->szXAnims
{
  WEAP_ANIM_ROOT = 0x0,
  WEAP_ANIM_IDLE = 0x1,
  WEAP_ANIM_EMPTY_IDLE = 0x2,
  WEAP_ANIM_FIRE_INTRO = 0x3,
  WEAP_ANIM_FIRE = 0x4,
  WEAP_ANIM_HOLD_FIRE = 0x5,
  WEAP_ANIM_LASTSHOT = 0x6,
  WEAP_ANIM_FINALSHOT = 0x7,
  WEAP_ANIM_RECHAMBER = 0x8,
  WEAP_ANIM_MELEE = 0x9,
  WEAP_ANIM_MELEE1 = 0xA,
  WEAP_ANIM_MELEE2 = 0xB,
  WEAP_ANIM_MELEE3 = 0xC,
  WEAP_ANIM_MELEE_EMPTY = 0xD,
  WEAP_ANIM_MELEE_CHARGE = 0xE,
  WEAP_ANIM_MELEE_CHARGE_EMPTY = 0xF,
  WEAP_ANIM_RELOAD = 0x10,
  WEAP_ANIM_RELOAD_RIGHT = 0x11,
  WEAP_ANIM_RELOAD_EMPTY = 0x12,
  WEAP_ANIM_RELOAD_START = 0x13,
  WEAP_ANIM_RELOAD_END = 0x14,
  WEAP_ANIM_RELOAD_QUICK = 0x15,
  WEAP_ANIM_RELOAD_QUICK_EMPTY = 0x16,
  WEAP_ANIM_RAISE = 0x17,
  WEAP_ANIM_FIRST_RAISE = 0x18,
  WEAP_ANIM_DROP = 0x19,
  WEAP_ANIM_ALT_RAISE = 0x1A,
  WEAP_ANIM_ALT_DROP = 0x1B,
  WEAP_ANIM_QUICK_RAISE = 0x1C,
  WEAP_ANIM_QUICK_DROP = 0x1D,
  WEAP_ANIM_EMPTY_RAISE = 0x1E,
  WEAP_ANIM_EMPTY_DROP = 0x1F,
  WEAP_ANIM_SPRINT_IN = 0x20,
  WEAP_ANIM_SPRINT_LOOP = 0x21,
  WEAP_ANIM_SPRINT_OUT = 0x22,
  WEAP_ANIM_SPRINT_EMPTY_IN = 0x23,
  WEAP_ANIM_SPRINT_EMPTY_LOOP = 0x24,
  WEAP_ANIM_SPRINT_EMPTY_OUT = 0x25,
  WEAP_ANIM_LOWREADY_IN = 0x26,
  WEAP_ANIM_LOWREADY_LOOP = 0x27,
  WEAP_ANIM_LOWREADY_OUT = 0x28,
  WEAP_ANIM_CONT_FIRE_IN = 0x29,
  WEAP_ANIM_CONT_FIRE_LOOP = 0x2A,
  WEAP_ANIM_CONT_FIRE_OUT = 0x2B,
  WEAP_ANIM_CRAWL_IN = 0x2C,
  WEAP_ANIM_CRAWL_FORWARD = 0x2D,
  WEAP_ANIM_CRAWL_BACK = 0x2E,
  WEAP_ANIM_CRAWL_RIGHT = 0x2F,
  WEAP_ANIM_CRAWL_LEFT = 0x30,
  WEAP_ANIM_CRAWL_OUT = 0x31,
  WEAP_ANIM_CRAWL_EMPTY_IN = 0x32,
  WEAP_ANIM_CRAWL_EMPTY_FORWARD = 0x33,
  WEAP_ANIM_CRAWL_EMPTY_BACK = 0x34,
  WEAP_ANIM_CRAWL_EMPTY_RIGHT = 0x35,
  WEAP_ANIM_CRAWL_EMPTY_LEFT = 0x36,
  WEAP_ANIM_CRAWL_EMPTY_OUT = 0x37,
  WEAP_ANIM_DEPLOY = 0x38,
  WEAP_ANIM_BREAKDOWN = 0x39,
  WEAP_ANIM_DETONATE = 0x3A,
  WEAP_ANIM_NIGHTVISION_WEAR = 0x3B,
  WEAP_ANIM_NIGHTVISION_REMOVE = 0x3C,
  WEAP_ANIM_ADS_FIRE = 0x3D,
  WEAP_ANIM_ADS_LASTSHOT = 0x3E,
  WEAP_ANIM_ADS_FIRE_INTRO = 0x3F,
  WEAP_ANIM_ADS_RECHAMBER = 0x40,
  WEAP_ANIM_DTP_IN = 0x41,
  WEAP_ANIM_DTP_LOOP = 0x42,
  WEAP_ANIM_DTP_OUT = 0x43,
  WEAP_ANIM_DTP_EMPTY_IN = 0x44,
  WEAP_ANIM_DTP_EMPTY_LOOP = 0x45,
  WEAP_ANIM_DTP_EMPTY_OUT = 0x46,
  WEAP_ANIM_SLIDE_IN = 0x47,
  WEAP_ANIM_MANTLE = 0x48,
  WEAP_ANIM_CAMERA_SPRINT_LOOP = 0x49,
  WEAP_ANIM_CAMERA_DTP_IN = 0x4A,
  WEAP_ANIM_CAMERA_DTP_LOOP = 0x4B,
  WEAP_ANIM_CAMERA_DTP_OUT = 0x4C,
  WEAP_ANIM_CAMERA_MANTLE = 0x4D,
  WEAP_ANIM_FIRE_LEFT = 0x4E,
  WEAP_ANIM_LASTSHOT_LEFT = 0x4F,
  WEAP_ANIM_FINALSHOT_LEFT = 0x50,
  WEAP_ANIM_IDLE_LEFT = 0x51,
  WEAP_ANIM_EMPTY_IDLE_LEFT = 0x52,
  WEAP_ANIM_RELOAD_EMPTY_LEFT = 0x53,
  WEAP_ANIM_RELOAD_LEFT = 0x54,
  WEAP_ANIM_ADS_UP = 0x55,
  WEAP_ANIM_ADS_DOWN = 0x56,
  WEAP_ANIM_ADS_UP_OTHER_SCOPE = 0x57,
  NUM_WEAP_ANIMS = 0x58
};

enum weapType_t : int
{
  WEAPTYPE_BULLET = 0,
  WEAPTYPE_GRENADE = 1,
  WEAPTYPE_PROJECTILE = 2,
  WEAPTYPE_BINOCULARS = 3,
  WEAPTYPE_GAS = 4,
  WEAPTYPE_BOMB = 5,
  WEAPTYPE_MINE = 6,
  WEAPTYPE_MELEE = 7,
  WEAPTYPE_RIOTSHIELD = 8,
  WEAPTYPE_MAX
};

enum weapClass_t : int
{
  WEAPCLASS_RIFLE = 0,
  WEAPCLASS_MG = 1,
  WEAPCLASS_SMG = 2,
  WEAPCLASS_SPREAD = 3,
  WEAPCLASS_PISTOL = 4,
  WEAPCLASS_GRENADE = 5,
  WEAPCLASS_ROCKETLAUNCHER = 6,
  WEAPCLASS_TURRET = 7,
  WEAPCLASS_NON_PLAYER = 8,
  WEAPCLASS_GAS = 9,
  WEAPCLASS_ITEM  = 10,
  WEAPCLASS_MELEE = 11,
  WEAPCLASS_KILLSTREAK_ALT_STORED_WEAPON = 12,
  WEAPCLASS_PISTOL_SPREAD = 13,
  WEAPCLASS_MAX
};

enum weaponIconRatioType_t : int
{
  WEAPON_ICON_RATIO_1TO1 = 0,
  WEAPON_ICON_RATIO_2TO1 = 1,
  WEAPON_ICON_RATIO_4TO1 = 2,
  WEAPON_ICON_RATIO_MAX
};

enum PenetrateType : int
{
  PENETRATE_TYPE_NONE = 0,
  PENETRATE_TYPE_SMALL = 1,
  PENETRATE_TYPE_MEDIUM = 2,
  PENETRATE_TYPE_LARGE = 3,
  PENETRATE_TYPE_MAX 
};

enum weapStance_t : int
{
  WEAPSTANCE_STAND = 0x0,
  WEAPSTANCE_DUCK = 0x1,
  WEAPSTANCE_PRONE = 0x2,
  WEAPSTANCE_MAX
};

enum ammoCounterClipType_t : int
{
  AMMO_COUNTER_CLIP_NONE = 0,
  AMMO_COUNTER_CLIP_MAGAZINE = 1,
  AMMO_COUNTER_CLIP_SHORTMAGAZINE = 2,
  AMMO_COUNTER_CLIP_SHOTGUN = 3,
  AMMO_COUNTER_CLIP_ROCKET = 4,
  AMMO_COUNTER_CLIP_BELTFED = 5,
  AMMO_COUNTER_CLIP_ALTWEAPON = 6,
  AMMO_COUNTER_CLIP_MAX
};

enum weapOverlayReticle_t
{
  WEAPOVERLAYRETICLE_NONE = 0x0,
  WEAPOVERLAYRETICLE_CROSSHAIR = 0x1,
  WEAPOVERLAYRETICLE_MAX
};

enum weapOverlayInterface_t
{
  WEAPOVERLAYINTERFACE_NONE = 0x0,
  WEAPOVERLAYINTERFACE_JAVELIN = 0x1,
  WEAPOVERLAYINTERFACE_TURRETSCOPE = 0x2,
  WEAPOVERLAYINTERFACE_MAX
};

enum weapInventoryType_t : int
{
  WEAPINVENTORY_PRIMARY = 0,
  WEAPINVENTORY_OFFHAND = 1,
  WEAPINVENTORY_ITEM = 2,
  WEAPINVENTORY_ALTMODE = 3,
  WEAPINVENTORY_MELEE = 4,
  WEAPINVENTORY_DW_LEFT_HAND = 5,
  WEAPINVENTORY_MAX
};

enum ImpactType : int
{
  IMPACT_TYPE_NONE = 0,
  IMPACT_TYPE_BULLET_SMALL = 1,
  IMPACT_TYPE_BULLET_LARGE = 2,
  IMPACT_TYPE_BULLET_AP = 3,
  IMPACT_TYPE_BULLET_XTREME = 4,
  IMPACT_TYPE_SHOTGUN = 5,
  IMPACT_TYPE_GRENADE_BOUNCE = 6,
  IMPACT_TYPE_GRENADE_EXPLODE = 7,
  IMPACT_TYPE_RIFLE_GRENADE = 8,
  IMPACT_TYPE_ROCKET_EXPLODE = 9,
  IMPACT_TYPE_ROCKET_EXPLODE_XTREME = 10,
  IMPACT_TYPE_PROJECTILE_DUD = 11,
  IMPACT_TYPE_MORTAR_SHELL = 12,
  IMPACT_TYPE_TANK_SHELL = 13,
  IMPACT_TYPE_BOLT = 14,
  IMPACT_TYPE_BLADE = 15,
  IMPACT_TYPE_MAX
};

enum weapFireType_t : int
{
  WEAPON_FIRETYPE_FULLAUTO = 0,
  WEAPON_FIRETYPE_SINGLESHOT = 1,
  WEAPON_FIRETYPE_2ROUNDBURST = 2,
  WEAPON_FIRETYPE_3ROUNDBURST = 3,
  WEAPON_FIRETYPE_4ROUNDBURST = 4,
  WEAPON_FIRETYPE_5ROUNDBURST = 5,
  WEAPON_FIRETYPE_STACKEDFIRE = 6,
  WEAPON_FIRETYPE_MINIGUN = 7,
  WEAPON_FIRETYPE_CHARGESHOT = 8,
  WEAPON_FIRETYPE_JETGUN = 9,
  WEAPON_FIRETYPE_MAX
};

enum weapClipType_t : int
{
  WEAPON_CLIPTYPE_BOTTOM = 0x0,
  WEAPON_CLIPTYPE_TOP = 0x1,
  WEAPON_CLIPTYPE_LEFT = 0x2,
  WEAPON_CLIPTYPE_DP28 = 0x3,
  WEAPON_CLIPTYPE_PTRS = 0x4,
  WEAPON_CLIPTYPE_LMG = 0x5,
  WEAPON_CLIPTYPECOUNT = 0x6,
};

enum barrelType_t : int
{
  BARREL_TYPE_SINGLE = 0x0,
  BARREL_TYPE_DUAL = 0x1,
  BARREL_TYPE_DUAL_ALTERNATE = 0x2,
  BARREL_TYPE_QUAD = 0x3,
  BARREL_TYPE_QUAD_ALTERNATE = 0x4,
  BARREL_TYPE_QUAD_DOUBLE_ALTERNATE = 0x5,
  BARREL_TYPE_COUNT = 0x6
};

enum surfaceNames_t
{
  bark,
  brick,
  carpet,
  cloth,
  concrete,
  dirt,
  flesh,
  foliage,
  glass,
  grass,
  gravel,
  ice,
  metal,
  mud,
  paper,
  plaster,
  rock,
  sand,
  snow,
  water,
  wood,
  asphalt,
  ceramic,
  plastic,
  rubber,
  cushion,
  fruit,
  paintedmetal,
  player,
  tallgrass,
  riotshield,
  opaqueglass
};

enum WeapStickinessType
{
  WEAPSTICKINESS_NONE = 0x0,
  WEAPSTICKINESS_ALL = 0x1,
  WEAPSTICKINESS_ALL_NO_SENTIENTS = 0x2,
  WEAPSTICKINESS_GROUND = 0x3,
  WEAPSTICKINESS_GROUND_WITH_YAW = 0x4,
  WEAPSTICKINESS_FLESH = 0x5,
  WEAPSTICKINESS_COUNT = 0x6
};

enum WeapRotateType
{
  WEAPROTATE_GRENADE_ROTATE = 0x0,
  WEAPROTATE_BLADE_ROTATE = 0x1,
  WEAPROTATE_CYLINDER_ROTATE = 0x2,
  WEAPROTATE_COUNT = 0x3
};

enum guidedMissileType_t
{
  MISSILE_GUIDANCE_NONE = 0x0,
  MISSILE_GUIDANCE_SIDEWINDER = 0x1,
  MISSILE_GUIDANCE_HELLFIRE = 0x2,
  MISSILE_GUIDANCE_JAVELIN = 0x3,
  MISSILE_GUIDANCE_BALLISTIC = 0x4,
  MISSILE_GUIDANCE_WIRE = 0x5,
  MISSILE_GUIDANCE_TV = 0x6,
  MISSILE_GUIDANCE_DRONE = 0x7,
  MISSILE_GUIDANCE_HEAT = 0x8,
  MISSILE_GUIDANCE_MAX
};

enum hitLocation_t
{
  HITLOC_NONE = 0x0,
  HITLOC_HELMET = 0x1,
  HITLOC_HEAD = 0x2,
  HITLOC_NECK = 0x3,
  HITLOC_TORSO_UPR = 0x4,
  HITLOC_TORSO_MID = 0x5,
  HITLOC_TORSO_LWR = 0x6,
  HITLOC_R_ARM_UPR = 0x7,
  HITLOC_L_ARM_UPR = 0x8,
  HITLOC_R_ARM_LWR = 0x9,
  HITLOC_L_ARM_LWR = 0xA,
  HITLOC_R_HAND = 0xB,
  HITLOC_L_HAND = 0xC,
  HITLOC_R_LEG_UPR = 0xD,
  HITLOC_L_LEG_UPR = 0xE,
  HITLOC_R_LEG_LWR = 0xF,
  HITLOC_L_LEG_LWR = 0x10,
  HITLOC_R_FOOT = 0x11,
  HITLOC_L_FOOT = 0x12,
  HITLOC_GUN = 0x13,
  HITLOC_RIOT = 0x14,
  HITLOC_NUM = 0x15,
};

struct ProjectileExplosionEffect
{
  FxEffectDef * projExplosionEffect;
  bool projExplosionEffectForceNormalUp;
};

struct FlameTable
{
  float streamChunkGravityStart;
  float streamChunkGravityEnd;
  float streamChunkMaxSize;
  float streamChunkStartSize;
  float streamChunkEndSize;
  float streamChunkStartSizeRand;
  float streamChunkEndSizeRand;
  float streamChunkDistScalar;
  float streamChunkDistSwayScale;
  float streamChunkDistSwayVelMax;
  float streamChunkSpeed;
  float streamChunkDecel;
  float streamChunkVelocityAddScale;
  float streamChunkDuration;
  float streamChunkDurationScaleMaxVel;
  float streamChunkDurationVelScalar;
  float streamChunkSizeSpeedScale;
  float streamChunkSizeAgeScale;
  float streamChunkSpawnFireIntervalSt;
  float streamChunkSpawnFireIntervalEn;
  float streamChunkSpawnFireMinLifeFra;
  float streamChunkSpawnFireMaxLifeFra;
  float streamChunkFireMinLifeFrac;
  float streamChunkFireMinLifeFracStar;
  float streamChunkFireMinLifeFracEnd;
  float streamChunkDripsMinLifeFrac;
  float streamChunkDripsMinLifeFracSta;
  float streamChunkDripsMinLifeFracEnd;
  float streamChunkRotationRange;
  float streamSizeRandSinWave;
  float streamSizeRandCosWave;
  float streamDripsChunkInterval;
  float streamDripsChunkMinFrac;
  float streamDripsChunkRandFrac;
  float streamSmokeChunkInterval;
  float streamSmokeChunkMinFrac;
  float streamSmokeChunkRandFrac;
  float streamChunkCullDistSizeFrac;
  float streamChunkCullMinLife;
  float streamChunkCullMaxLife;
  float streamFuelSizeStart;
  float streamFuelSizeEnd;
  float streamFuelLength;
  float streamFuelNumSegments;
  float streamFuelAnimLoopTime;
  float streamFlameSizeStart;
  float streamFlameSizeEnd;
  float streamFlameLength;
  float streamFlameNumSegments;
  float streamFlameAnimLoopTime;
  float streamPrimaryLightRadius;
  float streamPrimaryLightRadiusFlutte;
  float streamPrimaryLightR;
  float streamPrimaryLightG;
  float streamPrimaryLightB;
  float streamPrimaryLightFlutterR;
  float streamPrimaryLightFlutterG;
  float streamPrimaryLightFlutterB;
  float fireLife;
  float fireLifeRand;
  float fireSpeedScale;
  float fireSpeedScaleRand;
  float fireVelocityAddZ;
  float fireVelocityAddZRand;
  float fireVelocityAddSideways;
  float fireGravity;
  float fireGravityEnd;
  float fireMaxRotVel;
  float fireFriction;
  float fireEndSizeAdd;
  float fireStartSizeScale;
  float fireEndSizeScale;
  float fireBrightness;
  float dripsLife;
  float dripsLifeRand;
  float dripsSpeedScale;
  float dripsSpeedScaleRand;
  float dripsVelocityAddZ;
  float dripsVelocityAddZRand;
  float dripsVelocityAddSideways;
  float dripsGravity;
  float dripsGravityEnd;
  float dripsMaxRotVel;
  float dripsFriction;
  float dripsEndSizeAdd;
  float dripsStartSizeScale;
  float dripsEndSizeScale;
  float dripsBrightness;
  float smokeLife;
  float smokeLifeRand;
  float smokeSpeedScale;
  float smokeVelocityAddZ;
  float smokeGravity;
  float smokeGravityEnd;
  float smokeMaxRotation;
  float smokeMaxRotVel;
  float smokeFriction;
  float smokeEndSizeAdd;
  float smokeStartSizeAdd;
  float smokeOriginSizeOfsZScale;
  float smokeOriginOfsZ;
  float smokeFadein;
  float smokeFadeout;
  float smokeMaxAlpha;
  float smokeBrightness;
  float smokeOriginOffset;
  float collisionSpeedScale;
  float collisionVolumeScale;
  const char * name;
  Material * fire;
  Material * smoke;
  Material * heat;
  Material * drips;
  Material * streamFuel;
  Material * streamFuel2;
  Material * streamFlame;
  Material * streamFlame2;
  const char * flameOffLoopSound;
  const char * flameIgniteSound;
  const char * flameOnLoopSound;
  const char * flameCooldownSound;
};

enum OffhandClass
{
  OFFHAND_CLASS_NONE = 0x0,
  OFFHAND_CLASS_FRAG_GRENADE = 0x1,
  OFFHAND_CLASS_SMOKE_GRENADE = 0x2,
  OFFHAND_CLASS_FLASH_GRENADE = 0x3,
  OFFHAND_CLASS_GEAR = 0x4,
  OFFHAND_CLASS_SUPPLYDROP_MARKER = 0x5,
  OFFHAND_CLASS_COUNT = 0x6,
};

enum OffhandSlot
{
  OFFHAND_SLOT_NONE = 0x0,
  OFFHAND_SLOT_LETHAL_GRENADE = 0x1,
  OFFHAND_SLOT_TACTICAL_GRENADE = 0x2,
  OFFHAND_SLOT_EQUIPMENT = 0x3,
  OFFHAND_SLOT_SPECIFIC_USE = 0x4,
  OFFHAND_SLOT_COUNT = 0x5,
};

struct WeaponDef
{
  const char *szOverlayName;
  XModel **gunXModel;
  XModel *handXModel;
  const char *szModeName;
  ScriptString (*noteTrackSoundMapKeys)[0x14];
  ScriptString (*notetrackSoundMapValues)[0x14];
  AnimationType playerAnimType;
  weapType_t weaponType;
  weapClass_t weaponClass;
  PenetrateType penetrateType;
  ImpactType impactType;
  weapInventoryType_t inventoryType;
  weapFireType_t fireType;							
  weapClipType_t clipType;
  barrelType_t barrelType;
  int itemIndex;
  const char * parentWeaponName;
  int iJamFireTime;
  int overheatWeapon;
  float overheatRate;
  float cooldownRate;
  float overheatEndVal;
  bool coolWhileFiring;
  bool fuelTankWeapon;
  int iTankLifeTime;
  OffhandClass offhandClass;
  OffhandSlot offhandSlot;
  weapStance_t stance;
  FxEffectDef * viewFlashEffect;
  FxEffectDef * worldFlashEffect;
  FxEffectDef * barrelCooldownEffect;
  int barrelCooldownMinCount;
  vec3_t vViewFlashOffset;
  vec3_t vWorldFlashOffset;
  char * pickupSound;
  char * pickupSoundPlayer;
  char * ammoPickupSound;
  char * ammoPickupSoundPlayer;
  char * projectileSound;
  char * pullbackSound;
  char * pullbackSoundPlayer;
  char * fireSound;
  char * fireSoundPlayer;
  char * loopFireSound;
  char * loopFireSoundPlayer;
  char * loopFireEndSound;
  char * loopFireEndSoundPlayer;
  char * startFireSound;
  char * stopFireSound;
  char * killcamStartFireSound;
  char * startFireSoundPlayer;
  char * stopFireSoundPlayer;
  char * killcamStartFireSoundPlayer;
  char * lastShotSound;
  char * lastShotSoundPlayer;
  char * emptyFireSound;
  char * emptyFireSoundPlayer;
  char * crackSound;
  char * whizbySound;
  char * meleeSwipeSound;
  char * meleeSwipeSoundPlayer;
  char * meleeHitSound;
  char * meleeMissSound;
  char * rechamberSound;
  char * rechamberSoundPlayer;
  char * reloadSound;
  char * reloadSoundPlayer;
  char * reloadEmptySound;
  char * reloadEmptySoundPlayer;
  char * reloadStartSound;
  char * reloadStartSoundPlayer;
  char * reloadEndSound;
  char * reloadEndSoundPlayer;
  char * rotateLoopSound;
  char * rotateLoopSoundPlayer;
  char * rotateStopSound;
  char * rotateStopSoundPlayer;
  char * deploySound;
  char * deploySoundPlayer;
  char * finishDeploySound;
  char * finishDeploySoundPlayer;
  char * breakdownSound;
  char * breakdownSoundPlayer;
  char * finishBreakdownSound;
  char * finishBreakdownSoundPlayer;
  char * detonateSound;
  char * detonateSoundPlayer;
  char * nightVisionWearSound;
  char * nightVisionWearSoundPlayer;
  char * nightVisionRemoveSound;
  char * nightVisionRemoveSoundPlayer;
  char * altSwitchSound;
  char * altSwitchSoundPlayer;
  char * raiseSound;
  char * raiseSoundPlayer;
  char * firstRaiseSound;
  char * firstRaiseSoundPlayer;
  char * adsRaiseSoundPlayer;
  char * adsLowerSoundPlayer;
  char * putawaySound;
  char * putawaySoundPlayer;
  char * overheatSound;
  char * overheatSoundPlayer;
  char * adsZoomSound;
  char * shellCasing;
  char * shellCasingPlayer;
  char * * bounceSounds;    //Refer to surfaceNames_t
  const char * standMountedWeapdef;
  const char * crouchMountedWeapdef;
  const char * proneMountedWeapdef;
  unsigned int standMountedWeapIndex;
  unsigned int crouchMountedWeapIndex;
  unsigned int proneMountedWeapIndex;
  FxEffectDef * viewShellEjectEffect;
  FxEffectDef * worldShellEjectEffect;
  FxEffectDef * viewLastShotEjectEffect;
  FxEffectDef * worldLastShotEjectEffect;
  vec3_t vViewShellEjectOffset;
  vec3_t vWorldShellEjectOffset;
  vec3_t vViewShellEjectRotation;
  vec3_t vWorldShellEjectRotation;
  Material *reticleCenter;
  Material *reticleSide;
  int iReticleCenterSize;
  int iReticleSideSize;
  int iReticleMinOfs;
  activeReticleType_t activeReticleType;
  vec3_t vStandMove;
  vec3_t vStandRot;
  vec3_t vDuckedOfs;
  vec3_t vDuckedMove;
  vec3_t vDuckedSprintOfs;
  vec3_t vDuckedSprintRot;
  vec2_t vDuckedSprintBob;
  float fDuckedSprintCycleScale;
  vec3_t vSprintOfs;
  vec3_t vSprintRot;
  vec2_t vSprintBob;
  float fSprintCycleScale;
  vec3_t vLowReadyOfs;
  vec3_t vLowReadyRot;
  vec3_t vRideOfs;
  vec3_t vRideRot;
  vec3_t vDtpOfs;
  vec3_t vDtpRot;
  vec2_t vDtpBob;
  float fDtpCycleScale;
  vec3_t vMantleOfs;
  vec3_t vMantleRot;
  vec3_t vSlideOfs;
  vec3_t vSlideRot;
  vec3_t vDuckedRot;
  vec3_t vProneOfs;
  vec3_t vProneMove;
  vec3_t vProneRot;
  vec3_t vStrafeMove;
  vec3_t vStrafeRot;
  float fPosMoveRate;
  float fPosProneMoveRate;
  float fStandMoveMinSpeed;
  float fDuckedMoveMinSpeed;
  float fProneMoveMinSpeed;
  float fPosRotRate;
  float fPosProneRotRate;
  float fStandRotMinSpeed;
  float fDuckedRotMinSpeed;
  float fProneRotMinSpeed;
  XModel * *worldModel;
  XModel *worldClipModel;
  XModel *rocketModel;
  XModel *mountedModel;
  XModel *additionalMeleeModel;
  Material * fireTypeIcon;
  Material * hudIcon;
  weaponIconRatioType_t hudIconRatio;
  Material * indicatorIcon;
  weaponIconRatioType_t indicatorIconRatio;
  Material * ammoCounterIcon;
  weaponIconRatioType_t ammoCounterIconRatio;
  ammoCounterClipType_t ammoCounterClip;
  int iStartAmmo;
  int iMaxAmmo;
  int shotCount;
  const char *szSharedAmmoCapName;
  int iSharedAmmoCapIndex;
  int iSharedAmmoCap;
  bool unlimitedAmmo;
  bool ammoCountClipRelative;
  int damage[6];
  float damageRange[6];
  int minPlayerDamage;
  float damageDuration;
  float damageInterval;
  int playerDamage;
  int iMeleeDamage;
  int iDamageType;
  ScriptString explosionTag;
  int iFireDelay;
  int iMeleeDelay;
  int meleeChargeDelay;
  int iDetonateDelay;
  int iSpinUpTime;
  int iSpinDownTime;
  float spinRate;
  const char *spinLoopSound;
  const char *spinLoopSoundPlayer;
  const char *startSpinSound;
  const char *startSpinSoundPlayer;
  const char *stopSpinSound;
  const char *stopSpinSoundPlayer;
  bool applySpinPitch;
  int iFireTime;
  int iLastFireTime;
  int iRechamberTime;
  int iRechamberBoltTime;
  int iHoldFireTime;
  int iDetonateTime;
  int iMeleeTime;
  int iBurstDelayTime;
  int meleeChargeTime;
  int iReloadTimeRight;
  int iReloadTimeLeft;
  int reloadShowRocketTime;
  int iReloadEmptyTimeLeft;
  int iReloadAddTime;
  int iReloadEmptyAddTime;
  int iReloadQuickAddTime;
  int iReloadQuickEmptyAddTime;
  int iReloadStartTime;
  int iReloadStartAddTime;
  int iReloadEndTime;
  int iDropTime;
  int iRaiseTime;
  int iAltDropTime;
  int quickDropTime;
  int quickRaiseTime;
  int iFirstRaiseTime;
  int iEmptyRaiseTime;
  int iEmptyDropTime;
  int sprintInTime;
  int sprintLoopTime;
  int sprintOutTime;
  int lowReadyInTime;
  int lowReadyLoopTime;
  int lowReadyOutTime;
  int contFireInTime;
  int contFireLoopTime;
  int contFireOutTime;
  int dtpInTime;
  int dtpLoopTime;
  int dtpOutTime;
  int crawlInTime;
  int crawlForwardTime;
  int crawlBackTime;
  int crawlRightTime;
  int crawlLeftTime;
  int crawlOutFireTime;
  int crawlOutTime;
  int slideInTime;
  int deployTime;
  int breakdownTime;
  int iFlourishTime;
  int nightVisionWearTime;
  int nightVisionWearTimeFadeOutEnd;
  int nightVisionWearTimePowerUp;
  int nightVisionRemoveTime;
  int nightVisionRemoveTimePowerDown;
  int nightVisionRemoveTimeFadeInStart;
  int fuseTime;
  int aiFuseTime;
  int lockOnRadius;
  int lockOnSpeed;
  bool requireLockonToFire;
  bool noAdsWhenMagEmpty;
  bool avoidDropCleanup;
  unsigned int stackFire;
  float stackFireSpread;
  float stackFireAccuracyDecay;
  const char *stackSound;
  float autoAimRange;
  float aimAssistRange;
  bool mountableWeapon;
  float aimPadding;
  float enemyCrosshairRange;
  bool crosshairColorChange;
  float moveSpeedScale;
  float adsMoveSpeedScale;
  float sprintDurationScale;
  weapOverlayReticle_t adsOverlayReticle;
  weapOverlayInterface_t adsOverlayInterface;
  float overlayWidth;
  float overlayHeight;
  float fAdsBobFactor;
  float fAdsViewBobMult;
  bool bHoldBreathToSteady;
  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 swayMaxAngle;
  float swayLerpSpeed;
  float swayPitchScale;
  float swayYawScale;
  float swayHorizScale;
  float swayVertScale;
  float swayShellShockScale;
  float adsSwayMaxAngle;
  float adsSwayLerpSpeed;
  float adsSwayPitchScale;
  float adsSwayYawScale;
  bool sharedAmmo;
  bool bRifleBullet;
  bool armorPiercing;
  bool bAirburstWeapon;
  bool bBoltAction;
  bool bUseAltTagFlash;
  bool bUseAntiLagRewind;
  bool bIsCarriedKillstreakWeapon;
  bool aimDownSight;
  bool bRechamberWhileAds;
  bool bReloadWhileAds;
  float adsViewErrorMin;
  float adsViewErrorMax;
  bool bCookOffHold;
  bool bClipOnly;
  bool bCanUseInVehicle;
  bool bNoDropsOrRaises;
  bool adsFireOnly;
  bool cancelAutoHolsterWhenEmpty;
  bool suppressAmmoReserveDisplay;
  bool laserSight;
  bool laserSightDuringNightvision;
  bool bHideThirdPerson;
  bool bHasBayonet;
  bool bDualWield;
  bool bExplodeOnGround;
  bool bThrowBack;
  bool bRetrievable;
  bool bDieOnRespawn;
  bool bNoThirdPersonDropsOrRaises;
  bool bContinuousFire;
  bool bNoPing;
  bool bForceBounce;
  bool bUseDroppedModelAsStowed;
  bool bNoQuickDropWhenEmpty;
  bool bKeepCrosshairWhenADS;
  bool bUseOnlyAltWeaoponHideTagsInAltMode;
  bool bAltWeaponAdsOnly;
  bool bAltWeaponDisableSwitching;
  Material *killIcon;
  weaponIconRatioType_t killIconRatio;
  bool flipKillIcon;
  bool bNoPartialReload;
  bool bSegmentedReload;
  bool bNoADSAutoReload;
  int iReloadAmmoAdd;
  int iReloadStartAdd;
  const char *szSpawnedGrenadeWeaponName;
  const char *szDualWieldWeaponName;
  unsigned int dualWieldWeaponIndex;
  int iDropAmmoMin;
  int iDropAmmoMax;
  int iDropClipAmmoMin;
  int iDropClipAmmoMax;
  int iShotsBeforeRechamber;
  bool blocksProne;
  bool bShowIndicator;
  int isRollingGrenade;
  int useBallisticPrediction;
  int isValuable;
  int isTacticalInsertion;
  bool isReviveWeapon;
  bool bUseRigidBodyOnVehicle;
  int iExplosionRadius;
  int iExplosionRadiusMin;
  int iIndicatorRadius;
  int iExplosionInnerDamage;
  int iExplosionOuterDamage;
  float damageConeAngle;
  int iProjectileSpeed;
  int iProjectileSpeedUp;
  int iProjectileSpeedRelativeUp;
  int iProjectileSpeedForward;
  float fProjectileTakeParentVelocity;
  int iProjectileActivateDist;
  float projLifetime;
  float timeToAccelerate;
  float projectileCurvature;
  XModel *projectileModel;
  weapProjExposion_t projExplosion;
  ProjectileExplosionEffect projExplosionEffect[5];
  FxEffectDef * projDudEffect;
  const char *projExplosionSound;
  const char *projDudSound;
  const char *mortarShellSound;
  const char *tankShellSound;
  bool bProjImpactExplode;
  bool bProjSentientImpactExplode;
  bool bProjExplodeWhenStationary;
  bool bBulletImpactExplode;
  WeapStickinessType stickiness;
  WeapRotateType rotateType;
  bool plantable;
  bool hasDetonator;
  bool timedDetonation;
  bool noCrumpleMissile;
  bool rotate;
  bool keepRolling; 
  bool holdButtonToThrow;
  bool offhandHoldIsCancelable;
  bool freezeMovementWhenFiring;
  float lowAmmoWarningThreshold;
  bool bDisallowAtMatchStart;
  float meleeChargeRange;
  bool bUseAsMelee;
  bool isCameraSensor;
  bool isAcousticSensor;
  bool isLaserSensor;
  bool isHoldUseGrenade;
  float *parallelBounce;
  float *perpendicularBounce;
  FxEffectDef * projTrailEffect;
  vec3_t vProjectileColor;
  guidedMissileType_t guidedMissileType;
  float maxSteeringAccel;
  int projIgnitionDelay;
  FxEffectDef *projIgnitionEffect;
  const char *projIgnitionSound;
  float fAdsAimPitch;
  float fAdsCrosshairInFrac;
  float fAdsCrosshairOutFrac;
  int adsGunKickReducedKickBullets;
  float adsGunKickReducedKickPercent;
  float fAdsGunKickPitchMin;
  float fAdsGunKickPitchMax;
  float fAdsGunKickYawMin;
  float fAdsGunKickYawMax;
  float fAdsGunKickAccel;
  float fAdsGunKickSpeedMax;
  float fAdsGunKickSpeedDecay;
  float fAdsGunKickStaticDecay;
  float fAdsViewKickPitchMin;
  float fAdsViewKickPitchMax;
  float fAdsViewKickMinMagnitude;
  float fAdsViewKickYawMin;
  float fAdsViewKickYawMax;
  float fAdsRecoilReductionRate;
  float fAdsRecoilReductionLimit;
  float fAdsRecoilReturnRate;
  float fAdsViewScatterMin;
  float fAdsViewScatterMax;
  float fAdsSpread;
  int hipGunKickReducedKickBullets;
  float hipGunKickReducedKickPercent;
  float fHipGunKickPitchMin;
  float fHipGunKickPitchMax;
  float fHipGunKickYawMin;
  float fHipGunKickYawMax;
  float fHipGunKickAccel;
  float fHipGunKickSpeedMax;
  float fHipGunKickSpeedDecay;
  float fHipGunKickStaticDecay;
  float fHipViewKickPitchMin;
  float fHipViewKickPitchMax;
  float fHipViewKickMinMagnitude;
  float fHipViewKickYawMin;
  float fHipViewKickYawMax;
  float fHipViewScatterMin;
  float fHipViewScatterMax;
  float fAdsViewKickCenterDuckedScale;
  float fAdsViewKickCenterProneScale;
  float fAntiQuickScopeTime;
  float fAntiQuickScopeScale;
  float fAntiQuickScopeSpreadMultiplier;
  float fAntiQuickScopeSpreadMax;
  float fAntiQuickScopeSwayFactor;
  float fightDist;
  float maxDist;
  const char * aiVsAiAccuracyGraphName;
  const char * aiVsPlayerAccuracyGraphName;
  vec2_t * aiVsAiAccuracyGraphKnots;
  vec2_t * aiVsPlayerAccuracyGraphKnots;
  vec2_t * aiVsAiOriginalAccuracyGraphKnots;
  vec2_t * aiVsPlayerOriginalAccuracyGraphKnots;
  int aiVsAiAccuracyGraphKnotCount;
  int aiVsPlayerAccuracyGraphKnotCount;
  int aiVsAiOriginalAccuracyGraphKnotCount;
  int aiVsPlayerOriginalAccuracyGraphKnotCount;
  int iPositionReloadTransTime;
  float leftArc;
  float rightArc;
  float topArc;
  float bottomArc;
  float accuracy;
  float aiSpread;
  float playerSpread;
  float minTurnSpeed[2];
  float maxTurnSpeed[2];
  float pitchConvergenceTime;
  float yawConvergenceTime;
  float suppressTime;
  float maxRange;
  float fAnimHorRotateInc;
  float fPlayerPositionDist;
  const char *szUseHintString;
  const char *dropHintString;
  int iUseHintStringIndex;
  int dropHintStringIndex;
  float horizViewJitter;
  float vertViewJitter;
  float cameraShakeScale;
  int cameraShakeDuration;
  int cameraShakeRadius;
  float explosionCameraShakeScale;
  int explosionCameraShakeDuration;
  int explosionCameraSHakeRadius;
  const char *szScript;
  float destabilizationRateTime;
  float destabilizationCurvatureMax;
  int destabilizeDistance;
  float * locationDamageMultipliers;      //Refer to hitLocation_t
  const char *fireRumble;
  const char *meleeImpactRumble;
  const char *reloadRumble;
  const char *explosionRumble;
  TracerDef *tracerType;
  TracerDef *enemyTracerType;
  float adsDofStart;
  float adsDofEnd;
  float hipDofStart;
  float hipDofEnd;
  float scanSpeed;
  float scanAccel;
  int scanPauseTime;
  const char * flameTableFirstPerson;
  const char * flameTableThirdPerson;
  flameTable * firstPersonFlameTable;
  flameTable * thirdPersonFlameTable;
  FxEffectDef * tagFx_preparationEffect;
  FxEffectDef * tagFlash_preparationEffect;
  bool doGibbing;
  float maxGibDistance;
  float altScopeADSTransInTime;
  float altScopeADSTransOutTime;
  int iIntroFireTime;
  int iIntroFireLength;
  FxEffectDef * meleeSwipeEffect;						//FxEffectDef
  FxEffectDef * meleeImpactEffect;						//FxEffectDef
  FxEffectDef * meleeImpactNoBloodEffect;
  const char *throwBackType;
  WeaponCamo * camo;
  float customFloat[3];
  __declspec(align(4)) bool customBool0;
  __declspec(align(4)) bool customBool1;
  __declspec(align(4)) bool customBool2;
};

struct WeaponVariantDef
{
  char * name;
  int iVariantCount;
  WeaponDef *weapDef;
  const char *szDisplayName;
  const char *szAltWeaponName;
  const char *szAttachmentUnique;
  WeaponAttachment **attachments;				//Count = 0x3F
  WeaponAttachmentUnique **attachmentUniques;			//Count = 0x5F
  const char **szXAnims;					//Count = 0x58
  ScriptString (*hideTags)[0x20];
  XModel **attachViewModel;					//Count = 8
  XModel **attachWorldModel;					//Count = 8
  const char **attachViewModelTag;				//Count = 8
  const char **attachWorldModelTag;				//Count = 8
  vec3_t attachViewModelOffset[8];
  vec3_t attachWorldModelOffset[8];
  vec3_t attachViewModelRotation[8];
  vec3_t attachWorldModelRotation[8];
  vec3_t stowedModelOffsets;
  vec3_t stowedModelRotations;
  unsigned int altWeaponIndex;
  int iAttachments;
  bool bIgnoreAttachments;
  int iClipSize;
  int iReloadTime;
  int iReloadEmptyTime;
  int iReloadQuickTime;
  int iReloadQuickEmptyTime;
  int iAdsTransInTime;
  int iAdsTransOutTime;
  int iAltRaiseTime;
  const char *szAmmoDisplayName;
  const char *szAmmoName;
  int iAmmoIndex;
  const char *szClipName;
  int iClipIndex;
  float fAimAssistRangeAds;
  float fAdsSwayHorizScale;
  float fAdsSwayVertScale;
  float fAdsViewKickCenterSpeed;
  float fHipViewKickCenterSpeed;
  float fAdsZoomFov[3];
  float fAdsZoomInFrac;
  float fAdsZoomOutFrac;
  float fOverlayAlphaScale;
  float fOOPosAnimLength[2];
  bool bSilenced;
  bool bDualMag;
  bool bInfraRed;
  bool bTVGuided;
  unsigned int perks[2];
  bool bAntiQuickScope;
  Material *overlayMaterial;
  Material *overlayMaterialLowRes;
  Material *dpadIcon;
  weaponIconRatioType_t dpadIconRatio;
  bool noAmmoOnDpadIcon;
  bool mmsWeapon;
  bool mmsInScope;
  float mmsFOV;
  float mmsAspect;
  float mmsMaxDist;
  vec3_t ikLeftHandIdlePos;
  vec3_t ikLeftHandOffset;
  vec3_t ikLeftHandRotation;
  bool bUsingLeftHandProneIK;
  vec3_t ikLeftHandProneOffset;
  vec3_t ikLeftHandProneRotation;
  vec3_t ikLeftHandUiViewerOffset;
  vec3_t ikLeftHandUiViewerRotation;
};

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 (Speculation is that zombie weapons go in "raw/weapons/zm/"). 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".