Как мы разрабатывали мобильную игру (short version)
Keepers's Curse: the Prologue
После таймскипа, в 4 года, обусловленного чередой личных невзгод и потрясений. Мы с Михой приступили к ребилду проекта под другим названием. В этом абзаце только добавлю, что у меня была двоюродная младшая сестра Маша, у которой была мечта озвучивать аниме, поэтому мы с Михой взяли ее на пару реплик в игру. Могли бы и на большее количество, но из-за ВСЖ-moments в 2022 году ее не стало, по этой и неким другим причинам, описанным в большой статье этот проект имел для меня важное личное значение.
На раннем этапе ребилда Миха перерисовал главную героиню. Первая версия была мультяшной и не очень вписывалась в более реалистичную стилистику сцены.
Потом мы поменяли название с Фэмили Керс на Киперс Керс, потому что так для сюжета лучше, чтобы линию хранителей можно было в разных временных отрезках развивать, как в асасин криде, а так же из-за лицензирования.
Ну и так как дальше оставалась в основном только моя работа, а вспоминать легаси после 3+ лет инактива довольно трудная задача, то большая часть структуры проекта была переделана с нуля, а код переписан.
Из интересного, что, наверное, могу сейчас показать коротенько и сильно не грузить читателя есть следующие моменты.
Весь дом расположен на одном общем рендере house.png, а программно, каждая комната - это отдельный двумерный массив RoomArray с объектами типа Room.
Активная комната выбирается из массива после полного прохождения свайпа. В каждой комнате есть свои активные объекты, свои головоломки или места, завязанные на применение предметов из инвентаря. Чтобы снизить общую нагрузку на процессор, функции, которые выполняются или проверяются в общем большом потоке update не висят в Треде все подряд, а берутся в исполнение только те, которые привязаны к конкретной комнате. А вот снизить нагрузку на оперативку не получилось, потому что Java не любит широкоформатные изображение. 600 MB оперативки, которое приложение хавает - не из-за кривой логики, а из-за хайрезных Bitmap-ов и методов их обработки Рендером джавы, постараюсь потом снизить потребление хотя бы до 400 мегабайт.
Программируя мини-игры, я хотел добавить хотя бы небольшой элемент реиграбельности. А также сделать сами головоломки настолько user-friendly, насколько возможно.
И если пятнашки зарандомайзить довольно легко. Да-да, shuffle лежит в открытом доступе на хабре. То для удобства пользователя я реализовал фичу, которая позволяет одновременно сдвигать не только по одной, но и стак из двух или трех квадратиков. Для этого мне удачно послужила такая внутренняя функция Java, как перегрузка методов. Практического профита, наверное, в этом не так много, но есть какое-то эстетическое наслаждение, когда вместе трех функций GoLeft1, GoLeft2, GoLeft3 у тебя 3 метода с именем GoLeft.
Еще один, полузабавный и не душный момент связан с мини-игрой "Взлом Замка" и локализацией. Дело в том, что я решил зарандомайзить 3 скорости бегунков дробными переменными 1.1, 1.2 и 1.3. Тестируя мини-игру на телефонах с языком по умолчанию, отличным от русского и английского, я столкнулся с рандомными вылетами на этой головоломке. Все дело оказалось в том, что в некоторых странах рандом генерирует дробное число не с точкой, а запятой, что компилятор Java не хавает. Решение было таким:
Ну и ребят, я тут многое еще могу расписать: о том, как для экономии оперативки под каждую мини-игру и сам дом заготовлены сцены, как они переключаются, как в движке реализован отдельный плеер музыки, как реплика синхрится с текстовым блоком комментария, как менджатся канвасы и пеинты, как PaintZakraska открывает или закрывает слои на альфа-канале, как делается таймер на выход из фильтра флешбека, но статья не совсем только о разработке.
Если будет запрос, я вообще могу выложить весь код и каждый момент подробнее рассказывать в своей статье. LockPick Mini-Game вообще получился на редкость удачным (а это значит, что код короткий и эффективный), так что можете потом брать полные его исходники и пользоваться в своем мобильном Обливионе.
В целом, мне есть, чем гордиться по итогам сборки данного проекта. Написан он на чистой джаве и даже метод сохранения предметов инвентаря реализован без использования Gson/Json.
Но вообще, ребятки. Поймите тоже одну вещь, можно шутить сколько угодно про заимствования кода из открытых источников и т.д., но 80% его реально писаны с нуля и многое я открывал для себя и реализовывал в первый раз и не в самом хорошем ментально-моральном состоянии. Поэтому, кто умненький, порешайте пятнашки в ручную, не скипайте по кнопке. Один человек сказал, что у него был вылет. Все со временем попатчим. А так же в игре работает авто-сохранение после решения каждой головоломки или активации сюжетного предмета, СПОЙЛЕР:
последний сейв срабатывает на чердаке после появления маски на полу.
С SharedPrefs я тоже раньше не работал, поэтому кого не напрягает, посейвскамьте плз.
О всех результатах и найденных багах можете писать или в личку вк
или на почту студии [email protected]
ВЫВОДЫ
Какие мы можем сделать выводы по итогам статьи?
Ну, наверное вывод о том, что человеческая сила воли и духа помогают справиться со многими трудностями и преодолеть тяжелые жизненные обстоятельства.
Когда мы задумывали этот проект еще до поднятия IT и экономического рывка, мы ставили одну планку, чтобы приступить к производству полноценной долгой сюжетно-ориентированной игры. Сейчас мы ее снизили до 280 тыс рублей. По итогам этого проекта и того соберем/не соберем, дела могут стать маленько получше, могут сильно получше, могут особо не измениться, а может вообще все развернуться и стать сильно хуже.
Само завершение этой разработки стало реализацией моей мечты стать геймдизайнером и и исполнением мечты одной маленькой девочки поучаствовать в озвучке, пусть и не аниме, но от части сенена.
И даже если в моей частной истории придет ужасный конец на место ужаса без конца, я буду честен перед самим собой в том, что чмом позорным не стал. Любите своих младших сестер и братьев и цените время, проведенное с близкими. Если статья не повод обнять-приподнять, то хотя бы позвоните и узнайте как дела.
Воспринимайте игру, как технодемку, как она и задумывалась. Я все ее минусы прекрасно понимаю. Шаблонные диалоги с тавтологиями, не все из которых писал я, но я их качество вовремя не проконтролировал. Тривиальные головоломки. Кривая концовка без подводки. НО СПОЙЛЕР:
Эмили в конце берет Маску, оказывается, что это маска Шумерской богини Безумия Мании. С этим предметом в инвентаре она начнет следующую игру. И там будет уже интересней и логичней. А сюжет буду писать я один. Опять же если хотите оценить мой райтинг, пройдите зека.
В загажнике у меня есть еще истории, которые я бы хотел рассказать именно в таком формате, но в большем масштабе, чем Керс, пусть даже за пределами истории Эмили. Поэтому, если Вам нравится именно такое творчество и нет более достойных людей, в кого задонить, то отправляя деньги, поддержите именно творчество. Именно истории, которые я бы хотел донести в похожем на Керс виде.
СЛОВА БЛАГОДАРНОСТИ
Спасибо Михе за крутые локации, персонажей, весь-весь дизайн, а так же за правки на ребилде проекта в 2024 году. Кроме того за часть сайнд-дизайна и сведение уровней звука в репликах. Ну и самое главное спасибо за то, что не дал "друзьям" угнать проект и моральную поддержку в эти 4 адских года. Надеюсь, что будет все-таки получше.
Спасибо Маше за крутую музыку, харизматичную Эмили, подгон полезных контактов и добро, которое ты сделала. Никогда не говори никогда, но в следующих играх мы продолжать сотрудничество с Машей в данный момент не планируем. Сейчас, насколько я знаю, у Маши немного застой в продвижении, поэтому будет классно, если придете на стрим (ближайший по расписанию 13 ноября) и напишите слова поддержки, задонатите или дадите фидбек по Эмили или музыке Керса.
Спасибо Максу за классное время проведенное в совместных игрищах и при просмотре реслинга. Надеюсь, живешь хотя бы умеренно и получаешь удовольствие от работы. Я вообще 3 года не общался с Максом и он мне не давал разрешения постить ссылку на свою страницу в такой статье на таком большом ресурсе. Поэтому, кто очень хочет - найдете его в дисклеймере по кнопке в игре.
На самом деле, людей, помогавших с реализацией было куда больше, одним только актерам озвучания отдельное спасибо. Куда больше контактов и деталей опять же в большой статье.
САМА ИГРА
Ну а пока гугл обрабатыват патч первого дня, вот вам ссылка на саму игру Keepers's Curse: the Prologue. Буду рад оценке и развернутым комментариям. Ваши звезды очень помогают мобильным разработчикам. Ставьте столько, сколько игра по Вашему мнению заслуживает.
Для поддержки:
ТИНЬКОФФ: 5536 9139 2085 6131 Василий
АЛЬФА: 2200 1523 7817 0636 Василий
Все пожертвования - добровольная поддержка деятельности автора, ни к чему его не обязывающая. Если Вы - турбомегашейх, пишите в вк или на почту студии - решим вопрос, так как карты бичевские с лимитами.
ПРИ ПЕРЕВОДЕ НА КАРТУ ПИШИТЕ ПОМЕТКУ "ЭМИЛИ", ЧТОБЫ Я НЕ СКРЫСИЛ СЕБЕ ВСЕ БАБКИ, А ДЕЛИЛ НА ВСЕХ