O Modo Rápido e o terceiro dado
Um jeito mais veloz e descontraído de jogar — turnos mais curtos, construa onde quiser e um terceiro dado que pode teletransportar você pelo tabuleiro.

Em palavras simples
Sem tempo, mas ainda quer a partida completa? O Modo Rápido é a resposta. Os turnos correm num relógio mais apertado — cerca de 45 segundos cada — então a partida inteira termina bem mais cedo, e a pressão deixa todo mundo em alerta.
Construir também é mais livre. Numa partida clássica, você precisa espalhar as casas de forma uniforme por um grupo de cor, uma por turno. No Modo Rápido, você pode despejar tudo numa única rua e construir o quanto puder pagar de uma só vez. E se hipotecar uma propriedade, um cronômetro começa a contar: recompre-a a tempo ou ela volta para o banco.
O destaque é o terceiro dado, que entra na rolagem a partir da rodada 7. Ele muda como você se movimenta pelo tabuleiro:
- Um número soma à sua rolagem — os dois dados brancos mais o terceiro, então você anda mais longe.
- Um Ônibus deixa você escolher seu movimento: pegue a soma completa ou apenas um dos dados brancos.
- An "X" (Mr. Monopoly) leva você à propriedade livre mais próxima, ou ao adversário mais próximo a quem você teria de pagar.
- Uma tripla — os três dados iguais — permite teletransportar-se para qualquer casa do tabuleiro e, em seguida, rolar de novo.
Para os mais técnicos
Os modos compartilham um único motor. Um novo modes.ts guarda o MODE_CONFIGS — por modo: dinheiro inicial, temporizador de turno, limite de rodadas, momento do imposto e se a construção desigual é permitida — e o daemon lê o modo da partida no início, escolhe a configuração e a passa para initializeGame. O prazo por turno usa o turnSeconds do modo; o Clássico mantém a base ajustável pelo 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,
},
// ...
};O terceiro dado fica isolado em speed-die.ts — o tipo SpeedFace, rollSpeedDie, busOptions, isSpeedTriple e os auxiliares de propriedade mais próxima — e NÃO é um fork. O reducer compartilhado só o chama quando state.mode === "speed", reaproveitando o código normal de movimento e de aterrissagem, de modo que o Clássico permanece intacto e todos os testes anteriores do motor seguem verdes.
Nenhuma migração de banco de dados foi necessária para o dado: o novo estado (última face rápida, ônibus / teletransporte / nova rolagem pendentes) vive no JSON do engine_state, e o valor do dado viaja num campo opcional do payload dice_rolled.speedDie — sem nenhum novo tipo de evento. A migração 0024 apenas afrouxou o create_game para aceitar o modo "speed"; o enum e as colunas já existiam.
