Как сделать игру про сталкера за 3 дня, или LD48

Нет, не про того, который кидает гайки и болты в Зоне, а про человека, который следит за кем-то в социальных сетях, смотрит, кто кому ставит лайки, и на каких еще платформах зарегистрирована цель.

Как сделать игру про сталкера за 3 дня, или LD48

Предыстория

Я уже почти 10 лет участвую в конкурсе Ludum Dare, где нужно сделать игру за 3 дня. О разработке некоторых из них я писал на DTF (3D-тетрис про мебель и ритм-игра про суицидальных хомяков), а одна даже заняла третье место (из 3576!) по инновациям.

В нашей «классической» команде есть выдающийся программист и отличный 3д-моделлер, поэтому мы всегда пытаемся использовать их сильные качества — у нас много красивой графики и необычный геймплей. Но у медали две стороны: выходит так, что делать сюжетно/ролевую/квестовую игру просто невыгодно (хотя мне иногда очень хочется!).

В этот же Ludum Dare звёзды сошлись так, что:

  • оба этих человека не смогли участвовать — это значило, что я не мог сделать что-то с необычным геймплеем и использовать много графики
  • тема LD48 — Deeper and deeper, и помимо очевидных глубоких океанов и глубокого космоса, ее можно интерпретировать как расследование, в котором игрок зарывается всё глубже и глубже, двигаясь к разгадке
  • я удачно впомнил про недостаток игр типа Orwell или Song of Farca (правда, я успел поиграть только в пролог), который меня всегда беспокоил, хотя я и обожаю подобные игры с расследованием социальных взаимодействий: игрок слишком ограничен функционалом самой игры — все кнопки/имена подсвечены, и понятно, что их нужно нажать
Orwell
Orwell

В результате, появилась идея сделать игру, где база данных из Orwell совмещалась бы с реальными соцсетями так, чтобы часть полезной информации была в игре, а часть — где-нибудь в Фейсбуке или Твиттере. Да, все посты на этих страничках были бы сделаны в один и тот же день, но это можно считать игровой условностью; к тому же можно не тратить время на реализацию функционала соцсетей — достаточно воспользоваться уже существующим! Я предложил эту идею девушке (Оксана) и другу-геймдизайнеру (Антон), которые согласились мне помочь, побрейнштормил в одиночку и с чистой совестью ушел спать (всё-таки, тема LD объявляется в 3 часа ночи).

Начальное планирование

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

Как сделать игру про сталкера за 3 дня, или LD48

После этого начался уже общий брейншторм — мы решили выписать максимальное количество возможных «внешних» источников данных, начиная от фейсбука и заканчивая Mastodon.

Как видно по картинке, часть вещей была придумана во время мозгового штурма, а часть дополнялась по ходу дела
Как видно по картинке, часть вещей была придумана во время мозгового штурма, а часть дополнялась по ходу дела

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

Графика

Как только я начал думать над технической реализацией, сразу возник вопрос — какую нам использовать графику? Рисовать хорошо никто из нас не умеет, а использовать фотографии реальных людей «как есть» — не самая хорошая идея, это и некрасиво (кому понравится увидеть себя в качестве преступника), и ломает визуальный стиль игры (слишком тяжело будет найти изображения, снятые в одном стиле). Но тут я удачно вспомнил, что работал Computer Vision программистом, и решил просто написать скрипт, который бы из фотографий делал стилизованные изображения.

Это, кстати, весь код. Качество кода, конечно, ужасное, зато написано всё было минут за 15
Это, кстати, весь код. Качество кода, конечно, ужасное, зато написано всё было минут за 15

Процесс превращения фотографии в изображения после долгих (нет) экспериментов был выбран такой — сначала с помощью K-means алгоритма я сокращал количество цветов на фотографии до 4, потом накидывал блюра, и в конце «пикселизовывал» изображение. Большой плюс всего этого был в том, что можно было найти сразу все фотографии, которые были нужны, и просто запустить код один раз. Кстати, некоторые тестовые изображения, которые не вошли в игру, получились достаточно красивыми!

Теперь можно переходить к совсем уж технической части.

Программирование / UI

Все предыдущие игры мы делали на Unity — хотя программировал я там совсем мало, но с этим движком я знаком гораздо лучше, чем с любым другим. Правда, испортили идею использовать проверенную программу два момента: во-первых, оказалось, что на новом компьютере не скачан Unity, а во-вторых — скорость интернета у меня была просто ужасная. С грустью увидев сообщение «до окончания скачивания осталось 2 дня», я решил попробовать новый для меня, и (что было гораздо более важно) супермаленький Godot.

Вот так выглядело окно разработки игры
Вот так выглядело окно разработки игры

Было очень больно и непривычно. Во-первых, коммьюнити Godot показалось гораздо меньшим, чем у Unity — найти решение в случае непонятных моментов оказалось сильно сложнее, документация мне тоже не понравилась. Во-вторых, всё слишком непривычно — немного другой язык программирования, другие правила построения сцен и так далее. Мне очень повезло, что вся игра, по факту, это большое меню (была даже идея сделать ее в вебе, но как-то не взлетела), потому что есть ощущение, что я бы не осилил написать что-то полноценное.

Но чем больше меню, тем больше ответственность (за UI): в нем игроки проведут большую часть времени игры. Сначала я придумал основные части, которые я бы хотел иметь на странице: поисковая строка, информация о профиле, чат с наставником и полоска с обозначением «как глубоко в расследовании ты ушел» (как можно будет заметить, полоска эта ушла в небытие). Первый драфт, даже с подсмотренными палитрами цветов, оказался достаточно убогим, но помог определиться, какие объекты нужны, и где примерно они будут находиться:

Как видите, планировалась даже нелинейность уровня Vampire: The Masquerade
Как видите, планировалась даже нелинейность уровня Vampire: The Masquerade

К этому моменту, Оксана уже успела закончить с поиском звуков, и по моему драфту набросала что-то более похожее на нормальный и красивый интерфейс (я в это время пытался понять, как заставить кнопки работать).

Лицо какое-то знакомое...
Лицо какое-то знакомое...

Внезапно, произошло чудо, и художник из команды, с которой мы работали над прошлыми играми LD, оказался ненадолго свободен. Благодаря нему UI драфт превратился просто в конфетку.

Кстати, линия с градиентом всё еще тут!
Кстати, линия с градиентом всё еще тут!

После этого осталось всего лишь (хаха!) перенести этот UI в Godot. В итоге, получилось что-то такое (небольшие спойлеры, профиль из обучения).

Как сделать игру про сталкера за 3 дня, или LD48

Таким образом, несмотря на всё мое недовольство Godot, несмотря на то, что весь код был написан в одном огромном файле, несмотря на то, что для каждого чата и профиля пришлось делать отдельное окошко (я не успевал разобраться в нормальных конструкторах), с технической частью удалось управиться за необходимые 3 дня, йей!

Сюжет

Всё-таки, самое главное в подобных играх — это сюжет и история. Мы решили сделать несколько небольших дел, которые складываются в большую историю (обожаю этот момент из L.A. Noire, в главе про отдел поджогов!), и Антон приступил к делу. Сначала он расписал каждое дело в виде обычного текста (на примере первого дела):

Эта история отличается от финальной версии, но если не хотите спойлеров, сильно не вчитывайтесь
Эта история отличается от финальной версии, но если не хотите спойлеров, сильно не вчитывайтесь

После этого мы построили схемы (некоторые, попроще, некоторые посложнее) в draw.io, что-где-когда происходит: что написано в базе данных, что говорит супервайзер, и куда переходить за новой информацией. Однако, всё еще не тем текстом, который будет написан в игре, а общим (например, «супервайзер удивляется интеллекту игрока»). В скриншоте далее уже могут быть спойлеры, если планируете играть, не читайте его!

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

После того, как подробный план истории был сделан, необходимо было написать текст профилей, который будет в базе данных, диалоги между игроком и супервайзером, а также заполнить все соцсети. Оксана и Антон распределили между собой профили и диалоги…

…а также заполнили большую часть социальных профилей (это, прямо скажем, была титаническая работа).

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

В итоге, для истории было создано (надеюсь, сам факт существования этих акков — не спойлер: D):

  • несколько аккаунтов на фейсбуке
  • несколько аккаунтов на гитхабе
  • аккаунт в твиттере
  • записано видео
  • LinkedIn аккаунт
  • сервер в дискорде
  • фейковые чаты из телеграма

Музыка и звуки

Звуки, как обычно, мы искали на freesound, их получилось не очень много, но случилась интересная история, из-за которой я решил посвятить им отдельный раздел. Помимо звуков, отмеченных в ТЗ, Оксана нашла еще один звук, подписав его вот так:

Как сделать игру про сталкера за 3 дня, или LD48

Этот бум мне настолько понравился, что из-за него пришлось не только немного поменять сюжет и диалоги, но и добавить специальный функционал в код самой игры: и этот функционал не используется нигде, кроме этого бума! Но то, что получилось в итоге, мне очень понравилось, получился прямо настоящий саунд-дизайн.

Вывод

В конце концов, мы успели сделать всё, что хотели, еще до окончания LD: обычно мы в поту допиливаем всё в последние часы, здесь же получилось выложить игру часа за 4 до окончания времени. Большинство комментариев на странице были очень положительные — люди хвалили атмосферу и идею, более того, из-за того, что в дискорде видно, кто зашел на сервер, было понятно, кто из комментаторов прошел игру почти до конца. Единственный большой минус, который люди отмечали — это необходимость иметь фейсбук, без него невозможно пройти дальше начала игры (хотя никто не мешает зарегать фейк, кстати!).

Имея такие замечательные комментарии, и (что редкость для меня) кайфуя от самой игры, я ждал окончания конкурса. С одной стороны, с другой командой мы чаще всего входили в топ 100 и получали отличные отзывы. С другой стороны, это была моя первая игра в качестве «полноценного» программиста, поэтому я не ждал совсем уж высоких оценок, но надеялся на хороший результат в «инновациях». В итоге, полученный результат меня просто сломал, такого плохого приема я даже не ожидал (особенно, с учетом топовых комментариев):

Как сделать игру про сталкера за 3 дня, или LD48

Но советую вам поиграть самим! Специально для этой статьи Антон перевел игру на русский (социалки так и остались на английском, но там и браузер сможет перевести), скачать игру можно здесь.

В конце концв, мы получили офигенный опыт, да и кучу вещей делали в первый раз, так что оценки тут — не главное. Спасибо большое Антону и Оксане за отличную командную работу, Глебу за красивый UI, и Зине за тесты и вычитку.

3535
12 комментариев

Комментарий недоступен

4
Ответить

Ого, не знал!
Фейсбук здесь, конечно, слабое звено. Все остальное можно посмотреть без регистрации (кроме дискорда ещё, разве что).

Ответить

Интересная статья вышла. Я с программированием и геймдевом не знаком, но прочёл с удовольствием. Всегда была интересна внутренняя кухня - как происходит мозговой штурм, как рождаются идеи и т.п.

3
Ответить

Спасибо!
Я писал о некоторых наших прошлых игр, возможно, будет тоже интересно :) 
(Они есть в тексте, но чтоб лишний раз туда-сюда не листать оставлю и тут)
https://dtf.ru/indie/25089-ludum-dare-42-ili-kak-my-za-3-dnya-sdelali-3d-tetris
https://dtf.ru/games/33900-ludum-dare-43-igray-na-barabane-upravlyay-homyakami-i-slav-satanu

1
Ответить

Для лиц можно thispersondoesnotexist.com использовать

2
Ответить

Тоже рассматривал эту идею, но там только лица - а нам нужны были и фотографии в полный рост, и ландшафты, и места. А с этим уже будет тяжело, надо будет искать +- в том же стиле, что и лица с сайта

Ответить

с помощью K-means алгоритма я сокращал количество цветов на фотографии до 4, потом накидывал блюра, и в конце «пикселизовывал» изображение

интересный подход - возьму на заметку

1
Ответить