Вы ведь любите музыку? А любите играть? Почему бы не делать это одновременно? Часть 1.

Начну как обычно, с небольшого вступления
Начну как обычно, с небольшого вступления

В юношестве у меня был не самый лучший интернет, буквально 56 кбит/c и даже с появлением 3G модема (хотя в месте где я вырос, по сей день, 2G/EDGE), ситуация не поменялась.

Такой вот красавчик стоял за компом и издавал характерные звуки
Такой вот красавчик стоял за компом и издавал характерные звуки

Но благо, в мои руки каждый месяц попадал журнал "Игромания" и о ситуации в игровой индустрии я был в целом в курсе, + диск с демками и полезным софтом всегда очень радовали. Как щас помню великий выпуск Апреля 2007 года

Классика
Классика

Запомнил я его благодаря шикарному треку который включался в главном меню этого самого диска игромании (Seven Wiser - Sick)

Это было лирическое отступление, теперь к сути.

Не помню в каком именно выпуске Игромании, но однажды я наткнулся на инфу об игре AudioSurf.

"- Прокатись на своей музыке"
"- Прокатись на своей музыке"

Концепция была свежей, грузишь любой трек, - он превращается в трассу, некоторые аспекты типа "ударных" создавали на трассе кубики разного цвета которые надо было собирать по аналогии 3 + в ряд одинакового оттенка

Да, состарилась так себе, но все равно есть свой вайб, + учитывайте что игру делал 1 человек.

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

В итоге поставив в Download Master'е закачку на 1.5 дня и моля всех богов что бы деньги на симке модема не кончились, я смог каким то чудом скачать 300 мб и по итогу запустить эту игру.

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

Ритм - Игры

Да я думаю вы знаете парочку знаменитых представителей:

BPM - довольно прорывной в каком то смысле шутер
BPM - довольно прорывной в каком то смысле шутер
BPM на максималках
BPM на максималках
Легенда
Легенда
Не играл, видел, но выглядит стилёво
Не играл, видел, но выглядит стилёво

Но в данном случае, в Audiosurf любой музыке дают форму, и каждый трек как то по своему влияет на итоговый игровой экспириенс, поэтому я бы немного сузил, и дал бы название этому поджанру:

Эквалайзер Ритм Игры

Надеюсь все помнят эту имбу:

Можно было долго в него залипать
Можно было долго в него залипать

И если так подумать, то AudioSurf - это по факту интерактивный эквалайзер.

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

Пошаговые под музыку - есть

Шутеры под музыку - есть

Гонки под музыку - есть

....

Подумал про стратегии, но подумал больше 3 минут - понял, что сложно это подружить...но уверен что такое тоже есть

Но вспомнил тут про то во что залипали 3-4 года назад.

Старший брат
Старший брат

Ну и его младший брат:

Картофелина
Картофелина

В итоге подумав я решил скрестить всё одновременно

Эквалайзер ритм игру - Рогалик - Сурвайворс.

Дурка
Дурка
Вот такое вот название у моей игры
Вот такое вот название у моей игры

Дело в том что придумать это одно, а реализовать - это уже другой разговор..

Первая итерация, я бы даже сказал, нулевая....

Движок как бы сразу был очевиден: GoDot

Но над остальным я долго думал, а конкретно:

  • Что и как должно работать под музыку
  • Как "разбить" музыку и на какие аспекты
  • Под какую музыку? Заранее напишем? Любая?
  • И как игрок будет чувствовать прогресс? И как он будет представлен?

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

Видите ли, в Vampire Survivors - лвл ап, то что является по сути локальным прогрессом забега, - это буквально пауза, передышка. Но дело в том что игра то у нас под музыку, мы не можем игру ставить "на паузу" каждые 10-15 сек.

Я подумал и сделал наверное самую тупую вариацию решений в качестве нулевого прототипа:

  • Игрок выбирает любой трек
  • Анализатор раскладывает его по интенсивности звучания, и по частотам на аспекты: "Ударные", "Басы", "Вокал" и т.д (для начала взял 3 аспекта)
  • Каждое оружие назначается на слот аспекта
  • Стреляет в момент его срабатывания
  • Игрок неподвижен и стоит на месте
  • На игрока бегут враги, оружие само стреляет в ближайшего
  • Опыт с врага автоматом притягивается
  • Лвлап - автоматический, качается рандомный стат
  • Игрок молится что бы не сдохнуть на первых 10 секундах

Для демонстрации как это выглядело:

Ссори залил бы весь трек но, ограничение на размер файла(

Конкретно в этом прототипе, было просто 3 оружия:

Луч, удар молнии, обычный орб ну и псевдо слова трека которые тоже вылетают и наносят урон

Для демки сделал себя бессмертным ибо сдох бы в первые 10 сек

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

Получился музыкальный скринсейвер, можно было добавить ещё врагов, ещё пушек и ещё частиц, но это не возвращало главного - ощущения, что именно я сейчас буквально ВЫЖИВАЮ под этот трек

В Итоге подумав что идея норм, но реализация конечно, ну ТАКОЕ СЕБЕ. Я закопал идею в том виде что она была, и выделив основные проблемы двинулся дальше

Вторая итерация

Я зафиксировал для себя 2 идеи которые в целом и по сей день составляют ядро игры:

  • Игрок ВСЕГДА играет под свою музыку
  • Оружие стреляет под разные его аспекты само по себе

Но игрок должен сам двигаться, и решать какое оружие и на какой аспект должно начать стрелять, прокачка между уровнями в магазине как в Brotato, сам забег - это твой плейлист из N треков который ты должен пробежать, с каждым уровнем враги сильнее, в конце босс. Надо подтянуть визуал, определиться в принципе с визуальным языком

Собственно с таким набором идей я начал переделывать игру:

Сначала добавил движение игроку и решил посмотреть как оно вообще:

Чет как то не особо под музыку что то стреляет, но какой то ритм прощупывается

Не знаю как я не дропнул делать игру примерно в этот же момент, но я подумал: "что в этом что то есть."

Немного посидев в depression, решил все же продолжить.

  • Дал игроку выбирать на какой аспект и какое оружие вешать
  • Пересобрал анализатор музыки с нуля
  • Зачем то придумал систему комбо, где нажимая кнопку в такт ударных, множится х урона
  • Зачем то вернул прокачку, но сделал её прямо в бою, клавишами 1/2/3.
  • Немного накинул визуала в меню и в бой, и вуаля

Получилось что то отдаленно похожее на веселье:

Каша какая то, если честно

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

Ладно, решил:

  • Вырезать прокачку в бою на кнопку, теперь из врагов просто выпадают бонусы
  • Вырезать Комбо на кнопку
  • Пошлифовать визуал, и сделать адекватное главное меню
  • Добавил режим забега, именно как в рогалике
  • Между боями - магазин где на нафармленные кристаллики можно купить плюс статов и прочего

Трек в этот раз другой:

Привет из Dispatch

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

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

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

Игра наконец получила свой визуальный язык, хоть и примитивный но мне кажется что в целом игре как раз такой и подходит, VHS/RETRO вайб

Главное меню.

Добавил мета прогрессию за ресурсы добываемые во время забега (кассеты и пластинки)

Дефолтная прокачка

Добавил персонализацию, которая в целом влияет на то как выглядит ваш бой, а именно:

Как выглядит каждое оружие, как выглядит фон, как выглядит игрок и так далее

Сам магазин персонализации

Примерно как визуально меняется бой:

Забег и его формат - Набираешь треки, под них проходишь забег, фармишь валюту на визуал, + мета прокачку

Также добавил механику двух суперударов:

Шторм:

Дефолтно, почистить экран

Отмотка времени + копия повторяющая твои действия последние 5 секунд:

Выбраться из не очень приятной ситуации

Эффект смерти - время и трек отматываются назад, - воскрешение + удар на всю карту

Второй шанс

+ Наконец довёл до ума анализатор трека, про него расскажу отдельно:

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

Python-скрипт через Demucs разделяет музыку на барабаны, бас, вокал и остальные инструменты. Затем он определяет BPM, доли, акценты, изменения нот, протяжённые звуки, интенсивность и секции вроде тихой части, разгона и дропа.

Отдельно есть встроенная простенькая нейронка - WhisperX что может дополнительно расставить слова по времени, работает в целом неплохо, но долго (5-10 минут на трек), ибо по факту запускается локальный инстанс нейронки прямо на компе, что тяжеловато. Так что это крайняя мера, слова и тайминги по умолчанию ищутся игра сначала ищет синхронизированный текст через LRCLIB: запрос строится по названию файла, а из найденных вариантов выбирается тот, чья длительность ближе всего к треку. Таймкоды из LRC превращаются в события слов и сохраняются в карту.

Если синхронизированного текста в интернете нет, игра предлагает запустить WhisperX и распознать вокал локально. Полученные слова можно проверить и поправить в редакторе. Благодаря этому текстовое оружие стреляет не приблизительно «под вокал», а непосредственно на произносимых словах.

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

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

Ну и для тех кому кажется что что то распозналось не так, есть редактор:

Редактируй сколько душе угодно

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

Но в любом случае спасибо что дочитали, пишите свои мысли, ну или просто комментик, ну и трек для вас:

1100
55
11