# Starlight Courier

A compact LunarBasic platformer demo built from the supplied Kenney 3D assets.

The game opens on a fully mouse-driven Kenney GUI. Every menu includes graphical
normal, hover, and pressed button states plus hover/click audio. It uses the
native system pointer so the interface never shows two competing cursors.
Jumping, pickups, damage, victory, and menu feedback each use an original
synthesized 8-bit cue designed to match the platformer's pixel-art style. Each
cue has a hard, silence-free onset, a padded trailing buffer for reliable native
playback, and a per-effect gain matched against the music.

The title theme plays once per main-menu visit, while the gameplay theme loops
during the campaign.

## Play

- Move with `A` / `D` or the arrow keys.
- Jump with `Space`, `W`, or the up arrow. Release early for a shorter jump.
- Find each stage's key, then reach its blue exit.
- Press `P` to pause or `R` to restart.
- `Esc` returns to the main menu during play; from the main menu it quits.
- Menus work with the mouse or the arrow keys and `Enter`.

Five stages introduce mechanics in a deliberate order: safe movement, water
routing, spike timing, vertical skybridges, then a final course combining every
lesson. Eased transition cards connect the stages without abrupt cuts. Coyote
time and jump buffering keep the controls forgiving without removing challenge.

## Run from source

Open `Platformer.lb` in the LunarBasic IDE and run it. The source resolves `assets` beside either the source working folder or the compiled application, so keep the supplied folder structure intact.

The small `Platformer.lb` entry point imports focused modules from `src` for
level data, assets/audio, state transitions, gameplay, menus, rendering, and
program lifetime. Comments focus on non-obvious design choices so the demo can
double as a readable multi-file LunarBasic example.

Moving platforms are authored inside each stage map. Every separate run of
consecutive `m` characters creates an independent platform, each `m` adds one
tile to its width, and the following `>` marks that platform's right travel
limit. This keeps every platform beside the terrain it interacts with; stage 2,
for example, contains three independent `m ... >` definitions.
