What it is
Double-shot is an optional per-weapon stat that gives every fire event a flat probability of doubling the entire volley. When it procs, the weapon emits twice as many projectiles in that single salvo — same aim, same target, same instant — without paying any additional cost.
The roll
The proc is an independent uniform random roll evaluated on every fire event. A value strictly less than the configured chance triggers the proc; otherwise the volley fires at base count. The roll has no memory: streaks and droughts are possible, and each fire’s outcome is independent of any previous fire.
| Term | Value |
|---|---|
| Distribution | Uniform on [0, 1) |
| Trigger condition | roll < chance |
| Rolls per fire event | 1 |
| Effect on proc | volley count is multiplied by 2 |
Stacking with cooldown
The proc does not trigger an extra fire event — it scales the projectile count of the current volley. Because no second fire event runs, no second warmup is played, no second cooldown is paid, and the weapon’s next scheduled fire happens on its normal cadence. A doubled volley and a base volley occupy the same slot in the fire schedule.
For weapons that already fire multiple projectiles per volley (e.g. one with a shell count of 3), the proc doubles the full salvo to 6, not 3 + 1. All extra projectiles share the same firing instant and aim direction as the base volley, and route through the same per-projectile layout logic (spread, perpendicular spacing, scatter) that the weapon already uses.
Which weapons use it
| Weapon | Chance |
|---|---|
| Cannon | 0.25 |
No other weapon in the data set defines doubleShotChance. Weapons without the field never roll for double-shot.
EXTRACT-CANDIDATES:
- Cannon page should reference this concept for its 25% double-volley proc.
- Roll-up “Weapon stats reference” page (if/when one exists) should list
doubleShotChancealongside other optional volley modifiers (perpendicularLayout, scatterRadius, scaleSpreadWithCount).
SUMMARY:
Created wiki/gameplay/concepts/double-shot.md. Facts pulled from _types.ts (optional doubleShotChance?: number field), weapons.ts (two call sites at lines 764 and 1468, both Math.random() < def.doubleShotChance, both multiply count by 2 for the volley — one in the standard fire path, one in the mortar/arc path used by cannon), and cannon.ts (the only file with the field set, value 0.25). Key load-bearing facts:
- Independent uniform [0,1) roll, condition is strict
<. - One roll per fire event, doubles the entire volley count (not adds 1).
- Does not consume an extra cooldown — it’s a multiplier on the current fire, not a second fire.
- Cannon is currently the only consumer.