Инди Артемий Фролов
1 416

Ludum Dare 42 или как мы за 3 дня сделали «3D-тетрис»

TL; DR: Мы сделали игру для конкурса Ludum Dare. Основной идеей было добавить к тетрамино ограничение по времени и 3D перспективу. С тем как мы справились, можно посмотреть здесь (а еще поиграть в веб- и полную версию). За подробностями - добро пожаловать в статью!

В закладки
Аудио
Небольшой кусочек геймплея для затравки

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

Но если вкратце, LD - это конкурс, в котором за 3 дня (или 2, если ты делаешь всё в одиночку) нужно сделать игру на заданную тему, притом все компоненты - код, графика, идея должны быть придуманы в этот период времени. В этот раз темой стала фраза "Running out of space".

Формирование идеи

Если честно, несмотря на все крики про "неинтересную тему", она мне понравилась сразу: во-первых, несколько возможных ее трактовок - игра будет про космос, и оттуда надо убегать? Или может быть, там надо будет часто нажимать на пробел (чтобы убегать из космоса)? Может быть, вообще, интерпретировать ее буквально, как нехватку места? Во-вторых, тема не накладывала никаких жестких ограничений на геймплей, как бывало, например, прежде.

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

Геймплей

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

Даже я, как гейм-дизайнер игры, не всегда могу поставить всё на 3 звезды. Таки хардкор.

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

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

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

Первая итерация
Сохранение позиции поставленных предметов
Финальная версия

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

Графика

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

Мы решили отказаться от текстур из-за большого количества объектов и решили покрасить их, применяя разные материалы на полигоны с разным типом шейдинга (плоской или скруглённой поверхности в зависимости от положения нормалей)

Что касается формы объектов, то мы решили использовать бесплатную программу MagicVoxel. Она позволяет достаточно быстро и просто набросать основные формы и помогает понять дизайнеру, как вписать в эту форму модель.

Здравствуйте, я диван

В итоге в Blender было создано 36 моделей мебели (а ведь есть еще стены/двери/окна/полы, которые не участвуют в геймплее).

Музыка

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

Прием игры

Огромный плюс LD в том, что твою игру посмотрит достаточно большое количество людей, которые при этом сами являются разрабочиками. Очень часто из их комментариев к игре можно получить полезные подсказки, которые сделают игру интереснее (у нас всего после 4 дней уже составлен большой документ с улучшениями, которые мы собираемся добавить в пост-ЛД версию). Также, многие стримеры проводят LD-week, где играют в игры с этого конкурса и дают комментарий по поводу нее - иногда очень полезно посмотреть, как другой человек проходит твою игру и послушать его мысли по этому поводу в "прямом эфире" (особенно крики в духе КУДА ПОСТАВИТЬ ЭТОТ ФОНТАН?!).

Радует, что большинству, похоже, наша игра кажется интересной.

Так а поиграть-то можно?

Да поиграть можно, зайдя на профиль нашей игры на LD. Там можно прочитать "коммерческое" описание, а в самом низу будут ссылка на веб-версию и ссылка для скачивания. На данный момент, лучше всё-таки скачать игру, потому что некоторые шейдеры, по какой-то неясной для нас причине, ведут себя странно в браузере. Советую читать описания к каждому уровню, там часто можно встретить подсказки.

Управление:
Левая кнопка мыши: поставить объект
A и D: повернуть комнату
Правая кнопка мыши или R: повернуть объект по оси X
Средняя кнопка мыши или F: повернуть объект по оси Y
Колесико: регулировать высоту объекта

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

Авторы или минутка самолюбования

Программист: Шишов Борис Vk Github
3D художник: Шишов Глеб VK VK(группа) Twitсh Artstation
Музыка: Шишова Екатерина VK
Гейм-дизайн (и эта статья): Фролов Артемий VK Github

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Артемий Фролов", "author_type": "self", "tags": [], "comments": 17, "likes": 68, "favorites": 22, "is_advertisement": false, "subsite_label": "indie", "id": 25089, "is_wide": false, "is_ugc": true, "date": "Fri, 17 Aug 2018 18:21:26 +0300" }
{ "id": 25089, "author_id": 5807, "diff_limit": 1000, "urls": {"diff":"\/comments\/25089\/get","add":"\/comments\/25089\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/25089"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960 }

17 комментариев 17 комм.

Популярные

По порядку

Написать комментарий...
13

Фролов, подмигни, если тебя шишовская мафия держат взаперти и заставляет геймдезигнить

Ответить
10

Стоит прочитать как минимум из за списка разработчиков)))

Ответить
3

Прошёл первые 3 уровня на 3 звезды. Дальше не стал. Мой перфекционизм загнулся. Пару советов от обывателя:
1. Уберите ограничение по времени. Музыка медитативная, а вот геймплей очень быстрый. Не успеваешь насладиться.
2. Не хотите убирать? Тогда другой момент. Когда начинается уровень, время уже бежит, а деталь нельзя двигать в течение 2,5-3 секунд. Непорядок!
3. Опять же, не хотите убирать время? В списке есть элементы, которые можно не использовать при прохождении. Можно добавить кнопку для пропуска элемента, которому нет места или не хочешь ставить.
3. Добавьте настройки управления в саму игру. Для удобства.
4. Добавьте визуальное отображение использованных и оставшихся деталей. То есть те белые и желтые иконки, которые в брифинге высвечиваются, пусть в информационном HUD где-нибудь висят. Элемент рандома пусть останется, так даже интереснее.
5. Можно, как вариант, изменить управление. Ставить мебель левой кнопкой удобно, как и вращать комнату на "A" и "D". Опускать-поднимать мебель колёсиком мыши - тоже. А вот вращать элементы мышью - нет. То есть по оси X можно только в одну сторону на правую клавишу, а по оси Y левой клавишей не очень удобно и опять же только в одну сторону. Предлагаю более удобный вариант. Пусть постановка мебели так и останется на левую кнопку. А вот с правой можно сделать так: при удерживании правой кнопки просто двигать мышь влево-вправо для вращения по оси X по часовой или против и при движении мышью вверх-вниз - для вращения по оси Y по часовой или против часовой. Попробуйте. Мне кажется, так будет удобнее и практичнее.
Игра довольна занимательная, но нуждается в доработке. Но идея классная, зачёт!

Ответить
2

Ого, спасибо большое за такой подробный комментарий!
Это правда очень поможет, занес идеи в табличку нашу =)

Ответить
0

круто расписал, но в разработчики берут только с другими фамилиями :D

Ответить
0

Не Шишов и не Фролов. Увы, увы.

Ответить
1

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

Ответить
0

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

Ответить
0

Я бы вообще отказался от таймера, но сделал так, чтобы предметы заполняли всю комнату, и их можно было двигать в произвольном порядке, как эдакий 3D пазл. Но вообще идея классная и визуально очень приятно сделано)

Ответить
1

Мы думали про идею с паззлом, но так как последние игры, которые мы делали были как раз менеджеры / паззлы/ не очень активные, решили попробовать себя в чем-то новом.
Хотя, как идея, отдельный режим "без времени, но усложненный" смотрится очень хорошо!

Ответить
1

Поиграл. Игра понравилось. Вы правы, даже уровень на 1 звезду иногда сложный) Дошёл до 5. Неплохо бы понятнее сделать управление и добавить помощника который будет комментировать.

Ответить
0

Спасибо за отзыв! Помощника решили всё-таки не делать, потому что, учитывая ограниченное время на постройку, он будет отвлекать, а вот с управлением да - будем бороться =)

Ответить
1

Довольно интересная задумка. Всегда люблю читать вот такие представления проекта и описание его.

Но есть некоторые недочеты по статье, например: "и интсрумент тяжелым халатом". Исправьте опечатку

Ответить
0

Спасибо, поправил

Ответить
1

Блин, очень классно. Всегда поражало, как некоторые люди умеют генерировать идеи, удивительные в своей простоте и гениальности. Не мудря, не усложняя, получили игру, которая предлагает знакомую, но усовершенствованную механику.
Правда, внутренний дизайнер мешает играть =) Инстинктивно начинаю обустраивать комнату под себя.

Ответить
0

Спасибо, очень приятно =)
У нас, кстати, была шутка "давайте уберем паззлы и время, добавим свободный выбор мебели и будем продавать интерьер-дизайнерам" :D

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В Steam появилась функция продажи
подержанных цифровых копий игр
Подписаться на push-уведомления