Привет, Хабрахабр! Наверняка, многие из вас задумывались о разработке собственной игры, но, к сожалению, существует много факторов, которые, всё же, не позволяют нам начать работу над игрой своей мечты: учеба, работа, семья и т.д. Да и, к тому же, мы просто боимся бросить всё и осуществить свою мечту, ибо многих пугает неизвестность, которая нас поджидает, как только мы отклонимся от общепринятых стремлений. В данной статье я расскажу вам о своём нелегком пути к воплощению идеи, ради которой я поставил все на кон.
2013
Началось всё с мысли о том, что я уже готов к разработке своей первой игры. К тому моменту у меня были реализованы пару простеньких проектов, поэтому я уже был немного подготовлен к разработке чего-то более серьезного. Итак, в качестве рабочего инструмента я выбрал игровой движок Unity3D, так как на то время уже несколько месяцев изучал его возможности. Поскольку FPP (головоломка от первого лица) является моим любимым жанром, то и для своего детища я выбрал именно его. Общую концепцию игры я позаимствовал из Portal — прохождение уровней, путём манипулирования объектами и взаимодействия этих объектов с различными игровыми элементами.
Наверное, основным элементом, от которого я изначально отталкивался, была гравипушка, реализованная мной в предыдущем учебном проекте.
Ну что ж, погнали! Создадим для начала хоть что-то, а потом уже будет от чего отталкиваться. Вырисовал у себя в голове простенький уровень, где нужно манипулировать шариками при помощи гравипушки. Налепил из кубов сценку, немного поигрался с её оформлением, кинул туда пару шариков, и дал игроку в руки ту самую гравипушку. Вышло, как мне тогда показалось, так себе. На бумаге уже были готовы первые несколько уровней, концепт одного из которых мне предложил брат.
Я полез моделировать их в 3D-редакторе, но вскоре отказался от этой затеи, так как всё можно было с легкостью собрать из кубов в редакторе Unity.
Играться вручную даже с самыми примитивными объектами мне, если честно, было утомительно. И тут появилась слегка бредовая идея — процедурно генерировать весь игровой контент. Никаких заранее созданных моделей, текстур, материалов, анимаций и прочих ресурсов, не представляющих собой текстовый файл (естественно, кроме музыки и звуков, о которых я тогда ещё не думал). Я осознавал насколько усложнил себе этим разработку, но чёрт подери, я получаю огромнейшее удовольствие от процесса создания игровой вселенной, путём написания программного кода.
Очевидно, что, имея такие жёсткие ограничения и будучи малоопытным, невероятных красивостей не добиться. Поэтому я посчитал, что графика в игре должна быть предельно минималистичной. Появилась идея использовать в игре всего два цвета — чёрный и белый. Думаю, именно это и стало основной фишкой игры (уже позже, я узнал об Antichamber — похожей по стилистике игре, но что-либо менять или отступать я не собирался — ведь я независимо пришёл к такому варианту оформления игры). Что ж, так ещё интереснее. Я ни разу не пожалел, что загнал себя в такие рамки, ведь удовольствия от разработки, в таком случае, я получаю ещё больше.
Ещё одной фишкой, могло быть отсутствие очертаний комнат. Я хотел создать эффект, будто игрок находится в некой бездне, сконцентрировав своё внимание на тех объектах, которые хоть как-то выделяются на фоне абсолютно белого пространства. Но это делало игру неиграбельной, поэтому от этой идеи пришлось отказаться.
Одной из самых трудоёмких задач для тогда ещё неопытного меня была генерация и сцепление комнат. На бумаге всё «строилось» быстро и легко, а вот генерировать процедурно — это вам не кубики в визуальном редакторе мышкой таскать.
Ещё одной особенностью игры является отсутствие GUI, а значит, необходимо было придумать альтернативный способ реализации меню в игре, основной задачей которого является выбор уровня. Я решил эту проблему, воспользовавшись следующим подходом: в комнате 5 ячеек и 5 шаров, каждая ячейка соответствует определенному разряду двоичного числа, в итоге, расположив шары в нужном порядке, мы получаем желаемый уровень.
Проект потихоньку рос, а вместе с ним «рос» и я. Несмотря на то, что теперь код стал более качественным, ошибки, сделанные на начальных этапах, часто заводили в тупик. Посмотрел я на всё написанное глазами «подросшего» программиста — лажа. Стал всё переписывать с нуля, на что потратил около двух месяцев.
На волне энтузиазма срочно захотелось показать хоть кому-то своё детище. Полез на 4PDA с андроид-версией. По полученным отзывам стало понятно, что будущая игра, в принципе, может быть кому-то интересна, кроме меня.
Однажды, безуспешно попытавшись внести небольшое изменение в ядро своего маленького движка, я опять понял, что вовсе не продумал его архитектуру. Снова захотелось переписать код. Но, увы, учёба и занятость в других проектах не оставляли времени на разработку собственной игры, поэтому мне пришлось отложить её более чем на полгода.
2014 — 2015
Этот период можно назвать новой эрой для моей игры. Перед тем, как начать заново всё переписывать, я более подробно изучил особенности C# и сперва сел за блокнот с ручкой. Продумал, как мне тогда показалось, чуть ли не каждую мелочь и таки приступил к разработке. Полностью изменил ядро, внедрил возможность считывания данных об уровне из XML-файла и, самое главное, добавил еще одну особенность — эффект прорисовки для всех игровых объектов.
Написав эдакий фундамент для будущей игры, был вынужден приостановить разработку, в связи с высокой занятостью в других проектах. По прошествии некоторого времени, снова появилась возможность продолжить работу над игрой. И вот, на этом моменте, я как раз-таки, как бы громко это не звучало, «бросил всё ради мечты». Я ушел из университета. Без образования, без постоянного заработка и без трудоустройства продолжил идти к цели. Ну, а далее полностью погрузился в игру. За зимний период была проделана большая работа, включающая в себя дизайн новых уровней, доработку ядра игры и внедрение новых фич. Сейчас, продолжая работу над игрой, опубликовался в Steam Greenlight. Конец разработки запланирован на осень 2015 года.
Итог
Основные ошибки, совершённые в самом начале и осознанные мною в ходе разработки:
- я взялся за проект, переоценив свои возможности, из-за чего все сроки постоянно сдвигаются
- вместо того, чтобы составить сначала диздок, я сразу же сел за написание кода
- я не изучил в достаточной степени возможности инструментов, с которыми работал
С момента рождения идеи до сегодняшнего дня прошло уже чуть более двух лет. Не имея времени на разработку, я терпеливо вынашивал и развивал свою идею. Итак, по прошествии немалого времени для не столь масштабного проекта имеем почти наполовину законченную игру. Честно сказать, я доволен текущим результатом, но, все равно, работа еще предстоит нелегкая — проектирование более 15 уровней, внедрение новых фич, музыка и звуки.
В статье упущены все технические подробности, которые, при желании хабражителей, освещу в следующей части. Спасибо за прочтение!