d237d692

Author: Michael Lynch <git@mtlynch.io>

Add background music and sound effects

The game now plays a calm looping soundtrack in the spirit of Stardew
Valley, plus sound effects for arm swings (a short grunt), boulder
breaks (a rumbling crush), and tree hits (a wooden thunk). Remote
players' swings and breaks are audible too, driven by the same
broadcast events that already animate them.

There are still no audio assets: a new Sounds class synthesizes every
voice at runtime with the Web Audio API, matching how the game
generates all of its textures in code. Phaser's sound manager stays
disabled. The AudioContext is created lazily on the first in-game
input, since browsers keep audio suspended until a user gesture and a
returning player boots straight into the game without one.

Music runs on a frame-driven lookahead scheduler against the audio
clock, so the eight-bar loop is seamless and drift-free, and stale
beats are skipped rather than burst-played after a hidden tab
returns.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>