Инди
Nick Feofentov
872

О маленьком и гордом кораблике в ночи и победе в номинации Mood на Ludum Dare 42

Недавно завершился 42-ой Ludum Dare. Так вышло, что наша игра заняла 1-ое место в категории Mood (Настроение). Рассказываем о хитростях разработки атмосферного приключения за 72 часа.

В закладки
Наш кораблик дошёл до своей цели

О Ludum Dare подробно написано в этой статье. Но чтобы далеко не ходить, повторимся: Ludum Dare - один из старейших и самых известных в мире гейм джемов, участники которого должны сделать игру на заданную тему за отведённый срок (48 или 72 часа в зависимости от формата участия).

Часть первая, в которой наша команда собирается

Этой весной ребята из Kyiv Indies Meetup организовали в атмосферном хабе оффлайновый джем с блек-джеком и пиццей, приуроченный к Ludum Dare 41. Там наша нынешняя команда и сформировалась, состоящая из Николая в роли программиста, геймдизайнера Лены и художницы Насти.

Темой было Combine 2 Incompatible Genres, то есть “Соединить два несовместимых жанра”. Мы выбрали спортивный симулятор и топ-даун шутер. В итоге, родился Zomball, который особого успеха не снискал, был несбалансированным и откровенно сырым, но подарил нам опыт и желание продолжать.

Уже на 42-ой Ludum Dare наша команда собралась тем же составом. Если в случае с Zomball-ом это было “больше, цветнее, мы их порвём”, то в этот раз решили не распылять свои силы и сконцентрироваться на чём-то одном. Мы стремились создать что-то простое, понятное и настроенческое. Более того, расслабленное и даже медитативное. Настя как раз проходила курс по 3D моделированию, и само собой подразумевалось, что игра будет в 3D.

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

В голове живо представилась картина: маленькое судно в непроглядной темноте прокладывает свой путь среди высоких волн и опасностей к тусклому огоньку вдалеке. Эта концепция идеально ложилась на наши личные цели: простой геймплей в 3D и работа с туманом/освещением.

К сожалению, темой джема стала Running out of space. Мы стали перебирать подходящие концепции, но ни к одной из них не лежала душа. И тогда мы пошли на отчаянный шаг: натянули тему на то, что на самом деле хочется сделать.

К счастью, организаторы Ludum Dare даже в правилах указывают, что следовать теме не обязательно. Закономерно, самую низкую оценку - 582-ое место - игра получила в категории Theme

Логика была такой: кораблик находится в открытом море, а маяк - на берегу, соответственно, чем ближе мы к цели, тем больше скал попадается нам на пути, тем меньше пространства остаётся для манёвров. Ну вы поняли.

Решение было принято, и мы приступили к разработке.

Часть вторая, в которой мы делаем игру

В качестве визуального стиля выбрали low-poly для простоты работы с текстурами и цветом (лайфхак: тебе не придется рисовать текстуры, если в твоей игре их нет). Единственная текстура - воды - была найдена на просторах интернета и так удачно подошла, что менять её мы уже не решились.

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

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

У меня чесались руки сделать наконец что-то не плоскостное, а помоделить. После Zomball мы немного подзабили на гонку за выигрышем, а уже именно делали больше для себя. Выше уже произошел мой каминг-аут, но да, знайте, я с определённых пор стала ярой поклонницей Blender-а.

Настя
художница

Николай работал в Unity, поскольку давно знаком с движком. Еще один навык, которым он хотел овладеть за время джема - научиться использовать готовые решения во избежание бессмысленного велоизобретательства. И первое, за что он взялся, было море.

Результат работы первого дня

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

Чтобы создать иллюзию движения, вода подстраивает функции волн с учетом положения относительно начала координат, а текстура воды постоянно смещается в нужную сторону. С этим связан и главный баг игры: скорость волн зависит от скорости корабля, с чем еще предстоит разобраться. A smooth sea never made a skilled sailor.

Так мы выбирали цвет света будки. Остановились на тёплом и ламповом

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

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

Особое внимание было уделено шейдеру тумана.

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

Николай
программист

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

Маяк здорового человека/маяк курильщика

Чтобы не тратить время на управление камерой, было решено жестко закрепить её за корабликом с небольшим твистом: она всегда принимает среднее положение поворота между направлением на кораблик и направлением на маяк. С одной стороны, так маяк почти всегда находится в поле зрения игрока. С другой стороны, игроки любят ломать задуманные дизайнерами пути, поэтому иногда заходят сбоку от маяка, так что рано или поздно ни кораблика, ни маяка на своих экранах не наблюдают. Что поделать - сами виноваты. Камера также проверяет своё вертикальное положение относительно поверхности моря и поднимается/опускается, чтобы случайно не нырнуть под воду.

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

Результат работы второго дня

Трудности возникли там, где этого не ждали: звуки при попытке вставить их в игру выдавали нечто инфернальное. Не то, чтобы мы рассчитывали на сладкое пение сирен, но звук мотора не должен был звучать как адское горнило. В итоге звуки было решено вырезать от греха подальше. К счастью, нас выручил наш друг Миша, который не только отличный художник, но и талантливый музыкант. Именно ему и принадлежит эта замечательная эпичная музыка, под которую маленький смелый кораблик идёт на свет. Говорят, люди любят контрасты. Так вот - любите.

Часть третья, в которой мы ничего не успеваем

Помните сказку про Алису в Стране Чудес? Кажется, мы тоже прогневали время и отныне у нас всегда полчаса до дедлайна. Ничего не работает, Николай пытается не дать кораблю утонуть, Настя в волнах делает постер для пока ещё безымянной игры. В целом, всё как всегда. Где-то в это время родилось название, такое же простое, как и сама игра. Маяк. Lighthouse.

Щупальца в самой игре, возможно, появятся позже, но постер это уже проспойлерил

Когда пришло время собирать билд, оказалось, что хитроумный шейдер в сборке не работает, и маяк всё равно не видно в тумане. Кто бы мог подумать, что в нашем идеальном мире такое случается. Поэтому вот главный совет (на оригинальность не претендуем, зато он выстрадан лично): регулярно собирайте билды. Иногда то, что вы видите в редакторе, не имеет никакого отношения к действительности.

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

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

На голосование отводится две недели. Выставлять оценки могут только другие участники джема, а играть и комментировать - все желающие. Оценки выставляются в восьми категориях: Overall, Fun, Innovation, Theme, Graphics, Audio, Humor и Mood. Некоторые категории можно исключить из оценки своей игры. Мы, например, убрали Audio, потому что музыка не была написана специально для джема, и Humor, потому что в игре нет ничего смешного.

Этой гифкой мы привлекали внимание

Чтобы побудить людей играть в чужие игры, придумана простая система: если хочешь, чтобы твою игру засчитали, нужно, чтобы её оценило не меньше 20 человек. Самый простой способ привлечь людей - самому играть и комментировать чужие игры. По своим ощущениям можем сказать, что здесь действует негласный этический кодекс: если человек написал комментарий к твоей игре, пожалуй, стоит оценить и его проект.

Ещё один способ - сделать пост в основной ленте джема. Это работает только в случае, если у вас есть, чем привлечь игроков, но попробовать стоит. Посты уже через час улетают вниз, но мы успели отхватить десяток голосов со своей заметки, и этого было достаточно, чтобы закрыть необходимый минимум.

Самая крутая вещь, которая сопровождает Ludum Dare - стримеры. Да, это не самые популярные люди на Twitch, но нет ничего более ценного, чем наблюдать за тем, как живые люди играют в твою игру. Нет, правда, осознавать, что стримят не только Fortnite, но и твою маленькую игру - просто бесценно.

У некоторых стримеров есть виртуальная очередь, в которую можно записаться через гугл-форму, другие просто стримят то, что им кидают в комменты. Разумеется, для этого нужно тратить время на отслеживание, но некоторые стримеры и ютуберы сами находят игры. Так у нас появилось два видео с летсплеем.

И вот, спустя две недели голосование завершилось. Утром мы первым делом зашли на сайт Ludum Dare, чтобы увидеть наши результаты, и были ошарашены. Lighthouse заняла первое место в категории Mood. Той самой, в которую мы изначально метили с нашим курсом на атмосферность. По общей оценке она оказалась на 65-ом месте, а по графике - на почетном 128-ом.

Заветный золотой кубок на обложке игры

Часть четвертая, в которой подводятся итоги

Если вы ждёте, что в конце будет обязательная пачка советов от нас, то держите:

  • Если хотите участвовать в джеме - участвуйте. Забейте на другие советы и гайды, просто попробуйте. После первой попытки сразу станет понятно, по душе вам это или нет.
  • Начинайте делать билды задолго до окончания срока сдачи. Игроки не оценят вашего гениального геймдизайнерского решения, если не смогут в это поиграть.

Что будет дальше с игрой?

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

Благодарим за внимание всех, кто дочитал, и до встречи на будущих джемах!

С любовью, ваша команда маленького, но гордого кораблика из Lighthouse.

{ "author_name": "Nick Feofentov", "author_type": "self", "tags": ["long"], "comments": 1, "likes": 39, "favorites": 14, "is_advertisement": false, "subsite_label": "indie", "id": 26612, "is_wide": false, "is_ugc": true, "date": "Sat, 08 Sep 2018 14:10:35 +0300", "is_special": false }
Объявление на DTF
0
1 комментарий
Популярные
По порядку
3

Вполне заслуженное первое место! Игра отличная!

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }