Pull to refresh

Игра на пустом месте

Игра на пустом месте




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


Введение

Долгое время с игростроем меня связывала только работа среднестатистическим 3d-художником в филиале одной не шибко известной компании, да вялые попытки вырваться, наконец, на ниву инди-разработки с её неограниченной свободой и баснословными доходами. По крайней мере, именно таким казался мне независимый геймдев по прочтении многочисленных success-stories.

Реальность, однако же, всегда охлаждала мой пыл, напоминая об отсутствующих навыках программирования, управления проектами, умении что-то продавать, опыта разработки хоть чего-нибудь… в сущности, об отсутствии всего, что было необходимо для начала работы над своей собственной игрой. За исключением, пожалуй, владения 3d на некотором уровне.

С деньгами тоже была напряжённая ситуация, поэтому опция «взять — и вложить всем известные $70k в разработку, а на выходе получить готовую конфетку, расхватываемую геймерами как горячие пирожки», для меня тоже оказывалась недоступной.

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

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

Концепт и подготовка прототипа

Мне не хотелось браться за что-то большое и сложное. Чем проще, тем лучше — таков был мой девиз. В планах не было вязнуть в непреодолимых задачах и неперелопачиваемых в одиночку объёмах работы. Идея была проста и относительно оригинальна: лабиринт с возможностью прокручивания отдельных квадратных его участков, а-ля plumber game. Поворачивая плитки с участками лабиринта, игрок строит путь к выходу.

Каждый кусочек (плитка) помимо текстуры представляет из себя нехитрый набор характеристик:
  • Плитка всегда имеет сквозной проход
  • Плитка может иметь глухие внешние стенки и/или один тупиковый ход
  • Имя плитки состоит из четырёх цифр, характеризующих её внешние стенки, начиная с верхней по часовой стрелке. Например, имя 0212 говорит о том, что плитка имеет глухую верхнюю стенку, один тупиковый проход снизу и один сквозной проход, соединяющий левую и правую стороны
  • Четыре бита (по одному на каждую сторону), описывающие соединение пройденного пути с рассматриваемой плиткой. Например, 0001 означает, что с левой стороны в плитку упирается пройденный игроком путь
  • Массив из четырёх целых чисел, полученный поциферным перемножением предыдущих двух чисел. Элементы этого массива показывают, какие проходы в плитке присоединяются к уже построенному пути


Схематичные примеры плиток

Не все плитки, показанные на рисунке, соответствуют правилам, поэтому лишь некоторые из них я использовал в игре

Как плитки выглядят в игре


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

Что из себя представляет плитка

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


Из таких вот плиток и состоит игровое поле, являющееся двумерным массивом. Первый элемент массива всегда представляет начало лабиринта ([0, 0] левая нижняя плитка), последний — конец ([width – 1, height - 1] правая верхняя плитка).

Схематичное игровое поле

Желтая плитка имеет имя 2210 и массив входов 0001


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

Упорщенный алгоритм поиска пути


Добавление плюшек и удержание мысли в узде

Параллельно допиливанию рабочего прототипа полным ходом шла подготовка текстур. Этот этап для меня был самым простым и ничего особенного из себя не представляет. Я старался выдать максимально приятную глазу картинку, попиксельно выверяя каждый свой шаг. Помучиться пришлось разве что с кастомным шрифтом. Дело в том, что я совершенно не хотел использовать TTF и сконцентрировлся исключительно на BitMap fonts. Для использования шрифтов, реализованных текстурой с прозрачностью в альфа-канале, в Unity на данный момент нет удобных бесплатных инструментов. И, так как финансовые траты я с самого начала решил свести к нулю, пришлось шрифт делать руками от начала до конца, включая прорисовку и UV-маппинг каждой буквы. Наградой за унылую монотонную работу мне стал полностью готовый к использованию симпатичный шрифт.

Шрифт


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

Предметы в игре


Завершение процесса

Работа спорилась и, несмотря на то, что я мог уделять проекту лишь свободное от основоной работы время, довольно ощутимо подходила к концу. Впору было задуматься о каком-никаком продвижении. Несколько дней поизучав вопрос и прочитав диагональным методом несколько книжек, я снова погрузился в уныние. На повестку выползло понимание, что без приличных затрат на рекламу ни о какой сколь-нибудь интересной прибыли можно даже не думать. Отсутствие денег, в течение всего процесса помогавшее мне оставаться верным правилу «свести затраты на разработку к нулю», не подвело и в этот раз. И на рекламу тратиться не пришлось. Впрочем, на покупку аккаутна разработчика Google и домена с хостингом таки пришлось выложить полукруглую сумму в $50.

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

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

Итоги

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

Говорить о популярности игры пока еще слишком рано, равно как и о её интересности для геймеров. Если всё сложится удачно, я посвящу этому отдельный пост.

Послесловие

Имеются планы по портированию игры на iOS, если удастся наскрести на аккаунт разработчика Apple. C портом по идее не должно возникнуть трудностей, спасибо могущественному Unity3d. Так же хочется заняться постепенным добавлением новых фич, прощупыванием почвы монетизации через внутриигровые продажи (если я не ошибаюсь, AppStore позволяет совершать валютные операции резидентам Украины), реализацией множества других задумок как в отношении этого проекта, так и относительно новых, которым только предстоит появиться на свет.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.