Добро пожаловать, berk
Twitter Группа Steam Страница Вконтакте Группа C.O.R.E. Dragon Age Контакте Новостная лента RSS
/ Статьи / Общеролевые статьи / Аналитика

[Pathfinder: Kingmaker] Как мы добавляли пошаговые бои

Автор: Максим Савенков | Добавил: (0I23-807, 22.08.2020 | Просмотры: 133

Pathfinder: Kingmaker

С разрешения Owlcat Games мы публикуем их рассказ о разработке пошаговых сражений в Pathfinder: Kingmaker (этот же текст есть в англоязычном варианте на Kickstarter). Орфографию и пунктуацию оставили без изменений, оформление адаптировали под принятое на сайте.

Когда я пришёл в команду Owlcat Games в начале 2019ого, я практически попал на работу своей мечты: делать однопользовательскую ролевую игру для PC, да ещё и никуда не уезжая из России? Ещё недавно о таком можно было только мечтать! Был лишь один маленький минус — я всегда предпочитал игры с пошаговыми сражениями всем другим системам, а Pathfinder: Kingmaker был задуман как игра с боями в реальном времени и тактической паузой. Но что делать — не могут же все мечты сбываться разом?

А могут. Когда зашла речь о портировании игры на консоли, довольно быстро стало понятно, что с боями что-то надо делать. Микроменеджмент партии в бою, особенно необходимый на высоких уровнях сложности, крайне затруднителен, когда у тебя в руках вместо мышки и клавиатуры геймпад. Конечно, можно было бы попробовать улучшить искусственный интеллект персонажей игрока и сделать его настраиваемым, но это решение выглядело не слишком хорошим: получилась бы игра в программирование ИИ, а не Pathfinder.

Тут очень удачно мы узнали о существовании мода, который превращал нашу игру в пошаговую, созданного нашим замечательным, талантливым и очень упорным фанатом Hsinyu Chan. Мы ознакомились с этой модификацией и признали её великолепной: игра преображалась на глазах, причём исключительно в лучшую сторону (если, конечно, вы любите сидеть и думать над каждым ходом). Это окончательно склонило чашу весов в пользу добавления официального пошагового режима в нашу игру.

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

Поиск пути

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

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

Попытка номер 0:

Очевидным решением было бы виртуально пройти по пути, не сдвигая при этом персонажа на экране. Тогда можно было бы получить всю траекторию, по которой он пойдёт, и показать её игроку. Но это был тупиковый вариант: траектория-то всё равно была бы безумная. Можно было бы попытаться её как-то оптимизировать, спрямить зигзаги и так далее, но это направление так же выглядело бесперспективным. Что ж, назад, к чертёжной доске!

Pathfinder: Kingmaker (1)

Навигационная сетка из треугольников.

Основная проблема была в том, что поиск пути мы осуществляли по карте, разбитой на треугольники (так называемый navmesh). Это очень эффективный метод, работающий быстро, но, к сожалению, при его использовании очень трудно вносить в карту какие-либо изменения, например — отмечать на ней участки, заблокированные другими персонажами. Это требует перестройки области карты, а потенциально — и всей карты в целом. В реальном времени мы такого себе позволить не могли. Но в походовом режиме, где двигается только один персонаж? Почему бы и нет.

Попытка номер 1:

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

Попытка номер 2:

Треугольники navmesh'a плохо подходят для записи динамического положение персонажей. А что подходит хорошо? Старая добрая квадратная сетка. Очень легко определить, в какой клетке, или даже в каких нескольких клетках находится боец, и запретить прочим по ним ходить. При этом, если клетки достаточно маленькие, только они и будут заблокированы, ничего лишнего. Почему бы не воспользоваться сеткой сразу? А потому, что клеток получается гораздо, гораздо больше, чем треугольников в navmesh'е. Поэтому поиск пути по ним работает намного медленнее — слишком медленно для боёв в реальном времени, где все персонажи постоянно хотят куда-то идти. Но в пошаговом-то бою ходит только один персонаж...

Чтобы осуществить эту идею, пришлось добавить к каждой карте в игре сетку, созданную на основании данных navmesh'а. Мы не могли использовать 5-футовые клетки, как в настольной игре - это потребовало бы переделки всех карт, поскольку при их создании 5-футовую сетку никто не собирался учитывать, и, например, дверь шириной в одну 5-футовую клетку могла оказаться посредине между двумя реальными клетками. Поэтому, мы сделали клетки несколько меньшими, по 0.5м, и постарались сделать так, чтобы область, доступные для прохода, на каждой карте максимально совпадала для обоих способов поиска пути.

Pathfinder: Kingmaker (2)

Красные кубики - непроходимые клетки навигационной сетки из клеток.

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

В целом, мы остались довольны тем, что получилось, хотя пришлось затратить немало усилий и даже исправить несколько ошибок в стороннем коде, который мы используем, которые не проявлялись при движении в RTwP. Зато новый способ поиска пути дал нам возможность точно показать игроку, как именно пойдёт его персонаж к заданной цели, и даже предупредить о возможных Attack of Opportunity на пути.

Pathfinder: Kingmaker (3)

Предсказание траектории движения. Зелёный цвет - Move Action, жёлтый - Standard Action, красный - отрезки, где персонаж получит Attack of Opportunity.

Панель предсказаний

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

В Pathfinder, как минимум, три важных типа действий — Standard, Move и Swift. И чтобы всех запутать, Move может быть использовано не только для движения, но также и для других действий, а также для некоторых заклинаний. В RTwP режиме все эти детали несколько спрятаны от игрока, хотя для игры на высоких сложностях приходится всё равно в них разбираться. Но в пошаговом режиме они выходят на первый план, и для игроков, не очень знакомых с системой, невозможность совершить то или иное действие в зависимости от, казалось бы, не очень связанных обстоятельств может стать сюрпризом.

Pathfinder: Kingmaker (4)

Панель предсказаний с разбиением по действиям. Иногда, действие в целом может быть не потрачено, но делать определённые вещи в его рамках - уже невозможно (например, после 5-футового шага нельзя двигаться ни за Move, ни за Standard, но можно использовать их для других целей). Для таких случаев мы показываем ещё доступные варианты иконками.

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

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

Тач-заклинания, то есть такие заклинания, для наступления эффекта которых персонаж должен прикоснуться к цели, плохи тем, что их реализация может быть либо неправильной, либо неудобной. Если читать правила Pathfinder, то персонаж сначала сотворяет заклинание, "заряжает его в руку", а потом может хоть год ходить с ним и заниматься другими делами, пока не прикоснётся к цели. При этом в первый ход после сотворения заклинания персонаж может попробовать совершить прикосновение бесплатно, за Free Action, а вот в последующие ему придётся сделать обычную атаку и потратить Standard Action. На первый взгляд, всё не слишком сложно, но есть нюанс: самое частое использование тач-заклинаний — лечение — во всех других компьютерных играх работает по другому: выбираешь цель, подходишь к ней, лечишь её. Если бы мы реализовали тач-заклинания так, как написано в книге — то есть, сначала заклинание сотворялось бы без цели, а потом надо было бы её выбирать, это было бы непонятно абсолютному большинству игроков.

Pathfinder: Kingmaker (5)

Джейтал будет сотворять заклинание Inflict Light Wounds за Standard Action, двигаться к цели за Move Action и пытаться к ней прикоснуться за Free Action. Экономика действий Pathfinder, эээ, в действии!

В результате, в RTwP режиме тач-заклинания пытаются сделать вид, что они не отличаются ото всех прочих. Игрок выбирает заклинание, потом цель, и сразу начинает что-то происходить. А именно: персонаж начинает идти к цели, подойдя к ней на определённое расстояние — собственно, сотворяет заклинание, а потом продолжает к ней идти, уже с заклинанием в руке. При этом, если за это время цель исчезла (например, умерла), то можно выбрать новую цель, воспользовавшись иконкой заклинаний, появляющейся в Action Bar'е (не самое удачное решение, как выяснилось, так как её почти никто никогда не замечает, и игрокам кажется, что заклинание пропало даром).

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

С Кинетиком же одновременно всё проще и сложнее. Проще в плане описания. Проблема Кинетика заключается в том, что это единственный класс, который умеет делать что-то дольше, чем 1 раунд. Умение Gather Power, уменьшающее стоимость других умений кинетика, может занимать одно, два, или три действия, а всё применение умения в сумме, в результате, может занять полностью два раунда.

Здесь, опять же, мы вынуждены были отступить от правил Pathfinder как они написаны ради привычности игрокам в компьютерные RPG. Вообще говоря, Gather Power никак не связан с применяемым умением. Игрок сначала заявляет, что будет собирать энергию, и только потом, когда этот процесс закончился (потенциально, на следующий ход) может применить, собственно, какое-то своё умение, для которого эту энергию собирал. К сожалению, в RTwP бою это было бы категорически неудобно: игроки бы постоянно забывали, что их Кинетик начал собирать энергию. В результате, мы пришли к такому решению, что игрок сразу же указывает, на что потратит собранную энергию, и более того — игра сама рассчитывает, сколько единиц энергии собрать, а игрок лишь выставляет максимум (то есть, если включить сбор 3 единиц энергии, а для умения требуется только 1, то именно 1 и будет собрана, и будет потрачено одно действие, а не три).

Pathfinder: Kingmaker (6)

Кинетик будет собирать энергию за Move, и потом сотворит Electric Blast за Standard.

В пошаговом бою мы не смогли в разумный срок изменить этот подход. Результат нам пока не очень нравится, и мы попробуем улучшить его в Pathfinder: Wrath of the Righteous. Игроку по-прежнему предлагается установить максимум сбора энергии, выбрать умение, которое он хочет применить, и только после этого сбор энергии, собственно, начнётся. При этом, если сбор энергии займёт больше чем 1 действие (то есть, применять умение придётся уже в следующем ходу), то оно не будет применено автоматически, так как ситуация могла полностью измениться (например, цель могла пропасть). Это несколько контр-интуитивно и неудобно, но, к сожалению, мы работаем в рамках ограничений, заложенных в RTwP режиме.

Умный курсор

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

  • Совершить полную атаку, потратив Full Round Action (Move+Standard)
  • Совершить обычную атаку
  • Совершить тач-атаку, если у него в руке есть "заряженное" тач-заклинание

Кроме того, он может выбрать способ движения:

  • 5-футовый шаг, при котором игнорируются Attack of Opportunity, но после которого нельзя больше двигаться
  • Обычное движение

При этом в ходе тестирования выяснилось, что очень часто игрокам хочется потратить на движение ровно Move Action, гарантированно не залезая в Standard. Поэтому мы разбили обычное движение на два типа: "на одно действие" и "на два действия".

Нам нужно было дать возможность игроку как угодно комбинировать эти варианты действия и движения с учётом доступности (например, у персонажа может не быть Full Attack, или он уже потратил одно действие на движение в этом ходу). Особенную проблему это представляло на консолях: там мы не могли просто сделать пару переключателей, которыми игрок мог бы настраивать действия персонажа, на это просто не хватало кнопок на геймпаде.

Pathfinder: Kingmaker (7)

Умный курсор покажет, сколько атак совершит персонаж.

Мы решили эту проблему, сделав "умный курсор". При наведении на цель игра сама выбирает оптимальный способ действия для текущего состояния персонажа (например, 5-футовый шаг + Full Attack, если это возможно). Кроме того, одной кнопкой можно перебирать другие доступные сочетания, если вдруг ваша тактика требует сделать не самое оптимальное на первый взгляд действие (например, спровоцировать Attack of Opportunity, применив обычное движение вместо 5-футового шага).

Треккер инициативы

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

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

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

Моды

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

A cowboy’s work is never done

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

Очень надеемся, что вам понравится плод наших усилий. Если вы колебались, стоит ли играть в нашу игру из за RTwP боёв — теперь у вас не осталось поводов для сомнений. Если она вам показалась слишком сложной — попробуйте вернуться к ней с пошаговым режимом, сражения станут гораздо более понятными и управляемыми. Или просто ещё раз загляните в Украденные Земли за новым опытом — лично я собираюсь, наконец, пройти второй DLC.

Максим Савенков, программист Owlcat Games.


Обсудить статью на форуме

Обновления форума

Копирайты

  • C.O.R.E. © 2009 – 2020
Система Orphus Creative Commons License
Войти на сайт?
Логин:
Пароль: