Скоростной режим и третий кубик
Более быстрый и вольный способ играть — короткие ходы, стройте где угодно и третий кубик, способный телепортировать вас через всё поле.

Простыми словами
Времени в обрез, но хочется полноценной партии? Скоростной режим — то, что нужно. Ходы идут по более жёсткому таймеру — примерно по 45 секунд каждый, — так что вся партия завершается куда раньше, а напряжение держит всех в тонусе.
Строить тоже вольготнее. В классической игре дома приходится распределять равномерно по цветовой группе, по одному за ход. А в Скоростном можно вложить всё в одну улицу и построить за один раз столько, сколько хватит денег. И если вы заложите участок, начинается отсчёт таймера: выкупите его вовремя — или он вернётся банку.
Главная новинка — третий кубик, который присоединяется к броску начиная с раунда 7. Он меняет то, как вы перемещаетесь по полю:
- Число прибавляется к вашему броску — два белых кубика плюс третий, так что вы проходите дальше.
- Автобус позволяет выбрать ход: взять полную сумму или только один из белых кубиков.
- An "X" (Mr. Monopoly) отправляет вас к ближайшему свободному участку или к ближайшему сопернику, которому пришлось бы платить.
- Тройка — когда все три кубика совпадают — позволяет телепортироваться на любую клетку поля, а затем бросить снова.
Для тех, кому интересны детали
Режимы используют один движок. Новый файл modes.ts хранит MODE_CONFIGS — для каждого режима стартовые деньги, таймер хода, предел раундов, момент налога и разрешено ли неравномерное строительство, — а демон при старте считывает режим партии, выбирает конфигурацию и передаёт её в initializeGame. Дедлайн хода берёт turnSeconds режима; в Классике остаётся настраиваемое администратором базовое значение.
// 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,
},
// ...
};Третий кубик изолирован в speed-die.ts — тип SpeedFace, rollSpeedDie, busOptions, isSpeedTriple и хелперы поиска ближайшего участка — а НЕ форк. Общий редьюсер обращается к нему только при state.mode === "speed", переиспользуя обычный код перемещения и приземления, так что Классика не затронута, а все прежние тесты движка остаются зелёными.
Для кубика не понадобилось миграции базы данных: новое состояние (последняя скоростная грань, ожидающие автобус / телепортация / переброс) живёт в JSON-поле engine_state, а значение кубика едет в необязательном поле полезной нагрузки dice_rolled.speedDie — без нового вида события. Миграция 0024 лишь смягчила create_game, чтобы принимать режим "speed"; перечисление и столбцы уже существовали.
