# Один город на всех: как Satisfy перестал ждать игрока и завёл собственное время

- Дата публикации: 2026-10-06
- Автор: Станислав Агеев
- Каноническая HTML-версия: https://satisfy.dev/ru/devlog/shared-world/
- Английская версия: https://satisfy.dev/devlog/shared-world/

Раньше у каждого подключившегося был свой город: не один на всех, а отдельная копия на каждое соединение. Люди не могли встретиться. Время при этом не шло само: мир сдвигался на десять игровых минут только по команде игрока и замирал, пока тот раздумывает. Получалось противоречие: город считался живым, но существовал отдельно для каждого, а его часы ждали команды.

В v0.10.0 все подключённые игроки оказались в одном общем городе. Теперь видно, как другой персонаж приходит, говорит и действует ровно тогда, когда это мог бы заметить ваш персонаж. Каждый по-прежнему читает мир на своём языке — по-русски или по-английски, — но сцена у всех одна. Персонажа, которого уже ведёт другой игрок, нельзя взять себе. Отключившийся персонаж сразу возвращается под управление NPC.

Главное изменение — время. Один раунд мира длится тридцать реальных секунд и сдвигает игровое время на десять минут; авторский день с 08:00 до 22:00 занимает около сорока двух реальных минут. Город больше не ждёт: он тикает, пока вы читаете, обдумываете ответ или смотрите по сторонам. Войти можно в середине дня, и день не останавливается ради новичка.

## Как устроены действия

Обычные действия — перемещение, речь, вопрос, передача предмета — происходят быстро. Работа, наблюдение, слушание и удержание — это длинные действия: они длятся до следующего раунда мира. Ответ на вопрос приходит чуть позже и только если спросивший и слушающий всё ещё рядом. Поэтому вопрос — это не просто отправленное сообщение: нужно оставаться в одной сцене, чтобы получить ответ.

Игрок, вошедший в середине дня, получает персонажа таким, каким его оставил город: текущее место, накопленное знание и незавершённое занятие. Это не сброс ради удобства, а встраивание в уже идущую сцену. Люди приходят и уходят, но день не ставится на паузу.

## Два режима времени

Мы испробовали два мировых режима в отдельных тестовых мирах. В однодневном режиме авторский день заканчивается эпилогом, после чего город начинается заново. В непрерывном режиме ночь пропускается, наступает следующее утро, персонажи сохраняют своё состояние, и общая история продолжается.

В непрерывном мире уже было видно предупреждение: персонаж, занятый поздно днём, может унаследовать много повторяющихся заметок о том, что он успел наблюдать. Что произойдёт, когда настоящий игрок войдёт в непрерывный мир не посреди дня, а спустя несколько дней, — вопрос остаётся открытым.

## Сбои не должны останавливать всех

Один общий город означает, что сбой ввода или падение рендера у одного игрока не должны ронять мир для остальных. Поэтому при сбое конкретное соединение отключается, а общий мир пересобирается из детерминированного журнала без этого соединения. Журнал хранит достаточно сведений, чтобы повторить ту же общую историю в точности.

## Что мы проверили

До того как в общий мир пришли живые игроки, мы прогнали непрерывную синтетическую неделю: шесть скриптованных игроков присутствовали с самого начала, мир прошёл неделю до конца, а затем та же история была воспроизведена из журнала без расхождений. Это свидетельство того, что детерминизм и производительность работают, но не доказательство, что непрерывный мир понятен или интересен.

Затем два живых клиента — один русский, один английский — проверили общую причинность и отсутствие утечки приватной информации между персонажами. На этом этапе общий мир жил на тестовом сервере, а публичная игра всё ещё использовала старый однопользовательский день.

## Что дальше

Уже видно предупреждение: поздний вход тянет за собой повторяющуюся память персонажа о прошлых наблюдениях. Что случится, когда человек присоединится к непрерывному миру через несколько дней, а не посреди одного дня, — это следующий вопрос.
