Files
tiennm99 c2c8ad0ab2 feat(assets,audio): regenerate broken keyart/welcome, add VI voices, wire BGM
Asset review + regeneration
- Regenerate keyart-palace.png to remove STUDIOSWAG watermark
- Regenerate keyart-portrait.png as true 16-bit pixel art (was 3D/cinematic)
- Regenerate vi-welcome.mp3 as a 31KB short line (was 808KB misplaced story)
- Generate 10 missing VI voice lines (levelclear, princess-help, princess-run,
  gameover, 6 act intros) in Vietnamese_kindhearted_girl
- Replace broken PHASER logo + 16x16 favicon with proper NNTV wordmark + 32x32
  rabbit sprite
- Add UI scene backgrounds (scene-menu/story/guide/settings) for in-app use
- Add 6 keyart images (1280x720) + portrait (1024x1024) + poster for store/social
- Delete orphan assets: bg.png, nntv-generated-sheet.png, scraps/sketch.napkin
- Add MANIFEST.json + MEDIA.json documenting the asset corpus

BGM integration
- New src/lib/bgm.js: HTMLAudioElement BGM manager with 600ms crossfade,
  per-track loop, autoplay-blocked fallback, persistent sfxMuted/bgmMuted/
  bgmVolume in localStorage (key: nntv-audio-settings)
- App.svelte scene router picks the track per scene; L12 uses the climactic
  chamber track, all other Game scenes use the levels loop
- audio.js: setMuted/isMuted now mirror bgm.js so GameHud's SND/MUTE button
  silences both SFX and BGM (master toggle)
- Settings.svelte: new Audio panel with SFX toggle, BGM toggle, BGM volume
  slider (0-100%, disabled when BGM is off); bilingual
- MainMenu/StoryIntro/Guide/Settings: top band scene backdrops at ~0.5 opacity
- New i18n keys: audioSettings, sfxLabel, bgmLabel, volumeLabel, on, off,
  muted, sound (en + vi)
- GameHud label localized (SND / MUTED)

Tests: 180/180 passing. Build: clean (139KB JS / 28KB CSS gzipped).
2026-06-17 17:08:50 +07:00
..