3.7 KiB
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 ✓
Implemented: 3 moon levels connected by spacecraft takeoff/landing sequences.
- moon01.lvl (1000 tiles) — Exit triggers spacecraft, transitions to moon02.
- moon02.lvl (200 tiles) — Crater fields, tighter platforming. Spacecraft intro, 7 asteroids, unarmed. Exit to moon03.
- moon03.lvl (150 tiles) — Dark side, hardest moon terrain. Spacecraft intro, 5 asteroids, unarmed until gun powerup near exit. Exit to level01.
- level01.lvl — Space station with spacecraft landing intro (arriving from moon).
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_offsetparameter 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
- Add vertical camera look-ahead (small Y lead when player moves vertically)
- Create a handcrafted tall test level (~40x46) to validate camera, physics, rendering, and entities all work with vertical scrolling
- Refactor
set_tile()/fill_ground()to accept a height parameter instead of hardcodedSEG_HEIGHT - Add
y_offsetparameter to all segment generators - Add
SEG_CLIMBconnector segment type (shaft/platforms between zones) - Update
levelgen_generate()to assign zones per segment and insert climbs - 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