opolyx kini bersuara: efek suara dan tombol bisu
Gamenya benar-benar tanpa suara. Kini dadu, bidak, uang, hitung mundur lelang, dan nada kemenangan semuanya berbunyi — dengan satu tombol untuk mematikan semuanya.

Dengan bahasa sederhana
Sampai pembaruan ini opolyx sama sekali tidak mengeluarkan suara. Bukan permainan yang tenang — benar-benar bisu: tidak ada audio di mana pun dalam aplikasi. Melempar angka enam dan jatuh bangkrut terasa persis sama.
Sekarang momen-momen penting bisa didengar. Tidak ada yang berulang, tidak ada yang berbunyi di latar — setiap suara terikat pada sesuatu yang baru saja terjadi di papan:
- dadu, tepat saat Anda menekan Lempar — dan sekali lagi saat dadu berhenti di angkanya;
- bidak Anda, satu langkah per petak saat mengelilingi papan;
- uang yang berpindah tangan: sewa, pajak, membeli petak, membangun;
- hitung mundur lelang pada lima detik terakhir tawaran Anda;
- roda Jackpot, dan nada saat Anda memenangkan atau kalah dalam satu permainan.
Suara aktif secara bawaan. Jika Anda lebih suka bermain tanpa suara, tombol pengeras suara di bilah atas mematikan semuanya dengan sekali klik, dan pilihan Anda diingat di perangkat itu — ini preferensi pertama yang pernah disimpan opolyx untuk Anda.
Klip sorotan yang kami unggah ke YouTube, Instagram, dan TikTok pun tadinya bisu. Kini klip membawa isyarat suara yang sama seperti di dalam game, sehingga kebangkrutan di klip terdengar seperti kebangkrutan di meja.
Untuk yang ingin tahu teknisnya
Pemutaran memakai Web Audio, bukan satu elemen audio untuk tiap suara. Buffer yang sudah didekode memberi polifoni (dadu mendarat di atas langkah bidak), penjadwalan presisi sampel, dan tetap sesuai kebijakan keamanan konten yang ada — semua berkas disajikan dari domain kami sendiri.
Suara mana untuk peristiwa mana ditentukan oleh switch menyeluruh atas gabungan tipe peristiwa mesin permainan, sehingga menambah peristiwa domain baru akan menggagalkan pemeriksaan tipe sampai seseorang memutuskan apakah peristiwa itu berbunyi:
// lib/sound/events.ts — exhaustive over DomainEvent['kind']
export function soundForEvent(e: DomainEvent, viewerSlot: number | null): SoundId | null {
switch (e.kind) {
case 'rent_paid':
return e.payload.amount >= BIG_RENT ? 'cash-big' : 'cash';
case 'player_bankrupt':
return 'bankrupt';
// …every kind handled; no default, so a new event is a type error
}
}Empat isyarat digerakkan oleh waktu, bukan oleh peristiwa, karena peristiwa dari server bukanlah saat pemain merasakan aksinya. Lemparan berbunyi saat klik (0 md), pendaratan saat animasi dadu 3D selesai mengendap, langkah pada tiap petak dalam antrean lompat bidak, dan menang/kalah saat layar hasil dimuat.
| Isyarat | Berbunyi saat |
|---|---|
| dice-roll | klik, bukan respons server |
| dice-land | akhir animasi mengendapnya dadu 3D |
| move-step | setiap petak dalam antrean lompat bidak |
| tick | 5 detik terakhir giliran atau tawaran Anda sendiri |
| victory / defeat | saat layar hasil dimuat |
Ke-26 berkas berlisensi CC0, dipangkas, dinormalisasi ke puncak −3 dBFS, dan dikodekan sebagai MP3 mono — MP3 alih-alih Ogg karena Safari di iOS tidak dapat mendekode Ogg Vorbis. Skrip build memeriksa puncak setelah pengodean: versi sebelumnya sempat menghasilkan berkas dengan durasi dan ukuran yang benar tetapi tanpa suara sama sekali, karena sebuah filter fade membisukan segala sesuatu setelah jendelanya.
