Во времена, когда все игрались в рок-звёзд с пластиковыми инструментам, игры в которых не одна лишь гитара была (а целый бэнд) - в своих чартах обычно забивали партии ударки, вокальчик, бас и гитарку (А в RB3 еще и PRO-гитарку, клавиши, PRO-клавиши, PRO-ударку и вокальные гармонии).
Со всей этой информацией можно не одну, а сразу несколько игр играть. Кто имел счастье поиграть rock band blitz или rock band unplugged для psp (лего для nintendo ds) - знает о чём я. Вместо одного note highway-я - 4, по одному на каждый инструмент, и ты между дорожками постоянно переключаешься, постукивая то за ударника, то за певца. В Clone Hero, самом популярном сегодня клоне Guitar Hero, этого режима из blitz попросту нет, да и в phase shift не было, вот я и подумал покопаться-попробовать.
Сам note highway сделать, управление и коллизии с нотами при нажатии - easy.
Реальный вопрос был - парсинг чартов существующих. Есть много форматов чартов для таких игр. Вот несколько навскидку:
Со всеми этими раскладами, раз игру я хочу делать с несколькими инструментами, я решил читать чарты для phase shift, скачал песню All Star группы Smash Mouth, и понеслась!
В ch.dat да и song.ini - ничего шибко полезного не будет, ogg-файлы - это стемы, изолированные треки инструментов чтоб в случае "не попадания" - не играть выбранный инструмент какое-то время (ну и чтоб ремиксы с пацанами пилить потом в эйблтоне!)
Весь основной замес - в notes.mid!
Потанцевал я вокруг него часик, со словами "куда ж тебя" и "откуда ты это сказал" и решил, что для начала - нарисую все НОТЫ из файлы с таймкодами. Мол на какой секунде какая нота играет. И здесь первый "шок" случился.
В формате миди любые события (note on, note off, мета-события всякие итд) - время хранят как дельту ТИКОВ между текущей нотой и предыдущей. Тики - определенная дробная доля от одной четвертушки в 4/4, ну или любогой размерности тащемта, в зависимости от песни.
Чтоб это преобразовать во ВРЕМЯ нужно знать BPM песни, ТЕМП (в миди темп - это длительность одной четвертушки в микросекундах) и нужно следить за tempo maps, так как в песне bpm, темп и размерность могут меняться по-ходу, соответствующим миди-событием которое темп этот установит.
Я так посмотрел на это всё дело, попробовал чёт поумножать и в файл попечатать - выглядело крайне бредово, даже если правильно. Нот было чёт ОЧЕНЬ МНОГО, хотя в гитар хиро всего 5 лейнов, как понять где ноты чтоб играть В БАРАБАНЩИКА, а где ноты чтоб играть В ПЕВЦА - тоже было нифига не ясно.
Проблему со временем я решил путём добавления в проект c# библиотеки drywetmidi - таи все этим преобразования со временем есть, велосипед изобретать в 2020 не надо, радостно.
Всем кто свой велосипед изобретает сам и байты перемножает - приветик.
Разобраться как в 1 файле хранятся все ноты - помогла старая вики для Rock Band Network. Когда-то Harmonix разрешали самому чартить песни СВОЕЙ ГРУППЫ условной и отправлять им на рассмотрение, вдруг в игру добавят. Вики эту сохранили, и доступна она вот здесь:
http://docs.c3universe.com/rbndocs/index.php?title=Main_Page
Если совсем в-кратце, то в миди файлике есть каналы
У каждого есть мета-ивент Track Name, у каналов которые в игре можно ИГРАТЬ эти Track Name стреляют как
итд, плюс есть дополнительные дорожки с информацией о том, что по-ходу песни происходит на сцене с 3д человечками, и как им под-песню танцевать (ноты тригерят анимации разные)
Если взять условный PART GUITAR и сдампить его в текстовый файл - нот разных в нём будет не 5, а 20+. Связано это с тем, что в игре есть уровни сложности. Скажем 5 нот от 96 (C6) до 100 (E6) - это сложность EXPERT, а то же на октаву ниже 84 (C5) до 88 (E5) - это HARD итд. Ко всему этому в самой дорожке PART GUITAR есть ноты, которые показывают В КАКОМ МЕСТЕ 3д-модельке твоего гитариста держать гриф (аж 12 позиций).
Вот до чего я дошёл: можно играть песенку!
Планы на части 2 и 3 этой статьи:
Всем спасибо кто читал, пишите комменты хоть куда-нибудь.