level-presets.ts
Named LevelConfig presets — one per biome. Each preset is a complete layout/visual config that loads into the playground or attaches to a planet. Designers edit via playground and push diffs back to this file.
⊰ Exports
| Symbol | Kind | Purpose |
|---|---|---|
LevelPresetId | type | Union of 14 preset string IDs |
LEVEL_PRESETS | const | Record<LevelPresetId, LevelConfig> — full preset bundle |
LEVEL_PRESET_NAMES | const | Record<LevelPresetId, string> — UI display names |
⊰ Preset roster
Fourteen biomes, six tutorial/origin + eight compact planet presets:
| ID | Display | Terrain | Spoke / Hub style | Notes |
|---|---|---|---|---|
derelict_station | Derelict Station | asteroids | highway / station | Tutorial default; Landing Site uses this |
frozen_wreck | Frozen Wreck Field | asteroids | ghost / crater | Ice-blue, faint spokes |
volcanic_rift | Volcanic Rift | pillars | energy / nexus | pattern: 'rings', only non-chaotic preset |
bio_organic | Bio-Organic Expanse | asteroids | ghost / crater | Spore particles, green |
sunrise_grid | Sunrise Grid | city | highway / station | Layout unified w/ Landing Site v5.163.6 |
voidstar_abyss | Voidstar Abyss | voidstar_mix | energy / nexus | Punch comes from planet enemyCountMult: 2.0 |
solar_flats | Solar Flats | asteroids | energy / nexus | Amber conduits |
speed_circuit | Speed Circuit | asteroids | highway / station | Fast flow (speed: 1.5) |
eden_grove | Eden Grove | asteroids | ghost / crater | Charger swarms |
old_earth_ruins | Old Earth Ruins | city | ghost / crater | Reuses sunrise city stamps; uses ‘grounded’ bake variant |
network_grid | Network Grid | asteroids | energy / nexus | Cyan data flow |
delphi_crystal | Delphi Crystal | pillars | energy / nexus | Purple-violet |
obelisk_pillars | Obelisk Pillars | pillars | energy / nexus | Dense pillar maze |
desolation_field | Desolation Field | asteroids | ghost / crater | Red tint, mortar/shooter suppression |
⊰ Unified layout numerics
Post-v5.163.6, every preset shares the same hub/spoke/density skeleton — events spawn at identical rates across biomes; only terrainType + palette + visual flair (spokeStyle, hubStyle, particles, illumination, spokeFlow) differ.
Constant across all presets:
hubSize: 0.45,spokeWidth: 0.8,density: 0.99ringRadius: 0.5,ringCount: 0.3(exceptvolcanic_rift→0.6,0.5)blockSize: 0.5,stepSize: 0.5,amplitude: 0.5terrainDensity: 0.85pathableWilds: truespawnZones: DEFAULT_SPAWN_ZONEShubRMin/hubRMax: 200,spokeWMin/spokeWMax: 150
Differentiating fields: seed, pattern, palette, spokeStyle, hubStyle, terrainType, illuminationColor, illuminationSpeed, spokeFlow, hubParticles, dangerTint, lanternPreset.
⊰ Style enums in use
spokeStyle:highway|ghost|energyhubStyle:station|crater|nexushubParticles:data|dust|embers|sporesterrainType:asteroids|pillars|city|voidstar_mixlanternPreset:solar_flare|dawn|shatterpattern:chaotic|rings
⊰ Design intent
- Hub/spoke drive event eligibility — events spawn only in hub/spoke zones, so density is tuned high (
density: 0.99,hubSize: 0.45) to make most of the explorable area count as clear. - Visual identity is the only per-biome lever that affects feel. Layout is identical; threat tuning lives on the planet config, not the level preset.
- Volcanic Rift is the outlier — only preset with
pattern: 'rings'and elevatedringRadius/ringCount.
⊰ EXTRACT-CANDIDATE
- Massive constant duplication across 14 presets: hub/spoke/density/ring/block/step/amplitude/terrainDensity/pathableWilds/spawnZones/hubRMin/hubRMax/spokeWMin/spokeWMax all repeat verbatim. A
BASE_LAYOUTspread ({ ...BASE_LAYOUT, palette, terrainType, ... }) would shrink the file ~60% and make the comment “layout numerics unified with Landing Site” structurally enforced rather than convention. LEVEL_PRESETS+LEVEL_PRESET_NAMESare parallel records keyed by the same union — could merge intoRecord<LevelPresetId, { config: LevelConfig; name: string }>to prevent drift when adding new presets.