Почему производство никогда не останавливается, когда вы закрываете игру
Экономическая игра, которая наказывает за отсутствие, не сложная — она просто требовательна к вашему расписанию. Вот как Astra Genesis рассчитывает, что произошло, пока вас не было.

Есть правило, которое я установил себе в первый день этого проекта, и оно пережило всё остальное: закрытие игры никогда не должно ничего стоить.
Звучит незначительно. На самом деле это не так. Это ограничение, которое сильнее всего повлияло на архитектуру движка, ещё до графики и баланса.
Проблема большинства экономических игр
В классической онлайн-стратегии цикл прост: вы запускаете производство, оно занимает восемь часов, и вам нужно вернуться, чтобы его забрать. Вернётесь слишком поздно — склад полон, а остальное потеряно. Если игрок проспит ночь, его ресурсы уйдут вместе с ней.
Это не сложность. Это налог на вашу доступность. Игрок, который может заходить шесть раз в день, побеждает игрока, который играет лучше, но работает. И главное: ничего из этого не интересно. Никто никогда не рассказывал другу о захватывающем решении, принятом в три часа ночи, чтобы спасти флот.
Что вместо этого делает Astra Genesis
Движок не моделирует время непрерывно. Он сохраняет отметку времени, и когда вы возвращаетесь, вычисляет, что должно было произойти между ними. Именно это делает функция навёрстывания:
// Сервер проигрывает часы отсутствия, границу за границей:
// каждое завершение строительства, каждое завершение исследования и
// каждое возвращение экспедиции обрабатывается по порядку, с теми
// темпами производства, которые действовали в этот точный момент.
catchUp(state, elapsedSeconds);
Важная деталь — в последней фразе. Наивное навёрстывание умножает текущую скорость на прошедшее время, что неверно, как только событие меняет скорость в середине периода. Если ваша фабрика завершается через два часа после выхода, следующие шесть часов должны использовать новую производительность, а не старую. Поэтому навёрстывание разбивает отсутствие по границам событий и пересчитывает скорости на каждой границе.
Писать это дольше. Но это единственная честная версия.
Что ещё не происходит
- Склады не переполняются в карательном смысле. Насыщенная цепочка останавливается и ждёт, ничего не уничтожая.
- Ни одно событие не срабатывает в ваше отсутствие, чтобы что-то у вас забрать. Вторжения приходят с предупреждением, которое вы видите до того, как закроете игру.
- Нет кнопки ускорения за реальные деньги, потому что ускорять нечего: время идёт одинаково, независимо от того, здесь вы или нет.
Настоящая цена этого решения
Честно говоря: это правило усложняет баланс. Без давления времени единственное оставшееся напряжение — это компромиссы. Каждый уровень должен ставить настоящий вопрос о планировании фабрики, иначе не остаётся вообще ничего. Это игра, в которой я не могу спрятаться за обратным отсчётом, притворяясь, что что-то происходит.
Тем лучше. В этом и была идея.