Shell Tide · Tài liệu sản xuất âm thanh

Danh mục audio cho Full Rescue v2

Production manifest cho toàn bộ hành trình nghe được: UI → đọc FLOW → commit lượt → Xoáy/Capture → combo → Full Rescue → kết quả và trở về map. Mục tiêu âm thanh là làm luật dễ hiểu trước, tạo dopamine sau, không che mất nhịp suy nghĩ của puzzle.

96 source cue74 cue P022 cue P17 music cue8 ambience cueStarfish-only
North Star âm thanhĐỌC LUẬT → TÍCH NHỊP → GIẢI PHÓNG → CHĂM SÓC
1 · Đọc luật

Preview, STOP và Current nghe khác nhau.

2 · Tích nhịp

Sow tick tạo nhịp và anticipation.

3 · Giải phóng

Xoáy, rescue, combo tăng payoff theo tầng.

4 · Chăm sóc

Full Rescue kết bằng cảm giác an toàn, ấm và nhẹ.

Nguồn thiết kế và phạm vi sản xuất

Danh mục này đối chiếu GDD chính với working branch Full Rescue v2 ngày 2026-07-12.

Ưu tiên gameplay

Full Rescue GDD v2

Mọi sao biển đều phải rời board. L1–L3 dạy Capture thuần; L4 mở Final Tide Sweep; L5 mở Wet pit; L8 mở Current Arrow; L9 nhấn Ripple Preview; L10 là Đại Xoáy tổng hợp.

Ưu tiên presentation

GDD Shell Tide hiện tại

Giữ art direction biển nhiệt đới, menu/map, Bạn Đồng Hành, caregiving fantasy và nhịp cảm xúc của hành trình cứu hộ. Không kéo các luật cũ chưa có trong v2 vào P0.

Trạng thái hiện tại

Audio Lab là prototype, chưa phải asset delivery

shell-tide-audio.js đang tổng hợp cue bằng WebAudio để kiểm tra timing và event contract. Các tên file bên dưới là danh mục cần thu/thiết kế, edit, mix, export và tích hợp thành asset production.

74P0 · bản Full Rescue v2
22P1 · menu, map, meta, companion
5Bus runtime
96Source cue cần bàn giao
Scope rule: một cue chỉ vào P0 nếu player có thể kích hoạt nó trong vertical slice Full Rescue v2. Music, ambience và companion giữ P1 khi chưa có trigger runtime xác nhận.

Creative direction và sonic palette

Âm thanh sạch, mát, hữu cơ và giàu chuyển động nước; không biến puzzle thành arcade ồn liên tục.

Water

Nước có ba kích thước

Ripple nhỏ cho preview, splash vừa cho capture, surge rộng cho Sweep. Tránh dùng cùng một splash rồi chỉ tăng volume.

Sand & shell

Chạm khô, ngắn, sáng

UI/pit dùng shell click, hạt cát mịn và wood tick mềm. Không dùng impact kim loại hoặc click quá sắc.

Caregiving

Rescue có “sự sống”

Plop nước kết hợp mallet/bell ấm; tuyệt đối tránh tiếng kêu đau hoặc âm comic làm sinh vật thành đồ vật.

Harmony

Ngũ cung trưởng, không quá trẻ con

Marimba mềm, kalimba, glass, ukulele muted, hand percussion nhẹ và pad nước. Combo đi lên theo cùng key với music.

Clarity

Mỗi luật có một fingerprint

STOP = knock trầm ngắn; Current = whoosh đảo stereo; Wet pit = downward plop; Capture = inward suction rồi splash.

Restraint

Khoảng trống là một phần của mix

Không phát cue cho mọi hover trên touch. Không chồng objective, combo và win cùng lúc; sequencing giữ payoff đọc được.

Chuẩn đặt tên và bàn giao

Mỗi source cue có một master WAV; runtime encode từ cùng source để tránh lệch version.

Hạng mụcContractVí dụ
Tên filest_[bus]_[system]_[action]_[variant]_v01.wav; lowercase, ASCII, không khoảng trắng.st_sfx_capture_vortex_large_01_v01.wav
Source masterWAV 48 kHz / 24-bit. Mono cho UI/focused gameplay; stereo cho ambience, wide payoff và music.Archive theo audio/source/.
RuntimeƯu tiên Ogg Opus VBR: SFX mono 48 kbps, SFX directional stereo 64 kbps, ambience stereo 80 kbps, music stereo 112 kbps. Giữ OGG Vorbis làm fallback; WAV chỉ là source master.game/audio/runtime/*.opus · *.ogg fallback.
LoopLoop point sample-accurate; không click; thêm metadata loop start/end trong manifest.*_loop_v01.wav
Head/tailUI ≤ 20 ms silence đầu; gameplay ≤ 35 ms; tail không bị cắt. Cue phản hồi input phải có transient trước 80 ms.Preview/commit ưu tiên latency.
Biến thểRandom không lặp lại file vừa phát; pitch random chỉ ±2% trừ sow/combo đã ghi khác.01–06 là variant, không phải intensity.
Busmaster, music, ambience, sfx, coach.Lưu riêng mute/volume theo browser.

P0 · UI SFX — 14 file

UI phải nhất quán giữa menu, map, gameplay HUD, pause và result. Không dùng gameplay splash làm button sound.

PriorityFile productionTriggerDirection / mix
P0st_sfx_ui_tap_{01,02,03}_v01.wavButton/link hợp lệ, chọn tab, đóng toast.Shell click 55–90 ms; random 3 variant; không phát trên disabled.
P0st_sfx_ui_back_01_v01.wavBack, close modal bằng nút hoặc Escape.Pitch đi xuống nhẹ; mono; không giống fail cue.
P0st_sfx_ui_panel_{open,close}_01_v01.wavPause/settings/result panel mở hoặc đóng.Whoosh giấy/vỏ sò ngắn; open sáng, close tối hơn.
P0st_sfx_ui_toggle_{on,off}_01_v01.wavMusic/SFX/ambience/reduce-motion toggle.On có sparkle nhỏ; off khô hơn; cue phát trước khi mute master.
P0st_sfx_ui_confirm_01_v01.wav
st_sfx_ui_cancel_01_v01.wav
Confirm destructive action / cancel dialog.Confirm chắc nhưng không nặng; cancel trung tính.
P0st_sfx_ui_invalid_{01,02}_v01.wavChọn hố rỗng, thao tác không hợp lệ, button locked.Soft wood knock; cooldown 120 ms; không dùng buzzer đỏ.
P0st_sfx_ui_pause_01_v01.wav
st_sfx_ui_restart_confirm_01_v01.wav
Pause gameplay; xác nhận retry/restart.Pause duck bus 3 dB; restart có upward pickup để quay lại nhanh.

P0 · Gameplay core — 35 file

Chuỗi âm phải giải thích đúng state machine: pick → preview → STOP → commit → sow → rescue/capture → objective.

PriorityFile productionRuntime event / triggerDirection / behavior
P0st_sfx_pit_pick_{01,02,03}_v01.wavcup.pick khi chọn sand node có sao.Cát + shell lift, 90–140 ms; chọn lại không tăng pitch vô hạn.
P0st_sfx_pit_commit_{01,02}_v01.wavcup.drop khi legal move được commit.Transient chắc hơn pick; là mốc tính một turn.
P0st_sfx_route_preview_{left,right}_01_v01.wavroute.preview khi route trái/phải xuất hiện.Pan ±20%; cùng timbre, contour khác hướng; debounce 80 ms.
P0st_sfx_route_stop_01_v01.wavroute.stop khi STOP marker khóa vị trí.Water knock trầm, 120 ms; luôn rõ hơn preview nhưng dưới commit.
P0st_sfx_sow_tick_{01,02,03,04,05,06}_v01.wavsow.tick cho từng sao được rải.Round-robin; pitch theo index tối đa +5 semitone rồi reset; polyphony 4.
P0st_sfx_wet_pit_rescue_{01,02,03}_v01.wavSao đi vào Wet pit từ L5.Downward water plop + chime; không dùng capture splash vì không có Xoáy.
P0st_sfx_vortex_form_{01,02}_v01.wavXoáy hợp lệ hình thành trước khi hút cụm.Inward suction 180–260 ms; sync frame vortex form; duck sow tick 2 dB.
P0st_sfx_capture_vortex_{small,medium,large}_01_v01.wavcapture.splash, chọn intensity theo số sao 1–2 / 3–4 / 5+.Không chỉ tăng gain; large thêm low-water body, vẫn giữ transient mềm.
P0st_sfx_rescue_starfish_{01,02,03,04}_v01.wavrescue.starfish khi sao vào Vùng Nước An Toàn.Plop + mallet ấm; tối đa 4 note/turn, số dư gộp thành chord.
P0st_sfx_current_redirect_{left,right}_01_v01.wavcurrent.redirect ở L8.Whoosh stereo đảo chiều, có tonal flip; phải nghe được ngay cả khi không nhìn arrow.
P0st_sfx_ripple_preview_01_v01.wavbooster.ripplePreview ở L9/booster.Glass-water scan 350 ms; không cadence thắng, không gợi route tốt nhất.
P0st_sfx_turn_warning_01_v01.wavturn.warning khi còn 2 lượt và lần đầu còn 1 lượt.Hai pulse mềm; cooldown theo state, không phát lại mỗi render.
P0st_sfx_objective_progress_{01,02}_v01.wavobjective.progress sau khi counter rescue cập nhật.Chime rất ngắn; bỏ qua nếu Full Rescue để nhường win sequence.
P0st_sfx_final_sweep_start_01_v01.wav
st_sfx_final_sweep_loop_01_v01.wav
st_sfx_final_sweep_end_01_v01.wav
Final Tide Sweep từ L4: start → sweep cụm cuối → arrive.Ba phần để sync duration board; loop 0.6–1.2 s; end nối trực tiếp Full Rescue stinger.

P0 · Combo và mastery payoff — 8 file

Combo dùng hệ cao độ tăng dần nhưng vẫn nghe như nước cứu hộ, không biến thành slot machine.

PriorityFile productionTriggerThiết kế tầng dopamine
P0st_sfx_combo_chain_x{2,3,4,5}_01_v01.wavcombo.wave theo capture chain; x5 là cap audio.Cùng motif 2/3/4/5 note; mỗi tầng tăng brightness và width, không tăng quá 2 dB.
P0st_sfx_combo_tidal_rush_01_v01.wavcombo.tidalRush cho chain 3+ nổi bật.Accent phủ lên chain tier, không thay toàn bộ cue; duck music 5–7 dB trong 0.8 s.
P0st_sfx_combo_perfect_tide_01_v01.wavcombo.perfectTide khi Full Rescue đúng optimal turns.Cadence mastery sáng; phát trước result star reveal khoảng 180 ms.
P0st_sfx_combo_last_tide_save_01_v01.wavcombo.lastTideSave khi cứu sạch ở lượt cuối.Release sau tension: low swell → major resolve; không dùng alarm.
P0st_sfx_combo_grand_vortex_01_v01.wavL10 Đại Xoáy / gate finale.Signature cue 1.6–2.2 s; vortex, shell horn mềm và wave impact; chỉ dùng một lần/clear.
Sequencing: vortex_formcapture_vortexrescue_starfishcombo_chain. Với Full Rescue, bỏ objective_progress, chờ tail rescue 120–180 ms rồi mới phát mastery/win.

P0 · Kết quả level — 9 file

Rating chỉ xuất hiện sau Full Rescue; cue 1★/2★/3★ không được phát khi board chưa sạch.

PriorityFile productionTriggerDirection / timing
P0st_sfx_result_full_rescue_01_v01.wavremainingStarfish === 0, sau rescue cuối.Signature “all safe” 0.8–1.1 s; dùng trước star rating.
P0st_sfx_result_rating_{1,2,3}star_01_v01.wavlevel.win theo band lượt.Chung cadence, thêm lớp theo số sao; 3★ không lớn gấp ba 1★.
P0st_sfx_result_fail_01_v01.wavlevel.fail khi hết lượt còn sao.Gentle unresolved chord; không bass drop, không âm phạt.
P0st_sfx_result_near_miss_01_v01.wav
st_sfx_result_near_miss_replay_01_v01.wav
nearMissnearMiss.replay.Near-miss chỉ cụm còn thiếu; replay là watery rewind ngắn, không tiết lộ exact move.
P0st_sfx_result_retry_confirm_01_v01.wavretry.confirm.Pickup 180 ms, nối sạch sang reset ambience/gameplay bed.
P0st_sfx_result_gate_complete_01_v01.wavlevel.gate.complete sau clear L10.Tail 2–3 s, có khoảng trống cho visual gate; sau đó mới chuyển map/music.

P0/P1 · Music — 7 file

Music hỗ trợ concentration; gameplay loop không được cạnh tranh với sow tick, Current hoặc combo.

PriorityFile productionPlacementBrief composition
P1st_mus_menu_sunlit_shore_loop_v01.wavMain menu / album.92 BPM, major pentatonic, ukulele muted + glass + surf pad; loop 60–75 s.
P1st_mus_map_rescue_journey_loop_v01.wavMap level / future hub.88 BPM; motif hành trình rõ hơn menu; loop 60–90 s, không resolve liên tục.
P0st_mus_gameplay_calm_current_loop_v01.wavL1–L6, puzzle state bình thường.84 BPM; mallet tối giản, shaker nhẹ, nhiều khoảng trống; loop 75–90 s.
P0st_mus_gameplay_mastery_tide_loop_v01.wavL7–L9 hoặc state mastery.Cùng key/motif với calm, thêm syncopation và marimba; crossfade 1.5 s.
P0st_mus_finale_grand_vortex_loop_v01.wavL10.96 BPM, shell drum mềm + low surf pulse; tension có kiểm soát, không boss combat.
P0st_mus_result_full_rescue_stinger_v01.wavFull Rescue result.3–4 s; nhận motif gameplay và resolve ấm; nhường chỗ cho rating cue.
P0st_mus_result_gentle_retry_stinger_v01.wavFail / near-miss result.2–3 s, unresolved nhưng hopeful; không dùng minor sad piano.
Adaptive rule: chưa cần middleware music phức tạp. Dùng hai gameplay loop cùng key, crossfade theo nhóm level; duck 5–8 dB cho Full Rescue, Tidal Rush, companion motif và gate finale.

P0/P1 · Ambience — 8 file

Ambience tạo không gian biển nhưng phải nằm sau gameplay information. Gull và wind không được che preview/STOP ở loa điện thoại.

PriorityFile productionPlacementBehavior
P1st_amb_beach_day_loop_v01.wavMenu/map base.Stereo 60–90 s; surf xa, cát, không gull baked-in.
P0st_amb_shore_soft_loop_v01.wavGameplay base.Stereo 45–60 s; low-mid sạch; duck 3–5 dB khi payoff.
P0st_amb_reservoir_water_loop_v01.wavHồ/Vùng Nước An Toàn.Layer gần, loop 30–45 s; gain theo camera/scene, không theo số sao.
P1st_amb_palm_wind_loop_v01.wavMap/menu optional layer.High-cut để không hiss trên mobile; random gain chậm.
P1st_amb_gull_distant_{01,02,03}_v01.wavOne-shot map/menu.Random 12–25 s; không phát trong result hoặc tutorial L1.
P0st_amb_wet_pit_subtle_loop_v01.wavBoard có Wet pit từ L5.Layer rất nhẹ, có thể positional; dừng khi scene unload, không cần một loop cho mỗi pit.

P1 · Meta progression và Bạn Đồng Hành — 15 file

Sản xuất sau khi vertical slice Full Rescue v2 khóa trigger; giữ event contract hiện có để không mất đường tích hợp.

PriorityFile productionRuntime eventDirection
P1st_sfx_meta_chest_open_01_v01.wav
st_sfx_meta_tide_bond_earned_01_v01.wav
st_sfx_meta_coach_unlock_01_v01.wav
st_sfx_meta_map_node_unlock_01_v01.wav
st_sfx_meta_map_restore_01_v01.wav
progress.chest.open, progress.tideBond.earned, progress.coach.unlock, map.node.unlock, map.restore.Cùng tonal family; restore lớn hơn unlock nhưng không lớn hơn gate finale.
P1st_sfx_secret_{reveal,activate,progress,complete}_01_v01.wavBốn event secret.*.Glass-shell motif bí mật; progress có thể pitch theo ratio, complete resolve đầy đủ.
P1st_coach_dolphin_{intro,cheer}_01_v01.wavcoach.dolphin.intro, coach.dolphin.cheer.Hai chirp nước nhanh, sáng; không giả tiếng cá heo tự nhiên quá gắt.
P1st_coach_turtle_{hint,recap}_01_v01.wavcoach.turtle.hint, coach.turtle.recap.Wood/marimba trầm, chậm; recap bình tĩnh, không phán xét.
P1st_coach_whale_{calm,gate}_01_v01.wavcoach.whale.calm, coach.whale.gate.Low harmonic swell; mono-compatible; tránh sub dưới 80 Hz trên mobile.

Mapping event runtime → asset

Adapter giữ event semantic; sound engine chọn variant/intensity và chịu trách nhiệm cooldown, polyphony, ducking.

Runtime eventAsset hoặc rule chọn fileDetail contractVoice policy
ui.tapst_sfx_ui_tap_01–03Không cần detail.Max 3 voice / 80 ms.
cup.pick / cup.droppit_pick_01–03 / pit_commit_01–02Source node optional.Pick thay voice cũ; commit không bị cắt.
route.previewroute_preview_left/right{ direction: -1 | 1 }Debounce 80 ms, thay preview cũ.
route.stoproute_stop_01Node index optional.Priority trên preview.
sow.tickRound-robin sow_tick_01–06 + pitch theo index.{ index: 0…n }Max 4 voice; không drop tick đầu/cuối.
capture.splashSize 1–2 small, 3–4 medium, 5+ large; form cue phát trước.{ size: 1…12 }Priority 3; duck ambience 2 dB.
combo.waveClamp tier x2–x5.{ combo: 2…5 }Một cue/tier/turn.
rescue.starfishRound-robin 4 variant; 1–4 note, lớn hơn gộp chord.{ count: 1…16 }Max 4 voice; priority dưới combo.
current.redirectcurrent_redirect_left/right{ direction: -1 | 1 }Không drop; pan capped ±35%.
level.winFull Rescue stinger → rating 1/2/3 star.{ perfect, rating }Ngắt gameplay loop bằng fade 250 ms.
level.fail / nearMissFail cue; near-miss thay bằng cue riêng nếu gate đạt.{ remaining, ratio } đề xuất.Không phát đồng thời hai cue.
level.gate.completeresult_gate_complete_01L10 only.Priority cao nhất; tail không bị scene cut.
Gap cần bổ sung vào runtime: event riêng cho wetPit.rescue, finalSweep.start/loop/end, combo.grandVortex và rating 1/2/3. Không map các state mới này tạm vào capture.splash vì sẽ làm sai nghĩa gameplay.

Mix hierarchy, performance và QA

Final mix được đánh giá trên loa điện thoại trước headphone.

Loudness

Headroom và bus target

Master gameplay khoảng −16 đến −14 LUFS-I, peak ≤ −1 dBTP. Music loop khoảng −20 LUFS-I, ambience −26 đến −24 LUFS-I; SFX chỉnh theo perceived loudness, không normalize từng file về cùng peak.

Priority

Information trước decoration

Gate/Full Rescue 5 → combo/capture 4 → commit/Current/STOP 3 → sow/UI 2 → ambience/music 1. Khi quá voice budget, drop ambience one-shot trước.

Ducking

Payoff có chỗ thở

Capture duck music 3 dB/0.35 s; combo 5–7 dB/0.8 s; Full Rescue/gate 8–9 dB/1.0–1.5 s.

Mobile

Mono-compatible

Kiểm tra speaker mono, low-volume và Bluetooth latency. Không đặt thông tin hướng chỉ bằng sub hoặc phase stereo.

Accessibility

Không audio-only

Mọi STOP, warning, Current, fail và Full Rescue vẫn có visual/text. Respect mute, reduce motion và page visibility.

Performance

Preload theo scene

UI + core gameplay preload trước level; finale/meta lazy-load. Decode trước input đầu; dispose loop/timer khi scene unload.

Checklist nghiệm thu sound pass

GateĐiều kiện pass
Luật nghe đượcBlind watch vẫn phân biệt preview, STOP, commit, Wet pit, Capture và Current.
Combo không vỡ mixChain x2–x5 tăng cảm giác nhưng master không pump, clip hoặc che rescue count.
L1 sạchKhông ambience one-shot dày, không warning thừa, không music accent giả hướng đúng.
L4/L5 đúng bàiSweep khác Capture; Wet pit khác Xoáy; player không hiểu nhầm hai mechanic.
L10 có signatureGrand Vortex → Full Rescue → gate complete là ba nhịp liên tục, không chồng thành một khối ồn.
LifecyclePause/tab hidden không tạo timer/loop trùng; retry 20 lần không tăng voice, CPU hoặc gain.
SettingsMute và 5 bus volume lưu đúng; toggle off không phát tail ngoài ý muốn.
ExportKhông click loop, không silence đầu quá chuẩn, metadata và version khớp manifest.

Deferred / legacy — không sản xuất trong P0 Full Rescue v2

Những cue dưới đây có trong GDD cũ hoặc event contract hiện tại nhưng chưa có trigger trong working branch v2.

Trạng tháiEvent / asset cũLý do giữ ngoài P0Điều kiện mở lại
HOLDsandLock.hit, sandLock.breakFull Rescue v2 không dùng Sand Lock; L10 tổng hợp luật đã học.Level pack v2 thêm blocker và solver proof bao gồm durability.
HOLDsunny.bonus và mọi Heat loop/alarmV2 dùng giới hạn lượt, không có timer thời gian thực; Sun Heat thuộc GDD cũ.Product owner khóa lại Environmental System trong runtime v2.
HOLDbooster.shellSwap, booster.rescueWaveKhông có trong Full Rescue v2; Rescue Wave làm yếu agency nếu tự cứu cụm cuối.Booster spec và solver contract được duyệt.
HOLDVO thoại dài cho AI companionJam scope ưu tiên motif non-verbal; VO kéo theo script, casting, localization và lip-sync.Dialogue list, ngôn ngữ, budget và recording plan được khóa.
HOLDDaily/weekly/streak/shop/gacha audioThuộc long-term retention, không nằm trong 10 level v2.Feature vào production backlog chính thức.