# TODO ## ~~Distance-based sound effects~~ ✓ Implemented: `audio_set_listener()`, `audio_play_sound_at()` with linear attenuation and stereo panning. Used by enemy death, asteroid impact, and powerup pickup. ## ~~Spacecraft art and entity~~ ✓ Implemented: spacecraft PNG spritesheet (5 frames, 80x48 each), full entity with state machine (FLYING_IN → LANDING → LANDED → TAKEOFF → FLYING_OUT → DONE), engine/synth sounds, thruster particles, level intro sequence with deferred player spawn. ## Large map support (5000x5000) Audit the engine for anything that breaks or becomes slow at very large map sizes. Key areas to check: - Tile layer allocation (`uint16_t *` for 25M tiles) - Tilemap rendering culling (already viewport-clipped, verify correctness) - Physics / collision queries (should only check nearby tiles) - Entity updates (currently iterates full pool regardless of distance) - Camera bounds and coordinate overflow (float precision at large coords) - Level file parsing (row lines could exceed fgets buffer at 5000+ columns) ## ~~Spacecraft at level exit~~ ✓ Implemented: `spacecraft_spawn_exit()` with `is_exit_ship` flag. Proximity trigger in `level.c` spawns exit ship when player is within ~2 screen widths of an exit zone. Ship flies in, lands near exit. Player overlaps landed ship → player deactivated, ship takes off, camera holds still, level transition fires after ship departs (SC_DONE). ## ~~Asteroid refinement~~ ✓ Implemented: base speed 120→200, accel 200→350, respawn 3→6s, stagger 0-3→0-8s, random horizontal drift (±60 px/s), moon level reduced from 24 to 8 asteroids. ## Moon campaign: 3 levels with spacecraft transitions Extend the moon into a 3-level sequence connected by spacecraft takeoff/landing: - **moon01.lvl** — Current level. Exit triggers spacecraft takeoff, transitions to moon02. - **moon02.lvl** — Second moon level (new terrain, new hazards). Starts with spacecraft landing intro. Exit triggers takeoff to moon03. - **moon03.lvl** — Third/final moon level. Starts with spacecraft landing. Exit triggers takeoff and transitions to level01 (space station). - **level01.lvl** (space station roof) — Starts with spacecraft landing on the station rooftop. Ship stays landed (no takeoff). First armed level. - Moon exit transitions require the "spacecraft at level exit" feature so the ship flies in when the player approaches the exit zone. ## Level generator: height zones (verticality) Add vertical variety to generated levels using a "height zones" approach: - Double tilemap height from 23 to ~46 tiles (two screens tall) - Define two elevation bands: HIGH (ground ~row 17) and LOW (ground ~row 40) - Existing segment generators get a `y_offset` parameter so internal logic barely changes — platforms, enemies, corridors all shift by offset - New vertical connector segments (ramps/climbs) bridge between zones - Theme decides zone usage: Surface stays LOW, Station uses both, Base uses HIGH - Camera needs vertical look-ahead when player has vertical velocity ### Implementation steps 1. Add vertical camera look-ahead (small Y lead when player moves vertically) 2. Create a handcrafted tall test level (~40x46) to validate camera, physics, rendering, and entities all work with vertical scrolling 3. Refactor `set_tile()` / `fill_ground()` to accept a height parameter instead of hardcoded `SEG_HEIGHT` 4. Add `y_offset` parameter to all segment generators 5. Add `SEG_CLIMB` connector segment type (shaft/platforms between zones) 6. Update `levelgen_generate()` to assign zones per segment and insert climbs 7. The station generator stays at 23 tiles (corridor envelope already constrains) ## Jetpack boost blue flame effects - Add continuous blue flame particles trailing from the player during jetpack boost (while boost is active, not just on burst) - Add blue accents to the jetpack burst effect itself — mix blue flame particles into the existing yellow/orange exhaust plume