Вы ведь любите музыку? А любите играть? Почему бы не делать это одновременно? Часть 1.
В юношестве у меня был не самый лучший интернет, буквально 56 кбит/c и даже с появлением 3G модема (хотя в месте где я вырос, по сей день, 2G/EDGE), ситуация не поменялась.
Но благо, в мои руки каждый месяц попадал журнал "Игромания" и о ситуации в игровой индустрии я был в целом в курсе, + диск с демками и полезным софтом всегда очень радовали. Как щас помню великий выпуск Апреля 2007 года
Запомнил я его благодаря шикарному треку который включался в главном меню этого самого диска игромании (Seven Wiser - Sick)
Это было лирическое отступление, теперь к сути.
Не помню в каком именно выпуске Игромании, но однажды я наткнулся на инфу об игре AudioSurf.
Концепция была свежей, грузишь любой трек, - он превращается в трассу, некоторые аспекты типа "ударных" создавали на трассе кубики разного цвета которые надо было собирать по аналогии 3 + в ряд одинакового оттенка
Концепция меня сильно впечатлила, я хотел "обкатать" весь свой плейлист музыки что был на компе, благо с музыкой проблем не было, друзья охотно делились флешками/дисками.
В итоге поставив в Download Master'е закачку на 1.5 дня и моля всех богов что бы деньги на симке модема не кончились, я смог каким то чудом скачать 300 мб и по итогу запустить эту игру.
В целом мне тогда дико понравилось позалипать под свой плейлист и для себя уже тогда, я выделил эту игру как основу жанра о котором я бы хотел поговорить.
Ритм - Игры
Да я думаю вы знаете парочку знаменитых представителей:
Но в данном случае, в Audiosurf любой музыке дают форму, и каждый трек как то по своему влияет на итоговый игровой экспириенс, поэтому я бы немного сузил, и дал бы название этому поджанру:
Эквалайзер Ритм Игры
Надеюсь все помнят эту имбу:
И если так подумать, то AudioSurf - это по факту интерактивный эквалайзер.
На этом вайбе, я решил подумать а какие представители других жанров уже представлены в этом поджанре, и чего в жанре точно нет.
Пошаговые под музыку - есть
Шутеры под музыку - есть
Гонки под музыку - есть
....
Подумал про стратегии, но подумал больше 3 минут - понял, что сложно это подружить...но уверен что такое тоже есть
Но вспомнил тут про то во что залипали 3-4 года назад.
Ну и его младший брат:
В итоге подумав я решил скрестить всё одновременно
Эквалайзер ритм игру - Рогалик - Сурвайворс.
Дело в том что придумать это одно, а реализовать - это уже другой разговор..
Первая итерация, я бы даже сказал, нулевая....
Движок как бы сразу был очевиден: GoDot
Но над остальным я долго думал, а конкретно:
- Что и как должно работать под музыку
- Как "разбить" музыку и на какие аспекты
- Под какую музыку? Заранее напишем? Любая?
- И как игрок будет чувствовать прогресс? И как он будет представлен?
Если на первые три вопроса я +- за пару дней смог получить ответ у себя в голове, и я почти уверен что наши с вами первые мысли - оказались схожи, то вот четвертый вопрос на само деле был более важным чем может показаться на первый взгляд.
Видите ли, в Vampire Survivors - лвл ап, то что является по сути локальным прогрессом забега, - это буквально пауза, передышка. Но дело в том что игра то у нас под музыку, мы не можем игру ставить "на паузу" каждые 10-15 сек.
Я подумал и сделал наверное самую тупую вариацию решений в качестве нулевого прототипа:
- Игрок выбирает любой трек
- Анализатор раскладывает его по интенсивности звучания, и по частотам на аспекты: "Ударные", "Басы", "Вокал" и т.д (для начала взял 3 аспекта)
- Каждое оружие назначается на слот аспекта
- Стреляет в момент его срабатывания
- Игрок неподвижен и стоит на месте
- На игрока бегут враги, оружие само стреляет в ближайшего
- Опыт с врага автоматом притягивается
- Лвлап - автоматический, качается рандомный стат
- Игрок молится что бы не сдохнуть на первых 10 секундах
Для демонстрации как это выглядело:
Конкретно в этом прототипе, было просто 3 оружия:
Луч, удар молнии, обычный орб ну и псевдо слова трека которые тоже вылетают и наносят урон
Для демки сделал себя бессмертным ибо сдох бы в первые 10 сек
И вроде это даже работало (нет). Включаешь знакомый трек, экран оживает в нужных местах, враги лопаются под удар бочки и мозг довольно говорит: «О, музыка действительно играет вместе со мной» (ну почти, отдаленно как то). Но очень быстро выяснилось, что смотреть и играть, как бы - разные вещи. Герой стоял, оружие само выбирало цели, а от меня требовалось в основном наблюдать за красивым (нет) эквалайзером.
Получился музыкальный скринсейвер, можно было добавить ещё врагов, ещё пушек и ещё частиц, но это не возвращало главного - ощущения, что именно я сейчас буквально ВЫЖИВАЮ под этот трек
В Итоге подумав что идея норм, но реализация конечно, ну ТАКОЕ СЕБЕ. Я закопал идею в том виде что она была, и выделив основные проблемы двинулся дальше
Вторая итерация
Я зафиксировал для себя 2 идеи которые в целом и по сей день составляют ядро игры:
- Игрок ВСЕГДА играет под свою музыку
- Оружие стреляет под разные его аспекты само по себе
Но игрок должен сам двигаться, и решать какое оружие и на какой аспект должно начать стрелять, прокачка между уровнями в магазине как в Brotato, сам забег - это твой плейлист из N треков который ты должен пробежать, с каждым уровнем враги сильнее, в конце босс. Надо подтянуть визуал, определиться в принципе с визуальным языком
Собственно с таким набором идей я начал переделывать игру:
Сначала добавил движение игроку и решил посмотреть как оно вообще:
Не знаю как я не дропнул делать игру примерно в этот же момент, но я подумал: "что в этом что то есть."
Немного посидев в depression, решил все же продолжить.
- Дал игроку выбирать на какой аспект и какое оружие вешать
- Пересобрал анализатор музыки с нуля
- Зачем то придумал систему комбо, где нажимая кнопку в такт ударных, множится х урона
- Зачем то вернул прокачку, но сделал её прямо в бою, клавишами 1/2/3.
- Немного накинул визуала в меню и в бой, и вуаля
Получилось что то отдаленно похожее на веселье:
Сразу выделил что прокачка во время боя и нажимание кнопки в такт для набивания комбо, как то не очень удобно, да и визуал сырой. Аспекты трека тоже распарились как то странно.
Ладно, решил:
- Вырезать прокачку в бою на кнопку, теперь из врагов просто выпадают бонусы
- Вырезать Комбо на кнопку
- Пошлифовать визуал, и сделать адекватное главное меню
- Добавил режим забега, именно как в рогалике
- Между боями - магазин где на нафармленные кристаллики можно купить плюс статов и прочего
Трек в этот раз другой:
Окей, чисто визуально и геймплейно игра начала выглядеть как хоть что то отдаленно напоминающее игру, это немного воодушевило и даже сильно замотивировало, + уже было не так стыдно показывать друзьям, и я начал получать первый фидбек, который в целом тоже меня подбодрил
Далее я сильно перескачу не особо интересные подробности, если в кратце:
Я в течении 2 недель сильно улучшал визуал, игра обрастала деталями, я насильно переписал систему генерации эффектов с процедурной генерации геометрии на шейдеры, что дало х10 к кадрам в секунду, стабильности и прочему.
Игра наконец получила свой визуальный язык, хоть и примитивный но мне кажется что в целом игре как раз такой и подходит, VHS/RETRO вайб
Добавил мета прогрессию за ресурсы добываемые во время забега (кассеты и пластинки)
Добавил персонализацию, которая в целом влияет на то как выглядит ваш бой, а именно:
Как выглядит каждое оружие, как выглядит фон, как выглядит игрок и так далее
Примерно как визуально меняется бой:
Забег и его формат - Набираешь треки, под них проходишь забег, фармишь валюту на визуал, + мета прокачку
Также добавил механику двух суперударов:
Шторм:
Отмотка времени + копия повторяющая твои действия последние 5 секунд:
Эффект смерти - время и трек отматываются назад, - воскрешение + удар на всю карту
+ Наконец довёл до ума анализатор трека, про него расскажу отдельно:
Анализатор заранее разбирает трек, чтобы игра не пыталась «угадывать ритм» во время боя.
Python-скрипт через Demucs разделяет музыку на барабаны, бас, вокал и остальные инструменты. Затем он определяет BPM, доли, акценты, изменения нот, протяжённые звуки, интенсивность и секции вроде тихой части, разгона и дропа.
Отдельно есть встроенная простенькая нейронка - WhisperX что может дополнительно расставить слова по времени, работает в целом неплохо, но долго (5-10 минут на трек), ибо по факту запускается локальный инстанс нейронки прямо на компе, что тяжеловато. Так что это крайняя мера, слова и тайминги по умолчанию ищутся игра сначала ищет синхронизированный текст через LRCLIB: запрос строится по названию файла, а из найденных вариантов выбирается тот, чья длительность ближе всего к треку. Таймкоды из LRC превращаются в события слов и сохраняются в карту.
Если синхронизированного текста в интернете нет, игра предлагает запустить WhisperX и распознать вокал локально. Полученные слова можно проверить и поправить в редакторе. Благодаря этому текстовое оружие стреляет не приблизительно «под вокал», а непосредственно на произносимых словах.
Результат сохраняется в JSON-карту трека. Во время игры Godot воспроизводит обычный аудиофайл, а Conductor идёт по этой карте и создаёт музыкальные события. К ним привязано оружие: барабаны, бас, вокал и другие аспекты буквально становятся расписанием выстрелов.
Поэтому первый анализ занимает несколько минут, зато следующие запуски происходят мгновенно и всегда одинаково попадают в музыку.
Ну и для тех кому кажется что что то распозналось не так, есть редактор:
Казалось бы, вроде игра в состоянии в которой ее можно дропнуть в Early Access и допиливать, но мне как обычно стрельнуло переделать игровой цикл, ибо мне показалось что слишком всё как то просто..скучно...Об этом, в следующей части, ибо есть еще третья и четвертая итерации с более детальным разбором геймплейного ядра и цикла
Но в любом случае спасибо что дочитали, пишите свои мысли, ну или просто комментик, ну и трек для вас: