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

Простыми словами
Времени в обрез, но хочется полноценной партии? Режим «Скоростная» — то, что нужно. Ходы идут по более жёсткому таймеру — примерно по 45 секунд каждый, — так что вся партия завершается куда раньше, а напряжение держит всех в тонусе.
Строить тоже вольготнее. В классической игре дома приходится распределять равномерно по цветовой группе, по одному за ход. А в «Скоростной» можно вложить всё в одну улицу — по одному уровню на поле за ход. И если вы заложите поле, начинается отсчёт таймера: выкупите его вовремя — или оно вернётся банку.
Главная новинка — третий кубик, который присоединяется к броску начиная с раунда 7. Он меняет то, как вы перемещаетесь по полю:
- Число прибавляется к вашему броску — два белых кубика плюс третий, так что вы проходите дальше.
- Автобус позволяет выбрать ход: взять полную сумму или только один из белых кубиков.
- «X» (Mr. Monopoly) отправляет вас на ближайшее свободное поле или к ближайшему сопернику, которому пришлось бы платить.
- Тройка — когда все три кубика совпадают — позволяет телепортироваться на любую клетку поля, а затем бросить снова.
| Классика | Скоростная | |
|---|---|---|
| Таймер хода | ~90 с | ~45 с |
| Строительство | Равномерно, по одному за ход | Где угодно, много за ход |
| Третий кубик | Нет | С раунда 7 |
| Залог | Бессрочно | Освобождается по таймеру |
Для тех, кому интересны детали
Режимы используют один движок. Новый файл 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"; перечисление и столбцы уже существовали.
