mirror of
https://github.com/imjasonh/nescript
synced 2026-07-09 01:16:12 +00:00
The previous version of hud_demo passed `score & 0x0F` and tile
index `1` (= Heart) to nt_set / nt_fill_h, but the demo had no
Heart sprite declared and tile 1 in CHR was uninitialized garbage.
The result was a screen of blue smileys with a tiny red strip in
the corner — the buffer mechanism worked, but the visual gave no
sense that anything HUD-shaped was happening.
This commit makes the HUD actually look like a HUD:
- 12 sprite declarations (Bar, Heart, Digit0..9, Ball) that the
compiler lays into CHR at known tile indices in declaration
order. Tile-index constants (`BAR_TILE`, `HEART_TILE`,
`DIGIT_BASE`) match that order so the call sites can use names
instead of magic numbers.
- bg1 palette restructured to `[red, white, yellow]` so pixel-art
characters resolve to visible colours: `#` = red (background
fill), `%` = white (heart shape), `@` = yellow (digit strokes).
- Background pre-paints row 1 with the solid `Bar` (red) tile
via a `legend { "B": 1 }` entry, giving the HUD a uniform red
canvas for individual cell writes to land on.
- Eight `nt_attr` calls at startup paint the entire top metatile
row (4 rows × 32 cols) with sub-palette 1 so the HUD chrome
reads as visually distinct from the playfield.
The result at frame 180 is unmistakably HUD-shaped: a yellow-on-
red status bar at the top of the screen above blue playfield with
a yellow ball bouncing around. Per-frame cost still scales with
what changed — `last_score` / `last_lives` shadow-compares mean
the buffer stays empty on the ~58 of 60 frames where nothing
ticks.
Tests: 758 pass. Clippy clean. 48/48 emulator goldens match.
|
||
|---|---|---|
| .. | ||
| arrays_and_functions.audio.hash | ||
| arrays_and_functions.png | ||
| audio_demo.audio.hash | ||
| audio_demo.png | ||
| auto_chr_background.audio.hash | ||
| auto_chr_background.png | ||
| auto_sprite_flicker.audio.hash | ||
| auto_sprite_flicker.png | ||
| axrom_simple.audio.hash | ||
| axrom_simple.png | ||
| bitwise_ops.audio.hash | ||
| bitwise_ops.png | ||
| bouncing_ball.audio.hash | ||
| bouncing_ball.png | ||
| cnrom_simple.audio.hash | ||
| cnrom_simple.png | ||
| coin_cavern.audio.hash | ||
| coin_cavern.png | ||
| comparisons.audio.hash | ||
| comparisons.png | ||
| edge_input_demo.audio.hash | ||
| edge_input_demo.png | ||
| fade_demo.audio.hash | ||
| fade_demo.png | ||
| feature_canary.audio.hash | ||
| feature_canary.png | ||
| friendly_assets.audio.hash | ||
| friendly_assets.png | ||
| function_chain.audio.hash | ||
| function_chain.png | ||
| gnrom_simple.audio.hash | ||
| gnrom_simple.png | ||
| hello_sprite.audio.hash | ||
| hello_sprite.png | ||
| hud_demo.audio.hash | ||
| hud_demo.png | ||
| i16_demo.audio.hash | ||
| i16_demo.png | ||
| inline_asm_demo.audio.hash | ||
| inline_asm_demo.png | ||
| logic_ops.audio.hash | ||
| logic_ops.png | ||
| loop_break_continue.audio.hash | ||
| loop_break_continue.png | ||
| match_demo.audio.hash | ||
| match_demo.png | ||
| metasprite_demo.audio.hash | ||
| metasprite_demo.png | ||
| mmc1_banked.audio.hash | ||
| mmc1_banked.png | ||
| mmc3_per_state_split.audio.hash | ||
| mmc3_per_state_split.png | ||
| nested_structs.audio.hash | ||
| nested_structs.png | ||
| noise_triangle_sfx.audio.hash | ||
| noise_triangle_sfx.png | ||
| palette_and_background.audio.hash | ||
| palette_and_background.png | ||
| palette_brightness_demo.audio.hash | ||
| palette_brightness_demo.png | ||
| platformer.audio.hash | ||
| platformer.png | ||
| pong.audio.hash | ||
| pong.png | ||
| prng_demo.audio.hash | ||
| prng_demo.png | ||
| scanline_split.audio.hash | ||
| scanline_split.png | ||
| sfx_pitch_envelope.audio.hash | ||
| sfx_pitch_envelope.png | ||
| sha256.audio.hash | ||
| sha256.png | ||
| sprite_0_split_demo.audio.hash | ||
| sprite_0_split_demo.png | ||
| sprite_flicker_demo.audio.hash | ||
| sprite_flicker_demo.png | ||
| sprites_and_palettes.audio.hash | ||
| sprites_and_palettes.png | ||
| sram_demo.audio.hash | ||
| sram_demo.png | ||
| state_machine.audio.hash | ||
| state_machine.png | ||
| structs_enums_for.audio.hash | ||
| structs_enums_for.png | ||
| two_player.audio.hash | ||
| two_player.png | ||
| uxrom_banked.audio.hash | ||
| uxrom_banked.png | ||
| uxrom_banked_to_banked.audio.hash | ||
| uxrom_banked_to_banked.png | ||
| uxrom_user_banked.audio.hash | ||
| uxrom_user_banked.png | ||
| vram_buffer_demo.audio.hash | ||
| vram_buffer_demo.png | ||
| war.audio.hash | ||
| war.png | ||