Apex Legends Weapon Stats
Ammo
Firing
Shot
Projectile Damage
Shot Damage
Shots To Kill
Damage Per Second
Total Damage Per Magazine
Time To Kill
Projectile Size
Patterns
Reload Time
Handling
Spread
Info
Data was extracted from the game using RSX (exported as .vdf files), then later parsed into json using a C# program. The folder linked above contains a _index.json file, which is the list of all the seasons. sXX.json is the json file loaded by the site, while the sXX-archive.zip file contains all the vdf files, individual weapon json files, and csv files of all the blast/recoil patterns.
The process is mostly automated so it should be very easy to update as Apex updates with new seasons/splits.
Calculations
Meters: HammerUnits * 0.0254
Effective RPM:
if BurstCount: BurstCount / (BurstCount / EngineRPS + BurstDelay)
if Charged Semi Auto: 1 / (1 / EngineRPS + ChargeTime);
else: EngineRPS * 60
Time to Empty: MagazineSize / (AmmoConsumed * (EffectiveRPM) / 60)
Projectile Damage: ProjectileDamage * PartMultiplier
Shot Damage: Projectiles * ProjectileDamage
Shots to Kill:
No Armor: StkHealth(100, ShotDamage, PartMultiplier)
Common Armor: StkHealthAndShield(100, 50, ShotDamage, PartMultiplier)
Rare Armor: StkHealthAndShield(100, 75, ShotDamage, PartMultiplier)
Epic Armor: StkHealthAndShield(100, 100, ShotDamage, PartMultiplier)
Mythic Armor: StkHealthAndShield(100, 125, ShotDamage, PartMultiplier)
Helpers:StkHealth(health, baseDamage, partMultiplier): Math.ceil(StkCalc(health, baseDamage, fleshMultiplier, partMultiplier))
StkHealthAndShield(health, shield, baseDamage, partMultiplier): Math.ceil(StkCalc(health, baseDamage, fleshMultiplier, partMultiplier) + StkCalc(shield, baseDamage, shieldMultiplier, partMultiplier))
Damage Per Second: ShotDamage * (EffectiveRPM / 60) * PartMultiplier
Total Damage Per Magazine: Math.floor(Math.floor(ShotDamage * MagazineSize) / AmmoConsumed)
Time To Kill: ((ShotsToKill - 1) / FireRate) + ChargeTime