← Все записи

Бой3 мин чтения

Очки действия или общая шкала времени? Решение, на котором стоит бой

Почему в Terminal Leave нет очков действия: раунд длится пять секунд, каждое действие стоит времени, и оба плана исполняются на одной шкале.

Это ретро-запись о решении, принятом в самом начале пути. От него зависит всё, что происходит в бою.

Три варианта

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

Очки действия и ходы по очереди

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

Ходы по очереди: пока ходит один игрок, второй ждёт

Одновременные ходы

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

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

Общая шкала времени

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

Общая шкала времени: вы дошли до угла за 2,0 с, противник за 2,5 с, поэтому вы увидели его первым

Что выбрал и почему

Я выбрал таймлайн. Главная причина — одновременность перестаёт быть условностью. Не нужны правила вроде «при равенстве очков первым ходит такой-то»: время уже всё решило.

Вторая причина — цена действий становится осмысленной. Бег проходит клетку быстрее шага. Прицельный выстрел точнее, но дольше, и за это время противник может дойти до укрытия. Игрок планирует не «сколько очков осталось», а «успею ли».

Чем за это заплачено

Таймлайн сложнее объяснить, и к нему нужно привыкнуть.

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

Сложнее и симуляция: она должна разбирать одновременные события в строгом порядке, иначе один и тот же бой даст разные результаты.

Как раунд разыгрывается сегодня, описано в статье про одновременные ходы.