El modo Rápida y el tercer dado
Una forma de jugar más veloz y desenfadada: turnos más cortos, construir donde quiera y un tercer dado que puede teletransportarle por todo el tablero.

En palabras sencillas
¿Anda justo de tiempo pero quiere la partida completa? La Rápida 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 hay que repartir las casas de forma pareja por un grupo de color, una por turno. En la Rápida puede volcarlo todo en una sola calle, un nivel por casilla y turno. Y si hipoteca una propiedad, un contador empieza a correr: recupérela 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 su forma de moverse por el tablero:
- Un número se suma a su tirada: los dos dados blancos más el tercero, así que avanza más lejos.
- Un Autobús le deja elegir su movimiento: tomar la suma completa o solo uno de los dados blancos.
- Una «X» (Mr. Monopoly) le envía a la propiedad libre más cercana, o al rival más cercano al que tendría que pagar.
- Un triple —los tres dados coincidiendo— le permite teletransportarse a cualquier casilla del tablero y luego volver a tirar.
| Clásica | Rápida | |
|---|---|---|
| Temporizador de turno | ~90s | ~45s |
| Construcción | Pareja, una por turno | Donde sea, muchas por turno |
| Tercer dado | No | Desde la ronda 7 |
| Hipoteca | Permanente | Se libera sola con un contador |
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; la Clásica 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 la Clásica queda intacta 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.
