70 lines
3.7 KiB
Markdown
70 lines
3.7 KiB
Markdown
# 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_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
|