El Modo Rápido y el tercer dado
Una forma de jugar más veloz y desenfadada: turnos más cortos, construye donde quieras y un tercer dado que puede teletransportarte por todo el tablero.

En palabras sencillas
¿Andas justo de tiempo pero quieres la partida completa? El Modo Rápido es la respuesta. Los turnos corren con un reloj más ajustado —unos 45 segundos cada uno—, así que toda la partida termina mucho antes y la presión mantiene a todos en vilo.
Construir también es más libre. En una partida clásica tienes que repartir las casas de forma pareja por un grupo de color, una por turno. En el Modo Rápido puedes volcarlo todo en una sola calle y construir cuanto puedas pagar de una vez. Y si hipotecas una propiedad, un contador empieza a correr: recupérala a tiempo o volverá al banco.
La novedad estrella es el tercer dado, que se suma a la tirada a partir de la ronda 7. Cambia tu forma de moverte por el tablero:
- Un número se suma a tu tirada: los dos dados blancos más el tercero, así que avanzas más lejos.
- Un Autobús te deja elegir tu movimiento: toma la suma completa o solo uno de los dados blancos.
- An "X" (Mr. Monopoly) te envía a la propiedad libre más cercana, o al rival más cercano al que tendrías que pagar.
- Un triple —los tres dados coincidiendo— te permite teletransportarte a cualquier casilla del tablero y luego volver a tirar.
Para los más técnicos
Los modos comparten un mismo motor. Un nuevo modes.ts contiene MODE_CONFIGS —dinero inicial por modo, temporizador de turno, tope de rondas, momento del impuesto y si se permite la construcción despareja— y el daemon lee el modo de la partida al inicio, elige la configuración y la pasa a initializeGame. El plazo por turno usa el turnSeconds del modo; el Clásico conserva la base ajustable por el administrador.
// packages/game-engine/src/modes.ts
export const MODE_CONFIGS: Record<GameMode, ModeConfig> = {
classic: { startingCash: 15000, unevenBuild: false, turnSeconds: 90 },
speed: {
startingCash: 30000,
unevenBuild: true, // build any property, multiple per turn
turnSeconds: 45,
speedDie: true,
speedDieFromRound: 7,
},
// ...
};El tercer dado está aislado en speed-die.ts —el tipo SpeedFace, rollSpeedDie, busOptions, isSpeedTriple y los ayudantes de propiedad más cercana—, NO es una bifurcación. El reductor compartido solo lo invoca cuando state.mode === "speed", reutilizando el código normal de movimiento y aterrizaje, de modo que el Clásico queda intacto y todas las pruebas previas del motor siguen en verde.
No hizo falta ninguna migración de base de datos para el dado: el nuevo estado (última cara rápida, autobús / teletransporte / nueva tirada pendientes) vive en el JSON de engine_state, y el valor del dado viaja en un campo opcional de la carga útil dice_rolled.speedDie, sin ningún tipo de evento nuevo. La migración 0024 solo relajó create_game para aceptar el modo "speed"; el enum y las columnas ya existían.
