O opolyx ganhou voz: efeitos sonoros e um botão de silenciar
O jogo era completamente mudo. Agora os dados, os peões, o dinheiro, o cronômetro do leilão e a fanfarra de vitória têm som — e um botão desliga tudo.

Em palavras simples
Até esta atualização o opolyx não emitia som algum. Não era um jogo discreto: era literalmente mudo, sem nenhum áudio em lugar nenhum do aplicativo. Tirar um seis e ir à falência soavam exatamente igual.
Agora os momentos que importam são audíveis. Nada fica em loop nem toca ao fundo — cada som está ligado a algo que acabou de acontecer no tabuleiro:
- os dados, no instante em que você aperta Lançar — e de novo quando eles param nos seus números;
- seu peão, um passo por casa enquanto dá a volta no tabuleiro;
- o dinheiro trocando de mãos: aluguel, imposto, compra de uma casa, construção;
- o cronômetro do leilão nos últimos cinco segundos do seu lance;
- a roleta do Jackpot e a fanfarra ao vencer ou perder uma partida.
O som vem ligado. Se você preferir jogar em silêncio, o botão de alto-falante na barra superior desliga tudo com um clique, e sua escolha fica guardada naquele dispositivo — é a primeira preferência que o opolyx salva para você.
Os clipes que publicamos no YouTube, Instagram e TikTok também eram mudos. Agora eles trazem os mesmos sons do jogo, então uma falência no clipe soa como uma falência na mesa.
Para os mais técnicos
A reprodução usa Web Audio em vez de um elemento de áudio por som. Os buffers decodificados dão polifonia (dados caindo por cima de um passo do peão), agendamento com precisão de amostra e cabem na política de segurança de conteúdo já existente — todos os arquivos são servidos do nosso próprio domínio.
Qual som corresponde a qual evento é decidido por um switch exaustivo sobre a união de eventos do motor, de modo que acrescentar um evento novo quebra a checagem de tipos até alguém decidir se ele deve soar:
// 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
}
}Quatro sons são guiados pelo tempo e não pelo evento, porque o evento do servidor não é o instante em que o jogador percebe a ação. O lançamento dispara no clique (0 ms), a aterrissagem ao fim do assentamento dos dados 3D, o passo a cada casa da fila de saltos do peão, e vitória ou derrota quando a tela de resultado é montada.
| Som | Disparado por |
|---|---|
| dice-roll | o clique, não a resposta do servidor |
| dice-land | o fim da animação de assentamento dos dados 3D |
| move-step | cada casa da fila de saltos do peão |
| tick | os últimos 5 segundos do seu turno ou lance |
| victory / defeat | a montagem da tela de resultado |
Os 26 arquivos são CC0, aparados, normalizados para pico de −3 dBFS e codificados em MP3 mono — MP3 e não Ogg porque o Safari do iOS não consegue decodificar Ogg Vorbis. O script de build confere o pico depois da codificação: uma versão anterior chegou a gerar arquivos com a duração e o tamanho certos e nenhum som audível, porque um filtro de fade havia silenciado tudo além da sua janela.
