52ebb78862
- 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>
2.5 KiB
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 tweentea_pot.gd→ in_start_pouring(), before tweencradle.gd→ in_start_rocking(), before tweengift_box.gd→ in_start_opening()(the method that starts the animation)ambulance.gd→ in the drive-in animation method, before tweendelivery_bed.gd→ when mama starts arriving, before tweeninteractive_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)