Непонятная Тьма: Как это было? или постмортем

Продолжаю свою традицию краткого описания воспоминаний о создании игры на конкурс.

Непонятная Тьма: Как это было? или постмортем, изображение №1

Содержит спойлеры (да, они возможны даже в этой мелкой поделке)

Анонс и тема конкурса

КОД 16 резко появился и столь же резко прошёл. А ведь дали +1 день.

Хорошо погадали с темой — она и очевидна, и попасть не сразу получилось.

Тему раскрыли 5-го числа, а само действо начиналось 6-го. Стал думать что же сотворить, но мысли мои банальны, особенно от картинок. Помимо темы было ещё и ограничение сделать всё с нуля (и/или самому?), что для меня не являлось тем самым ограничением.

Первый день

Начал проект не 6-го, а 7-го. В голове была лишь одна мысль по поводу раскрытия темы — «дуэль». Потом придумается дополнительное раскрытие, но о нём позже.

Хотелось сделать что-то платформенное или как минимум с видом сбоку, но и не пошаговое, но тактическое. (ну да, ну да, очень тактично вышло).

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

(как я выяснил сегодня, 9-го числа — ИИ действительно немного сломался, хотя во время тестов он давал мне жару)

Непонятная Тьма: Как это было? или постмортем, изображение №2

(Оригинальный концепт, который в основном нарисован в первый день, но дорисовывался и во второй)

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

Забегая вперёд могу сказать какие вещи были в задумке, но не реализованы относительно игрока — «сильный, но медленный удар» и «падать с высоты — плохо». От второго пришлось отказаться, когда оно уже было готово.

Большое-небольшое отступление

Если кто следит за движком Game Maker, то знают, что с обновлением GMS2 до версии 2.3 пришли такие штуки как sequence. Недавно даже джем проходил, где необходимо было сделать игру используя эти штуки.

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

Первое применение — интерфейсы.

Я долгое время считал (и продолжаю), что одна из не столь значимых проблем ГМС это отсутствие каких-либо созданий UI. УДОБНОГО создания UI. В большинстве случаев всегда хватает написать кодом где какие текста писать, как отображать жизни и т. д., но нет.

Немного посмотрев на редактор интерфейса Анрила, а затем узнав офигенную вещь, что секвенсы можно ставить в другие секвенсы, то сразу руки зачесались проверить это на деле (спойлер — толком не получилось, делал в тест-проекте).

Что могу сказать по применению к UI. Накидать общий вид интерфейса весьма любопытно, может даже конкретные части можно задизайнить так, но тут сразу же прям палки в колёса от и так скрипящей телеги:

1) нельзя вот ПРОСТО взять какой-то объект из секвенса и регулировать его. Технически как я понял это возможно через не очень удобные коды, но нельзя сделать условно sequence_get_instance (имя_инстанса).

2) К чему пришёл ГМС2 — рисование UI в слое для GUI придётся отказаться до тех пор, пока ЙоЙо не завезут функцию рисования секвенса руками. Опять же ощущаем костыли какие-то.

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

Непонятная Тьма: Как это было? или постмортем, изображение №3

Второе применение — аналог префабов

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

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

Третье — новые спрайты, составные

Опять же — в чём-то префабы. Испробовать не удалось, но для конкурсного проекта планировал. В чём же отличие от префабов, по моему мнению: это указание циклов анимации _внутри_ секвенса. Секвенс сам по себе создаётся и по идее удаляется. Это как объект. Но если бы секвенс мог хранить несколько анимаций, то не нужно было бы создавать\удалять на каждую отдельную анимацию секвенс, а просто говорить ему какой цикл включать. Да, такое можно сделать уже сейчас написав свой код.

ЧАТЫРЕ или какие мысли сразу же были — катсцены

Тут думаю всё понятно, но непонятно как это реализовывать в контексте конкретной игры. Как сделать так, чтобы скажем герой начал свою анимацию из секвенса, а закончил анимацию игровым объектом. честно сказать — не знаю.

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

В этой же катсцене показывается текст КОД16.

Непонятная Тьма: Как это было? или постмортем, изображение №4

Как итог моих мыслей про секвенсы — потенциал большой, осталось реализовать нормально, пока балансирует в плохую сторону.

День второй или ночь первого дня

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

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

tTXoGrS

(Да, она такая медленная. Код получения урона был, не можем попасть друг по другу)

До чатырёх часов ночи по своему локальному времени рисовал графику в Aseprite. В одной стороне программа, в другой гугл с его выдачей анимаций. Каждый раз приходится искать и смотреть пример анимации хождения героя.

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

И тут вновь отступление по поводу темы, которое спойлер:

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

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

Может как-то подсознательно на фоне текущей ситуации в мире с этими вирусами пришла эта мысль, но мне подумался О НЕТ, СЮЖЕТ И ПОВОРОТ, который и есть тема Один на один. Что есть мы — не какой-то там герой, а локация это не просто форма человека, что если мы злодей в реальном-метафоричном человеке? Мы есть БОЛЕЗНЬ. И даже не столь важно какая именно болезнь — возможно, психологическая, но которая проходит почти по всему телу, вступая в борьбу с нашими охранниками в теле и в конце-концов злая сущность доходит до центра всего человека — мозга.

А причём тогда один на один? Может это скорее тема «болезнь»? Тут я скорее хотел заложить мысль, что с некоторой болезнью остаёшься ты один на один.

Если автору приходится пояснять своё произведение, то автор — муда автору не удалось сделать главного — донести мысль. Собственно, мне не удалось.

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

Непонятная Тьма: Как это было? или постмортем, изображение №5

Уже точно на второй день начал рисовать локации. Вернее одну конкретную большую. Замах на уровни в 2 раза это конечно сильно, поэтому вернулся к изначальному плану, разве что нужно было увеличить кол-во экранов по оси Х.

Непонятная Тьма: Как это было? или постмортем, изображение №6

Техническо-графическая проблема. Что было раньше курица или яйцо? большой рисунок уровня или тайлы с объектами? Проблемой стало совмещение графики и конкретных игровых объектов. У меня была форма уровня, её я закинул в ГМ и основываясь на контур стал ставить тайлы и объекты*, но как потом это перегнать в ФШ (а рисовал я там)? Тут я вновь вспомнил, что некоторые мелочи облегчили жизнь разработки конкретных игр, но они объективно не нужны всем уж разработчикам — сохранить содержание комнаты как картинку с сохранением размеров комнаты конечно же. Но тут пришла Смекалочка.jpg и несколько строчек кода делают это дело — берут и ставят размер камеры в размеры комнаты, меняется размер апп.сёрфейса и сохраняют этот сёрфейс как картинку.

Непонятная Тьма: Как это было? или постмортем, изображение №7

(по идее кликабельно)

* ВНЕЗАПНО начинаю допиливать геймплей. Ну да, он оказывается и не был готов! Добавляются верёвки и воздушные потоки, которые ни разу не избитая тема, настолько неизбитая, что делал такое в своём недоплатформере ещё на Си\ОпенГЛ.

Скоро финиш

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

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

Взял Audacity, нашумел в микрофон (хорошо, что это был художественный шум, а не какие-нибудь ТВ или родственники на фоне) и отобрал единицы звуков.

Шагания — это какой-то отголосок (а не само действо, что странно) собственно шагания в тапках. Хватание и движение по верёвке — это я хватал одну руку свою другую руку. Кувырок — это … ну я кулаком пытался прокувыркаться по столу YAK. Звуки белых-палок-точно-не-мечей это какие-то рандомные вещи с ручками. Эпический звук геймовера\смерти-игрока это ШОК мои бубнения в микрофон, но чуть с обработкой!

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

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

Что не вошло и\или вырезано

Важное качество автора это решительность при выкидывании творческих вещей, как реализованных, так и тех, что были в планах.

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

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

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

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

Итог

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

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

Спасибо АндрейМасту за организацию, а участникам за их участие!

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

П.С.: Спасибо Гиту за оперативное восстановление Гамина и восстановление новых постов, в частности этого набора букв и картинок!