ФЭНДОМ


Screeps - игра в реальном времени. Ход игрового времени, по сути своей, последовательность игровых "тиков" ("tick", или ходов, циклов) которые идут с момента запуска сервера. Номер текущего тика можно получить чтением свойства Game.time. Это глобальный счетчик, который увеличивается на протяжении всей игры.

Тики выполняются в бесконечном цикле в модуле main. Очень важно понимать, что этот цикл пошагово-мультиплеерный: каждый следующий тик (следующее значение Game.time) наступает только после полного выполнения команд модуля main каждого игрока.

Далее описан механизм исполнения тиков в условном разделении на начальный, средний и конечный этапы.

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

На среднем этапе тика выполняются команды модуля main (вместе с модулями, к которым он обращается). Модуль main взаимодействует в условиях неизменяемого игрового состояния, которое было в начале тика. Например, если выполнить команду creep.move(), а за ней (в том же тике) команду creep.attack(), то атака будет выполняться с начального положения крипа до перемещения, а свойства-координаты creep.pos.x / creep.pos.y примут новые значения только к следующему тику.

В конце тика, игровое состояние изменяется в соответствии с командами модулей main независимо друг от друга. Если происходят какие-либо конфликты – например, несколько крипов собираются переместиться в одну и ту же точку, или вы отдали противоречивые приказы – то эти конфликты разрешаются с предопределенными приоритетами. Другой пример: взаимная атака не приводит к конфликту, и оба крипа могут умереть одновременно.

Дополнительная информация:

  • Физически исполнение модуля main ограниченно числом доступных ресурсов процессора (CPU, свойство Game.cpuLimit).
  • Количество использованных в текущем тике ресурсов процессора можно узнать в свойстве Game.getUsedCpu.
  • Отношение между игровыми тиками (Game.time) и реальным временем во многом зависит от ёмкости серверов.
  • Весь глобальный контекст вместе со всеми переменными между тиками очищаются.
  • Консольные команды исполняются в рамках тика так, словно они были "дописаны" в конце модуля main.