designing-retro-arcade-sound-kits
Installation
SKILL.md
Use this skill to design a compact, era-authentic arcade sound kit and prove it stays event-like rather than turning into background music. It assumes an event-boundary architecture: game logic emits abstract event names and a separate audio layer resolves each event to a program and plays it.
Core Rules
- Event boundary. Game code emits abstract event names (e.g.
emit("laser")); it never instantiates or calls the synth directly. The audio layer owns the event -> program mapping and playback. - Design from gameplay moments, not synth presets. List the moments the player must hear first, then decide which need sound.
- Classify each moment as SE, jingle, or nothing. Do not give every state transition a sound.
- SE = short, repeated gameplay feedback: player actions (shot, dash, place, rotate, confirm), consequences (hit, block, collect, miss, split, capture), warnings (low timer, nearby threat, invalid move), and ambient events that affect play (spawn, wave step).
- Jingle = rare state changes that should read as a musical phrase: start/ready, bonus or major reward, wave/stage clear, danger entering a new phase, final miss / game over.
- Keep it readable under load. Repeated SEs must stay distinct when several fire in one frame; rare jingles must not mask player-control feedback.
- Write a one-line sound target before coding each sound (e.g.
// wave clear: rising 5-note glassy arpeggio). Author to the target, not to whatever the synth happens to produce. - Per-game identity. Each game ships its own kit; do not reuse a sample kit unchanged, and derive variants from your own programs, not from another game's.
- Era authenticity. Recombine a fixed primitive set (oscillators, LFSR/metallic noise, distortion, bit-crush) through one fixed, clamped master chain. Add no new synth primitives, no samples, no long modern tracks. The fixed master chain is what keeps the "1980 board" character regardless of how a kit is built.