Swarm Space

Добрый день, сейчас я вам расскажу историю о том, как ничего не смысля в разработки игр (а так же не умея программировать, рисовать, моделировать и может ещё чего) пытаться создать игру… и создать… игру… ну в неё уже можно играть!

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

Скриншот из текущей версии игры.
Скриншот из текущей версии игры.

P.S. (В скобочках будут мои комментарии с опытом сегодняшнего дня…)

Почему я вообще решил взяться за разработку игры?

Скучая в обеденный перерыв и ругаясь, что в Google Play нет нормальных игр (по моему мнению) мне и пришла идея — «А почему бы и не сделать свою игру?». Естественно эта идея была тут же озвучена коллективу и началась беседа о создании игры. Я успел придумать за пару минут первую интересную идею и описал её, но мне сказали, что такая игра уже есть и это Spore. Что ж дальше я стал предлагать другие идеи. Но вскоре мои коллеги начали задавать слишком приземленные вопросы про «Программирование», «Моделирование», «Анимации», «Искусственный интеллект» и прочее. Я всех уверял, что в этом нет ничего сложного (я ж сам ничего не умел и всё казалось простым xD), да и вообще нормальные разработчики игр сначала делают движок (xDDD) для своей игры, а потом уже свою игру!

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

Создание движка (да, да xD)

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

Фреймворк. Java. Итог № 1.

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

Для начала мне нужно было доказать своим коллегам, что разработать свою игру не так сложно, поэтому по одному из примеров игр на фреймворке LibGDX была «быстро сделана» (кое-как за несколько дней была настроена среда разработки, потом я скопировал код из примера и заменил спрайты на более «весёлые» для себя) игра. Собственно игра выглядела так: игрок играет сундучком и ловит монетки в виде рублей падающие сверху, управление сундучком осуществлялось с помощью гироскопа (наклоняем телефон вправо- влево).

Вообще эта «быстро сделанная игра» выглядела настолько мерзко, что даже мне стало плохо от её вида. Дальше никакого желания что-либо делать даже у меня не было. Конец… Конец?!

Фреймворк. Java. Итог № 2.

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

<p>Версия "быстро сделанной игры" № 2.</p>

Версия "быстро сделанной игры" № 2.

Дальше я учил программирование на языке Java и разбирался с LiBGDX, а коллега делал спрайты для игры… Всё так хорошо начиналось, но быстро провалилось. Всё уперлось в ограниченные возможности LibGDX и в мои незаметные возможности программирования на Java. Да и лекции-игры в той группе Вконтакте так меня выбесили, что я зарекся больше не учить этот Java и лучше вернусь к С++! (Честно, в книге было всё понятнее, чем в тех лекциях для меня.) У художника была большая проблема с рисованием анимации, ну и в игре с помощью LibGDX то что получилось не удавалось отобразить. Да, в принципе, кроме главного меню там больше ничего и не работало. Конец…Конец?!

<p>Мне обещали игру где я буду главным героем! Где она?! Даже с факелом не видно!</p>

Мне обещали игру где я буду главным героем! Где она?! Даже с факелом не видно!

Unity3D в 3D.

Так как не удалось создать свой движок, да и идея с фреймворком оказалась так себе, пришлось обратиться к готовым движкам. Нельзя сказать, что это решение легко далось мне, ведь пострадала моя гордость, не стать мне нормальным разработчиком игр (xD)! Но я решил выбрать движок и спокойно создавать свою игру… дальше один, т.к. мой коллега отказался дальше участвовать. В результате выбор пал на Unity3D, почему? Уже не помню, было слишком давно. Помнится что в тот момент он стал бесплатным и можно было его скачать и создавать свои игры (2015 год), а также было много актуальных уроков по нему в отличие от LibGDX. А так же там был C#, вместо Java (ну вот осталось у меня эта неприязнь к Java после тех лекций-игр). И моих скромных знаний по С++ хватило, чтобы понять что С# похож на С++, только попроще.

Я придумал очередную игру себе для разработки, в этот раз это будет: RPG, хоррор с видом сверху, действие будет происходить на космической станции, главные враги игрока роботы/киборги (что-то наподобие монстров из фильма «Вирус» 1999 года) созданные злым ИИ (так себе описания, знаю). Были куплены книжки по разработке игр на Unity, учебник по Blender-у и по языку программирования С#, лицензионный Windows 8 (а вдруг «они» узнают, что игра сделана на пиратском Windows и игру не пустят в продажу! xD). Началась «настоящая» разработка игры…

<p>Финальная версия игры... когда стало понятно что её невозможно сделать одному.</p>

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

Спустя 6 месяцев желание что-то делать снова исчезло. Да я немного научился моделировать в Blender-е, но когда примерно посчитал сколько нужно моделек сделать, а потом ещё анимации к ним… В общем понял, что с моими «высокими навыками» делать тут нечего.

Unity3D в 2D. На грани возможностей (моих, не Unity).

Движок не сделал, с фреймворком тоже не разобрался, создание 3D игры тоже не задалось… одни провалы, не считая получения ценного опыта во всех этих тяжких попытках. Но я не сдавался. Пришлось пойти в самые низы (по моему «экспертному» мнению). Я решил создать игру в 2D графике на смартфоны, т.к. Unity позволял делать и такие игры, то было решено продолжить разработку на нём. В качестве проекта от которого я стал отталкиваться — это была удачная версия «быстро сделанной игры» на Java с использованием LibGDX. Но нужно было её сделать немного поинтереснее… и тут я вспомнил про одну игру из детства — Swarm, 1998 год. Полистал PlayMarket, ничего похожего не нашёл и решил переделать свою игру по гемплею в Swarm (ха-ха «переделать», там было 300 строчек кода из которых 200 из примера).

Что ж весной 2017 года была собрана первая версия игры в виде apk-файла с названием ret (почему «ret» не помню, но оно так и дальше называется). Был подключен джойстик из бесплатных ассетов, нарисованы мною первые спрайты для игры, сделан код поворота игрока (до это он не поворачивался, наконец-то мне пригодилась геометрия из школы!). Стало ясно, что успех не за горами, раз коды, написанные мною, начали работать (даже иногда так, как надо!).

Поиск художника для проекта.

Со временем я стал задумываться о качестве своих спрайтов. Мягко говоря они выглядели очень плохо по-моему мнению. Коллеги по работе всё следили за моими попытками сделать игру и предложили вариант с фотографированием каких-нибудь объектов. Так как я долго не мог нарисовать астероид, который меня устраивал бы по виду, я решил сделать как они советовали. Дошёл до кухни, взял картофелину, устроил ей фотосессию, «мастерски» обработал её в Paint.net и полученный «астероид» был воткнут в мою игру.

<p>Капитан, картофель на радаре! Что нам делать?!</p>

Капитан, картофель на радаре! Что нам делать?!

В конце концов вид нарисованных мною спрайтов меня так выбесил, что я решил найти художника для своей игры. Так же в тот момент мне предложили идею с планетарными миссиями, до этого планировалось сделать 100 миссий в космосе со сбором кристалликов. Идея всё таки мне понравилась, но я понимал, что там будет всё сложнее разрабатывать… Начались поиски художника, и на одном сайте я выложил объявление о поиске художника для своей игры. Нужно было нарисовать робота в 2Д графике с анимацией стрельбы и ходьбы (вкратце это было почти всё описание…). Я получил около 10 предложений, цены в которых варьировались от «а сколько вы готовы заплатить?» до 200$. Меня это несколько опечалило, столько свободных денег у меня не водилось. Переговорил с парой кандидатов у которых было подходящее портфолио (нарисовано прилично и не слишком круто, т.к. если слишком круто, то скорее всего будет дорого). Одна художница согласилась нарисовать робота примерно за 2000 р. Остальным кандидатам я вежливо написал, что художник найден, хотя было ещё одно хорошее предложение от другого художника. Оно меня тоже заинтересовало и я предложил ему другое задание — нарисовать солдата в 2D с несколькими анимациями (стрельба и ходьба).

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

 Робот в 2D (окружающие объекты рисовал другой художник).
 Робот в 2D (окружающие объекты рисовал другой художник).

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

Наброски солдата в 2D
Наброски солдата в 2D
Готовый вариант солдата для игры.

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

Искусственный интеллект

Изначально в моей игре не планировалось врагов кроме астероидов. В первых версиях этой игры астероиды сразу убивали игрока, если его коснуться… а также они могли сгенерироваться прямо на игроке во время загрузки уровня и сразу убить его! Да это было скучно для меня и я решил добавить хотя бы турели. То что я пытался сам написать не работало и я гуглил возможные варианты, вскоре нашёл код турели для 3D игр на одном сайте. Спустя недели две экспериментов и изучения каждой строчки кода я переработал код под свою 2D игру (Debug.Log супер вещь). Турели начали работать, дальше разнообразить их было не так сложно. Но потом они мне тоже наскучили, как противники. Пришло время добавить в игру настоящий врагов, которые могли передвигаться и стрелять. Немного подправив код я получил достойных противников. Они могли ходить, могли стрелять, преследовали игрока и… застревали во всех препятствиях.. Они не различали объектов и всюду застревали -_-.

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

Дальше я стал искать среди ассетов на Unity то, что может мне помочь. Был найден PolyNav — 2D Pathfinding и я стал с ним разбираться. Перевел через гугл-переводчик сопроводительную документацию и, в принципе, понял как эта система устроена и переделал свои коды под неё. Дальше вся система передвижений строится на этом PolyNav-е.

Оптимизация

Я специально не тратил время на оптимизацию и устранение багов, кроме самых критичных, чтобы посмотреть, как поможет оптимизация моей игре. Что ж к созданию четвертой системы игра кишела таким количеством багов, вечных лагов и прочей гадости, что было решено прекратить дальнейшее создание уровней и привести игру в нормальный вид. Поэтому кампания игры остановилась на 30 миссиях и стала приводится в нормальный вид… уже как год фиксятся всякие глюки и исправляются недоработки, спрятанные по всем углам игры. Отдельной проблемой была оптимизация кол-ва врагов в космосе, т.к. при большом количестве астероидов и противников на карте игра просто зависала даже в редакторе. В итоге все космические объекты не замечаются системой PolyNav и им выдан круглый коллайдер, чтобы ИИ обскальзывал их. Убрано куча мусора из Update. Созданы пулы объектов всем стреляющим противникам и настроено их нормальное удаление. В общем оптимизация продолжается по сей день.

Спустя годы упорного развития игры.

Идёт уже 2021 год, а разработка игры всё продолжается. Было много перерывов, и времени я не так много уделяю. У меня уже много других идей, которые хочется попробовать сделать. Но завершение этой игре стало принципиальным для меня. Поэтому я не бросаю её. Хотя я уже так морально устал от неё. То что она не окупится это стало мне уже давно понятно (хотя эта игра стала дипломным проектом и я успешно защитился, на заочном обучении (если бы там ещё программированию учили)… и когда остальные проекты это сайты или базы данных) и в какой-то момент игра стала больше делаться для самого себя, нежели для целевой аудитории. На сегодняшний день в игре готово 3 системы по 10 миссий в каждой (половина наземных миссий, половина космических; с разными задачами в игре: сбор кристаллов, уничтожение врагов, оборона), внедрена система прокачки, сделана база данных по врагам, 4 бесконечных режима (два в космосе и два на планете), у космического корабля работают режимы переключения мощностей на «оборонительный» и «атакующий», устранено огромной количество багов и более-менее оптимизировано.

*Запись была игры была сделана на телефоне и там звук странноватый. Простите: )*

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

Зачем

Swarm Space

Что ж на это была парочка причин:

1) Мои коллеги (нет, они не воображаемые мои друзья. Почему то у меня возникло такое ощущение после прочитывания всего того, что я написал в ворде, как заготовку) по работе предложили мне написать статью на DTF в качестве рекламы моего проекта, чтобы о нём знало больше 10 человек. Ведь тогда количество скачиваний моей игры может возрасти до 11,5. Наверно.

2) Было интересно вспомнить с чего это всё начиналось и теперь ещё будет текстовая версия моих воспоминаний. Буду в старости читать, как я мог стать «настоящим разработчиком игр»!

3) Вдруг среди комментариев будут интересные идеи, для моей игры. Вдруг. Так то я ещё задумался о двух бесконечных режимах: первый будет как TowerDefence, только наоборот, ИИ их строит, а игрок всё рушит; во-втором наоборот оборонять что-нибудь от орд врагов.

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

5) Благодаря всему написанному у меня снова появился интерес к своей игре.

Вот история моей первой разрабатываемой игры…первой… или четвертой игры? Или считать это ремейком моей первой игры?

P.S. Мой знакомый так и не написал книгу. И извиняюсь за опечатки и грамотность, если где-нибудь есть ошибки)

5454
21 комментарий

Комментарий недоступен

6
Ответить

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

1
Ответить

Очень наивный, но позитивный рассказ.
Мне бы твою усидчивость и целеустремленность) удачи в завершение игры

4
Ответить

Братишка, желаю удачи в твоём продвижении, но скажу тебе так, тема про космос заезжена , на это много есть игр. Если делать игру до нужно сделать это оригинально, к примеру взять боевую систему и сделать её на другом уровне , подумать что ещё не было. Опять же нужно было начать с казуалки какой нибудь, даже игра про обычный кубик может быть оригинальна.
Ещё прочти книгу автора Джесси Шел , там очень много полезного, после прочтения начнёшь думать совсем по другому

1
Ответить

Чел, автор игру пилит 6ой год, зачем ты ему вообще говоришь про актуальность космической тематики?
Ему теперь бросить и делать в ацтекском сеттинге?

2
Ответить

было решено учить С++ … Спустя 300 страниц изучения и решения задачек (книга правда хорошая

что за книга?

Ответить

Книга "Язык программирования С++", автор Стивен Прата

1
Ответить