#pragma once #include "Formula.h" // Region widths are in tiles (REQ-GW-REGIONS). struct WorldRegions { int asteroidWidth; int playerBufferWidth; int contestZoneWidth; int enemyBufferWidth; }; // Asteroid expansion (REQ-EXP-UNLOCK, REQ-EXP-COST). struct WorldExpansion { int columnsPerExpansion; int costBuildingBlocks; }; // Push effects (REQ-PSH-*, REQ-WAV-BOSS-ADVANCE). struct WorldPush { int pushExpandColumns; double bossAdvanceSeconds; // boss countdown advanced by this much per push }; // Wave scheduling (REQ-WAV-*). struct WorldWaves { Formula threatRateFormula; // threat/s as a function of boss wave counter x Formula shipLevelFormula; // enemy ship level as a function of boss wave counter x double gapMinSeconds; double gapMaxSeconds; double spawnDurationSeconds; double bossCountdownSeconds; // duration of each boss cycle (REQ-WAV-BOSS-COUNTDOWN) double bossThreatDurationSeconds; // boss budget = rate * this (REQ-WAV-BOSS-TRIGGER) double bossQuietBeforeSeconds; // suppress normal waves this long before boss (REQ-WAV-QUIET) double bossQuietAfterSeconds; // suppress normal waves this long after boss (REQ-WAV-QUIET) }; struct WorldConfig { int heightTiles; // REQ-GW-HEIGHT int refundPercentage; // REQ-BLD-DEMOLISH int startingBuildingBlocks; // REQ-HQ-STARTING-BLOCKS double scrapDespawnSeconds; // REQ-RES-SCRAP-DROP double tileSize_m; // metres per tile (REQ-GW-TILE-SIZE) double beltSpeed_tps; // REQ-GW-BELT-SPEED (tiles/s, converted from m/s in config) int tunnelMaxDistance; // REQ-BLD-TUNNEL-PAIR double departureIntervalSeconds; // REQ-SHP-RALLY WorldRegions regions; WorldExpansion expansion; WorldPush push; WorldWaves waves; };