Add spatial audio, spacecraft entity, and level intro sequence

Distance-based sound effects with stereo panning for explosions, impacts,
and pickups. Spacecraft entity with full state machine (fly-in, land, take
off, fly-out), engine/synth sound loops, thruster particles, and PNG
spritesheet. Moon level intro defers player spawn until ship lands.

Also untrack build/ objects that were committed by mistake.
This commit is contained in:
Thomas
2026-03-01 11:00:51 +00:00
parent dbb507bfd2
commit 49ed2d6f7b
33 changed files with 1026 additions and 61 deletions

30
TODO.md
View File

@@ -1,9 +1,15 @@
# TODO
## Distance-based sound effects
Sounds (explosions, impacts, etc.) should attenuate based on distance from the
player. Offscreen events far away should be inaudible. Add a helper that takes
a world position and scales volume by proximity to the camera/player.
## ~~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
@@ -15,18 +21,10 @@ sizes. Key areas to check:
- Camera bounds and coordinate overflow (float precision at large coords)
- Level file parsing (row lines could exceed fgets buffer at 5000+ columns)
## Spacecraft art and entity
Create placeholder pixel art for the player's spacecraft (fits the 16x16 grid
aesthetic but spans multiple cells, roughly 4-5 tiles wide by 2-3 tiles tall).
Needs at minimum:
- Landed/idle frame (visible near spawn on planet surface levels)
- Landing animation (descending + touchdown, 3-4 frames)
- Takeoff animation (liftoff + ascending, reuse landing in reverse)
Used in two contexts:
- **Level start**: ship flies in, lands at spawn, player exits, ship takes off
and leaves — serves as the level intro sequence
- **Level exit**: ship flies in and lands when player nears the exit zone,
player enters, ship takes off — triggers level transition
## Spacecraft at level exit
Ship landing at exit zone when player approaches — player enters, ship takes
off, triggers level transition. The intro/start sequence is done; this is the
exit counterpart.
## Asteroid refinement
- Reduce asteroid count significantly — occasional hazard, not a barrage