Files
Cozypaw-Hospital/docs/superpowers/specs/2026-05-10-sprint-21-object-sfx.md
T
Steven Wroblewski 52ebb78862 chore(audio): add download script, audio credits, and sprint 21/22 docs
- docs/download_audio.py: freesound batch downloader with all 22 confirmed IDs
  (API key removed — fill in locally from freesound.org)
- docs/credits-audio.md: generated CC-BY attribution table
- docs/superpowers/plans+specs: sprint 15, 21, 22 implementation plan/spec docs
- .claude/settings.json: enable experimental agent teams env var

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:57:27 +02:00

2.5 KiB

Sprint 21 — Interactive Object SFX Design Spec

Goal

Add SFX to all 6 tappable interactive objects. Each object makes a sound when its animation starts — XRay scan, TeaPot pour, Cradle rock, GiftBox open, Ambulance drive-in, DeliveryBed mama arrival. UltrasoundMachine is excluded (continuous auto-loop, not tap-triggered).

New SFX Events

7 new events added to AudioManager._SFX_MAP:

Event key Object Trigger
xray_scan XRayMachine _start_scan()
tea_pour TeaPot _start_pouring()
cradle_rock Cradle _start_rocking()
gift_open GiftBox _start_opening()
ambulance_siren Ambulance _drive_in()
delivery_cheer DeliveryBed mama arrives (_start_mama_arriving())
object_tap Generic fallback any tap on InteractiveObject base

Asset Specification

New files:

assets/audio/sfx/xray_scan.ogg        — electrical hum / machine beep
assets/audio/sfx/tea_pour.ogg         — liquid pouring
assets/audio/sfx/cradle_rock.ogg      — gentle creak / lullaby chime
assets/audio/sfx/gift_open.ogg        — unwrapping / pop
assets/audio/sfx/ambulance_siren.ogg  — short siren sting (<1.5s, child-friendly)
assets/audio/sfx/delivery_cheer.ogg   — happy chime / fanfare
assets/audio/sfx/object_tap.ogg       — soft tap / click

All CC0 or CC-BY from freesound.org. Placeholder 0-byte files committed; real downloads documented in docs/audio-assets-sprint19.md (extend existing file).

Integration Points

Each is a single AudioManager.play_sfx("key") call at the start of the action:

  • xray_machine.gd → in _start_scan(), before tween
  • tea_pot.gd → in _start_pouring(), before tween
  • cradle.gd → in _start_rocking(), before tween
  • gift_box.gd → in _start_opening() (the method that starts the animation)
  • ambulance.gd → in the drive-in animation method, before tween
  • delivery_bed.gd → when mama starts arriving, before tween
  • interactive_object.gd → in the base tap handler if one exists (object_tap)

Testing

Append to test/unit/test_audio_manager.gd:

  • test_sfx_map_has_all_interactive_object_keys — verifies all 7 new keys exist in _SFX_MAP

No per-object unit tests for SFX wiring — the calls are single-line, and the AudioManager Dummy-driver guard makes headless tests safe.

Out of Scope

  • UltrasoundMachine heartbeat sound (continuous loop, separate sprint)
  • Character reaction sounds (Häschen/Kätzchen — separate sprint)
  • Per-state-transition sounds (e.g., XRay completion sound)