What this is
Authoring rule for legendary weapon stat blocks. A legendary is produced by merging two level-20 non-legendary weapons; it then scales L1→L20 via the normal level-up pool. Because legendaries must read as obviously rarer and more powerful than their base-weapon parents, every spatial VFX parameter in the legendary’s spec is multiplied versus its base-weapon counterpart. The renderer then re-shrinks the visible bullet at L1 (and grows it back toward L20) so launch-time legendaries don’t visually dwarf the rest of the screen.
The rule has two halves: a flat ×5 on spatial spec values, and a ×2 on postFxSec. Particle/shell/chain counts only get modest bumps and only on slow-firing weapons.
What scales by 5x
All spatial parameters in the legendary spec are authored at 5× the equivalent base-weapon value. Pulse and glow values are also ×5.
| Parameter | Multiplier vs base | Notes |
|---|---|---|
| acquireRange | 5× | Both base and scaling fields |
| travelRangeMult | 5× | Multiplier on projectile travel range |
| projectileSize | 5× | Authored size of projectiles |
| blastRadius | 5× | AoE / explosion radius |
| beamWidth | 5× | Beam thickness (sniper-family legendaries) |
| chainRadius | 5× | Chain-lightning jump radius |
| scatterRadius | 5× | Sub-shell scatter distribution |
| coneWidth | 5× | Cone / arc spread width |
| Pulse | 5× | shipPulseStrength |
| Glow / sonar | 5× | sonarPulseScale |
What scales by 2x
Only postFxSec gets the ×2 bump. The screen flash is intentionally capped to half the scale of spatial params to avoid nausea from oversized full-screen post-FX on every shot.
| Parameter | Multiplier vs base | Reason for cap |
|---|---|---|
| postFxSec | 2× | Screen flash capped to avoid nausea |
Particle counts, shell counts, and chain counts are kept low on high-fire-rate legendaries (e.g. Trailblazer at 18/s, Wave Gun at 8/s, 4-Way Burst at 5/s). Only slow-firing legendaries (e.g. Carpet Bomber at 0.4/s, Plasma Mortar at 1.4/s, Hellrain at 1.6/s) get modest ×2 count bumps where they help the cast read.
Renderer side adjustments
The renderer in draw.ts recognises any bullet whose weaponId starts with lgd_ and applies two compensating shrinks so the authored 5× spatial values don’t visually overwhelm the screen at launch level.
| Renderer pass | Value | Notes |
|---|---|---|
| Legendary visual size at L1 | 0.15× | Of the authored visual sz |
| Legendary visual size at L20 | 0.50× | Linear interpolation L1→L20 |
| Per-level step | 0.35 / 19 ≈ 0.01842× per level | 0.15 + (lvl−1) × 0.35 / 19 |
| Legendary alpha scale | 0.55× | Global opacity multiplier on legendary branches |
| Damage zone / collision radius | unchanged | Still read from bullet radius for hit testing |
The alpha scale exists because much of the “crazy VFX” feedback at launch was additive layers piling up on top of each other — half-strength alpha on legendary draw branches softens the stack without hurting readability. Universal glow halos around legendary bullets are disabled (the legendary-specific draw branches handle their own glow per archetype).