El registro de la partida deja de narrarlo todo
Una sola tirada de dados imprimía cinco líneas, dos de ellas nombrando la misma casilla. El registro ahora se lee como un comentario y no como un acta — y no se borró nada para conseguirlo.
En palabras sencillas
El panel junto al tablero apuntaba absolutamente todo lo que hacía el juego. Una tirada normal producía cinco líneas separadas — tiró, se movió, cayó, terminó el turno y a menudo una más — dos de las cuales nombraban la misma casilla. Multiplica eso por cuatro jugadores y treinta rondas y el registro se convertía en un muro que dejabas de leer, lo cual es una pena, porque las dos o tres líneas que sí importaban estaban ahí en alguna parte.
Ahora una tirada y todo lo que provoca son una sola línea. Caer en una casilla, terminar el turno, anunciar una deuda antes de pagarla, rechazar una compra antes de que abra la subasta: ya no se dicen en voz alta, porque el tablero o la línea siguiente ya lo dicen. Una serie de construcciones sobre un mismo terreno se agrupa en una línea, una subasta sin puja rival deja de anunciar dos veces el mismo importe, y en Speed la cuenta atrás de la hipoteca solo habla cuando quedan dos rondas para actuar.
Tus mensajes de chat tampoco se van ya de la pantalla. El panel mantenía una sola ventana de historial para todo, así que un tablero movido podía expulsar en silencio lo que alguien había escrito. Ahora la actividad y el chat se guardan por separado, y ninguna cantidad de dados puede enterrar un mensaje escrito por una persona.
Para los más técnicos
Filtrar en el origen nunca fue una opción. Reproducir una partida significa plegar el registro completo de eventos hasta obtener un estado, y así funcionan la recarga de la página, el espectador, la vista de repetición y el renderizador de clips. Si eliminas un evento para que el registro quede más bonito, corrompes todos ellos. Por eso el registro permanece íntegro y la condensación es un asunto exclusivamente de dibujado, en un único constructor compartido por el tablero en vivo, la vista de espectador, las repeticiones, los clips y la versión sin conexión.
Lo que cada evento le hace al registro es un switch exhaustivo sobre los tipos de evento del motor, lo que significa que un tipo nuevo no compila hasta que alguien decide cómo debe leerse:
// 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';Aparecieron dos fallos que ningún test habría encontrado, porque los dos eran sobre cómo se lee la salida y no sobre lo que contiene. Una subasta sin rival anunciaba la misma cifra dos veces — "P1 pujó 2600k" y luego "P1 se la llevó por 2600k" — así que ahora la puja final se traga, y solo esa, de modo que una guerra de pujas real sigue leyéndose como una competición. Y un evento situado en mitad de una tirada cortaba antes de tiempo cada línea de movimiento hasta que el constructor aprendió a saltárselo.
