Props
What it is
Props are decorative, breakable world objects that spawn off-screen around the player’s ship as they move through a planet. The player breaks them by ramming with the ship (one-shot on contact) or by chipping them down with bullet fire. On break, each prop drops a fan of XP orbs and triggers a per-type visual/audio burst. Several prop types also fire a bespoke “cross-system” synergy on break — a brief mechanical reward like a speed boost, an invuln window, or a gravity pull on nearby enemies.
There are seven prop types, sharing a single spawn pool and weighted spawn roll. Rare types (Supply Pod, Magnetar Pulse) are flagged with a screen-edge directional arrow so the player can hunt them.
Stats tables
Prop types — core stats
| Type | HP | Radius (px) | Sticker | Rim color | Density mult vs slider | Edge arrow |
|---|---|---|---|---|---|---|
| Scrap Pile | 10 | 32 | salvage bin | slate grey (#9aa3ad) | 1.00 | no |
| Drone Wreck | 18 | 30 | broken drone | electric cyan (#5fc8ff) | 0.60 | no |
| Comet Fragment | 8 | 26 | comet streak | pale ice (#c8ddff) | 0.40 | no |
| Volatile Crystal | 25 | 30 | crystal | magenta (#ff5fcb) | 0.35 | no |
| Mineral Vein | 40 | 34 | rock outcrop | bright green (#5fe07a) | 0.25 | no |
| Magnetar Pulse | 35 | 32 | swirl | violet (#a050ff) | 0.20 | yes |
| Supply Pod | 80 | 40 | supply crate | amber (#ffaa44) | 0.15 | yes |
Prop drops
Each orb is worth orbXpFracPerOrb × current-level XP bar size, rounded up, minimum 1 XP.
| Type | Orb count | XP fraction per orb | Total fraction of level bar |
|---|---|---|---|
| Scrap Pile | 4 | 0.018 | 0.072 |
| Drone Wreck | 6 | 0.020 | 0.120 |
| Comet Fragment | 7 | 0.015 | 0.105 |
| Volatile Crystal | 8 | 0.022 | 0.176 |
| Mineral Vein | 10 | 0.024 | 0.240 |
| Magnetar Pulse | 6 | 0.020 | 0.120 |
| Supply Pod | 12 | 0.035 | 0.420 |
Spawn rules — shared pool
| Setting | Value |
|---|---|
| Pool capacity (max slots) | 48 |
| Max active props at slider 100 | 10 |
| Density slider source | planet destructibles.crates slider, 0–100 |
| Spawn cadence | every 250 ms |
| Spawn attempts per tick | 6 |
| Min spawn distance from ship | 500 px |
| Max spawn distance from ship | 1400 px |
| Cull radius from ship | 2200 px |
| Min gap between props | 160 px |
| Viewport margin (no-spawn zone) | 80 px past visible edge |
| Velocity-cone bias | 70% of spawns biased toward player heading |
| Cone half-angle (in-cone) | 0.55π rad |
| Spawn type weighting | each type’s densityMult |
Bullet collision
| Setting | Value |
|---|---|
| Bullet hit radius vs prop | prop.radius + 4 px |
| Damage per hit | bullet.dmg (min 1) |
| Piercing bullets | tracked via per-bullet hits set; same prop cannot be chipped twice by one bullet |
| Non-piercing bullet on hit | consumed |
| Rim hit-flash duration | 0.18 s |
| Chip-spark particle count | 6 |
Break VFX — per type
| Type | Spark RGB | Chunk RGB | Ring color | Spark count | Outward ring burst count |
|---|---|---|---|---|---|
| Scrap Pile | 220,220,220 | 110,110,110 | cfd6df | 14 | 0 |
| Drone Wreck | 120,220,255 | 80,120,160 | 7fd5ff | 18 | 0 |
| Comet Fragment | 220,235,255 | 150,180,220 | dfeaff | 20 | 8 |
| Volatile Crystal | 255,100,220 | 180,60,180 | ff3fb0 | 22 | 18 |
| Mineral Vein | 120,230,130 | 60,140,80 | 7fe89a | 24 | 10 |
| Magnetar Pulse | 180,110,255 | 110,50,200 | a060ff | 26 | 16 |
| Supply Pod | 255,200,100 | 200,150,80 | ffcc44 | 30 | 14 |
All breaks additionally fire 5 chunky debris particles and a shockwave ring (8→80 px expand, 0.3 s).
Break behavior — per-type synergies
Each synergy is a named one-off effect that fires on break. Multiple synergies can chain through cascades (Supply Pod break spawns 5 props, each of which rolls its own synergy on its next break).
| Type | Proc chance | Effect |
|---|---|---|
| Scrap Pile | 15% | Engages global XP-orb magnet; every active orb locks on to the player |
| Drone Wreck | 30% | Sets ship invulnerable for 0.5 s (or extends existing window) |
| Comet Fragment | 35% | Multiplies ship velocity by 1.5×, capped at 2.0× ship max speed |
| Mineral Vein | 30% | Cascade-spawns 1 Comet Fragment + 1 Magnetar Pulse at 70 px offsets around the break |
| Volatile Crystal | 25% | Overlays fire particles; if ship is within 180 px, deals 4 damage to ship (respects invuln/shield/reduction) |
| Magnetar Pulse | 100% | Gravity pull on enemies within 220 px: sets velocity to 360 px/s inward and snaps position up to 28 px toward break point (scales with proximity) |
| Supply Pod | 100% | Fan-spawns 5 props in a 110 px ring: 2× Scrap Pile, 1× Mineral Vein, 1× Comet Fragment, 1× Magnetar Pulse |
Visual idle
| Setting | Value |
|---|---|
| Bob period | 8.0 s |
| Bob amplitude (random per prop) | 6–14 px |
| Bob axis | vertical |
How it works
A single pool of 48 slots holds every active prop. Each slot stores its type id, current hp, position, hit-flash timestamp, and bob parameters. The pool runs collision every frame and runs spawn/cull on a 250 ms tick.
Spawning is gated by a target density derived from the planet’s destructibles.crates slider (0–100), scaled to the prop cap of 10. Each spawn rolls a type using each type’s densityMult as a weight (Scrap Pile dominates at 1.0; Supply Pod is rarest at 0.15), then picks a spawn point off-screen at 500–1400 px from the ship, biased 70% of the time into a cone pointing along the ship’s velocity. Spawn is rejected if the chosen point is on-screen or within 160 px of another prop.
Active props are culled when they move beyond 2200 px from the ship, but never while on-screen.
Ship-contact collision is per-frame. If the ship overlaps a prop (distance < ship radius + prop radius), the prop one-shot breaks regardless of hp. Bullet collision is also per-frame and applies bullet damage to any prop the bullet overlaps. Piercing bullets remember which props they have already hit via a per-bullet set, so they cannot chip the same prop twice. Non-piercing bullets die on first hit; bullets with a positive pierce count decrement and die when it reaches zero.
When a prop reaches hp ≤ 0 (or any time the ship contacts it), the break sequence runs in order: signal fired, audio cue played, telemetry recorded, XP orbs fanned out, break VFX layered, per-type synergy rolled, slot deactivated.
The XP-orb fan spawns orbCount orbs at the break point, evenly spaced in angle (with small jitter), each at 10–18 px outward offset and 140–220 px/s outward velocity. Per-orb XP is ceil(level-bar-size × orbXpFracPerOrb), minimum 1.
Synergies that need to spawn more props (Mineral Vein cascade, Supply Pod cascade) use a force-spawn entry point that bypasses spawn-cadence, viewport gating, and the velocity cone. These cascades are skipped silently if the pool is at capacity.
Each prop type has a flavored break audio recipe; missing keys fall back to a generic prop_break cue.
Interactions
- Planet density slider. Props read the same
destructibles.cratesslider as crates, but cap at 10 active vs the crate cap of 20 — props are deliberately rarer than crates because each prop is visually richer. - XP-orb system. Every break drops orbs via the shared XP-orb spawner; the Scrap Pile magnet synergy reaches back into the XP-orb subsystem to flip all active orbs into player lock-on.
- Ship state. Comet Fragment writes to
ship.vx/ship.vy(with a hard speed cap). Drone Wreck writes toship.invulnerableandship.invulnTimer, extending rather than overwriting an existing invuln window. - Damage chain. Volatile Crystal’s afterburn calls the standard player-damage path, so it respects invuln, shield, and damage reduction.
- Enemy velocity + position. Magnetar Pulse overwrites each in-radius enemy’s velocity and applies a one-shot position displacement that scales with proximity. AI may override velocity on the next frame; the position snap guarantees a visible step regardless.
- Burning-aura affix palette. Volatile Crystal’s fire overlay reads its color from the
burning_auraelite-affix palette; if that palette is removed, the afterburn fails silent. - Boss reward chamber. The Supply Pod cascade entry point is also called by external systems (boss defeat reward, Vortex sub-event dispatch) with custom prop lists, reusing the same fan-spawn + VFX + audio + telemetry pipeline.
- Cascade chaining. A Supply Pod break spawns five new props; each of those rolls its own synergy on its next break. The maximum chain in one beat is six synergies.
- HUD edge arrows. Props with the edge-arrow flag (Supply Pod, Magnetar Pulse) are enumerated for the HUD layer so it can draw screen-edge directional indicators while they are off-screen.
- Telemetry. Every break records a
prop_break:<type>event with orb count; each synergy proc records its own event (afterburn hit/miss, speed boost result, invuln duration, cascade spawn count, magnetar enemy count, scrap magnet orb count).
What it does NOT do
- Props do not damage the ship on contact. The only damage path from a prop is the Volatile Crystal afterburn proc when the ship is within 180 px of the break point.
- Props do not block ship movement or push the ship. Ship contact passes straight through (and breaks the prop).
- Props do not block bullets. A bullet that hits a non-fatal prop is consumed (non-piercing) or counted (piercing), but no visual stop happens beyond the chip flash.
- Props do not respawn on a fixed grid or schedule. There is no per-prop respawn timer; the pool simply tries to refill to the density target every 250 ms.
- Props do not chip from enemy contact, AoE explosions, or other props. Only player ship contact (one-shot) and player bullets damage them.
- Props do not award score, currency, or pickups other than the XP-orb fan. There is no per-type loot table; the only reward variance is orb count and per-orb XP fraction.
- Props are not cleared between waves or runs by the pool itself. The pool only clears via an explicit reset call.
- Props do not stack synergies on the same prop. Each prop type fires at most its single named synergy on break.
- Props do not telegraph their type before spawn. The off-screen edge arrow only appears for already-spawned edge-arrow types.
- Props do not respect the velocity cone or viewport gate when force-spawned by a cascade — cascade spawns can appear on-screen.