Scrap Pile Break Synergies

Scrap Pile is the workhorse prop tier (density 1.0 — the most common world prop). Each break rolls an independent cross-system synergy: a 15% chance to fire a magnet pulse that flips every active XP orb into exponential lock-on toward the player via the existing xpOrbs.triggerGlobalMagnet() primitive.

Because Scrap Pile spawns at the highest density of any prop type, its proc chance is intentionally the lowest of the synergy family. Without that cap the magnet pulse would feel routine and lose its iconic “vacuum up the field” beat.

The roll

  • Chance per break: 15% (SCRAP_MAGNET_CHANCE)
  • Effect: xpOrbs.triggerGlobalMagnet() — every active orb on the field switches to exponential lock-on toward the player
  • VFX: 10 dust-white particles (Scrap Pile’s own sparkRgb palette) travel inward to the ship, selling the “buff lands on you” feedback even when no orbs are nearby to vacuum
  • Audio: Reuses the extraction_done cue (sparkle + click + sizzle “completion” recipe)
  • Telemetry: prop_break:scrap_magnet_pulse records the active orb count at proc time so cloud can correlate proc with reward density

The proc fires inside breakProp() after the base orb drop + break VFX, so the player gets both rewards from a single break: standard XP orbs (~1.5 per Scrap Pile) plus the global magnet pulse on the 15% roll.

Why per-prop synergies exist

Scrap Pile is one of seven props in the catalog, and each prop type has its own bespoke break-synergy:

PropChanceSynergy
Scrap Pile15%Global XP-orb magnet pulse
Comet Fragment35%Ship velocity boost (×1.5, capped at 2× max speed)
Drone Wreck30%0.5s invuln window
Volatile Crystal25%Burning afterburn cloud + proximity damage
Mineral Vein30%Cascade spawns Comet Fragment + Magnetar Pulse
Supply Pod100%5-prop fan-spawn ring (workhorse cascade)
Magnetar Pulse100%Gravity-pull on all enemies in 220px radius

These are intentionally bespoke per-prop relationships, not a generic data-table flag. Each one is a named connection between two specific subsystems: Scrap reaches into the XP-orb subsystem; Comet and Drone reach into ship-state; Volatile reaches into the affix palette + damage chain; Mineral and Supply reach into the prop pool’s own spawn pipeline; Magnetar reaches into enemy velocity.

Design intent: surprise + reward exploration

The synergy family is built around three pillars:

  1. Visual variety — every prop has a distinct color palette (dust-white scrap, ice-blue comet, electric cyan drone, magenta volatile, emerald mineral, amber pod, violet magnetar). When a synergy procs, the player sees a flash of that prop’s signature color land on themselves or the field.
  2. Mechanical reward — each synergy gives the player a small but real edge (vacuum orbs, dodge a hit, sweep enemies inward), so the act of breaking props feels like more than scenery cleanup.
  3. Discovery curve — proc rates and effects aren’t surfaced in the UI. Players learn the family organically by ramming props during low-pressure beats, then start hunting for specific prop types when the synergy fits their build.

Scrap Pile sits at the bottom of the proc-chance ladder because it’s the prop you’ll see most. The 15% rate means roughly one in seven Scrap breaks fires the pulse, so the player gets the “vacuum” beat as a sporadic delight, not a routine event.

Composition with cascades

Both Supply Pod (100% chance) and Mineral Vein (30%) fan-spawn additional props in a ring at the break point. Supply Pod’s SUPPLY_POD_CASCADE_TYPES list includes 2× Scrap Pile, so cracking a Pod open seeds two additional Scrap Pile break opportunities — each with their own independent 15% magnet roll.

A single Pod cascade can chain up to six synergies in one beat: the Pod fan-spawn → two Scrap magnet rolls → one Mineral cascade → one Comet speed-boost → one Magnetar gravity pull. The cascaded props each respect their own break rolls, which is why the synergies compose naturally without needing a global coordination layer.

Code reference

The roll lives in breakProp() inside PropPool:

if (def.id === 'scrap_pile' && Math.random() < SCRAP_MAGNET_CHANCE) {
  this.spawnScrapMagnetPulse(def);
}

The spawnScrapMagnetPulse() method handles particle emission, the magnet pulse engagement, the audio cue, and the telemetry record. It bails defensively (if (!sharedShip) return) at the ship-state boundary only — no silent fallbacks for missing palette data or other internal config (per “crash on bad data” preference).

Source

  • src/starship-survivors/engine/world/props.tsSCRAP_MAGNET_CHANCE = 0.15, spawnScrapMagnetPulse() implementation, breakProp() synergy dispatch site
  • src/starship-survivors/engine/world/xp-orbs.tstriggerGlobalMagnet() primitive
  • src/starship-survivors/data/props.ts — Scrap Pile type definition (palette, density, orb count)