Как я делал комикс-игру по Лавкрафту
Привет, Хабр! Это будет история о тернистом пути разработки 2D-квеста в сеттинге миров Говарда Филлипса Лавкрафта, который целиком оформлен в виде интерактивного комикса. Ну то есть все в игре, начиная от головоломок и заканчивая интерфейсом — это один бесшовный комикс. Если вас заинтересовала такая концепция, прошу под кат, где будет больше гифок, технические детали и опыт публикации на основных платформах.
Об игре
Я немного рисую пытаюсь рисовать и эта игра началась с такого вот рисунка. Микро-комикс с яхтой, бушующим морем и героем, вглядывающимся в таинственный остров на горизонте. С декором в лавкрафтовском духе (ну вы знаете, осьминоги, тентакли и все такое). А еще, с отсылочкой к другому признанному мастеру жанра ужасов. Кто скажет к какому?
И я подумал:, а ведь игра, оформленная в комикс стилистике — это круто, броско и необычно! Таких игр существует совсем мало. Я могу вспомнить три. Конечно же, это легендарная «Comix Zone», шутер «XIII» (тринадцатый) и не целая игра, а эпизод в «What Remains of Edith Finch». Но делать в одиночку / вдвоем платформер или FPS-шутер, для независимого разработчика — непозволительная роскошь — слишком много анимации, слишком сложно, слишком много времени потребуется и высока вероятность, что игра может вообще не дожить до релиза. Нет, я знаю, что есть люди умудряющиеся разрабатывать платформер в течение 8 лет (Owlboy) и при этом, не растерять мотивацию. Я искренне восхищаюсь и немного завидую таким людям, но боюсь, это не мой случай. А вот игра в жанре puzzle / point-and-click — это совсем другое дело! Тем более, опыт в создании 2D-головоломок у меня есть — некоторые могут помнить меня как автора серии головоломок «Механическая Коробка». Итак, решено! Сеттинг — произведения Г.Ф. Лавкрафта, жанр — point-and-click, визуальный стиль — комикс.
Но делать просто интерактивный комикс или визуальную новеллу, мне не хотелось. Мне хотелось, чтобы этот проект стал больше игрой, чем литературой. И тут помогло еще одно мое увлечение — история видеоигр. Я вспомнил, что недавно читал об одной текстовой компьютерной игре, основная идея которой, мне показалась довольно необычной и интересной.
Игра называлась «Hunt the Wumpus». Это классическая текстовая игра, написанная Грегори Йобом в 1972 году. Как гласит «Википедия», это первая в истории текстовая, а также первая приключенческая компьютерная игра, которая была чрезвычайно популярна в 70–80-е годы прошлого века.
Вкратце, суть игры заключалась в следующем: игрок попадает в лабиринт, который представляет собой 20 пронумерованных комнат, каждая из которых соединена коридорами с тремя другими. То есть карта такого лабиринта — это замкнутый граф. Впрочем, давайте не будем углубляться во всякие термины, на самом деле, все очень просто! В этом лабиринте обитает опасный монстр — Вампус, задача игрока, исследуя лабиринт, найти и подстрелить этого монстра.
В начале игры, игрок оказывается в случайной комнате лабиринта. За один ход он может перейти в одну из трех соседних комнат, либо выстрелить в нее. В комнате, игрок может почувствовать сквозняк, отвратительное зловоние или услышать странный шум. Сквозняк говорит о том, что в одной из соседних комнат — бездонная яма — упав в нее, вы проиграете. Шум издают гигантские летучие мыши, если войти в комнату с ними, они хватают игрока и переносят в другую, выбранную случайно, комнату лабиринта. Ну, а зловоние означает что в какой-то из трех соседних комнат находится Вампус. Если игрок оказывается в одной комнате с ним, Вампус его съедает.
Таким образом, путешествуя по лабиринту и запоминая признаки находящихся рядом опасностей, можно составить представление об их расположении и подстрелить Вампуса, точно понимая, где он находится. На самом деле, можно привести в качестве примера еще одну, более распространенную игру с подобной механикой. Это всем известный «Сапер». «Охота на Вампуса», в общем-то, еще один вариант с несколькими типами «мин».
Возвращаясь к Лавкрафту, наш герой направляется морем в Новую Англию, но, очевидно, его планам не суждено сбыться, так как:
На семнадцатый день путешествия, страшная буря возникает будто бы из ниоткуда, унося обреченный корабль все дальше и дальше в неизведанные воды. Фрегат терпит крушение, а главный герой приходит в себя на песке бухты, окруженной неприступными скалами. От единственного выхода из бухты, вырубленного прямо в утесе, веет необычайной древностью…
Это вход в подземелья Храма Безымянных Культов, где в лучших традициях Лавкрафта главного героя не ждет ничего кроме безумия и смерти (в целых шести вариантах концовок!). Подземелья представляют из себя лабиринт из игры «Hunt the Wumpus», но вместо Вампуса в лабиринте обитает Дагон — покровитель Глубоководных. Его нельзя убить сразу, а можно только ранить — все-таки, один из меньших божеств пантеона мифов Ктулху — это вам не шутки! А в роли гигантских летучих мышей здесь прислужник Древних — Шоггот — бесформенная масса протоплазмы с тысячей глаз, щупалец и других невообразимых конечностей. От Шоггота можно убежать. Побег реализован в виде мини-игры, где нужно на время решать простенькие загадки, выбирая одну из трех дверей. Мой экспромт на тему QTE (Quick Time Event) — довольно распространенного приема в видеоиграх, когда нужно быстро выполнять какие-то действия, нажимать определенные клавиши.
Кроме такой вот вариации на тему «Сапера», в качестве мета-игры, конечно, должны быть головоломки и другие мини-игры — все что присуще классическим квестам. Я не стал ничего изобретать и решил использовать старые, проверенные временем механики — «пятнашки», «вращающиеся элементы», «подбери комбинацию» и тому подобное. Естественно, все аккуратно должно быть вписано в лавкрафтовский сеттинг. Ниже гифка с парой примеров.
Разработка
Первый прототип на Unity я собрал довольно быстро, примерно за неделю. И пусть меня закидают тапками, но я понял одну простую вещь — Unity мне не подходит. Да, удобный визуальный редактор, да, море информации, за счет популярности движка. Но… Я большую часть времени потратил на то, чтобы понять, как же из имеющихся кубиков собрать то, что мне нужно. Вместо того, чтобы делать и использовать кубики «нужной формы». Ну и некоторые вещи мне кажутся просто странными (с непривычки, наверное). Например, «зашитые» в анимацию стартовые координаты: если в анимации объект начинает свое движение с позиции (0,0), то при применении этой анимации к объекту, он прыгает на (0,0) в независимости от своего текущего положения. Вы скажете: так это же надо было скачать из Asset Store! Возможно…
В общем, я выбрал более привычный и понятный мне фреймворк — LibGDX. Это кроссплатформенный, бесплатный движок на Java. Я где-то слышал мнение, что Unity — это о быстром конструировании, а LibGDX о красивой архитектуре, коде. То есть LibGDX ближе программистам, а Unity тем, кто наоборот, хочет меньше кода и больше «действия». Из плюсов LibGDX так же стоит отметить легковесность и быстродействие, за все время разработки я не сталкивался с проблемами, что где-то, что-то тормозит. Ну и то, что это Java, для кого-то может послужить решающим фактором.
MENJ4–2R5ZJ-HD7AQ
Имея на руках прототип, я стал искать художника, так как понял, что ни требуемое качество, ни объем арта, мне самостоятельно — не вытянуть. На форуме gamedev.ru, на мое объявление откликнулся замечательный художник — Сергей Ковалев. Все эти клевые гифки, которые вы тут видите — его рук дело. Там же, нашелся и композитор — Максим Грачев. Гифки звук не передают, конечно, но все, кто играл в игру, говорят, что звук в игре — очень атмосферный. Для каждого из нашей маленькой команды, это был проект «в свободное время». Поэтому, долго ли, коротко ли, но спустя полгода выходных и вечеров после работы, игра приблизилась к завершению.
Публикация
Так как это Java, то билды под разные платформы, по сути, сводятся к поставке одного и того же кода с нужной для платформы JRE (Java Runtime Environment). Я сразу решил выпускать игру для всех основных ОС: Windows, Mac, Linux, Android и iOS. Не буду подробно останавливаться на мобильных сторах, а расскажу лучше о Steam. Тем более, это мой первый опыт размещения игры в магазине от Valve.
С недавних пор, продавать свои игры в Steam может любой желающий, достаточно пройти процедуру регистрации и заплатить взнос в 100$ (за каждую игру). Регистрация занимает несколько дней, Steam якобы проверяет данные, заполненные по налоговой форме W-8BEN. Не очень понятно, зачем, правда. В других случаях, когда мне приходилось заполнять эту форму, хватало просто ксерокопии.
Так или иначе, когда вы попадаете в Steamworks и проходит первый шок от количества кнопочек, меню, пунктов и подпунктов в нем, приходит время создать страницу игры. Здесь все стандартно: скриншоты, видео, набор промо-арта, описания на разных языках (если вы сделали локализацию, конечно). Страница должна пройти премодерацию. В моем случае, все прошло быстро и почти гладко. Первый раз страницу отклонили, пояснив, что на промо изображениях должно быть хорошо читаемое название игры и когда я исправил это замечание, страницу приняли.
После утверждения, страница становится видна всем пользователям, и игра попадает в категорию «Скоро выйдет». Можно собирать и загружать билд. Расскажу немного подробнее как это происходит в случае с LibGDX. Во-первых, надо сделать чтобы игра запускалась на весь экран, для этого добавляем в DesktopLauncher следующий код:
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.vSyncEnabled = true;
config.width = LwjglApplicationConfiguration.getDesktopDisplayMode().width;
config.height = LwjglApplicationConfiguration.getDesktopDisplayMode().height;
config.fullscreen = true;
Во-вторых, нам нужно собрать бандл из исполняемого файла (стартера), нашего jar файла, который будет исполняться и JVM под нужную платформу. Для этого есть множество инструментов. Я бы акцентировал внимание на двух: это, многим знакомая утилита, Launch4J. И Packr, разработанный командой LibGDX. Что использовать, дело вкуса, лично мне ближе Packr. Делаем конфигурационный файл и одной строкой собираем билд, например, под Linux (можно хоть автоматически):
{
"platform": "linux64",
"jdk": "/Users/me/Documents/builds/jdk1.8.0_191-linux-x64.zip",
"executable": "My-Game",
"classpath": [
"desktop.jar"
],
"output": "EFIBB-ZIY32-8Q569",
"mainclass": "com.puzzle.comix.desktop.DesktopLauncher",
"vmargs": [
"Xmx1G"
]
}
Далее, нам нужно загрузить сборки в Steam, их у меня три: для Windows, Mac и Linux. Описание этого процесса есть в документации (на русском), поэтому, я просто перечислю ключевые пункты:
1. В Steamworks создать «Хранилища» для соответствующих ОС. Я создал «Windows content», «Mac content» и «Linux content».
2. Там же включить эти «Хранилища» в «Комплекты».
3. Скачать SDK Steamworks — с помощью него происходит загрузка в Steam.
4. В примерах скриптов загрузки заменить ID приложения и хранилищ на свои. Прописать локальный путь к файлам игры.
5. Запустить загрузчик. В моем случае (Mac OS), команда выглядит так:
bash ./steamcmd.sh +login "user" "password" +run_app_build ../scripts/app_build_xxxxxx.vdf +quit
Вот, собственно, и все. У меня раза три вылетел steamcmd с ошибкой сервера 500, с четвертого раза все загрузилось. После этого отправляем уже сам билд игры на модерацию. Плюс 4–5 дней и можно нажимать заветную зеленую кнопку «Опубликовать».
Альтернативные площадки
Сейчас, как грибы после дождя, появляются альтернативные Steam магазины: Discord, GOG, Green Man Gaming и т.д. Все активно обсуждают анонс собственной площадки от Epic Games (есть надежда, что у них получится составить реальную конкуренцию Steam). А я хочу сказать пару слов про itch.io. Если вы меня спросите, как я вижу идеальный магазин для разработчика? Я без колебаний отвечу — itch.io. Я понимаю, что идеальный магазин для разработчика и для игрока — это немного разные вещи. И вообще itch — это утопия. Но как же классно и просто здесь все сделано! Мега-удобный редактор страницы игры, все очень продуманно, быстро и современно. Никакого нагромождения кнопок и действий, всего пару-тройку кликов и ваша игра доступна всему миру!
Проблема одна, та же, что и у всех альтернативных сторов — небольшая аудитория. Я получил фичеринг на главной странице, просто написав создателю itch.io в почту (да, это возможно и даже несложно). И с учетом этого, у игры было всего ~200 просмотров страницы в день и несколько ленивых продаж.
Но то небольшое сообщество, которое здесь есть — очень дружелюбное! У itch есть такая фишка: вы выставляете минимальную, «обязательную» цену игры, а покупатель может ее увеличить по своему желанию, чтобы поддержать разработчика. И такие продажи, выше установленной цены, вполне частое явление! В отличие от Steam, где токсичности и комментариев «купил бы за 15 руб» — слишком уж много.
Да, игра небольшая. Скорее-всего, если быстро вникнете в суть и не застрянете на какой-нибудь головоломке, вы сможете пройти ее за час. Я понимаю, что заработать какие-то серьезные деньги у игры шансов нет. Поэтому, в Steam я поставил максимально честную и бюджетную цену в 99 руб. Пожалуй, ни для кого такая сумма не будет существенной. Тем не менее, требуют скидку в 50%, пишут про 15 руб и вообще «раздавать бесплатно для продвижения имени разработчика» (чтобы это не значило). Впрочем, я отвлекся. Просто это мое «больное место». Я, как никто, знаю сколько усилий вложено в этот условный час геймплея и меня это задевает, признаю.
Маркетинг
Расскажу о нескольких мероприятиях, которые я предпринял, чтобы как-то заявить об игре. Во-первых, Keymailer. Этот сервис на слуху, но будет не лишним рассказать принцип его работы. Вы регистрируете игру и загружаете в сервис какое-то количество Steam-ключей для раздачи блогерам. С другой стороны, блогеры регистрируются в сервисе и могут запрашивать у вас ключи, чтобы сделать обзор игры. В теории, звучит неплохо. Но это только в теории. Жаль я не погуглил предварительно отзывы про Keymailer.
Этот сервис монетизируется за счет разработчиков, я ничего не имею против, просто имейте в виду. На бесплатной подписке, практически весь функционал обрезан. Я закинул 50$ на рекламу — игра отображается неделю где-то на видном месте Keymailer-а. Да, запросов на ключи от «блогеров» при этом значительно больше. Но, мне кажется, порочна сама идея этого сервиса, если задуматься. Более-менее крупному каналу не нужно заниматься запросами ключей через какой-то Keymailer, у них и контента хватает, и покупка новинок никаких сложностей не вызывает. Может я ошибаюсь, но мне показалось, что Keymailer используется, в основном, недобросовестными пользователями для выманивания бесплатных ключей, для себя или на перепродажу.
Я акцептовал запросы только от каналов с подписчиками (ну хотя бы 5–10 тыс.) и галками «Accredited» от Keymailer. Раздал 65 ключей, 47 из них активированы, еще 18 где-то до сих пор продаются, наверное (например, я нашел свою игру на плати.ру). В результате, я получил 6 (шесть) видео на YouTube и один твит. С парой десятков просмотров… Не повторяйте моих ошибок.
Но не все так печально. Неплохо показала себя старая-добрая рассылка писем вручную по Ютуберам. Потратив вечер и доказав Гуглу множество раз что «Я не робот», я собрал на YouTube где-то 30 email-ов русскоязычных, подходящих летсплееров. Критерии отбора простые: обозревал инди игры, не очень много подписчиков (но и не совсем мало, я выбирал от 100 тыс.), не специализируется на ААА-играх, не специализируется на какой-то конкретной игре (Майнкрафт, Танки).
Дальше нужно правильное письмо. Если мне не изменяет память, эти советы я прочитал у Сергея Галенкина (ссылку давать не буду, известный человек в игровой индустрии). В моем свободном пересказе они звучат так:
1. Максимально лаконичное описание игры, не больше двух предложений: «Игра в сеттинге произведений Говарда Филлипса Лавкрафта, которая целиком оформлена в виде интерактивного комикса».
2. Что вы хотите? «Было бы круто, если бы вы поиграли в мою игру на канале».
3. Интересная гифка до 2 Мб прямо в теле письма (я вставил сундучок, который выше).
4. Ссылка на Steam и ключ. В общем, главное — это кратко и по сути.
И хочу сказать, что отклик вполне себе! Целых 4 канала опубликовали ролики по игре и даже один «миллионник» ответил на письмо. Это само по себе, достижение! Учитывая, что игра далеко не суперподходящая для стриминга. Правда, аналогичная рассылка по англоязычным блогерам, к сожалению, провалилась. То ли виноват мой неидеальный английский, то ли я не смог правильно подобрать целевые каналы.
Заключение
Уф! Пора уже подвести какие-нибудь итоги. Топик становится длиннее, чем я планировал. Давайте подведем финансовые, что ли. На Steam мы наторговали примерно 1000$, еще 70$ — itch (хочу пожертвовать их на развитие магазина), плюс с мобильных сторов должно набежать пару сотен долларов. Хороший ли это результат? Я считаю, неплохой! Учитывая, что в современном мире для инди почти не осталось места, если ты не «звезда», конечно. А я обычный «середнячок», надо признать. И хоть игра получилась небольшой, но именно такой, как я себе представлял. А главное, законченной и цельной. Так что я доволен.
P.S. Извините за некоторый сумбур повествования, строить четкие, последовательные тексты у меня всегда получалось плохо. С удовольствием расскажу о пропущенных деталях в ответах на вопросы. P.P. S. Обожаю пасхалки и секреты, поэтому в этом топике спрятано три Steam-ключа к игре. Разбирайте!