42

Как НЕ нужно делать игры 2

Как НЕ нужно делать игры 2 Gamedev, Платформер, Мобильные игры, Metroidvania, Видео, Длиннопост, Игры

В предыдущем посте https://pikabu.ru/story/kak_ne_nuzhno_delat_igryi_6112085

мы получили огромное количество действительно хороших советов и поддержку. Это дало силы продолжить работу. Спасибо!


Мы переработали:

1) Анимацию главного героя

2) Боёвку

3) Добавили "красивостей"

4) Изменили освещение и цветопередачу

5) И ещё много всего по мелочам...


Проблемы ещё есть но надеемся стало лучше :)

Также мы решили что в любом случае будем публиковаться так или иначе и сделали никому не нужный сайтик ;)


Выглядит вот так:

Как НЕ нужно делать игры 2 Gamedev, Платформер, Мобильные игры, Metroidvania, Видео, Длиннопост, Игры

Найдены возможные дубликаты

Отредактировал PinkPanther 1 год назад
+3

Я бы доделал главного героя. Жалобное вопросительное выражение мордочки переделать. Анимация, когда персонаж бьет, прыгает и приземляется, немного менять "выражения лица" и наклон головы и тела.

Очень статично смотрится, даже не смотря на анимацию ушей.

раскрыть ветку 2
+2

очень замучались переделывать )), но учитывая что не вы первый дали такой коммент придётся, спасибо

раскрыть ветку 1
+2

Понимаю, тяжело :)

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

+3

какой-то блять ведьмак

раскрыть ветку 1
+1

если бы )

+2
Нравица
+4
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку 4
+3

ни одного не придумал ) все пикабу подсказал, но ок специально для вас впредь буду ставить.

раскрыть ветку 3
+2
Комментарий удален. Причина: данный аккаунт был удалён
-2

Трудно поверить что нельзя было додуматься до таких простых тегов, как: "game"/"games" и "игры"/"игра"

раскрыть ветку 1
+1

Не знаю как остальным, а мне звуки въедаются однообразностью даже на видео.
Как разработчик, могу посоветовать - если нету аудио библиотеки обширной со звуками - проще всего сделать небольшую рандомизацию по pitch / volume. Тогда они не будут так сильно резать слух + будут звучать более разнообразно.

Звуки попадания по монстрам, различные взмахи оружием etc, очень важны для восприятия игроками. Это делает их более "сочными" для использования. Заодно слышно отчетливо что ты попал по чему-то (или кому-то). Т.е. получаешь банальный Feedback.

Ну и присоединюсь к выше постящим, вам бы по арту ориентироваться на что-то вроде Captain Claw (Капитан Коготь). Там идеальный баланс няшности и брутальности ГГ.

Так вроде бы неплохо, творите :)

раскрыть ветку 1
0

Спасибо большое!
особенно за совет по звукам, так и сделаем

+1

Анимации получше но музыку сменить бы

раскрыть ветку 1
0

Музыка здесь только для ролика. В игре другая

+1
Молодцы ребят,игра яркая как по мне.Раньше тоже хотел заниматься разработкой игр,но стал электриком.Завидую Вам ))
раскрыть ветку 6
+4

Когда-то и меня влекла дорога игростроя. Но потом мне прострелили колено.

раскрыть ветку 4
0

Ваш персонаж был похож на персонажа Valve? ))

раскрыть ветку 3
0

мы пока тоже не стали ) это в свободное от работы время создаётся )

+1

@toberr, ее нет в AppStore, как поиграть?

раскрыть ветку 2
0

пока нету, надеюсь в следующем месяце выложим уже

раскрыть ветку 1
+1

Подожду, спасибо

+1

Стало гораздо лучше, но в боёвке всё же не хватает, как мне кажется, ударов. Хочется ещё чего-нибудь. :)

раскрыть ветку 9
+1
Рекомендую авторам посмотреть древнюю игру Revenant 1999-го года, понятно что стиль другой, но боёвка там была очень интересной.
раскрыть ветку 1
0

ок спасибо глянем,

0

и мне хочется ( но очень ограничивает то что это всё же изначально на мобилки а там много кнопок не сделаешь, у нас и блок и уворот и т.д. планировался
возможно для ПК версии сделаем.

А если делать именно комбо чтобы атаки менялись то народ начинает путаться какой удар сейчас ожидать

раскрыть ветку 6
+1

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

раскрыть ветку 1
+1

Можно как в Hollow knight (вообще гениальная игра): там всего 1 удар, разве что с модификаторами + есть несколько усиленных, которые как раз-таки можно реализовать на мобилках. Типа, зажал удар - усиленный, зажал + вперед - удар с выпадом, зажал + вверх - круговой удар, зажал + вниз - еще что-то и т.п. Я бы еще сделал анимацию атаки не такой медленной, что усугубляется тем, что звук замаха сильно отстает от анимации этого яркого шлейфа. Мне кажется, если время между ударами оставить таким же (с возможностью увеличить скорость атаки в будущем), но заметно ускорить саму анимацию атаки, будет лучше.

раскрыть ветку 3
+1

Где качать то?)

раскрыть ветку 3
0

если вдруг не нарисуется издатель то надеемся в октябре уже быть в апсторе гугл плее и стиме

раскрыть ветку 2
+1

Будем ждать, заинтересовало)удачи вам)

раскрыть ветку 1
+1

Вульпера!

раскрыть ветку 4
0

я загуглил кто это ) да чем то похож, но мы рисовали с реального фенека, а вдохновил персонаж из зверополиса ))

раскрыть ветку 3
+1

а я вам музон пишу ориентируясь на вульпер и вовку..

раскрыть ветку 2
0

Добрый день. По поводу издательства в стиме. Напишите возможно будет интересно предложение. https://m.vk.com/id255385803

0

А за фиолетового духа на сайте слева вам может прилететь от Valve

раскрыть ветку 10
0

Вряд ли, такие элементали существуют в тысяче игр, и валв далеко не первые в этом. Да и вряд ли кому-то там будет дело до этого.

раскрыть ветку 9
0

Этот слишком похож.

раскрыть ветку 8
-2

Не, все норм, нахуй тут тег "игра" - этож платформер в телефонку, будет витесть в магазине одним из 18,5 млн таких же, ценник въебут , или донат адовый и будет это сборник бабла для конкретного разработчика. какие игры тут...

раскрыть ветку 3
+1

Хватит считать чужие деньги. Вы же понятия не имеете что за этим всем скрывается. Сейчас такие времена, что ради установок уже приходится платить разработчику, а не игроку. 1 установка в США может доходить до 2-3$ (и это без учета НДС 20%), о каких "сборниках бабла" идет речь?


Тут по 5-10 тысяч$ нужно влить, чтобы 2500-5000 установок от американцев получить, которые возможно окупятся, а жители стран СНГ обходятся примерно в 0,1-0,5$, но от них выхлопа ноль, практически 99% ничего не покупают внутри игры. А я ещё не сказал, что 30% дохода уходит в Google или Apple, а ещё нужно налоги заплатить от дохода, а ещё НДС 20% на долю Google / Apple, а ещё комиссии в банке, разница в курсах.


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

раскрыть ветку 2
0

Вот всё хорошо вы написали. Но почку я продавать не хочу!))

раскрыть ветку 1
Похожие посты
49

Как я сделал систему обработки столкновений в игре на Unity - Тьма поглотила вас

Всем привет. Сегодня я расскажу о том, каким образом можно реализовать обработку столкновений героя с различными объектами в игре на Unity2d. Мой вариант не претендует на однозначно правильный и самый оптимальный, но он совершенно точно будет справляться со своей задачей, а именно - определять где и в каком состоянии находится наш персонаж в пространстве.


Для начала давайте определимся в каком именно положении персонаж может находиться во время игры.

1.Персонаж может стоять на земле

2.Персонаж может находиться в воздухе после прыжка

3.Персонаж может находиться в воздухе после падения

4.Персонаж может толкать ящик

5.Персонаж может стоять на ящике как на обычной земле.

Как я сделал систему обработки столкновений в игре на Unity - Тьма поглотила вас Gamedev, Разработка, Инди, Игры, Unity, Видеоигра, Платформер, Видео, Длиннопост

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

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

Первым делом нам нужно добавить нашему герою правильную обработку столкновений с землей. Создадим скрипт и повесим его на персонажа. К переменной cd привяжем коллайдер героя.

Как я сделал систему обработки столкновений в игре на Unity - Тьма поглотила вас Gamedev, Разработка, Инди, Игры, Unity, Видеоигра, Платформер, Видео, Длиннопост

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

Данный способ хорош тем, что мы всегда можем узнать на каких именно объектах стоит герой, при этом, если даже он выйдет из коллайдера одного объекта и останется стоять на другом, то переменная ground останется true. Это подходит конкретно для моей игры, так как мне важно чтоб игрок не мог поднимать телекинезом те объекты, на которых он в данный момент находится или каким то образом касается их.

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

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

Как я сделал систему обработки столкновений в игре на Unity - Тьма поглотила вас Gamedev, Разработка, Инди, Игры, Unity, Видеоигра, Платформер, Видео, Длиннопост

Теперь добавляем новые элементы в наш скрипт.

Как я сделал систему обработки столкновений в игре на Unity - Тьма поглотила вас Gamedev, Разработка, Инди, Игры, Unity, Видеоигра, Платформер, Видео, Длиннопост

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

Думаю, здесь есть люди которым будет полезен данный пост. Когда я только начинал делать управление персонажем в 2д, у меня возникало множество проблем с обработкой касаний. Надеюсь теперь это обойдет вас стороной.
Спасибо за внимание.

Показать полностью 3 2
42

Попытка в геймдев

Вступление

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


Ресурсы что я использовал для обучения

С# https://metanit.com/sharp/tutorial/

Unity официальные уроки + куча видосов на ютубе

Канал DTF очень интересные видео по геймдизайну

Книга Шелл Джесси “Геймдизайн”


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


Концепт

Из всех жанров был выбран платформер в котором персонаж сам бежит. Основным вдохновителем стала Geometry Dash. Платформа IOS и Android

Первые наброски

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост
Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост
Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Рисовать я не умею, денег на графику нету. Бесплатные ресурсы нашёл тут.

https://craftpix.net/ - графика

https://opengameart.org/ - всё сразу

https://freesound.org/ - звуки

Движок Unity потому что бесплатно и был небольшой опыт работы с ним.

Всё что я использовал распространяется по лицензии CC0 1.0 Universal (CC01.0)

https://creativecommons.org/publicdomain/zero/1.0/


Геймплей

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

Чтобы игрок не заскучал было решено добавлять в каждый новый уровень одну новую механику.


Механики

Барьер защищает игрока от падения обломков сверху. Вместе с прыжком составляют базовые механики которые есть во всех уровнях.

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Джампер просто подбрасывает персонажа вверх

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Красных гриб накладывает эффект полёта на персонажа

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Фиолетовый гриб ускоряет персонажа в 1.6 раз

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Зелёный гриб переворачивает экран

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Чаша снимает все эффекты с персонажа

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Рычаг и дверь тапаешь на рычаг, дверь открывается не успел = умер

Попытка в геймдев Gamedev, Игры, Мобильные игры, Разработка, Unity, Длиннопост

Все уровни сделаны с помощью Tile Map

Ground Tilemap на ней размещена только земля по которой бежит персонаж

Environment Tillemap на ней размещены все объекты с которыми взаимодействует персонаж

DeathCollider Tilemap невидимые колайдеры которые убиваю персонажа

Для создания тайлов с префаба был использован плагин unity 2d-extras

https://github.com/Unity-Technologies/2d-extras


Название игры

Как говорится «Как корабль назовешь, так он и поплывет»

Первоначальный вариант был Dungeon Run но из за обилия таких названий в магазинах, решил придумать что то более уникальное. Захотелось больше оживить персонажа по этому я придумал ему имя. Моделька персонажа это ангел по этому я перевёл его на другие языки и выбрал на японском 天使 что звучит как Tenshi. Игра вышла сложная а персонаж по задумке искатель сокровищ который ищет приключений и вышло у меня Tenshi Impossible Adventure


Что я усвоил

Если тебе самому не интересна игра ты не сделаешь хорошо.

Не ожидай никакой прибыли, пока что только затраты но оно того стоит.

Сначала подумай, потом делай

После прихода с работы и пару часов разработки игры я чувствовал себя лучше чем после того как отдыхал.

Лучше потратить деньги на что то для игры чем купить себе какую то

фигню.

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

Поэтому не бойтесь показывать свое творчество даже если оно не соответствует высоким стандартным.

Лучше сделать что то и даже провалится чем не делать ничего.


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

Конец

Показать полностью 10
28

Gladiatorial Massacre

Всем привет, Господа, показываю Вам инди игру, дневник разработки и тд)


Gladiatorial Massacre *(Ну это пока что так)*


Не судите строго, это мой первый проект =) И я вообще не разбираюсь в программировании)

И сразу предупреждаю, что вы УЖЕ можете попробовать макет)

Gladiatorial Massacre Гладиатор, Драка, Файтинг, Разработка, Игры, Gamedev, Кровь, Спартак: кровь и песок, Инди игра, Инди, Одиночка, Компьютерные игры, Мобильные игры, Видео, Длиннопост

Это лишь показательная демка, бой против болванчиков ради оттачивания механик, анимаций.

Далеко не готовая версия игры, но в скором времени, при должной поддержке, все постепенно доделается.



Нуу, я так думаю, по крайней мере)) Делаю один.

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


НУ это далеко идущие планы, к которым будем стремиться по мере возможностей - а может вообще, откажусь от некоторых механик из за ненадобности)) посмотрим)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


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

Gladiatorial Massacre Гладиатор, Драка, Файтинг, Разработка, Игры, Gamedev, Кровь, Спартак: кровь и песок, Инди игра, Инди, Одиночка, Компьютерные игры, Мобильные игры, Видео, Длиннопост

И цензуры тоже не планируется, это же арена, никакой пощады! =D

Gladiatorial Massacre Гладиатор, Драка, Файтинг, Разработка, Игры, Gamedev, Кровь, Спартак: кровь и песок, Инди игра, Инди, Одиночка, Компьютерные игры, Мобильные игры, Видео, Длиннопост

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


PSS А вообще, можно было бы и перса выбрать из 4 имеющихся , вместо одного - Просто я не знаю, как правильно сделать меню выбора персонажа =D НУ ничего))


- - - - - - - - - - - - - - - - - - -


Уже сделано, буквально 19.08.2020 -


1. Боевая система со стаминой, блоками, пинками, прыжками, перекатами


2. Сделаны 4 бойца - Секутор с щитом, Секутор без щита, Боец с трезубцем, или же Ретиарий (хоть он и без сетки, но уже лишь своими выпадами усложняет процесс заметно)


3. Уже сделан макет боевой системы, со стаминой, с блоками, пинками и дальше допиливается)


4. Так же макет ИИ сделан, правда глупенький пока что, но с Ретиарием я постарался))


- - - - - - - - - - - - - - - - -


PS. Дорисую еще пару персонажей, и сделаю прям несколько локаций для первой играбельной версии - от Вас мне нужна лишь поддержка комментариями и лайками!) Прямо сейчас делаю Димахера



Возможно, я делаю контент прямо сейчас и дзыньк от уведомления даст мне сил =D



Еще раз напоминаю - могут быть баги, так как это лишь первый билд игры. Так что не судите строго и попробуйте расслабиться =D


Стандартное управление

WASD

Shift - Block

Space - Kick

LMB - Light Attack

RMB - Heavy Attack

R - рестарт, если вы вдруг захотели перезапустить игру (но работает, только пока игрок жив)



Кто понимает, что это еще настолько сыро, что еще бегает от повара, НО уже хочет "пощупать" боевку - прошу любить и жаловать)


https://lunarecst.itch.io/gladiator



ЗЫ. И кстати, если челики не появляются, ударь по лежачему ))!!!!

Показать полностью 2
75

Мы с друзьями решили делать игры, а не вот это вот всё

Мы с друзьями еще недавно работали в сфере ивентов, организовывали и проводили фестивали, музейные выставки и шоу-программы. Мы с серьезностью относились к целеполаганию показателям KPI и планировали карьерное развитие на год вперед.


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

Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост

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

Вдохновлялись мы проектами Papers, Please и Peace, Death!, но игра обросла своими фишками и стала меньше похожа на референсы.

Сейчас нас четверо. Нам много помогают друзья и бывшие коллеги. Мы спорим. Работать с друзьями непросто.

Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост

Иногда сходимся во мнениях. Например, по части визуального стиля игры. Он офигенный.

Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост
Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост
Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост

Впереди еще много работы. Релиз мы планируем на начало сентября, то есть осталось меньше двух недель. Учимся ценить отдых.

Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост

До конца лета мы расскажем как баги превращаются в фичи. Расскажем как мы ненавидим микротранзакции и рекламу. Про боль единственного (!) в команде программиста. Про то, как плохо быть дилетантом в геймдизайне.


Следующий пост уже завтра.

Мы с друзьями решили делать игры, а не вот это вот всё Gamedev, Мобильные игры, Арт, Компьютерные игры, Коллеги, Перемены, 2020, Длиннопост

А как пандемия повлияла на вашу карьеру?

Показать полностью 4
36

Space Turret: Defense Point - История разработки, часть 1

Всем привет!

Меня зовут Михаил, и я бы хотел сделать несколько постов о процессе разработки своей игры.

Игру пишу с другом из Германии, оба очень любим разрабатывать игры. Работаем айтишниками, в свободные вечера работаем над игрой на платформе Unity.

Зарождение

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

Несколько дней думали над геймплеем, смотрели примеры игр, искали аналоги, отмечали плюсы и минусы. И в итоге решили сделать космический шутер-оборону станции, где игрок управляет турелями, уничтожает врагов, получает награды и улучшает свое вооружение.

В голове мы себе представляли игру как некий тайм киллер, в который можно поиграть 5-10 минут и немного отвлечься от своих дел.


Геймплей, который мы себе представляли на тот момент

От идеи к реализации

После обсуждения базовых механик приступили к реализации.

Достаточно долго думали над управлением камерой. В итоге сделали два варианта:

1. Фискированное управление. Поворот камеры напрямую зависит от положения курсора на экране. Например, если курсор находится в самой левой части экрана, то камера повернута влево на 90 градусов. и наоборот.

Пример такой работы как раз на видео ниже, с кубиком.

2. Свободное управление. Камера может свободно вращаться во все стороны. Скорость вращения будет зависеть от положения курсора на экране. Чем ближе курсор к краю экрана, тем сильнее скорость поворота в эту сторону. Пример управления в первом ролике. В дальнейшем был выбран именно этот вариант.


Из прошлых разработок у нас уже был скрипт для турели, которая могла целиться в заданный объект и стрелять по нему.

Для того, чтобы заставить турель целиться туда, куда указывает курсор на экране, пришлось применить хитрость :)

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

В итоге наткнулись на такой ролик с обалденным эффектом варпа! (качество не айс, зато оригинал)

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

В итоге, получилось воспроизвести похожий эффект!

На самом деле, изучение шейдеров в дальнейшем очень пригодилось. С их помощью удалось значительно улучшить графику под мобильные устройства, с учетом различных нюансов геймплея.


После разработки варпа были добавлены враги, которые летели только вперед. На тот момент еще не было никакого ИИ и нам очень хотелось проверить производительность на устройстве и удобство управления.


Пример тестирования производительности графики и наведения турели на цель.

Space Turret: Defense Point - История разработки, часть 1 Мобильные игры, Gamedev, Игры на Android, 3d-Шутер, Онлайн-Шутер, Видео, Длиннопост

60 ФПС очень воодушевляло, был некий "запас" прочности для дальнейшей разработки. Правда, нас немного смутило, что "крестики", куда прицеливается турель, немного смещены от направления самих кораблей.

Курсоры и наведение на цель

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

Space Turret: Defense Point - История разработки, часть 1 Мобильные игры, Gamedev, Игры на Android, 3d-Шутер, Онлайн-Шутер, Видео, Длиннопост

В интернете существует много разных алгоритмов, отличающихся точностью результата и скоростью выполнения.

Для нашей игры мы сделали отдельный менеджер, задача которого была отобразить рамку вокруг корабля и точку попадания. Менеджер работал замечательно, пока корабли не поравнялись со станцией. Чем ближе находился корабль, тем сильнее у него съезжала точка наведения относительно направления.


Пример со смещенной точкой наведения

Space Turret: Defense Point - История разработки, часть 1 Мобильные игры, Gamedev, Игры на Android, 3d-Шутер, Онлайн-Шутер, Видео, Длиннопост

Пример желаемого расположения точки наведения

Space Turret: Defense Point - История разработки, часть 1 Мобильные игры, Gamedev, Игры на Android, 3d-Шутер, Онлайн-Шутер, Видео, Длиннопост

После нескольких дней анализа кода, вывода кучи отладочной информации на экран и серфинга интернета, была найдена причина такого поведения! Имя ей - камера!

Дело в том, что из-за особенностей алгоритма и точности типа float, точка пересечения корабля с пулей немного смещалась относительно направления корабля.


Схематическое изображение смещения прицела

Space Turret: Defense Point - История разработки, часть 1 Мобильные игры, Gamedev, Игры на Android, 3d-Шутер, Онлайн-Шутер, Видео, Длиннопост

При этом, если смотреть на цель как бы из ствола турели - то всё было хорошо.

Но вид то у нас от третьего лица! И если смотреть из другой точки, то это смещение становилось сразу заметным.

После этого, мы стали рассчитывать точку наведения с позиции камеры.

При этом, сама турель также рассчитывает точку наведения, но уже с позиции стволов.

Да, на этот расчет тратятся ресурсы процессора, но когда на экране рассчитывается 50 точек пересечения, +- несколько дополнительных точек погоды не сделают :)


На этом первая часть статьи заканчивается, спасибо, что дочитали до конца!


В следующей части расскажу подробно о генераторе волн противников, как мы его настраивали и что нас ожидало...


P.S.

Если у Вас есть какие-либо вопросы, пишите, с радостью отвечу :)

Первый релиз игры состоялся в начале декабря 2019 года. На разработку первой версии ушло 4 месяца.

Ссылка игры в Google Play: Space Turret: Defense Point

Показать полностью 5 3
36

The StoryTale - как гоблины бросали курить и другие сложности портирования

Всем добрым волшебникам привет! Меня зовут Максим и я автор сказки-платформера “The StoryTale”. Сегодня я поведаю , почему перед выходом игры на Nintendo Switch гоблинам из мира нашей игры пришлось завязать с вредными привычками.

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

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

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

The StoryTale вышла в Steam летом прошлого года, но её разработка началась аж в 2015-ом году. Я тогда не имел за спиной больших завершенных проектов, а пробовал свои силы на джемах, попутно разбираясь в Game Maker Studio. Тема одного из джемов носила название «бесполезные супер-способности», и мной было сразу решено отойти от идеи супергероики, чтобы не затеряться в бесчисленных пародиях на супермена и человека паука. В поиске другой идеи мне помогла моя девятилетняя дочь Арина. Она придумала концепт, повествующей о принцессе, спасающей принца и располагающей арсеналом весьма своеобразных заклинаний, а более того – неспособной выбрать нужное. Тогда-то и были заложены основные механики и идея, что моя дочь будет в этой игре рассказчиком, озвучивая текст сказки, в рамках которой разворачивается The StoryTale. Я не художник, и внешний вид игры на тот самый джем был весьма минималистичен:

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

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

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

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

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

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

Несколько художников приходило в проект, но быстро его покидало. Для любительского геймдева такой порядок вещей является нормой и на нем я продержался два года.

В 2017 году также подключился художник-аниматор Сергей, и игра зацвела новыми красками. Пара других художников обеспечила новоиспеченным анимациям пару замечетельных фонов, что тоже благотворно сказалось не внешнем виде the StoryTale. Принц с принцессой стали подвижнее, а гоблины, которые являются основными обитателями мира The StoryTale, стали куда одушевленнее.

Также мы начали показывать нашу сказку-платформер на выставках и фестивалях со стендами инди-игр. Это был увлекательный и незаменимый опыт общения с игроками и другими разработчиками. Если вы показываете где-то игру и есть возможность использовать большой телевизор, обязательно этим воспользуйтесь. На одной же из выставок я познакомился с разработчиком игр Славой Грис, который пару лет спустя выступит издателем на Nintendo Switch. На мой взгляд личные отношения очень важны в индидеве. И отзывчивые коллеги по цеху - это очень неплохо :)

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

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

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

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

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Итак, к лету 2019 обросшая кучей механик The StoryTale была доделана и выпущена в Steam. За период разработки персонажи научились останавливать время, летать над землей, проходить сквозь стены, становиться гигантами, сметающим все на своем пути, замораживать врагов, колдовать облака-ступеньки, дышать под водой и много другое.

С моей дочерью Ариной мы прописали мини-квесты с участием гоблинов, подсказки, она озвучила монологи от имени Маленькой Принцессы. Большая часть - в стихах (что потом еще аукнулось нам на переводах).

Но на этом история её создания не закончилась, ибо впереди замаячила возможность выпустить ее на Nintendo Switch. Терять «независимость» при работе с крупным издателем мне не хотелось, и выпуск игры на Switch осуществлялся таким же инди-методом, как и сама её разработка. Получить Devkit от Nintedo в Россию самостоятельно очень сложно, но один мой знакомый – Слава Грис - все-таки это сделал магическим способом (а в сказках иначе и не бывает) и именно он выступил в роли моего издателя.

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

уже на собственном опыте познакомился с процедурой публикации игры в Steam – вы оформляете страницу, делаете билд, проходите очень скромную проверку, публикуете игру. В этом процессе есть, разумеется, сложности и подводные камни, но с тщательностью просмотра игр, выпускаемых на Switch, Steam не сравнится. Работа над портом началась еще в январе 2020го, а релиз состоялся сегодня – 30 июня 2020го. Что же заняло столько времени?

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Первый запуск The StoryTale на девките состоялся весьма быстро. Игра сразу заработала на необходимых 60 кадрах/секунду. Но на больших уровнях производительность могла снижаться раза в два и пришлось дополнительно оптимизировать код.

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

Например, изначально обучение в The StoryTale было представлено такими вот Gif изображениями:

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Но сотрудник Nintendo предположил, что кнопки на экране демонстрируют какую-то другую консоль (game boy advance?) и велел в строгом порядке переделать обучение. Слава предложил перезаписать 40 GIF изображений с новым интерфейсом. Но я потратил еще несколько дней и написал обходное решение, располагающее отдельные кнопки поверх этих гифок.

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Стоит также иметь ввиду, что Nintendo очень щепетильно относятся к названиям собственных кнопок. Так, например, на Switch, оказывается, отсутствуют триггеры. Слово триггер использовать нельзя. Так же нельзя использовать Press Any Key – должно быть четкое указание кнопки, например Press A to Play. Когда игра уже переведена на кучу языков, такая смена формулировок может вызвать отдельную головную боль. Интуитивно догадаться какой порядок слов нужно выстроить на европейских языках еще можно, а вот китайский – это подстава. Благо у Nintendo есть определенный словарь их терминов на нескольких языках, который, может быть, кому-то и поможет.

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Также сотрудники Nintendo проводят безумное количество опытов над вашей игрой. Я не могу представить, что еще с ней пытались сделать перед тем, как развернуть очередную сборку по причине того, что игра отображается не на весь экран если подключить ее к телевизору с разрешением в… 480р. Где взять такой телевизор, чтобы проверить в чем косяк самостоятельно – тот еще вопрос, так что решено было исправлять этот баг почти вслепую, запуская сборку на ПК и меняя разрешение монитора на 480р.

Ещё в требованиях Nintendo четко указано, сколько раз игра может писать сохранения в минуту. При тестировании оказалось, что что иногда игра сохранялась аж 42 раза за 60 секунд. В ПК-версии для упрощения тестирования и контроля происходящего процесса в любой сохраняемый параметр сразу открывает файл, записывается туда и закрывает файл. Что оказалось неприемлемым для прохождения игры проверок от Nintendo.

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

А теперь вернемся к курению. Когда столько раз получаешь отказы от отдела тестирования Nintendo - уже может потянуть расслабиться не очень полезным способом.

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Некоторые анимации были добавлены, чтобы, во-первых, разнообразить поведение гоблинов, когда они бездельничают, а во-вторых, чтобы все-таки придать их образу чуть больше негативного окраса. Но при релизе на Nintendo это стало проблемой.

Дело в том, что Steam не требует получения и указания возрастных рейтингов, а для релиза на Nintendo это процедура обязательна. Возрастной рейтинг присваивается цифровому продукту в следующем порядке: после регистрации названия продукта в магазине Nintendo, издателю выдается «тикет» в рейтинговую систему IARC. Там издателю предоставляется здоровенная анкета, с пунктами вроде «есть ли в вашей игре секс?». Если поставить галочку, напротив «да», то анкета обрастет еще бОльшим количеством вопросов о том, какие части тела персонажей вы показываете и насколько близко расположена к ним камера. В зависимости от ваших ответов, игре присваивается рейтинг в большинстве стран – Pegi, ESRB, ACB, Russian (у нас не особо задумывались над наименованием, да) и так далее.

Немного интересной информации: для получения CERO (рейтинг в странах Азии) нужно заплатить две тысячи евро, записать прохождение игры на японском, ужатое в один час, и прислать им в Китай… DVD с этой записью.

The StoryTale - как гоблины бросали курить и другие сложности портирования Gamedev, Платформер, Инди, Гифка, Видео, Длиннопост

Кроме очевидного секса и насилия в анкете есть куча вопросов про алкоголь и про злосчастные сигареты. Так вот, без сигарет у нас стояла галочка только напротив cartoon violence, что давало игре в некоторых странах 3+, а ESRB вообще пометил ее как «для всех возрастов». Но стоило упомянуть, что в игре есть раковые палочки, как возрастной рейтинг почти во все странах взлетел до 18+, что является неприемлемым, когда ты собираешься выпустить в e-shop добрую сказку, где нельзя никого убивать.

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


Если вам приглянулась сказка-платформер The StoryTale – добро пожаловать в Steam или e-shop, где результат пяти лет моей работы уже доступен.

А курить вредно не только для здоровья, но и для рейтинга. Так что бросайте это дело или даже не начинайте и спасибо за чтение!


Страница игры в Nintendo eShop: https://www.nintendo.ru/-/-Nintendo-Switch/the-StoryTale-180...

Страница игры в Steam: http://store.steampowered.com/app/629230

Показать полностью 13 1
118

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре

В тактических играх ИИ очень важен. Если ИИ видится как «искусственный идиот», то игру может спасти потрясающий мультиплеер, сюжет, атмосфера и графика (это неточно). Решение очевидное: делай хороший ИИ, в чём тут могут быть проблемы?

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

В деталях. Ниже описаны мои шаги по конструированию сильного ИИ с характером. Не супер сильного [1], но способного быстро отработать локально в прожорливом браузере любого средне-слабого ПК. Мною применён подход экспертных систем с использованием набора эвристик и мутаций. Описаны 15 шагов постепенного преображения ИИ, каждый из шагов можно пощупать.

Краткое описание


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


Например, генерируются три стратегии:


1. Бежать оголтело всем вперед и атаковать всех, кто подвернётся под руку. Очки итогового состояния: 37000 баллов.

2. Атаковать лучниками с безопасного расстояния, а остальные прячутся по углам. 45000 баллов.

3. Всем отступить, сгруппироваться и попрятаться от врагов. Если можно при этом ранить какого-нибудь врага с безопасного расстояния, то атаковать. 18000 баллов.

В этом случае будет выбрана 2-я стратегия.

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

Ну вроде всё стандартно. Не совсем.


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


Правила игры


У игрока и у ИИ изначально по углам выдаются по 6 одинаковых юнитов. Каждая команда ходит по очереди всеми юнитами сразу. Варианты хода каждого юнита:

- пропустить ход;

- передвинуться и пропустить;

- передвинуться и атаковать (можно и иногда нужно атаковать своих).


Игровое поле и состав команды генерируется процедурно (то есть случайно, но с проверками на проходимость и приемлемую «тактичность»). Типы юнитов:

1. Боец F, юнит ближнего боя с самой большой живучестью, уроном и мобильностью. Эдакий танк+дамагер.

2. Лучник A, самый низкий урон, зато атака на расстоянии 1-7 по прямой линии.

3. Колдун W, умирает с одного удара бойца, зато атака на расстоянии 1-5 по прямой линии насквозь по всем юнитам.


Игровое поле всегда размером 10*10.


Возможные поля на карте:

- Земля — не накладывает никаких ограничений.

- Стена — через неё нельзя ни прострелить, ни пройти.

- Вода — через неё нельзя пройти, но через неё может стрелять лучник (огненный маг не может).

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

Игра полностью детерминирована, то есть в ней нет элемента случайности (шанс попадания 100%, никаких критических уронов и т.п.). Также это игра с полной информацией, то есть соперники всё знают о состоянии войск друг друга в любой момент времени. Как в шашках.


ИИ сильнее мясного игрока, но у последнего на первом уровне есть фора в виде одного юнита. На 3-ем у игрока наоборот хандикап в одного юнита и победить гораздо сложнее (у меня около 15% побед на этом этапе). Затем идёт более рандомная версия Игра+.


Изначально был разработан другой план игры в виде «качелей» как в турнирной таблице, но в конце разработки я отказался от него, как от слабомотивирующего. Смысл был в том, что если какая-то команда проигрывает, то на следующей карте ей даётся +1 юнит, и так максимум до 10 против 6. Если и потом команда умудрялась проиграть, то её юнитам увеличивались характеристики.


Игра разработана на нативном javascript: на div-ах и css-стилях, и это было самое неудачное решение из возможных [2]. Это браузерная игра. Движок не использовался. Единственная цель проекта — создать сильного компьютерного игрока «с характером» и возможностью изменения этого характера (расчетливые киборги, агрессивные орки, коварные эльфы, глупые зомби).


Для уменьшения «компьютерного стиля» у противника были применены некоторые хитрости:

- Игрок после своего хода не ждёт, пока ИИ подумает над своим ходом. Враг «сразу» начинает делать свои передвижения (в действительности это иллюзия).

- Компьютерный игрок управляет юнитами тоже с помощью своего курсора (и это тоже иллюзия, курсор просто летает одновременно с анимациями юнитов).

- ИИ умеет использовать коварные приманки, чтобы навязать бой (тут всё по-честному).


И что тут сложного?


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

Полный перебор невозможен из-за эффекта комбинаторного взрыва [3], который заключается в том, что по мере роста числа проверяемых элементов в сценариях сложность вычислений растет по экспоненте. Далее опишу, что это значит в моей конкретной игре.


Во-первых, т.к. на каждом ходу юниты команды ходят все сразу, то возможна разная их очередность. А при 6 юнитах в команде таких комбинаций становится 720 (1*2*3*4*5*6). Если юнитов будет больше, то комбинаций будет вообще огромное количество (при 7 — 5040, при 8 — 40320...). Если не учитывать максимального исхода, то игрок рискует распробовать удовольствие в ожидании очередного хода на 5-10 минут (а если он упорный, то задержка дорастёт и до миллионов лет, не каждый вытерпит). Именно из-за этой характеристики мой ИИ в начале боя менее эффективен, чем в конце. Ведь ближе к концу половина команды уже погибла.

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

Во-вторых, каждый юнит может передвинуться в разные точки карты. Бойцы с дальностью передвижения 4 могут походить на 1-41 разных позиций. У магов и лучников с их передвижением в 3 возможное число ходов равно 1-25. Например, состав команды может быть: 4 бойца, 1 маг и 1 лучник. Итого разных комбинаций ходов по данному пункту мы получаем: 41*41*41*41*25*25 = 1766100625. В действительности из-за взаимных пересечений и непроходимой местности комбинаций будет меньше, но в редкой ситуации «разбегания по карте» число комбинаций будет приближаться к этому числу.


В-третьих, каждый юнит после передвижения может пропустить ход или атаковать в одном из 4 направлений. То есть имеем по 5 возможных завершающих действий на юнита. Всего комбинаций: 5^6 = 15625.


Итого комбинаций: 720 * 1766100625 * 15625 = 19868632031250000.

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

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


Как же сделано?


Чтобы решить подобную задачу, был использован эвристический подход, обобщённый алгоритм которого можно описать так:

1. Сгенерировать разные сценарии на основе заранее прописанных стратегий (~20 штук).

2. Пока есть время, проводить мутации сценариев, оставляя наиболее выгодные.

3. В конце выбрать сценарий с наибольшей оценкой.

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

5. Повторить для оставшихся юнитов с пункта 1.


Эвристический метод — это метод, который может сработать (по Макконнеллу [4]). Подробнее и строже в Википедии [5].


Ключевые моменты в этом алгоритме: генерация сценариев, мутации и правильная оценка выгодности состояния. В каждом из этих пунктов используются свои собственные локальные эвристики. Тем не менее, там где можно, использовались алгоритмы с гарантированным оптимальным результатом, например, А* для поиска пути [6].


Использованный мною эволюционный подход нельзя назвать полноценным генетическим [7], т.к. от него я использовал только мутации и выживание «сильнейшего», а коэффициенты влияния отдельных эвристик настраивал вручную. Алгоритмов формирования популяций и скрещиваний не применялось. После мутации выживает только один: либо мутант, либо родитель.

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

Нейронные сети [8] мною не использовались из-за особенностей задачи. Во-первых, из-за сложности их успешной реализации в условиях постоянно меняющейся среды (появление новых механик, навыков, способностей). Во-вторых, из-за сложности в их контролируемой персонализации (если захочется сделать два поведения: стремительного Суворова и осторожного Кутузова [9]).


Эволюция искусственного идиота в искусственный интеллект


0) Сначала у ИИ были введены только 3 стратегии со случайными ходами. {Сложность игры #0}. Оценка состояния была просто случайным числом. И так как ИИ не единственный элемент разработки, мне пришлось довольно долгое время мириться с поведением сумасшедших рыбок.


1) Затем в расчёты оценки стратегии были добавлены проверки оставшихся юнитов и их жизней у ИИ и у игрока. {Сложность игры #10}. За мертвого юнита команде начислялось 0 баллов. За полностью здорового Х баллов (например, 100 000 за бойца F, 70 000 за лучника A, 85 000 за колдуна W). За раненого начислялись 50% от основной ценности, а оставшиеся 50% пропорционально оставшимся жизням от максимальных. Благодаря этому ИИ было выгоднее добивать врагов, а если он мог только ранить, то он выбирал противников с меньшим числом жизней — более уязвимых.


Случайные ходы стали более осмысленными — ИИ иногда давал сдачи.


2) Затем была добавлена более осмысленная стартовая стратегия:

max_agro — все солдаты бежали максимально ближе к врагам и старались нанести как можно больше урона. {Сложность игры #20}. Одна стратегия использовала изначальный порядок ходов юнита, вторая ходила ими в обратном порядке.


ИИ стал вести себя так, как ведёт себя самый примитивный искусственный идиот в тактических играх. И довольно часто именно такой ИИ в тактических играх и используется. Он популярен из-за своей надежности и простоты. Такой даже может победить — но очень редко.


Именно на это похоже поведение ИИ в провальной игре Master of Monsters – Disciples of Gaia, из-за чего в неё банально скучно играть [10].

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

3) Дальше были добавлены стратегии, учитывающие возможный урон от врагов при передвижениях, и выбирающие те ходы, которые приводили к наименьшей опасности — желательно нулевой. {Сложность игры #30}. И ИИ сразу же стал сверх трусливым, избегающим любой близости с противником — лучше уж сбежать, чем атаковать и ранить, ведь противник может дать большей сдачи!


Поэтому в оценке состояний стал тоже учитываться возможный урон врагу. Штрафные баллы от потенциального урона от врагов стали вычисляться с уменьшающим коэффициентом 0.20 (коэффициент постоянно перенастраивался). Это заставляло ИИ при выборе между атакой или бегством избирать агрессивный вариант, поскольку он приносил в 5 раз больше баллов, чем бегство. Но ИИ всё равно надолго остался трусливым, ведь чтобы попасть в такую ситуацию выбора, враг уже должен быть в досягаемости, а сам ИИ при таких оценках никогда не подставит себя первым под удар. То есть не пойдёт на сближение. Конечно, игрок будет чувствовать себя обманутым, ведь у ИИ бесконечный запас терпения и он может убегать от опасности вечно, вынуждая игрока к агрессии.


Следует отметить, что подобные вычисления возможного урона очень длительны без использования кэша. Один полный просчёт стратегии без оптимизаций изначально занимал 700 миллисекунд. А у меня ведь ограничение на весь ход одним юнитом ~4000 мс! После оптимизаций и отработавших кэшей это время уменьшается до 20 миллисекунд при очень похожих стратегиях (к сожалению кэш невозможно просчитать весь заранее из-за эффекта комбинаторного взрыва, поэтому 20 мс достигаются не всегда).


Поэтому когда я внедрял технологию расчета с прогнозированием на несколько ходов вперёд, то время расчетов для глубины только в 2 хода (врага и ИИ) занимало уже +700 миллисекунд. В этом случае применяют оптимизацию с отсечением «слабых» веток. Если для этого пользоваться хоты бы примитивной стратегией max_agro, то увеличение времени было +30 миллисекунд и кэширование эту разницу почти не уменьшало (т.к. позиция на карте была совершенно новой).


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


4) Следующие стратегии были направлены на расширение изначального разнообразия стратегий:

far_attack_and_hide — юниты стараются атаковать как можно дальше от противника, а если не атакуют, то прячутся от любой атаки.


close_group_flee — юниты отступают подальше от боя и группируются как можно ближе друг к другу. Если можно при этом безопасно атаковать врага — атаковать.

{Сложность игры #40}.


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


5) Затем настало время мутаций. {Сложность игры #50}.

Алгоритм мутаций был очень простой:

- при переборе выбранных стратегий создавалась одна копия стратегии;

- в этой копии производилась мутация хода;

- если ход становился невалидным, то он исправлялся до хоть какого-нибудь валидного по одной из стандартных стратегий;

- вычислялись баллы мутировавшей стратегии;

- если у мутанта баллы оказывались больше, то мутант заменял собой своего родителя.


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


Сначала был реализован самый примитивный тип мутации: от 1 до 3 движений заменялись на случайные, порядок ходов оставался прежним. За одну итерацию расчетов в среднем на каждую стратегию создавалось ~5-15 мутаций. При этом в среднем каждая пятая мутация была более выгодной и заменяла стратегию родителя.


6) Эвристика приманки. {Сложность игры #60}.

Эта эвристика повторяла ту тактику, с помощью которой я выманивал ИИ на атаку одним юнитом, чтобы перебить его по одному. Этому трюку удалось научить и ИИ.


Для этого в функции вычисления баллов за состояние стратегии проверяется, соответствует ли текущее состояние ситуации приманки:

- Только один солдат ИИ может быть атакован;

- Только один враг может атаковать вылезшего юнита;

- Юнит компьютерного игрока после этой атаки обязательно должен выжить;

- Как минимум двое юнитов компьютера смогут атаковать в ответ. Чем больше таких наказывающих юнитов, тем больше баллов за эвристику.


Эффект оказался отличным: игроку становится легче начинать бой самому. При этом чаще всего игроку всё равно выгоднее «повестись» на эту приманку, так как после ответной атаки он сможет навалиться на ИИ всем своим отрядом (это если он разумно сгруппируется предварительно). А там уже всё решат грамотные локальные тактические решения.

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

7) Потом мне стало бросаться в глаза, что бойцы ИИ постоянно разбегаются как тараканы. {Сложность игры #70}. Также солдаты могли забиться в угол или зайти в тесные тоннели, в которых ИИ сильно терял в своей эффективности перебора возможных атак.

Поэтому в оценочную функцию были добавлены эвристики оценки расстояний между юнитами и рельефа карты со следующими предположениями:


- Чем ближе союзники друг к другу «в среднем» — тем лучше (юниты реже стали разбегаться по разным частям карты).

- Чем ближе солдаты ИИ к в солдатам врага «в среднем» — тем лучше (мне нужен был наступательный ИИ).

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

- Если солдат ИИ не может добежать и атаковать врага как минимум за 2 хода, то его надо штрафовать (это заставляет его наступать, но не подставляться самому под атаку).

- Если в радиусе 2 шага от солдата слишком много блокирующих позиций, то штрафовать его (реже стали забегать в тоннели).

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


8) Затем пришло время расширения стратегий. {Сложность игры #80}. Я не мог добавить полный перебор возможного порядка ходов юнитов, но я мог сделать перебор их ходов по типам: боец, лучник, колдун. Поэтому появились стратегии последовательности ходов, вида W_A_F: сначала ходят все колдуны, потом все лучники, потом все бойцы.


Таким образом добавилось 6 новых стратегий: W_A_F, W_F_A, A_W_F, A_F_W, F_A_W, F_W_A. Они не решили всех проблем, но заметно улучшили качество игры.


9) У меня были мутации, но толку от них было мало. {Сложность игры #90}. В основном они улучшали слабые стратегии, а удачные улучшались редко. Поэтому мутации были доработаны и каждый раз срабатывал один из случайных типов мутации:

- От 1 до 3 движений заменялись на случайные, порядок ходов оставался прежним (старый способ);

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

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


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


10) Затем были добавлены еще полуслучайные стратегии. {Сложность игры #100}. Порядок ходов генерировался случайно, а сами ходы выбирались по следующим принципам (по уменьшению их важности):

- нанести максимальный урон;

- получить как можно меньший урон в ответ;

- стать как можно ближе к врагам.


Заметного улучшения тут я не увидел, но проект уже перешел в ту стадию, когда каждое улучшение приводит к менее заметным воспроизводимым эффектам.


11) Мне надоели вопиющие ошибки ИИ, когда он при атаке своим колдуном сильно задевал моих солдат, но при этом ранил своих союзников. {Сложность игры #110}. Хотя перед этим он вообще-то мог походить ими и убрать их с линии огня. Поэтому была создана жёстко сгенерированная стратегия с ручными проверками:


- если есть колдун, то найти место, откуда он нанесет максимальный урон;

- если в этом месте или по пути удара есть союзники — запомнить их;

- сначала ходят все союзники, которых запомнили, и они не могут становиться на зарезервированные колдуном позиции (то есть освобождают дорогу);

- ходит колдун;

- ходят оставшиеся юниты.


Стратегия легко описывается на словах, но заморочно для её программирования.


12) Иногда юниты "убегали в кусты" прямо перед началом боевых действий. {Сложность игры #120}. В результате этого, когда начинался обмен атаками, то один или даже два юнита могли оказаться слишком далеко от военных действий и не помогали союзникам. Если это случалось, то я почти гарантированно выигрывал у ИИ. Если не случалось, то я чаще проигрывал. Избавлялся от этого я вводом новой эвристики по оценке результирующих баллов у стратегии. Для каждого юнита проводилась проверка:


1. Если юнит в этот ход атаковал, то он получал +1500 баллов.

2. Если не атаковал, то подсчитывались позиции, с которых враги смогут наносить урон союзникам. Продолжать подсчет, если таких позиций будет больше 0 (N > 0).

2.1. Если юнит не может достать и ударить ни по одной позиции (n = 0), то он получает штраф -1000 баллов.

2.2. Если юнит может достать до всех позиций, то он получает +1200 баллов.

2.3. Если юнит может атаковать до некоторых позиций, то он получает +(n/N)*1000 баллов.


Это позволило сильно улучшить «сплоченность» юнитов ИИ. К сожалению, начали появляться случаи «одного дезертира», когда в проигрышной ситуации один из раненых юнитов предпочитал прятаться за спинами своих товарищей вместо того, чтобы внести свою лепту, атаковав врага. Это нелепо выглядело, когда у компьютера остаётся всего 2 юнита, а у игрока 3 или даже больше. Дополнительная исправляющая эвристика представляет собой следующее правило:


IF ("у ИИ меньше юнитов, чем у противника" AND "у ИИ не больше 3 юнитов")
THEN "за каждого дезертира начислить сценарию штрафные баллы"

13) Под конец ввода стратегий их набралось уже под 25 штук. {Сложность игры #130}.


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


14) Примерно в начале была ещё интересная доработка. Изначально оценка ценности сценария вычислялась как разница сумм баллов:


Итоговые_баллы = Баллы_ИИ - Баллы_игрока

Но спустя несколько улучшений я вспомнил, что это не самое лучшее решение, т.к. тогда для ИИ будут одинаковыми ситуации «2 солдата против 1 одного солдата» и «4 солдата против 3 солдат». Поэтому баллы стали вычисляться как отношение:


Итоговые_баллы = Баллы_ИИ / Баллы_игрока

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


Хочу отметить, что все эти доработки вводились постепенно хоть и в указанном порядке, но многие из них улучшались, перерабатывались и исправлялись от багов в более хаотическом порядке. Реальных итераций было больше 100 штук.


Вот как играет финальный ИИ {Сложность игры #9999}:

ИИ ходит сразу, а не тратит время на раздумья


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


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


- вычисления хода первого юнита начинаются сразу же после хода игрока, пока еще вылетает окошко, что сейчас начнётся ход противника. А это целых 4 секунды, которые игроком не воспринимаются пустым ожиданием;

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

- при анимации ходов ИИ к двигающимся юнитам летает курсор ИИ, который притворяется, что он по ним кликает. Курсор летает максимально быстро, но чтобы оставалась комфортность слежения за ним. Более того, добавление курсора не только позволило увеличить запас времени вычислений с 2 секунд до 4.5, но и сделал просмотр хода компьютера более комфортным для человека;

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


Чтобы всё это не лагало в браузере и работало с достаточно стабильным FPS, расчёты производятся асинхронно воркером (Web workers) [11].


Этим я хотел избавиться от раздражающего окошка ожидания «Компьютер ходит». Такая неприятная плашка есть во многих хороших играх, например, в Xenonauts [12]. Я считаю, что мне удалось справиться с этой проблемой.

Разработка искусственного интеллекта из искусственного идиота в пошаговой тактической игре Игры, Компьютерные игры, Разработка, Искусственный интеллект, Gamedev, Мобильные игры, Браузерные игры, Гифка, Видео, Длиннопост

Таким образом, ИИ тратит на обдумывание своего хода всегда одинаковое время — независимо от его сложности. Очень любопытная особенность этого подхода в том, что чем сильнее у игрока компьютер, тем большее число мутаций ИИ успеет перебрать, а значит будет тем сильнее, чем мощнее компьютер игрока. Я сначала убрал данный эффект с помощью фиксации времени хода и предварительного подсчета скорости работы компьютера. Однако потом я убрал эту фиксацию, т.к. владельцам мощных компьютеров это позволит сразиться со «своим» компьютером, а не усреднённым.

Каков результат и в чём недостатки


Таким образом, получившийся компьютерный противник умеет достойно сражаться и хорошо пользуется любыми оплошностями игрока, а своих делает не слишком много. Тем не менее, я, зная все особенности его работы, хоть и с напряжением, но побеждаю его почти всегда (при равных условиях). А хотелось бы наоборот: чтобы даже зная о его особенностях, почти всегда ему проигрывать. ИИ далёк от идеала, поскольку используемый мною набор эвристик приводит к синергетическому наложению «ошибок моего восприятия» друг на друга. Вот эти ошибки:


1. Несовершенство и неполнота моей собственной стратегии, я не знаю всех наилучших стратегий, и поэтому не могу их обозначить и внедрить в игру.

2. Потеря эффективности (которая итак не идеальна) выработанных рабочих эвристик при переносе их на программный код. Например, моя человеческая эвристика «Юниты держатся рядом, но не слишком близко, чтобы избегать двойного урона от магов и не застрять в узких проходах». Эта эвристика помогает мне побеждать ИИ, но при обучении ею моего компьютерного оппонента, мне приходится качественное описание переводить в алгоритмическое с количественными оценками, и тут возможна потеря данных.

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

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


Полноценные генетические алгоритмы вместо «подбора на глазок» скорее всего позволили бы подобрать более оптимальные коэффициенты в эвристиках. Но это уже задача для будущих полноценных проектов — не хочется надолго застревать с прототипом. Текущим ИИ я вполне доволен: он расчётливый, немного коварный, достаточно агрессивный и не позволит игроку победить себя в сухую (в действительности чрезвычайно редко позволит).


Дополнительные возможности


Подобный способ реализации позволяет добиться дополнительных бонусов в игровой разработке (во многом с точки зрения разработчика и его горящих сроков):


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

2. Действительно интеллектуальные уровни сложности. Сейчас в основном уровень сложности определяет то, какие бонусы компьютерный игрок получит в качестве ресурсов (больше золота на старте или бонус в добыче) или как сильно его солдаты будут бить (+50% к урону). Это работает, но можно ведь сделать ИИ чуть менее умным просто постепенным отключением некоторых эвристик по мере уменьшения сложности.

3. В продолжении 2-го пункта можно создавать и разные расы/фракции компьютерных противников: у орков работают только агрессивные стратегии; у толп зомби только примитивные «бежать вперед и атаковать»; а у киборгов использовать всю мощь ИИ. Благодаря этому игроку перед нападением придётся оценивать не только числа у противников, но и их интеллектуальность.


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


Где пощупать


Вы можете протестировать силу этого ИИ в браузерке «AI tactical rumble. Test subject» бесплатно на площадках типа itch.io [13]. GET параметр ai (значения от 0 до 140 с шагом 10) позволит снизить сложность ИИ.


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


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


Список литературы


1. DeepMind — статьи на Хабре.

2. HTML5 games: Canvas vs. SVG vs. div на stackoverflow.

3. Комбинаторный взрыв — Википедия.

4. Совершенный код Стива Макконнелла — Хабр.

5. Эвристические методы — Википедия.

6. A* — Red Blob Games.

7. Генетический алгоритм. Просто о сложном — Хабр.

8. Восемь потрясающих игр с искусственным интеллектом от компании Google — Хабр.

9. Очень кратко о Суворове и Кутузове.

10. Master of Monsters – Disciples of Gaia — обзор на IGN.

11. A Detailed Explanation of JavaScript Game Loops and Timing.

12. Xenonauts и долгий экран ожидания ИИ.

13. AI tactical rumble. Test subject — на itch.io.

Показать полностью 8 1
31

Hold my beer! Часть 13. Новая стартовая локация и ее жители

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

Осталась самая сложная часть работы - квесты :(

Ну и кисонька, а то как же

Hold my beer! Часть 13. Новая стартовая локация и ее жители Unity, Gamedev, Indiedev, Игры, Мобильные игры, Видео
Показать полностью 1
46

Hold my beer! Расширяем механику игры. Часть 11. Подземелья

Привет пикабу. В прошлый раз я попросил у пикабу придумать название для этой игры.

Мне предложили много классных вариантов, но я выбрал другое название. Именно "hold my beer!" произнесет главный герой перед началом всего приключения.

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

Итак, за прошедший месяц (на самом деле за пару дней) в игру было добавлено подземелье и механика смены локаций. Осталась система сохранений и можно набивать контент:)

Ну и кисонька в конце

Hold my beer! Расширяем механику игры. Часть 11. Подземелья Unity, Gamedev, Инди, Мобильные игры, Разработка, Видео, Длиннопост
Показать полностью 1
77

Мини-демка Dangerous Caves

Всем привет!

Пилю небольшой платформер-метроидванию с элементами РПГ.

На данный момент готовы уровни обучения и минут 20-30 основного геймплея. Буду рад любым комментариям и критике.

Язык можно переключить на русский в настройках, но если кто-то сыграет на английском и укажет на ошибки в переводе - буду очень признателен.

Скачать: http://wdfiles.ru/ajcP

Зеркало: https://ru.files.fm/u/x58dsnfz

Мини-демка Dangerous Caves Демо, Платформер, Metroidvania
Мини-демка Dangerous Caves Демо, Платформер, Metroidvania
Мини-демка Dangerous Caves Демо, Платформер, Metroidvania
Показать полностью 1
43

Kingdom Shell - пиксельная метроидвания

Всем привет.

Прошёл целый год с прошлого поста. Да и разработка игры не стояла на месте. Kingdom Shell - пиксельная метроидвания про полудемона Элиаса, создаётся одним человеком, т.е. мной)

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

Игра всё ещё в разработке. Недавно совсем руки дошли до создания трейлера.

За судьбой игры можно следить здесь - https://vk.com/cupofpixels

Также можно поиграть в демо вот здесь - https://cup-of-pixels.itch.io/kingdom-shell

530

The StoryTale - сказка-платформер со случайными заклинаниями и странным оружием

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


Тема джема была "Бесполезные суперспособности". Игру делали с дочерью душой и энтузиазмом. Навыков было немного, опыта ещё меньше. Дочь придумала сказку, где сначала принц бежит спасать похищенную принцессу, а потом наоборот. Действие игры начиналось с момента, когда принцесса быстро выучивает заклинания и отправляется на выручку принцу. При этом она все время путает заклинания)


Краткий первоначальный концепт: " Способностей будет много. Но при нажатии суперкнопки будет рандомно выбираться что-то одно. Способность действует X секунд. И будет кулдаун Y секунд. Например жмём пробел и 20 секунд из 60 секунд герой может появлять ящики из воздуха. Потом 40 секунд он двигает эти ящики и думает, что делать дальше. Потом жмем снова пробел. Рандомно начинает работать тройной прыжок. Может он полезен, может бесполезен, а может и даже вреден" .Таким образом заложил в геймплей , как глючат заклинания. При тестировании игры выяснил, что отдельно дергать бесполезное заклинание неудобно и кулдаун "не очевиден"...То есть работающая-неработающая кнопка - это странно и не так весело (хотя кулдаун в "планируемых"заклинаниях очень даже логичен).


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


Как-то занудно. Переделал на автоматическое переключение и уменьшил до 15 секунд (рандомно в диапазоне) и стало веселее. Чтобы игра быстра не прошлась, я начал проектировать сразу 98 и 99 уровни....


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


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

The StoryTale - сказка-платформер со случайными заклинаниями и странным оружием Игры, Платформер, Gamedev, Видео, Гифка, Длиннопост

Также не очень запланированно добавился еще один персонаж - бессмертный принц, который в начале был просто частью предыстории. По условиям очередного джема надо было делать стрелятельно-разрушительную механику с главным героем в 2D/изометрии. Одна беда - механика в The Storytale исключительно ускользательная. Здоровье принцессы = 1 ХП. Любая горошина в лоб, любой шип в бок - откат к чекпойнту. Пришлось доделывать "приквел" про принца, с которого начинается история. Тут уж и вооружить его пришлось, и голову поломать, чего бы нового да неизбитого можно было бы в игру добавить. Чтобы было разнообразие, решил сделать его бессмертным (заодно не пришлось балансировать DPS / HPS и прочую экономику ударов-лечилок-восстановлений :) При этом враги принца откидывают обратно (обычно в направлении к старту)


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

The StoryTale - сказка-платформер со случайными заклинаниями и странным оружием Игры, Платформер, Gamedev, Видео, Гифка, Длиннопост

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

The StoryTale - сказка-платформер со случайными заклинаниями и странным оружием Игры, Платформер, Gamedev, Видео, Гифка, Длиннопост

И вот, совсем недавно дошли до демо-версии. Набравшись храбрости решил податься на конкурс инди-игр DevGAMM. Игру радушно приняли и она даже прошла в номинацию Best Indie Games.


Нам было бы приятно, если бы вы тоже заглянули в нашу сказку (:


Ссылка на демо-версию: https://thestorytale.itch.io/the-storytale

ВК-девлог:  https://vk.com/the_storytale

Показать полностью 3
2049

Эволюция простого платформера

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

Эволюция простого платформера Разработка игр, Gamedev, Платформер, Гифка, Видео, Длиннопост, Игры

Но потом я решил, что его стоит немного улучшить, а потом еще немного, а потом я подумал что с такой графикой никто на игру даже и не посмотрит, итого я потратил еще 7 месяцев и получил:

Эволюция простого платформера Разработка игр, Gamedev, Платформер, Гифка, Видео, Длиннопост, Игры

Полный трейлер посмотреть можно здесь:

Но вполне возможно это была ошибка, вместо того что бы сразу расписать полный диздок, я правил его на ходу, и соответственно подстраивался под то что уже было реализовано. С другой стороны без приобретенного опыта я бы и не смог написать адекватный диздок ;)


К слову, я совсем не умею рисовать, поэтому вся графика в игре является пререндером с 3D. Я мог бы рассказать об этом подробнее если кому интересно.

Показать полностью 1
137

Мои попытки в метроидванию

Мои попытки в метроидванию Pixel Art, Pixels, Gamedev, Разработка, Sprite, Разработка игр, Castlevania, Metroidvania, Гифка, Длиннопост

Всем привет! Меня давно не было, потому что я чет загрустил, но писать об этом не буду, ибо не для этого создавался пост.

Решил я тут недавно попробовать снова порисовать ассет для своей будущей игры, поначалу все выглядело максимально убого,но вскоре получилась неплохая картинка, которую вы видите выше

Нарисовал пару атак для героини. Первый - удар под рапиры, ножи, кастеты и прочее мелкое оружие, которым не так трудно ударить.

Мои попытки в метроидванию Pixel Art, Pixels, Gamedev, Разработка, Sprite, Разработка игр, Castlevania, Metroidvania, Гифка, Длиннопост

Вторая анимация - под мечи, топоры, молоты и просто огромные оружия, на которые требуется неплохой замах

Мои попытки в метроидванию Pixel Art, Pixels, Gamedev, Разработка, Sprite, Разработка игр, Castlevania, Metroidvania, Гифка, Длиннопост

Так же сделал анимацию для бега

Мои попытки в метроидванию Pixel Art, Pixels, Gamedev, Разработка, Sprite, Разработка игр, Castlevania, Metroidvania, Гифка, Длиннопост

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


Ну и напоследок анимация той самой верхней картинки
Да, выглядит немного коряво, потому что это не сама игра, а лишь гиф-мокап того, как она будет выглядеть

Мои попытки в метроидванию Pixel Art, Pixels, Gamedev, Разработка, Sprite, Разработка игр, Castlevania, Metroidvania, Гифка, Длиннопост

Тем не менее, пора действовать в плане кода! Возможно скоро вы и сможете лицезреть первые демо версии этой небольшой метроидвании!
А следить за разработкой можете в моей группе : https://vk.com/artist404
Спасибо, что уделили время этому посту! :)

Показать полностью 3
71

Игра по мотивам Cynicmansion #1.5

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


Вспомнился один из комментариев:

Игра по мотивам Cynicmansion #1.5 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Длиннопост

Я и сам был готов поверить в это - времени дико не хватает, и начали опускаться руки. Но я должен продолжать, так как куча идей все еще живет + вы сами много интересного придумали и подсказали в комментариях.


Уверен, любой разработчик а начале карьеры/хобби создавал много незаконченных проектов (у меня самого куча таких), и я не хочу, чтобы одним из них стала эта игра. Да и куда я денусь - после прошлого поста появилось ~150 подписчиков, которые ждут новостей (М - мотивация!)


Итак, как я уже говорил, сделать успел очень мало, вкратце опишу:


Cделал возможность стрельбы из любого положения: прыжок, скольжение по стене, бег (просто продублировал анимации и добавил вытянутые руки :D)

Игра по мотивам Cynicmansion #1.5 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Длиннопост
Игра по мотивам Cynicmansion #1.5 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Длиннопост

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

Игра по мотивам Cynicmansion #1.5 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Длиннопост

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


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


На этом все! Надеюсь, в скором времени стабилизирую рабочее время и смогу плотно засесть за разработку.


Ссылка на билд: https://drive.google.com/open?id=0B0bUOGAkdV9CQXpnNFBCaFM1Q1...

Управление стрелками, прыжок - пробел, стрелять - X.


Бонус в комментариях, игроманы.

Показать полностью 3
958

Игра по мотивам Cynicmansion #1

Медленно, но дело двигается. В прошлом посте обратили внимание на кривую анимацию бега, решил поправить. Взял за основу другую раскадровку

Игра по мотивам Cynicmansion #1 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Видео, Длиннопост

Вроде что-то да получилось)

Игра по мотивам Cynicmansion #1 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Видео, Длиннопост

Также сделал анимацию прыжка. Нагло срисовал ее с моего любимого платформера N-game. Оттуда же взял механику скольжения по стенке

Игра по мотивам Cynicmansion #1 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Видео, Длиннопост

Идея для основного оружия в игре быстро пришла в голову. Наш персонаж - обычный пикабушник, а его главное оружие - минусы :D Минусомета как такового нет, будет стрелять просто из рук.

Игра по мотивам Cynicmansion #1 Разработка игр, CynicMansion, Unity, Unity3d, Gamedev, Платформер, Гифка, Видео, Длиннопост

Небольшой ролик по текущей механике:

На этом пока все. Разработка продвигается медленно, так как выпадает не очень много свободного времени, но бросать я не собираюсь, ибо есть куча идей, которые еще не реализованы. Задавайте вопросы, буду рад всем ответить, а также предлагайте свои идеи =)


Кому интересно, за основу брал наработки из этого урока https://www.lynda.com/Unity-tutorials/Advanced-Unity-2D-Plat... (На сайте можно месяц бесплатно смотреть уроки, а файлы проекта найти на торрентах)

Показать полностью 1
208

Inmost

Inmost Inmost, Gamedev, Metroidvania, Гифка, Длиннопост

Всем привет.

А я все продолжаю пилить.

Inmost Inmost, Gamedev, Metroidvania, Гифка, Длиннопост

Думаю, я закончил с левелдизайном для демки.

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


Для тех, кому интересно "да че так долга та?!" ниже немного куча текста, в которой я поясню, как работа над игрой строится в целом.


Не будем касаться кода, а возьмем только арт.


Обычно, для других проектов, мы строим процесс итеративно.

Это когда:


10 нарисовали что-то, заанимировали

20 закодили, вставили к прочему, уже готовому

30 проверили как работает и половили баги.

40 Наловилсь. Принялись за следующую фичу.

50 goto 10


В этот же раз все делается последовательно. Ну, почти, на самом деле.


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

(Правда на самом деле это procreate на планшете, а не настоящий листик. Так удобнее)

Inmost Inmost, Gamedev, Metroidvania, Гифка, Длиннопост

Это не так просто, как может показаться. На каждую локацию уходило до нескольких часов времени. Конечно, тут дело не в прорисовки и все время уходит на переделки. На этом этапе важно учитывать на сколько в любом расстоянии персонаж может прыгнуть/перекатиться/проскользнуть, чтоб на самом раннем этапе распланировать, куда мы добраться можем, а куда - нет.


Пожалуй, это самый приятный этап. Достаточно взять листик в клеточку и вперед! Дело только за фантазией. Рисуем схемки, представляем как это будет все круто. Или не будет. Смотря как вам надо.



Следующий этап - фоны.


Берем эти ужасные листики в клеточку с нашими каракулями, загоняем в фотошоп и обрисовываем.


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


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


Последние локации были сильно сложнее первых.

Inmost Inmost, Gamedev, Metroidvania, Гифка, Длиннопост

Отмечу, что это не следствие выросшего скилла, а именно косяк в построении работы, так что это плохо.

Если б планка не ползла вверх, то можно было б сделать в пару раз больше локаций.

Так, конечно, они красивше, но иногда реально нужно количество, а не качество.



Немного поразмыслив я принял для себя стандарт в котором каждая локация разделена на несколько основных слоев.


*Задники

*интерактив (персонаж, враги, переключатели и т.п.)

*передний слой.


Банальненько, да?


Помимо этого дополнительные слои - статичное освещение вшитое в задний слой, статичное освещение переднего слоя, динамическое освещение переднего слоя.

Динамическое, пожалуй, громко сказано, скорее анимированное.



Освещение я не рисовал сразу.

На самом деле освещение в моей реализации - достаточно спорное явление для пиксельарта...

Даже не так. Оно АБСОЛЮТНО ПОЛНАЯ ЕРЕСЬ И КАЖДЫЙ ПРИВЕРЖЕНЕЦ МЯГКИХ ГРАДИЕНТОВ ГОРЕТЬ ДОЛ...

Ну вот на столько это не пиксельарт.


Тем не менее, немного поэкспериментировав я изначально решил, что мягкие градиенты я люблю больше, чем вальгаллу трупиксельартистов.


То есть нарисовав основную форму локаций дальше нужно подсвечивать то, где светло и затемнять то, где наоборот. Добавлять блики, ambient occlusion и прочее прочее прочее.


Надо сказать, что это крайне мощный инструмент для восприятия и сцена с нормально расставленным освещением как в 2d так и в 3d выглядит ОЧЕНЬ сильно лучше и визуально и в плане читаемости (это когда, например, понятно куда прыгать можно, а куда нет) чем сцена без освещения.

Inmost Inmost, Gamedev, Metroidvania, Гифка, Длиннопост

Читаемость в случае Inmost крайне трудно переоценить, т.к. в силу монохромной палитры невозможно применять цветовое кодирование в полной мере (это когда карнизики или трубы за которые можно зацепиться красные, а остальные - нет)


Где-то там, промеж всех этих дел как-то незаметно анимировался главный персонаж. На данный момент у него около трехсот нарисованных вручную кадров.


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


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



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



Впереди еще очень много бла бла бла, всякое такое. Работа там, еще работа. Прогнозировать на счет сроков я категорически не берусь.

Но мы стараемся. Правда.



И в первую очередь стараемся не просто сделать, а сделать все хорошо.

Inmost Inmost, Gamedev, Metroidvania, Гифка, Длиннопост

И бонусный котик.
Папа дяди Федора и Матроскин уже есть, остался Шарик ©

Показать полностью 4
61

Inmost

Живу я в Руанде

Делаем с товарищем пиксельную метроидванию.


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

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

В общем, импортнул я туда туда мешок спрайтов да анимаций, пущай дальше программист мучается.

Ну не зря ж я в институте программирование прогуливал. А я пошел дальше рисовать картиночки фоны себе в удовольствие :)

Inmost Inmost, Metroidvania, Gamedev, Pixel Art
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: