opolyx a enfin une voix : des effets sonores et un bouton muet
Le jeu était totalement silencieux. Les dés, les pions, l’argent, le compte à rebours des enchères et la fanfare de victoire ont désormais un son — et un seul bouton coupe tout.

En clair
Jusqu’à cette mise à jour, opolyx n’émettait aucun son. Pas un jeu discret : un jeu littéralement muet, sans le moindre fichier audio dans toute l’application. Faire un six et se retrouver ruiné donnaient exactement la même impression.
Les moments qui comptent s’entendent maintenant. Rien ne tourne en boucle, rien ne joue en fond : chaque son correspond à quelque chose qui vient de se produire sur le plateau.
- les dés, à l’instant où vous appuyez sur Lancer — puis de nouveau quand ils se posent sur leurs chiffres ;
- votre pion, un pas par case pendant qu’il fait le tour du plateau ;
- l’argent qui change de mains : loyer, impôt, achat d’une case, construction ;
- le compte à rebours des enchères pendant les cinq dernières secondes de votre offre ;
- la roue du Jackpot, et la fanfare quand vous gagnez ou perdez une partie.
Le son est activé par défaut. Si vous préférez jouer en silence, le bouton haut-parleur de la barre supérieure coupe tout en un clic, et votre choix est mémorisé sur cet appareil : c’est le tout premier réglage qu’opolyx conserve pour vous.
Les clips que nous publions sur YouTube, Instagram et TikTok étaient muets eux aussi. Ils reprennent désormais les sons du jeu : une faillite dans un clip sonne comme une faillite à la table.
Pour les curieux techniques
La lecture repose sur Web Audio plutôt que sur un élément audio par son. Les tampons décodés permettent la polyphonie (des dés qui se posent par-dessus un pas de pion), une planification à l’échantillon près, et restent conformes à la politique de sécurité du contenu existante : tous les fichiers sont servis depuis notre propre domaine.
Le son associé à chaque événement est déterminé par un switch exhaustif sur l’union des événements du moteur : ajouter un nouvel événement casse la vérification de types tant que personne n’a décidé s’il devait produire un son.
// 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
}
}Quatre sons dépendent du minutage et non de l’événement, car l’arrivée de l’événement serveur ne correspond pas au moment où le joueur perçoit l’action. Le lancer se déclenche au clic (0 ms), l’atterrissage à la fin de la stabilisation des dés 3D, le pas à chaque case de la file de sauts du pion, et la victoire ou la défaite au montage de l’écran de résultats.
| Son | Déclenché par |
|---|---|
| dice-roll | le clic, pas la réponse du serveur |
| dice-land | la fin de l’animation des dés 3D |
| move-step | chaque case de la file de sauts du pion |
| tick | les 5 dernières secondes de votre tour ou de votre offre |
| victory / defeat | le montage de l’écran de résultats |
Les 26 fichiers sont en CC0, rognés, normalisés à un pic de −3 dBFS et encodés en MP3 mono — du MP3 et non de l’Ogg, car Safari sur iOS ne sait pas décoder l’Ogg Vorbis. Le script de build vérifie le pic après encodage : une version antérieure produisait des fichiers de bonne durée et de bonne taille, totalement inaudibles, parce qu’un filtre de fondu avait rendu silencieux tout ce qui suivait sa fenêtre.
