Очки действия или общая шкала времени? Решение, на котором стоит бой
Почему в Terminal Leave нет очков действия: раунд длится пять секунд, каждое действие стоит времени, и оба плана исполняются на одной шкале.
Это ретро-запись о решении, принятом в самом начале пути. От него зависит всё, что происходит в бою.
Три варианта
Собственно, это не было решением, принятым в один момент, — скорее эволюцией проекта. Первая версия симуляции была построена на ходах по очереди. Мой оппонент постоянно отвлекался — на работу, в туалет, налить чай, — а я сидел и ждал, пока таймер закончит его очередной ход.
Очки действия и ходы по очереди
Первый вариант привычен по X-COM: у бойца есть очки действия, шаг стоит столько-то, выстрел — столько-то. Модель понятная, игроки её знают. Но она придумана для ходов по очереди, Ходы по очереди в PvP превращаются скучное ожидание действий другого игрока.

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

- Гонка кликов и пинга. Два бойца увидели друг друга, оба игрока жмут «огонь». Первым выстрелит тот, чей пакет раньше дошёл до сервера. Исход решают реакция и задержка сети, а не тактика, и игрок с телефона или из далёкого региона оказывается в невыгодном положении.

- Вместо того чтобы думать, игрок следит за противником.

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

Что выбрал и почему
Я выбрал таймлайн. Главная причина — одновременность перестаёт быть условностью. Не нужны правила вроде «при равенстве очков первым ходит такой-то»: время уже всё решило.
Вторая причина — цена действий становится осмысленной. Бег проходит клетку быстрее шага. Прицельный выстрел точнее, но дольше, и за это время противник может дойти до укрытия. Игрок планирует не «сколько очков осталось», а «успею ли».
Чем за это заплачено
Таймлайн сложнее объяснить, и к нему нужно привыкнуть.
Клиенту пришлось показывать время каждого действия и остаток раунда, а ещё сверять расчёт с сервером, чтобы план не расходился с результатом. На момент выхода этой записи расхождения ещё бывают — например, когда два бойца на ходу оказываются в одной клетке и одному из них приходится ждать.
Сложнее и симуляция: она должна разбирать одновременные события в строгом порядке, иначе один и тот же бой даст разные результаты.
Как раунд разыгрывается сегодня, описано в статье про одновременные ходы.
