Абилка
Абилка (в английском – ability) – популярный в компьютерных играх термин, обозначающий какие-либо способности или умения персонажей. Это могут быть самые разные умения, такие как способность разными способами атаковать оппонентов, оглушать их, накладывать полезные эффекты на своих союзников и все в таком духе. Условно абилки можно разделить на две категории:
Как правило, абилки в играх можно прокачивать (особенно если вы играете в RPG, где развитие персонажа чуть ли не самый важный элемент геймплея). Каждый новый уровень или выполнение других условий, позволяющих разблокировать очки навыков, и вот вам уже дают возможность выучить новую способность. Уникальные наборы абилок для персонажей именуются билдами и оказывают существенное влияние на стиль отыгрыша. Одного героя, если есть такая возможность, можно сделать танком, другого – дд. К сожалению, когда дело касается онлайн игр, разнообразие исчезает – всегда есть наиболее мощные комбинации способностей (метовые), которые помогут одержать победу над врагами, а если не будете их придерживаться, то проиграете.
Далеко не в каждой игре геймерам предоставляют доступ сразу ко всем абилкам – на некоторые (обычно это самые мощные способности – ультимейты) установлено ограничение по уровню. Только достаточно прокачавшись и прокачав ветку умений, можно будет открыть сильное усиление. К примеру, в популярной МОБА-игре Dota 2 только персонажи 6+ уровня смогут вкачать “ульт”. Если бы такие способности стали доступными с самого начала, это убило бы весь баланс.
Примеры употребления
“Этот персонаж имеет отличную абилку, позволяющую накладывать баффы на членов своей пати”.
“На десятом уровне можно будет выбрать между пассивной абилкой на шанс критической атаки и перманентным повышением уровня здоровья на 100 единиц”.
“Абилки на защиту от физических атак лучнику лучше не брать, так как до них мечники все равно не добираются”.
Как устроены абилки в War Robots
Привет! Меня зовут Владимир Попов, и я клиентский разработчик на проекте War Robots.
War Robots существует уже несколько лет: за это время в игре появились десятки новых мехов. И, конечно, ни один из них не был бы уникальным без собственного набора способностей.
О том, как устроена и как эволюционировала система способностей в нашей игре, просто и без особых технических подробностей я расскажу в этой статье.
Для начала погрузимся в историю и посмотрим на старый вариант реализации — сейчас он уже не используется на проекте.
Старая абилка могла существовать только в двух состояниях: активном и неактивном. К каждому состоянию можно было закрепить свое действие.
Рассмотрим пример абилки Jammer (англ. «помехи»). Она была в свое время, например, у робота Stalker. Работала она следующим образом:
Тогда мы поняли, что нужно что-то менять. И разработали новую систему. В ней каждая абилка стала представляться набором из нескольких связанных объектов. Функционалось разделилась на стейты абилки и компоненты стейтов.
У любой абилки есть мастер. Это ее центральный объект. Он связывает остальные объекты абилки с внешним миром и наоборот. И все основные решения тоже принимает он.
Стейтов может быть любое количество. По существу стейт здесь мало чем отличается от состояния «активна»/«неактивна» в старой версии. Но теперь их может быть любое количество, а предназначение их стало более абстрактным. Одновременно у абилки может быть активен только один стейт.
Основным новшеством по сравнению со старой системой стали компоненты. Компонент описывает какое-то действие. У каждого стейта может быть любое число компонентов.
Как работают новые абилки?
Одновременно абилка может находиться только в одном из стейтов. Мастер занимается их переключением. Компоненты, которые линкуются к стейту, реагируют на активацию/деактивацию стейта и в зависимости от этого могут либо начать выполнять некое действие, либо прекратить его выполнять.
Все объекты стали настраиваемыми. Геймдизайнер может как угодно миксовать стейты и компоненты между собой и таким образом получать новую абилку из предустановленных блоков. Программисты теперь нужны только для того, чтобы создать новый компонент или стейт, что сильно облегчает написание кода. Теперь они работают с небольшими сущностями, описывают какие-то простые элементы и не собирают абилку сами — этим стали заниматься геймдизайнеры.
Со временем и этого нам стало мало, и схема абилки преобразовалась в следующий вид:
Мастер, стейт и компоненты остались на своих местах, но к ним добавились новые элементы.
Первым делом бросается в глаза то, что мы добавили каждому стейту и компоненту условия. Для стейтов они определяют дополнительные требования для выхода из стейта. Для компонентов они определяют, может ли этот компонент выполнить свое действие.
Контейнер зарядов (чарджей) содержит в себе заряды, перезаряжает их, останавливает перезарядку при необходимости и предоставляет заряды стейтам для пользования.
Таймер используется тогда, когда несколько стейтов должны иметь общее время выполнения, но при этом их собственное время выполнения не определено.
Важно заметить, что все объекты абилки являются опциональными. Технически для работы абилки достаточно лишь мастера и одного стейта.
Абилок, которые целиком собраны без привлечения программистов, не так много, но разработка в целом стала заметно дешевле, ведь программисты теперь пишут очень маленькие вещи: например, один новый стейт или два компонента, — остальное же переиспользуется.
Подытожим, какие составляющие части абилок у нас есть и что они из себя представляют:
Мы не стали придумывать что-то совершенно новое для UI. Устроен он у нас так.
У мастера есть свой UI. В нем определяются какие-то элементы, которые должны быть в UI всегда и не зависят от того, какой стейт сейчас активен.
У каждого стейта есть своя пара в UI. UI стейта отображается только тогда, когда его стейт активен. Он получает данные о своём стейте и может тем или иным образом выводить их. Например, стейты с длительностью обычно имеют полосу и текст в своем UI, которые отображают оставшееся время.
В случае, когда стейт ждет внешней команды для продолжения работы абилки, его UI отображает кнопку. И ее нажатие отправляет команду в стейт.
Теперь разберем работу абилок на конкретных примерах. Для начала рассмотрим робота под названием Inquisitor.
Мы имеем четыре стейта, которые сменяются друг за другом. Над стейтами вы видите их отображение в UI. У двух из них вы видите компоненты, которые к ним относятся. Другие два стейта просто не имеют компонентов.
Флоу работы абилки:
Другой пример — Phantom. Здесь многое происходит аналогично Inquisitor, но все же есть свои нюансы:
Таким образом, казалось бы, наша система эволюционировала от простого к сложному, однако тем самым упростилась жизнь и программистов, и геймдизайнеров. Помощь первых теперь нужна по большей части при добавлении небольших компонентов, вторые же получили большую автономность и теперь могут самостоятельно собирать новые абилки из уже имеющихся стейтов и компонентов. При этом игроки тоже получили профит в виде более разнообразных и комплексных способностей мехов.




