Weapon Asset (Ghosts): Difference between revisions
Created page with "__NOTOC__ Category:Assets Category:Ghosts The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Ghosts continues..." |
Aerosoul94 (talk | contribs) mNo edit summary |
||
| Line 3: | Line 3: | ||
[[Category:Ghosts]] | [[Category:Ghosts]] | ||
The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Ghosts continues on the Modern Warfare 2 idea of the "WeaponVariantDef". On Xbox 360 the WeaponVariantDef is 0xBC bytes, while the WeaponDef is 0x848. | The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Ghosts continues on the Modern Warfare 2 idea of the "WeaponVariantDef". On Xbox 360 the WeaponVariantDef is 0xBC bytes, while the WeaponDef is 0x848. | ||
< | <source lang="cpp"> | ||
enum playerAnimType_t : int | enum playerAnimType_t : int | ||
{ | { | ||
| Line 481: | Line 481: | ||
}; | }; | ||
struct | struct unkWeaponVariantDefStruct1 | ||
{ | { | ||
int unknown; | int unknown; | ||
| Line 488: | Line 488: | ||
}; | }; | ||
struct | struct unkWeaponVariantDefStruct2 | ||
{ | { | ||
int unknown1; | int unknown1; | ||
| Line 495: | Line 495: | ||
}; | }; | ||
struct | struct unkWeaponVariantDefStruct3 | ||
{ | { | ||
int unknown1; | int unknown1; | ||
| Line 502: | Line 502: | ||
}; | }; | ||
struct | struct unkWeaponVariantDefStruct4 | ||
{ | { | ||
int unknown; | int unknown; | ||
| Line 508: | Line 508: | ||
}; | }; | ||
struct | struct WeaponVariantDef | ||
{ | { | ||
char * name; | char * name; | ||
| Line 519: | Line 519: | ||
XAnim ** szXAnims; //Count = 0x7C | XAnim ** szXAnims; //Count = 0x7C | ||
int unkCount1; | int unkCount1; | ||
unkWeaponVariantDefStruct1 * unkData1; //Count = unkCount1 | |||
int unkCount2; | int unkCount2; | ||
unkWeaponVariantDefStruct2 * unkData2; //Count = unkCount2 | |||
int unkCount3; | int unkCount3; | ||
unkWeaponVariantDefStruct3 * unkData3; //Count = unkCount3 | |||
int unkCount4; | int unkCount4; | ||
char * unkData4; //Size = unkCount4 << 4 | char * unkData4; //Size = unkCount4 << 4 | ||
int unkCount5; | int unkCount5; | ||
unkWeaponVariantDefStruct4 * unkData5; //Count = unkCount5 | |||
float adsZoomFov; | float adsZoomFov; | ||
int adsTransInTime; | int adsTransInTime; | ||
| Line 556: | Line 556: | ||
char * unknownString; | char * unknownString; | ||
}; | }; | ||
</ | </source> | ||
== 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. 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. 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". | ||
Revision as of 10:58, 12 January 2014
The purpose of the weapon asset should be fairly obvious, but the structure not so much. The weapon asset on Ghosts continues on the Modern Warfare 2 idea of the "WeaponVariantDef". On Xbox 360 the WeaponVariantDef is 0xBC bytes, while the WeaponDef is 0x848.
enum playerAnimType_t : int
{
none = 0x0,
other = 0x1,
pistol = 0x2,
smg = 0x3,
autorifle = 0x4,
mg = 0x5,
sniper = 0x6,
rocketlauncher = 0x7,
explosive = 0x8,
grenade = 0x9,
turret = 0xA,
c4 = 0xB,
m203 = 0xC,
hold = 0xD,
briefcase = 0xE,
riotshield = 0xF,
laptop = 0x10,
throwingknife = 0x11,
mortar = 0x12,
juggernautmaniac = 0x13,
claymore = 0x14,
minigun = 0x15,
drill = 0x16,
dogwhistle = 0x17,
smg_bullpup = 0x18,
autorifle_bullpup = 0x19,
sniper_bullpup = 0x1A,
killstreaktrigger = 0x1B,
trophysystem = 0x1C,
PLAYER_ANIM_TYPE_MAX
};
enum weapType_t : int
{
WEAPTYPE_NONE,
WEAPTYPE_BULLET,
WEAPTYPE_GRENADE,
WEAPTYPE_PROJECTILE,
WEAPTYPE_RIOTSHIELD,
WEAPTYPE_MAX
};
enum weapClass_t : int
{
WEAPCLASS_RIFLE = 0,
WEAPCLASS_SNIPER = 1,
WEAPCLASS_MG = 2,
WEAPCLASS_SMG = 3,
WEAPCLASS_SPREAD = 4,
WEAPCLASS_PISTOL = 5,
WEAPCLASS_GRENADE = 6,
WEAPCLASS_ROCKETLAUNCHER = 7,
WEAPCLASS_TURRET = 8,
WEAPCLASS_THROWINGKNIFE = 9,
WEAPCLASS_NON_PLAYER = 10,
WEAPCLASS_ITEM = 11,
WEAPCLASS_MAX
};
enum PenetrateType : int
{
PENETRATE_TYPE_NONE = 0,
PENETRATE_TYPE_SMALL = 1,
PENETRATE_TYPE_MEDIUM = 2,
PENETRATE_TYPE_LARGE = 3,
PENETRATE_TYPE_MAX
};
enum weapInventoryType_t : int
{
WEAPINVENTORY_PRIMARY = 0,
WEAPINVENTORY_OFFHAND = 1,
WEAPINVENTORY_ITEM = 2,
WEAPINVENTORY_ALTMODE = 3,
WEAPINVENTORY_EXCLUSIVE = 4,
WEAPINVENTORY_SCAVENGER = 5,
WEAPINVENTORY_MAX
};
enum weapFireType_t : int
{
WEAPON_FIRETYPE_FULLAUTO = 0x0,
WEAPON_FIRETYPE_SINGLESHOT = 0x1,
WEAPON_FIRETYPE_BURSTFIRE2 = 0x2,
WEAPON_FIRETYPE_BURSTFIRE3 = 0x3,
WEAPON_FIRETYPE_BURSTFIRE4 = 0x4,
WEAPON_FIRETYPE_DOUBLE_BARREL = 0x5,
WEAPON_FIRETYPE_MAX
};
enum activeReticleType_t : int
{
VEH_ACTIVE_RETICLE_NONE = 0,
VEH_ACTIVE_RETICLE_PIP_ON_A_STICK = 1,
VEH_ACTIVE_RETICLE_BOUNCING_DIAMOND = 2,
VEH_ACTIVE_RETICLE_MAX
};
enum weaponIconRatioType_t : int
{
WEAPON_ICON_RATIO_1TO1 = 0,
WEAPON_ICON_RATIO_2TO1 = 1,
WEAPON_ICON_RATIO_4TO1 = 2,
WEAPON_ICON_RATIO_MAX
};
enum WeapStickinessType
{
WEAP_STICK_DONT = 0,
WEAP_STICK_ALL,
WEAP_STICK_ALL_ORIENT,
WEAP_STICK_GROUND,
WEAP_STICK_GROUND_YAW,
WEAP_STICK_KNIFE,
WEAP_STICK_MAX
};
struct unkWeaponDefStruct1
{
Material * unknownMaterials[4];
char unknown[0x14];
};
struct WeaponDef
{
char * szInternalName;
XModel * *gunXModel; //Count = 0x40
XModel * handModel;
XModel * unknownModel1;
XModel * unknownModel2;
Material * unknownMaterial1;
Material * unknownMaterial2;
Material ** camoMaterials; //Count = 0x3F
XAnim ** animR; //Count = 0x7C
XAnim ** animL; //Count = 0x7C
char * szModeName;
ScriptString (*unkScriptStrings1[0x18]);
ScriptString (*unkScriptStrings2[0x18]);
ScriptString (*unkScriptStrings3[0x18]);
ScriptString (*unkScriptStrings4[0x18]);
ScriptString (*unkScriptStrings5[0x18]);
FxEffectDef ** unkFxArray; //Count = 0x10
ScriptString (*unkScriptStrings6[0x10]);
playerAnimType_t playerAnimType;
weapType_t weapType;
weapClass_t weaponClass;
PenetrateType penetrateType;
weapInventoryType_t inventoryType;
weapFireType_t fireType;
char unknown1[0x10];
FxEffectDef * viewFlashEffect;
FxEffectDef * worldFlashEffect;
FxEffectDef * viewADSFlashEffect;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] pickUpSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] pickUpSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] ammoPickupSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] ammoPickupSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] projectileSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] pullbackSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] pullbackSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] fireSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] fireSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] fireSoundPlayerAkimbo;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] loopFireSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] loopFireSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] stopFireSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] stopFireSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] lastShotSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] lastShotSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] emptyFireSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] emptyFireSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] meleeSwipeSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] meleeSwipeSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] meleeHitSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] meleeMissSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] rechamberSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] rechamberSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadEmptySound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadEmptySoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadStartSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadStartSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadEndSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] reloadEndSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] detonateSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] detonateSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] nightVisionWearSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] nightVisionWearSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] nightVisionRemoveSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] nightVisionRemoveSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] altSwitchSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] altSwitchSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] raiseSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] raiseSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] firstRaiseSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] firstRaiseSoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] putawaySound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] putawaySoundPlayer;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] scanSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] unknownSound1;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] * parallelBounceSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] * perpendicularBounceSound;
FxEffectDef * viewShellEjectEffect;
FxEffectDef * worldShellEjectEffect;
FxEffectDef * viewLastShotEjectEffect;
FxEffectDef * worldLastShotEjectEffect;
FxEffectDef * unknownFx1;
Material * reticleCenter;
Material * reticleSide;
int iReticleCenterSize;
int iReticleSideSize;
int iReticleMinOfs;
activeReticleType_t activeReticleType;
float vStandMove[3];
float vStandRot[3];
float vStrafeMove[3];
float vStrafeRot[3];
float vDuckedOfs[3];
float vDuckedMove[3];
float vDuckedRot[3];
float vProneOfs[3];
float vProneMove[3];
float vProneRot[3];
float fPosMoveRate;
float fPosProneMoveRate;
float fStandMoveMinSpeed;
float fDuckedMoveMinSpeed;
float fProneMoveMinSpeed;
float fPosRotRate;
float fPosProneRotRate;
float fStandRotMinSpeed;
float fDuckedRotMinSpeed;
float fProneRotMinSpeed;
XModel * * worldModel; //Count = 0x40
XModel * worldClipModel;
XModel * rocketModel;
XModel * knifeModel;
XModel * worldKnifeModel;
Material * hudIcon;
weaponIconRatioType_t hudIconRatio;
Material * pickupIcon;
weaponIconRatioType_t pickupIconRatio;
Material * ammoCounterIcon;
weaponIconRatioType_t ammoCounterIconRatio;
int ammoCounterClip; //Missing enum
int iStartAmmo;
const char *szAmmoName;
int iAmmoIndex;
const char *szClipName;
int iClipIndex;
int iMaxAmmo;
int shotCount;
const char *szSharedAmmoCapName;
int iSharedAmmoCap;
int damage;
int playerDamage;
int iMeleeDamage;
int iDamageType;
int iFireDelay;
int iMeleeDelay;
int meleeChargeDelay;
int iDetonateDelay;
int iRechamberTime;
int iRechamberOneHanded;
int iRechamberBoltTime;
int iHoldFireTime;
int iDetonateTime;
int unknown2;
int iMeleeTime;
int meleeChargeTime;
int iReloadTime;
int reloadShowRocketTime;
int iReloadEmptyTime;
int iReloadAddTime;
int unknown3;
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 stunnedTimeBegin;
int stunnedTimeLoop;
int stunnedTimeEnd;
char unknown4[0x114];
float autoAimRange;
float aimAssistRange;
float aimAssistRangeAds;
float aimPadding;
float enemyCrosshairRange;
float moveSpeedScale;
float adsMoveSpeedScale;
float sprintDurationScale;
float adsZoomInFrac;
float adsZoomOutFrac;
unkWeaponDefStruct1 unknown5;
int unknown6;
float fAdsBobFactor;
float fAdsViewBobMult;
float fHipSpreadStandMin;
float fHipSpreadDuckedMin;
float fHipSpreadProneMin;
float hipSpreadStandMax;
float hipSpreadDuckedMax;
float hipSpreadProneMax;
float fHipSpreadDecayRate;
float fHipSpreadFireAdd;
float fHipSpreadTurnAdd;
float fHipSpreadMoveAdd;
float fHipSpreadDuckedDecay;
float fHipSpreadProneDecay;
float fHipReticleSidePos;
float fAdsIdleAmount;
float fHipIdleAmount;
float adsIdleSpeed;
float hipIdleSpeed;
float fIdleCrouchFactor;
float fIdleProneFactor;
float fGunMaxPitch;
float fGunMaxYaw;
char unknown7[0xC];
float swayMaxAngle;
float swayLerpSpeed;
float swayPitchScale;
float swayYawScale;
float swayHorizScale;
float swayVertScale;
float swayShellShockScale;
float adsSwayMaxAngle;
float adsSwayLerpSpeed;
float adsSwayPitchScale;
float adsSwayYawScale;
float adsSwayHorizScale;
float adsSwayVertScale;
float adsViewErrorMin;
float adsViewErrorMax;
int unknown8;
PhysCollisionMap * collisions;
char unknown9[0x28];
int iDropAmmoMin;
int ammoDropClipPercentMin;
int ammoDropClipPercentMax;
int iExplosionRadius;
int iExplosionRadiusMin;
int iExplosionInnerDamage;
int iExplosionOuterDamage;
float damageConeAngle;
float bulletExplDmgMult;
float bulletExplRadiusMult;
int iProjectileSpeed;
int iProjectileSpeedUp;
int iProjectileSpeedForward;
int iProjectileActivateDist;
float projLifetime;
float timeToAccelerate;
float projectileCurvature;
char * unknownString1;
XModel * projectileModel;
int projExplosiveType; //Missing enum
FxEffectDef * projExplosionEffect;
FxEffectDef * projDudEffect;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] projExplosionSound;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] projDudSound;
WeapStickinessType stickiness;
float lowAmmoWarningThreshold;
float ricochetChance;
char unknown10[0xC];
float (*parallelBounce[31]);
float (*perpendicularBounce[31]);
FxEffectDef * projTrailEffect;
FxEffectDef * projBeaconEffect;
float vProjectileColor[3];
int guidedMissileType; //Missing enum
float maxSteeringAccel;
float projIgnitionDelay;
FxEffectDef * projIgnitionEffect;
char unknown11[0x38];
float fAdsGunKickSpeedDecay;
float fAdsGunKickStaticDecay;
float fAdsViewKickPitchMin;
float fAdsViewKickPitchMax;
float fAdsViewKickYawMin;
float fAdsViewKickYawMax;
char unknown12[0xC];
float fAdsSpread;
int hipGunKickReducedKickBullets;
float hipGunKickReducedKickPercent;
float fHipGunKickPitchMin;
float fHipGunKickPitchMax;
float fHipGunKickYawMin;
float fHipGunKickYawMax;
int unknown13;
float fHipGunKickAccel;
float fHipGunKickSpeedMax;
float fHipGunKickSpeedDecay;
float fHipGunKickStaticDecay;
float fHipViewKickPitchMin;
float fHipViewKickPitchMax;
float fHipViewKickYawMin;
float fHipViewKickYawMax;
char unknown14[0xC];
float fightDist;
float maxDist;
const char *accuracyGraphName[2];
[[:Vectors#vec2_t|vec2_t]] * accuracyGraphKnots;
[[:Vectors#vec2_t|vec2_t]] * originalAccuracyGraphKnots;
short accuracyGraphKnotCount;
short originalAccuracyGraphKnotCount;
int iPositionReloadTransTime;
float leftArc;
float rightArc;
float topArc;
float bottomArc;
float accuracy;
float aiSpread;
float playerSpread;
float minVertTurnSpeed;
float minHorTurnSpeed;
float maxVertTurnSpeed;
float maxHorTurnSpeed;
float pitchConvergenceTime;
float yawConvergenceTime;
float suppressTime;
float maxRange;
float fAnimHorRotateInc;
float fPlayerPositionDist;
const char *szUseHintString;
const char *dropHintString;
int iUseHintStringIndex;
int dropHintStringIndex;
float horizViewJitter;
float vertViewJitter;
float scanSpeed;
float scanAccel;
int scanPauseTime;
const char *szScript;
float fOOPosAnimLength[2];
int minDamage;
int minPlayerDamage;
float maxDamageRange;
float minDamageRange;
float destabilizationRateTime;
float destabilizationCurvatureMax;
int destabilizeDistance;
float (*locationDamageMultipliers[22]);
const char *fireRumble;
const char *meleeImpactRumble;
[[:Tracer Asset|Tracer]] * tracer;
char unknown15[0x2C];
FxEffectDef *turretOverheatEffect;
const char *turretBarrelSpinRumble;
int turretBarrelSpinUpTime;
int turretBarrelSpinDownTime;
int turretBarrelSpinSpeed;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] turretBarrelSpinMaxSnd;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] turretBarrelSpinUpSnds[4];
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] turretBarrelSpinDownSnds[4];
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] missileConeSoundAlias;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] missileConeSoundAliasAtBase;
char unknown16[0x34];
ScriptString unknownScriptString;
char unknown17[0x5E];
ScriptString stowTag;
XModel * unknownModel3;
};
struct unkWeaponVariantDefStruct1
{
int unknown;
XAnim* unknownAnims[2];
char unkData[0xC];
};
struct unkWeaponVariantDefStruct2
{
int unknown1;
[[:Category:Utilities#snd_alias_list_name|snd_alias_list_name]] unknownSounds[2];
int unknown2;
};
struct unkWeaponVariantDefStruct3
{
int unknown1;
FxEffectDef* unknownFXs[2];
int unknown2;
};
struct unkWeaponVariantDefStruct4
{
int unknown;
ScriptString (*unknownArrays[0x18])[2];
};
struct WeaponVariantDef
{
char * name;
WeaponDef * info;
const char * displayName;
ScriptString (*hideTags[0x20]);
AttachmentDef ** sights; //Count = 6
AttachmentDef ** underBarrel; //Count = 3
AttachmentDef ** barrelsAndMods; //Count = 8
XAnim ** szXAnims; //Count = 0x7C
int unkCount1;
unkWeaponVariantDefStruct1 * unkData1; //Count = unkCount1
int unkCount2;
unkWeaponVariantDefStruct2 * unkData2; //Count = unkCount2
int unkCount3;
unkWeaponVariantDefStruct3 * unkData3; //Count = unkCount3
int unkCount4;
char * unkData4; //Size = unkCount4 << 4
int unkCount5;
unkWeaponVariantDefStruct4 * unkData5; //Count = unkCount5
float adsZoomFov;
int adsTransInTime;
int adsTransOutTime;
int clipSize;
int unknown1;
int fireTime;
int unknown2;
int unknown3;
float penetrateMultiplier;
float adsViewKickCenterSpeed;
float hipViewKickCenterSpeed;
char *szAltWeaponName;
int altWeaponFireTime;
int altWeaponIndex;
int altRaiseTime;
Material * killIcon;
Material * dpadIcon;
char unknown4[0x10];
int dropAmmoMax;
float adsDofStart;
float adsDofEnd;
short accuracyGraphKnotCount;
short originalAccuracyGraphKnotCount;
[[:Vectors#vec2_t|vec2_t]] *accuracyGraphKnots;
[[:Vectors#vec2_t|vec2_t]] *originalAccuracyGraphKnots;
int unknown5;
char * unknownString;
};Source Format
The weapon source files are raw text files with no extension, located at "raw/weapons/sp/" for SP weapons and "raw/weapons/mp/" for MP weapons. They use the same format as many other assets, with each setting name and value separated by a back-slash. The first setting identifies the file, and for weapons the identifier string is "WEAPONFILE".