Add music.mp3 looping BGM on map, pause during questions, 🎵/🔇 mute toggle in header

This commit is contained in:
justin committed 2026-05-14 12:59:55 -07:00
1 parent 457b1c3280
commit 8d5a4d2c0e
3 files changed
+56 -2

No files matched your search

+44 -1
View File
@@ -52,6 +52,45 @@ function saveGame(s) {
function loadGame() { try { const r=localStorage.getItem(SAVE_KEY); return r?JSON.parse(r):null; } catch(_){return null;} }
function clearSave() { try { localStorage.removeItem(SAVE_KEY); } catch(_){} }
/* ─── BACKGROUND MUSIC ───────────────────────────────────── */
const Music = (() => {
let audio = null;
let muted = false;
function getAudio() {
if (!audio) {
audio = new Audio('./music.mp3');
audio.loop = true;
audio.volume = 0.5;
}
return audio;
}
function updateBtn() {
const btn = document.getElementById('music-toggle');
if (!btn) return;
btn.textContent = muted ? '🔇' : '🎵';
btn.classList.toggle('muted', muted);
}
return {
play() {
if (muted) return;
const a = getAudio();
if (a.paused) a.play().catch(() => {});
},
pause() {
if (audio) audio.pause();
},
toggle() {
muted = !muted;
updateBtn();
if (muted) Music.pause();
else Music.play();
},
};
})();
/* ─── CHIPTUNE SOUND ENGINE ──────────────────────────────── */
const SFX = (() => {
let ctx = null;
@@ -740,12 +779,15 @@ class Game {
this._placeMapSprites();
this._updateDirArrow(false);
SFX.overworldStart();
Music.play();
saveGame(this.state);
this.flashSaveDot();
const npcEl2 = document.getElementById('map-npc');
if (npcEl2) npcEl2.onclick = ()=>this._talkToNPC();
const musicBtn = document.getElementById('music-toggle');
if (musicBtn) musicBtn.onclick = () => Music.toggle();
});
}
@@ -774,6 +816,7 @@ class Game {
this.show('battle');
this._showController(true);
Music.pause();
this.state.answering=false;
this.state.cursor=0;