1. Первая игра, обучение
Многим наверняка знакомо ощущение: смотришь со стороны на свою ежедневную рутинную работу, и думаешь, какой фигнёй я занимаюсь, на что трачу жизнь. Делать игры мне казалось единственным осмысленным занятием в жизни. Знаете, тяжёлое детство, китайский клон NES на чёрно-белом телевизоре, импринтинг. Но попытка что-то поменять порой становится авантюрой, полной неудач и страданий. Что, конечно, не повод не вставать на эту дорожку.
Увлечение моддингом в Starcraft II привело меня к волшебным воротам с вывеской «геймдизайн» и предложило войти. Аудитория модов в старкрафте 2 была не велика, и после успеха моего мода я решил стать разработчиком самостоятельных игр.
С виду всё было просто: выбираешь движок, изучаешь, делаешь игру, выпускаешь — и ты разработчик! Ну что же, раз просто, я выбрал Юнити и нырнул в него с головой.
Первую игру я задумал чтобы изучить движок. Хотя по-честному собирался создать полноценную, интересную, богатую фичами игру, чтобы самому с удовольствием играть. Выбрал жанр — стрелялка от третьего лица с элементами RPG. Накумекал геймдизайн и начал разработку.
Кодить игру с нуля и целиком оказалось тяжело. В моддинге можно простой командой использовать высокоуровневые функции движка, а тут самому приходилось всё создавать и отлаживать. Взять хоть подсистему для управления анимациями моделей. Или обход препятствий и поиск пути, выбор цели и прицеливание. Но страстная жажда получить результат не давала завязнуть в болоте сложностей, я пёр как танк, и через пару месяцев игра была готова.
[гифка, картинка, видосик танчика]
Игра вышла приятная, но я столкнулся с двумя радикальными сложностями, из-за которых проект дальше не пошёл, и его пришлось оставить:
1. Код усложнился настолько, что переделывать и добавлять фичи стало невозможным. Беспорядок, отсутствие модульности, размазывание функционала по разным кускам кода — всё это превратило кодинг в гибрид чистки авгиевых конюшен и сизифова труда. На практике выглядело так. Я обнаруживаю баг: враги могут подбирать валяющиеся на земле патроны. И вместо того, чтобы его взять и исправить, я полчаса по локти в байтах ползаю по коду в поисках того места, где это должно быть исправлено. Это было утомительно и отбивало охоту продолжать.
2. Я с энтуиазмом задействовал физику, и она начала значительно тормозить геймплей. Но по причине из первого пункта оптимизировать было бы очень сложно: код давно обратился в хаос.
Выводы:
1. Лучше выбирать масштаб игры по плечу, идти от простого к сложному.
2. Код обязан оставаться простым, читаемым, модифицируемым и масштабируемым — на любом этапе, даже когда вся игра готова. Иначе разработка завязнет. Поэтому вместо схемы «идея->воплощение», надо идти по пути «идея->программная архитектура->воплощение». На этапе архитектуры надо мысленно написать программу, десять раз её переделать, пока её внутренняя структура не станет удобной для работы.
3. Всегда надо иметь ввиду оптимизацию, ускорение медленного неэффективного кода, создание хитрых подсистем, например, скрывающих не видные игроку куски уровня от вычислений. Но если со вторым пунктом порядок, то и третий проблем не создаст.
2. Первая выпущенная игра
Первая игра не получилась, но получилось разобраться с Юнити. Но всё же остался недоволен собой, потому что до выпуска игры не дошло. И я решил сделать что-то простое. Что я гарантированно доделаю и выпущу. Мысленно прокрутив всё разнообразие жанров, решил сделать космический 2д скролл-шутер с минимальным количеством оружия и апгрейдов.
Отнёсся ответственно, сделал кучу 3д-моделей космических кораблей, купил в ассет сторе звуки, нарисовал кнопочки, сочинил музыку, попросил знакомого художника нарисовать персонажей. Очень постарался сделать хорошую программную архитектуру, чтобы на этот раз в ней не завязнуть.
И получилось! Я доделал и выпустил первую самостоятельную игру. Она оказалась симпатичной с виду и интересной по геймплею — в той мере, в которой может быть интересен 2д-шутер. Но, как можно было ожидать, её судьба в магазине оказалась плачевной. Как ни раскручивай, а в классическом жанре с тридцатилетней историей сложно сказать новое слово и создать зовущий каждого поиграть в себя шедевр. Я был рад доделать игру, но низкое число скачиваний меня, признаться, расстроило.
Игра изначально была для мобильных, но недавно я выпустил её на Стиме.
Вывод:
Конечно, вы можете сделать банальную игру в покрытом пылью жанре, но готовьтесь к тому, что всем будет на неё плевать. Никто не мешает даже для простой игры придумать какую-нибудь охренительную фичу, которая сделала бы геймплей уникальным. Постарайтесь никогда не оставлять без работы фантазию и желание экспериментировать.
3. Попытка геймдизайнить
Неприятно, когда ваша игра никому не нужна. Когда я оправился от этого опыта и снова исполнился жаждой покорить мир геймдева, решил создать что-то оригинальное. Но при этом хотелось всё-таки придерживаться области востребованных игр, ориентироваться на успешные примеры. Тогда была эпоха термоядерных взрывов таких хитов, как 2048, angry birds, flappy bird. Я перебирал идеи, придумывал и отвергал фичи, не спешил. И в однажды в электричке, по пути на дачу, меня посетила «та самая» идея. Простая и гениальная. Я придумал, как скрестить 2048 и тетрис. Вместо цифр использовал геометрию фигурок тетриса. Нужно было всего лишь в поле 4х4 разместить 4 фигурки тетриса, тогда клетка освободится. И происходит это точно так же, как в 2048, путём сдвига всего игрового поля. Идея показалась мне стройной и неизбыточной. И за месяц плотного кодинга я доделал игру.
Но случилась довольно предсказуемая вещь: игра не выстрелила. Нашлись люди, которым игра нравилась, которые набирали в ней тысячи очков и с гордостью хвастались. Но скачиваний было мало, как я ни пытался на форумах и сабреддитах её продвигать. Не то, чтобы я рассчитывал на мировой успех, но игра мне казалась оригинальной и интересной, и я ожидал хоть какого-то внимания.
Если кому-то интересно, игра есть в гугл плей, и она бесплатна.
Вывод:
Мы недооцениваем количество факторов, благодаря которым простые игры, вроде флэппи бёрд, 2048 или майнкрафт становятся необыкновенно популярными. Скорее всего, шансы на популярность у вашей игры не зависят от того, пытаетесь ли вы повторить чей-то успех или делаете что-то оригинальное с нуля. Создатели энгри бёрдс выпустили десятки игр, прежде чем сделали популярную. Так что совет простой: не останавливайтесь, нет такого успеха, которому не предшествовали бы неудачи.
4. Попытка несимметричной коллаборации
Раскручивать игры оказалось тяжело. Я переживал по этому поводу: делаешь игру, веришь в гениальность, а итог нулевой. Так что я решил придумать способ сделать игру с автоматически гарантированной популярностью.
Идея была такая: в интернете есть популярные художники, у которых есть раскрученный ютуб-канал, твиттер или инстаграм. И я придумал договориться с одним из таких людей сделать совместную игру. Чтобы он нарисовал, а я накодил. Его медиаресурс и обилие поклонников были бы гарантией скачиваний.
И как раз в то время я участвовал в одном проекте, в который также был вовлечён именно такой художник с большой персональной аудиторией. Это был не мой проект, я просто фрилансил там и сям, потому что деньги-то нужны, раз собственные игры пока не выстреливают. И вот, я написал этому художнику, объяснил, что я опытный кодер хочу сделать с ним игру, что я готов сделать прототип, обсудить геймплей, и вместе выпустить игру-конфетку. Художник ответил, сказал что это интересно, что можно попробовать. И вот, я взял нарисованного им персонажа и засел за прототип.
Но итог оказался не таким, как я ожидал. Художник тупо перестал отвечать. Не знаю, по какой причине. Я прислал ему прототип, и больше ни разу он мне не написал.
Игру я решил не заканчивать, потому что по сути она была обычным 2д-платформером. Ставка была на эстетику и узнаваемость стиля, а с обычными ассетами из стора она была бы безлика.
Вывод:
С одной стороны, удобно держать всё под контролем и исключать влияние на проект других людей. Програмировать всё самому и покупать арт в сторе. С другой, преуспевают чаще команды из двух-трёх человек, когда их таланты соединяются, а совместная работа проходит много итераций. Но наверное есть смысл работать с равными по статусу, когда каждый член команды равно заинтересован в других, а не делает одолжение, участвуя в команде. Чтобы не получилось так, что вам человек нужен, успех проекта зависит только от него, а вы ему не нужны, и он в любой момент может прекратить контакт.
5. Эксперимент с эволюцией
Скажу честно, я человек нервный, впечатлительный, эмоциональный. И неудачи сильно на меня влияют. И по сумме неудач я решил оставить геймдев. Не навсегда, просто отдохнуть. А то так много работаешь, возлагаешь надежды, а в результате — облом. Тяжело.
Так что я взялся за свою любимую тему — искусственный интеллект. Здесь ничего не зависит от других. Что напрограммируешь, то и получишь. Юнити оказалась очень удобной средой, всё было под рукой, и скорость разработки была очень высока. Так что я решил по-быстрому провести эксперимент с искусственной эволюцией. А именно, эволюцией управляющей нейросети. Для меня это очень интересная тема, я много изучал биологию, восторгался непостижимым, крышеснимательным инженерным совершенством биологических систем. И я знал, что всё это было создано эволюцией. И именно моделирование эволюции я считал самым перспективным направлением ИИ.
Кроме того, я понимал, что в играх искусственный интеллект востребован. Поведением мобов приходится заниматься, вручную создавать првила, настраивать соображалку ботов, решать конфликты мотивации, создавать условия — вот это всё, это большая работа высокооплачиваемого специалиста. А если научить нейросеть самостоятельно играть, учиться и вырабатывать эффективную модель поведения, то можно сэкономить много времени и денег разработчикам. И я решил проверить теоретическую возможность такого подхода.
Придумал эволюционную модель с двухполым размножением. И собрал эксперимент. Суть его состояла в том, что в ограниченном пространстве живут простые существа, у них есть глаза, но нет мозгов. Они могут двигаться, если поступают сигналы управления. Двигаться важно для выживания, потому что вокруг ездят убивающие препятствия. И мой эксперимент ставил задачу с помощью эволюции нейросети создать существам с нуля мозги, которые позволили бы им эффективно уворачиваться от препятствий.
Эксперимент закончился успехом, мозги у мобов вырастали. Но по его итогам я понял вот что: этот метод нужно превратить в продукт, который разработчик мог бы купить и без проблем использовать для обучения мобов в своей игре. Но от первого удачного эксперимента до продукта было, по моим прикидкам, год-два работы. Нужно было провести ещё десяток экспериментов, значительно усовершенствовать эволюционную модель, создать инструменты по управлению процессом обучения. В общем, я понял, что работать два года над этой системой я могу себе позволить, у меня не было денег на два года работы.
Вывод:
Исследования и эксперименты — это здорово и увлекательно, но нужно здраво оценивать время до монетизации плодов исследований. Бывает так, что это время превышает ваши возможности. И тогда нужно либо искать ранние инвестиции, либо заниматься чем-то менее масштабным.
6. Mines and Magic, первая попытка
Наигравшись с эволюцией, я остался доволен, всё-таки чистое удовольствие от кодинга в каком-то смысле важней судьбы его плодов. И я решил снова вернуться к геймдеву, но сначала остановился и подумал: где я нахожусь и что дальше делать. Игры мои не покупают. Делаю не то, что хочу и люблю, а то, что мне кажется перспективным. Но опыт разработки накопил, многому научился. Нужно было понять, за что взяться. Что было бы «моё», и что давало бы надежду на продажи.
И вдруг осознал: вся история с моими попытками перейти в геймдев началась с успешного мода в Старкрафте 2. Это была игра по большей части моего дизайна, и она мне самому очень нравилась. Так почему бы мне не воссоздать её? Да, технически она сложная, но я уже опытен, да и когда меня останавливали сложности. Так что я решился, и исполнившись воодушевления я принялся за работу.
Месяц ушёл на геймдизайн. Я решил сначала сделать синглплеер-кампанию, и только потом заниматься мультиплеером. Так что пришлось перелопатить изначальный геймплей, добавить много новых фич, чтоб сделать интересным именно синглплеер. Ещё месяц я продумывал программную архитектуру. Для такого сложного проекта нужен был движок уровня варкрафт 3. И сложность кода не должна была зависить от масштаба. Любое количество контента и фишек должны были быть реализуемы на изначально созданной структуре внутреннего представления данных. Так что поработал я серьёзно, всё досконально продумал, изрисовал схемами стопку листов, и начал кодить.
Интенсивная работа продолжалась год. Я сделал движок, боевой интеллект юнитов, всю механику геймплея и интерфейс. Создал изрядное количество юнитов и собрал первый уровень.
Всё отлично работало, но я обнаружил, что для того, чтобы игра достигла уровня демки, требуется много контента. Иконки, звуки, фоновая графика и огромное количество 3д-моделей. А так как я год отдавал предпочтение работе над игрой, а не фриланс-подработкам, денег у меня почти не осталось, так что платить за контент было не чем. Я написал разным людям из индустрии, попытался привлечь инвестиции, но не вышло.
Так что я вынужден был прекратить заниматься игрой, потому что попросту не было ресурсов на её продолжение.
Вывод:
Вывод здесь тривиальный: если проект большой, надо планировать расходы, запасаться изрядным количеством денег, чтоб было что есть пока делаешь игру, и чтоб было чем платить за ассеты.
7. Разочарование, работа на дядю, любопытство
И я вернулся к тому, от чего всё это время пытался уйти. Снова работал по найму над чужими не слишком мне интересными проектами, потому что надо было что-то есть. Моя прекрасная игра стояла на глубокой паузе. Мне очень хотелось её доделать, но не было денег. Кроме того, год работы над ней меня утомил, хотелось разнообразия. Так что фриланс был удовлетворительной активностью, хотя моё творческое начало томилось от бездействия. Программирование для меня всегда было средством удовлетворения любопытства, эдакой волшебной палочкой, источником чудес. А когда приходилось его использовать для добывания денег, мне было скучно и грустно.
Не удивительно, что я сам не заметил, как у меня появилась одна чертовски привлекательная идея для эксперимента, и в свободное время я начал неторопливо её реализовывать. Смысл был в том, что вот были старинные игры, вроде Scorched Earth или Worms. Сражения там проходили на 2д-земле, которую взрывы разрушали, но было это технически не более, чем вычитанием пикселей из картинки, вроде как ластиком в фотошопе стёрли. И я подумал, а что если бы каждый пиксель был физическим объектом. И всё бы реалистично взрывалось и опадало кусками разворошённой почвы.
С этой идеи началась серия экспериментов, которая закончилось тем, что я одним из первых создал игру, работающую полностью на видеокарте, так как она раз в 10 мощней процессора по производительности, и её использование было единственным способом обеспечить хорошую скорость моделирования десятков тысяч взаимодействующих в реальном времени физических частиц.
Так родилась игра Jelly in the Sky, вы может быть о ней слышали. Я работал над ней в течение года, параллельно фриланся. И я был счастлив в течение этого времени. Эксперименты были увлекательны, было много сложного программирования. Каждый день я решал головоломные задачи, и меня очень радовало то, что я наблюдал в результате на экране.
И в итоге я выпустил игру в Стим, и она даже кое-как начала продаваться. Правда, оказалось, что сам принцип вычислений на видеокарте содержит в себе много подводных камней. Технология необкатана, местами непрактична. Возникают сложности с различными платформами. И некоторые технические сложности я так и не смог решить. Например, игра тормозит на старых видеокартах, и слишком быстро работает на новых мощных. А так как управление привязано к физике, его масштабирование по фпс повлияет на геймплей. А тормозить игру на сильных видеокартах оказалось проблематичным из-за капризного графического пайплайна.
В общем, хотя идея игры всем понравилась, но я всё же дал слабину на уровне превращения концепции в игру и решения всех технических проблем. И игра в Стиме обросла негативными отзывами от тех, у кого видеокарта слишком медленная или слишком быстрая.
Но я не жалею. Этот эксперимент позволил мне снова поверить в свои силы и принёс немного денег.
Выводы:
Спросите у внутреннего ребёнка, о чём он мечтает, с какой игрушкой хочет поиграть, чего в мире не существует, а он хочет — и вы будете счастливы работать именно над этой идеей.
8. Неопределённость и надежда
После выпуска Jelly in the Sky я осознал, что у меня лежит классная, большая, сложная — и не законченная игра. И нужно непременно её доделать. Кое-какие средства, чтобы докупить нужные ассеты у меня были. Так что я самозабвенно взялся за дело. Уделил игре всё свободное время. Хотя её движок был полностью готов, обнажилась масса разнообразных больших и маленьких вещей, которые требовалось доделать.
К примеру изрядно времени уходило на превращение купленной в сторе 3д-модели — в юнита-колдуна, который пуляет фаерболы, умеет вызывать огненный дождь, и при случае кастует огненный щит на союзников. И всё это с визуальными и звуковыми эффектами. И таких юнитов было больше сотни, а планировалось больше двух сотен. Так что игра поглощала огромное количество времени, из моей жизни пропали заурядные радости, вроде прогулок, походов в кино и стреч с друзьями. До такой степени овладела мной одержимость доделыванием игры.
И она продвигалась, обретала черты готового к выпуску продукта.
С нового года я вышел на финишную прямую и все силы положил на доделывание игры, и вчера выпустил её в Стиме в ранний доступ.
Через два-три месяца она будет готова полностью. Наступил интересный момент, когда судьба игры неопределена, но есть возможность на неё повлиять, занимаясь маркетингом. Уж не знаю, что получится из моих усилий, пожелайте успеха.
Выводы в целом по статье:
1. Делай то, что любишь, а не то, что по твоему мнению любит кто-то другой. Тогда возникает подлинная страсть создателя, и можно создать что-то уникальное и интересное другим.
2. Маркетинг чертовски, определяюще важен. Конкуренция в геймдеве очень велика. И пока не раскрутишь игру, не поймёшь, что с ней не так.
3. Никого не слушай и совершай собственные ошибки. Жизнь сложна, в ней нет рецептов, каждый ищет свой и набивает шишки. И в этом — сложная красота существования.