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
Season versions are formatted as Season.Split.Hotfix.
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.
Hotfixes are created manually using info released in posts by Respawn rather than pulling the stats using the files from the game, since hotfixes are usually serversided.
The process is somewhat 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