{"id":2521,"title":"DTF \u0438\u0449\u0435\u0442 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430 ","url":"\/redirect?component=advertising&id=2521&url=https:\/\/vc.ru\/team\/314459-vypuskayushchiy-prodyuser-kreativnogo-otdela&placeBit=1&hash=979f013a4fe3e53014e1061b0456ea99aa5642d9e6d5d28f6aa118242b41f347","isPaidAndBannersEnabled":false}
Инди
Артемий Фролов

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

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

Предыстория

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

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

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

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

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

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

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

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

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

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

Графика

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сюжет

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

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

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

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

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

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

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

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

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

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

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

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

Вывод

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

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

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

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

0
12 комментариев
Популярные
По порядку
Написать комментарий...
Парадный каякер

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

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

4

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

0

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

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

Обязательно почитаю.

1

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

2

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

0

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

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

1

Я сначала хотел сделать «полигональную» картинку (как в том же Оруэлле, где изображение делится на большие треугольники, очень классная стилизация), но потом понял, что не успею тогда со всем остальным.

1

Отличная статья, очень интересно было почитать) Особенно алгоритм для обработки фото кажется магией какой-то, наверное потому что я с фото никогда не работал

1

Спасибо!
На самом деле это всё встроенный функционал одной библиотеки, нужно было просто знать, что такая библиотека есть, и что оттуда нужно :)

1

Этот бум мне настолько понравился

Поезд сделал бум.

1
Читать все 12 комментариев
null