Weapon Asset (BO2)
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"> 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 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 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 ClipTypes : int {
bottom = 0, top = 1, left = 2, dp28 = 3, ptrs = 4, lmg = 5, CLIPTYPE_MAX
};
enum BarrelType : int {
SINGLE = 0, DUAL = 1, DUAL_ALT = 2, QUAD = 3, QUAD_ALT = 4, QUAD_DOUBLE_ALT = 5, BARRELTYPE_MAX
};
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 StickType : int {
DONT = 0, ALL = 1, ALL_EXCEPT_PLAYER = 2, GROUND = 3, GROUND_MAINTAIN_YAW = 4, FLESH = 5, STICK_MAX
};
enum RotType : int {
BOTH_AXIS = 0, ONE_AXIS = 1, CYLINDER = 2, ROTATION_MAX
};
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 bodyParts_t {
none, helmet, head, neck, torso_upper, torso_mid, torso_lower, right_arm_upper, left_arm_upper, right_arm_lower, left_arm_lower, right_hand, left_hand, right_leg_upper, left_leg_upper, right_leg_lower, left_leg_lower, right_foot, left_foot, gun, riotshield
};
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;
};
struct WeaponDef {
const char * AIOverlayDescription;
XModel * * gunModel;
XModel * handModel;
const char * modeName;
ScriptString (*noteTrackSoundMapKeys[0x14]);
ScriptString (*notetrackSoundMapValues[0x14]);
AnimationType playerAnimType;
weapType_t weaponType;
weapClass_t weaponClass;
PenetrateType penetrateType;
ImpactType impactType;
weapInventoryType_t inventoryType;
weapFireType_t fireType;
ClipTypes clipType;
BarrelType barrelType;
int unknown1;
const char * parentWeaponName;
int jamFireTime;
int overheatWeapon;
float overheatRate;
float cooldownRate;
float overheatEndVal;
bool coolWhileFiring;
bool fuelTankWeapon;
int tankLifeTime;
OffhandClass offhandClass;
int offhandSlot;
weapStance_t stance;
FxEffectDef * viewFlashEffect;
FxEffectDef * worldFlashEffect;
FxEffectDef * barrelCooldownEffect;
int barrelCooldownMinCount;
float viewFlashOffset[3];
float worldFlashOffset[3];
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;
Material *reticleCenter;
Material *reticleSide;
int iReticleCenterSize;
int iReticleSideSize;
int iReticleMinOfs;
activeReticleType_t activeReticleType;
float vStandMove[3];
float vStandRot[3];
float vDuckedOfs[3];
float vDuckedMove[3];
float vDuckedSprintOfs[3];
float vDuckedSprintRot[3];
float vDuckedSprintBob[2];
float duckedSprintScale;
float vSprintOfs[3];
float vSprintRot[3];
float vSprintBob[2];
float sprintScale;
float vLowReadyOfs[3];
float vLowReadyRot[3];
float vRideOfs[3];
float vRideRot[3];
float vDTPOfs[3];
float vDTPRot[3];
float vDTPBob[2];
float DTPScale;
float vMantleOfs[3];
float vMantleRot[3];
float vSlideOfs[3];
float vSlideRot[3];
float vDuckedRot[3];
float vProneOfs[3];
float vProneMove[3];
float vProneRot[3];
float vStrafeMove[3];
float vStrafeRot[3];
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;
char * spinLoopSound;
char * spinLoopSoundPlayer;
char * startSpinSound;
char * startSpinSoundPlayer;
char * stopSpinSound;
char * stopSpinSoundPlayer;
bool applySpinPitch;
int fireTime;
int iFireTime;
int iLastFireTime;
int iRechamberTime;
int iRechamberBoltTime;
int iHoldFireTime;
int iDetonateTime;
int iMeleeTime;
int iBurstFireDelay;
int meleeChargeTime;
char unknown2[0x8];
int reloadShowRocketTime;
int iReloadEmtpyTime;
int iReloadAddTime;
int iReloadEmptyAddTime;
int iReloadQuickAddTime;
int iReloadQuickEmptyAddTime;
int iReloadStartTime;
int iReloadStartAddTime;
int iReloadEndTime;
int iDropTime;
int iRaiseTime;
int iAltDropTime;
int iQuickDropTime;
int iQuickRaiseTime;
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 fireTime2; //For some reason, BO2 has 2 instances of these. I have never seen them not equal.
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;
int stackFire;
float stackFireSpread;
float stackFireAccuracyDecay;
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 adsOverlayWidth;
float adsOverlayHeight;
float fAdsBobFactor;
float fAdsViewBobMult;
bool holdBreathToSteady;
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 rifleBullet;
bool armorPiercing;
bool airburstWeapon;
bool boltAction;
bool useAltTagFlash;
bool useAntiLagRewind;
bool isCarriedKillstreakWeapon;
bool aimDownSight;
bool rechamberWhileAds;
bool reloadWhileAds;
float adsViewErrorMin;
float adsViewErrorMax;
bool cookOffHold;
bool clipOnly;
bool canUseInVehicle;
bool noDropsOrRaises;
bool adsFire;
bool cancelAutoHolsterWhenEmpty;
bool suppressAmmoReserveDisplay;
bool laserSight;
bool laserSightDuringNightvision;
bool hideThirdPerson;
bool bayonet;
bool dualWield;
bool explodeOnGround;
bool throwBack;
bool retrievable;
bool dieOnRespawn;
bool noThirdPersonDropsOrRaises;
bool continuousFire;
bool noPing;
bool forceBounce;
bool useDroppedModelAsStowed;
bool noQuickDropWhenEmpty;
bool keepCrosshairWhenAds;
bool useOnlyAltWeaponHideTagsInAltMode;
bool altWeaponAdsOnly;
bool altWeaponDisableSwitching;
Material *killIcon;
weaponIconRatioType_t killIconRatio;
bool flipKillIcon;
bool noPartialReload;
bool segmentedReload;
bool noADSAutoReload;
int iReloadAmmoAdd;
int iReloadStartAdd;
const char * grenadeWeapon;
const char * dualWieldWeapon;
unsigned int dualWieldWeaponIndex;
int iDropAmmoMin;
int iDropAmmoMax;
int iDropClipAmmoMin;
int iDropClipAmmoMax;
int iShotsBeforeRechamber;
bool blocksProne;
bool showIndicator;
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 projectileTakeParentVel;
int iProjectileActivateDist;
float projLifetime;
float timeToAccelerate;
float projectileCurvature;
XModel *projectileModel;
weapProjExposion_t projExplosion;
ProjectileExplosionEffect projExplosionEffect[5];
FxEffectDef * projDudEffect;
char * projExplosionSound;
char * projDudSound;
char * mortarShellSound;
char * tankShellSound;
bool projImpactExplode;
bool sentientImpactExplode;
bool explodeWhenStationary;
bool bulletImpactExplode;
StickType stickiness;
RotType 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 useAsMelee;
bool isCameraSensor;
bool isAcousticSensor;
bool isLaserSensor;
bool isHoldeUseGrenade;
char unknown3[0xB];
FxEffectDef * projTrailEffect;
float vPorjectileColor[3];
guidedMissileType_t guidedMissileType;
float maxSteeringAccel;
int projIgnitionDelay;
FxEffectDef *projIgnitionEffect;
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 bodyParts_t
const char *fireRumble;
const char *meleeImpactRumble;
const char *reloadRumble;
const char *explosionRumble;
Tracer * tracer;
Tracer * enemyTracer;
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 introFireTime;
int introFireLength;
FxEffectDef * meleeSwipeEffect; //FxEffectDef
FxEffectDef * meleeImpactEffect; //FxEffectDef
FxEffectDef * meleeImpactNoBloodEffect;
char * throwBackType;
WeaponCamo * camo;
float customFloat[3];
__declspec(align(4)) bool customBool0;
__declspec(align(4)) bool customBool1;
__declspec(align(4)) bool customBool2;
};
struct WeaponVarientDef {
char * name;
int unknown1;
WeaponDef * info;
const char * szDisplayName;
const char * altWeapon;
const char * attachmentUnique;
WeaponAttachment **attachments; //Count = 0x3F
WeaponUniqueAttachment **unqAttachments; //Count = 0x5F
char * * unknownStringArray1; //Count = 0x58
ScriptString (*hideTags[0x20]);
XModel **unknownModelArray1; //Count = 8
XModel **unknownModelArray2; //Count = 8
char * * unknownStringArray2; //Count = 8
char * * unknownStringArray3; //Count = 8
float attachViewModelOffset[8][3];
float attachWorldModelOffset[8][3];
float attachViewModelRotation[8][3];
float attachWorldModelRotation[8][3];
float stowedModelOffsets[3];
float stowedModelRotation[3];
char unknown2[0x8];
bool ignoreAttachments;
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 aimAssistRangeAds;
float adsSwayHorizScale;
float adsSwayVertScale;
float fAdsViewKickCenterSpeed;
float fHipViewKickCenterSpeed;
float fAdsZoomFov[3];
float adsZoomInFrac;
float adsZoomOutFrac;
float adsOverlayAlphaScale;
int unknown3;
int unknown4;
bool silenced;
bool dualMag;
bool infrared;
bool tvguided;
int perks[2];
bool antiQuickScope;
Material * AdsOverlayShader;
Material * AdsOverlayShaderLowRes;
Material * dpadIcon;
weaponIconRatioType_t dpadIconRatio;
bool noAmmoOnDpadIcon;
bool mmsWeapon;
bool mssInScope;
float mmsFOV;
float mmsAspect;
float mmsMaxDist;
float ikLeftHandIdlePos[3];
float ikLeftHandOffset[3];
float ikLeftHandRotation[3];
bool usingLeftHandProneIK;
float ikLeftHandProneOffset[3];
float ikLeftHandProneRotation[3];
float ikLeftHandUiViewerOffset[3];
float ikLeftHandUiViewerRotation[3];
};
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".