Le journal de partie cesse de tout raconter
Un seul lancer de dés imprimait cinq lignes, dont deux nommaient la même case. Le fil se lit désormais comme un commentaire plutôt que comme un procès-verbal — et rien n’a été supprimé pour cela.
En clair
Le panneau à côté du plateau notait absolument tout ce que faisait le jeu. Un lancer ordinaire produisait cinq lignes distinctes — a lancé, s’est déplacé, est arrivé, a fini son tour, et souvent une de plus — dont deux nommaient la même case. Multipliez cela par quatre joueurs et trente tours et le fil devenait un mur qu’on cessait de lire, ce qui est dommage, car les deux ou trois lignes qui comptaient vraiment étaient dedans, quelque part.
Désormais, un lancer et tout ce qu’il entraîne forment une seule ligne. Arriver sur une case, finir son tour, annoncer une dette avant de la payer, refuser un achat avant l’ouverture de l’enchère : plus rien de tout cela n’est dit à voix haute, parce que le plateau ou la ligne suivante le dit déjà. Une série de constructions sur un même terrain se replie en une ligne, une enchère sans concurrent cesse d’annoncer deux fois le même montant, et en Speed le décompte de l’hypothèque ne se manifeste que lorsqu’il reste deux tours pour agir.
Vos messages de discussion ne sont plus poussés hors de l’écran non plus. Le panneau ne gardait qu’une seule fenêtre d’historique pour tout, si bien qu’un plateau animé pouvait discrètement chasser ce qu’une personne avait écrit. L’activité et la discussion sont désormais conservées séparément, et aucune quantité de dés ne peut enterrer un message réellement écrit.
Pour les curieux techniques
Filtrer à la source n’a jamais été envisageable. Rejouer une partie consiste à replier le journal complet des événements en un état, et c’est ainsi que fonctionnent le rechargement de page, le mode spectateur, la vue de rediffusion et le rendu des clips. Supprimez un événement pour embellir le fil et vous corrompez tout cela. Le journal reste donc entier et la condensation ne concerne que l’affichage, dans un unique constructeur partagé par le plateau en direct, la vue spectateur, les rediffusions, les clips et la version hors ligne.
Ce que chaque événement fait au fil est un switch exhaustif sur les types d’événements du moteur : un nouveau type ne compile donc pas tant que quelqu’un n’a pas décidé comment il doit se lire :
// lib/game/feedDigest.ts — an exhaustive switch over every engine event
case 'dice_rolled':
return 'move'; // the roll opens a line
case 'moved':
case 'passed_start':
case 'jail_attempt_failed':
return 'absorb'; // …and what it caused folds into that line
case 'landed': // names the cell 'moved' just named
case 'turn_ended': // the board already shows whose turn it is (14% of events)
case 'payment_due': // the intent; 'debt_paid' is the settlement, with the amount
case 'buy_declined': // always followed by 'auction_started', which says it better
case 'auction_passed':// carries no information, and outnumbers real bids 2:1
return 'hidden';Deux bugs sont apparus qu’aucun test n’aurait trouvés, car tous deux portaient sur la façon dont la sortie se lit et non sur son contenu. Une enchère sans concurrent annonçait deux fois le même chiffre — « P1 a misé 2600k », puis « P1 l’emporte pour 2600k » — la mise de clôture est donc désormais avalée, et elle seule, pour qu’une vraie guerre d’enchères se lise toujours comme un affrontement. Et un événement situé au milieu d’un lancer terminait prématurément chaque ligne de déplacement, jusqu’à ce que le constructeur apprenne à l’enjamber.
