Horizontal Modifiers
What it is
Horizontal modifiers are run-wide stacks that buff every weapon at once, separate from a weapon’s own level. Each rank of a horizontal multiplies a per-weapon scaling rate carried by every weapon spec. Damage modifiers split by damage tag (Bullet, Energy, Fire, Bomb) plus a universal All DMG track; More Projectiles is a legacy stack that no longer appears on level-up cards and is granted only by the Echo Generator artifact. Fire Rate has no dedicated horizontal — every damage-modifier rank also speeds up fire rate via each weapon’s ratePerH. Area is no longer a horizontal at all; area scaling is now per-weapon-level only.
The horizontal stats
Damage horizontals
Five separate damage tracks. The sum used by every weapon is primary_tag_count + secondary_tag_count + damage_all, where secondary applies only to legendaries with two damage tags.
| Modifier id | Per-rank effect | Max rank | Rarity |
|---|---|---|---|
| damage_bullet | +25% bullet weapon damage | 20 | common |
| damage_energy | +25% energy weapon damage | 20 | common |
| damage_fire | +25% fire weapon damage | 20 | common |
| damage_bomb | +25% bomb weapon damage | 20 | common |
| damage_all | +10% all weapon damage | 20 | common |
Each weapon spec carries a per-weapon dmgPerH rate. Final damage multiplier from horizontals is 1 + dmgPerH * H, where H is the matching summed count.
| dmgPerH | Used by |
|---|---|
| 0.04 | barrier, coilgun, cannon, burst, disc, line, missile, magnetar, lightning, fire-trail, revolver, mortar, shotgun, sweep, railgun, rifle, all current legendaries except phoenix aura |
| 0.05 | fire-ring, defy, flame, phoenix-aura legendary |
A flat +1 damage per damage-rank is also added on top of the multiplier, applied after multiplicative scaling.
Fire Rate (via Damage horizontals)
There is no standalone fire-rate horizontal. The same summed H that feeds damage also multiplies fire rate by 1 + ratePerH * H per weapon.
| ratePerH | Used by |
|---|---|
| 0.08 | fire-ring, defy, sweep |
| 0.10 | every other weapon (current set) |
Fire Rate horizontal does NOT reduce warmup time.
More Projectiles
Legacy stat tracked under the more_projectiles upgrade counter. No longer offered as a level-up reward; gained only when the Echo Generator artifact triggers, which adds 1 stack per crystal pickup roll. Each weapon has its own per-rank step table — see the next section.
Area (no horizontal)
The bigger_area horizontal was removed in v3.26. Area now scales per weapon level only. Each weapon spec declares an areaMode that names which physical dimension scales with weapon level. The eleven area modes:
| areaMode | Meaning |
|---|---|
| blast | Standard explosion blast radius |
| blast_strong | Larger-than-standard blast radius |
| chain_radius | Lightning chain jump distance |
| beam_splash | Beam endpoint splash radius |
| beam_width | Beam line thickness |
| bonus_explosion | Triggers an explosion on hit |
| cone_width | Flame / breath cone half-angle |
| blade_size | Orbiting blade hitbox radius |
| splash | Bullet-impact splash radius |
| line_spread | Tesla-line lateral spread |
| arc_thickness | Shield-arc width |
More Projectiles step ladder
Each weapon has its own step table. The function getExtraProjectiles(weaponId, H) reads H = upgradeCounts['more_projectiles'] (clamped 0–20) and returns the per-weapon bonus. Weapons not listed below ignore More Projectiles.
| Weapon | H0 | H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | H9 | H10 | H11 | H12 | H13 | H14 | H15 | H16 | H17 | H18 | H19 | H20 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| rifle | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
| coilgun | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 |
| shotgun | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
| railgun | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 |
| missile | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
| lightning | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
| revolver | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
| cannon | 0 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 4 | 4 | 4 | 5 | 5 | 5 | 6 | 6 | 6 | 7 | 7 | 7 |
| mortar | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 |
| disc | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 4 | 4 |
| flame (embers) | 0 | 3 | 4 | 5 | 6 | 8 | 8 | 9 | 10 | 10 | 12 | 12 | 13 | 14 | 14 | 16 | 16 | 17 | 18 | 19 | 20 |
| sweep | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 |
| line | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
| magnetar | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
| fire-ring (blades) | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 |
| burst | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
| barrier | reads more_projectiles directly in its custom fire path | ||||||||||||||||||||
| fire-trail | drops a single zone per fire; ignores more_projectiles |
For weapons whose primary count is a SteppedStat (chainCount, burstPattern, bladeCount, emberCount, maxActive, shellCount, projectileCount-as-stepped), the per-H bonus is added on top of the level-based base count.
Stacking rules
Damage and Fire Rate horizontals stack additively inside the multiplier: 1 + def.dmgPerH * H and 1 + def.ratePerH * H, so each rank delivers a flat percentage of the base stat. The +1 flat damage per damage-rank is added after the multiplier, not inside it.
The H counter that drives both damage and fire rate is primary_damage_tag_count + secondary_damage_tag_count + damage_all_count. A legendary with two damage tags doubles up on both modifiers — picking damage_bullet and damage_energy both add to a Bullet+Energy legendary’s H.
Per-weapon level scaling stacks on top of horizontals multiplicatively: the level damage multiplier (1.0 at L1 → 7.5 at L20, piecewise-linear through six anchors) and the per-level base + scaling * (level - 1) formula resolve first; horizontal multipliers, early-level nerfs, and Star Power are applied on top of that base.
The early-level nerf reduces damage at low weapon levels (×0.7 at L1, ×0.8 at L2, ×0.9 at L3, ×1.0 at L4+). Fire rate uses a separate nerf that tapers from ×0.7 at L1 to ×1.0 at L10. Both apply after the horizontal multiplier.
More Projectiles stacks additively with the weapon’s base projectile count — baseCount + getExtraProjectiles(weaponId, H). The bonus is the same regardless of weapon level.