|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
TiberiyLTim RRC2008
Зарегистрирован: 14.07.2006 Сообщения: 446 Откуда: 39
|
Добавлено: Пн Дек 04, 2006 7:01 pm Заголовок сообщения: NSF вставить в ром с игрой возможно?! |
|
|
:?: NSF вставить в ром с игрой возможно?!
Меня интересует что из себя представляет NSF-файл - это вырезка из рома, или там присутствует дополнительный код?
И ещё хотелось бы узнать, возможно как-то скопировать байты с NSF и вставить эти байты в NES в замен байтам отвечающим за звук, так чтобы заменить музыку в одной игре на музыку из другой игры? Так как бы сделать ром-терминатор, где играла бы муза с других...
Глупый вопрос, наверное, но всё же помогите малёхо разобраться. _________________ http://RomHacking.RU |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Пн Дек 04, 2006 7:36 pm Заголовок сообщения: |
|
|
Формат NSF: http://www.zophar.net/nsf/nsfspec.txt
Он представляет собой извлечённый из игры плеер музыки + данные, используемые этим плеером (сама музыка). В разных играх используются разные плееры, соответственно формат данных музыки разный. Поэтому и извлекаются из игр не только данные музыки, но и плеер.
У некоторых разработчиков один и тот-же плеер (а значит, и формат музыки) используется в нескольких играх, т.к. писать для каждой игры плеер с нуля нерационально. Однако, этот факт не даёт простой возможности вставить свою музыку - т.к. всё равно, внутренний формат, используемый каким-либо разработчиком, неизвестен, и его надо reverse-engineer'ить, писать свой конвертер/редактор, и писать свою музыку с учётом ограничений плеера. Проще разобраться в коде игры, и заменить её штатный плеер своим. Разумеется, это не 'два пальца об асфальт', надо много знать и уметь. |
|
Вернуться к началу |
|
|
TiberiyLTim RRC2008
Зарегистрирован: 14.07.2006 Сообщения: 446 Откуда: 39
|
Добавлено: Пн Дек 04, 2006 8:02 pm Заголовок сообщения: |
|
|
ясно. :(
А плеер этот вставить тоже не получится, он ведь приведёт к смещению байтов... да?
Возможно ли как-то хоть чуток изменить музыку в "Баттле Сити" - ну хоть на чуток.
Или ещё где можно достать nsf из "Баттле Сити" - искал не нашёл. _________________ http://RomHacking.RU |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Пн Дек 04, 2006 8:43 pm Заголовок сообщения: |
|
|
TiberiyLTim писал(а): | ясно. :(
А плеер этот вставить тоже не получится, он ведь приведёт к смещению байтов... да? |
Надо найти свободное место или увеличить объём картриджа (со всеми вытекающими проблемами). Разумеется, нужно удалить старый плеер и данные музыки, соответственно заменив все его вызовы, не забывая также про звуковые эффекты (которые надо каким-либо образом поддержать в новом плеере).
Цитата: | Возможно ли как-то хоть чуток изменить музыку в "Баттле Сити" - ну хоть на чуток. |
См. выше - разобраться в формате хранения музыки. Дизассемблер/дебаггер в руки, и вперёд. Благо, там кода немного.
Цитата: | Или ещё где можно достать nsf из "Баттле Сити" - искал не нашёл. |
Видимо, нигде. Там и музыки-то нет - полтора джангла, не нашлось желающих сделать рип. |
|
Вернуться к началу |
|
|
TiberiyLTim RRC2008
Зарегистрирован: 14.07.2006 Сообщения: 446 Откуда: 39
|
Добавлено: Пн Дек 04, 2006 11:21 pm Заголовок сообщения: |
|
|
Цитата: | См. выше - разобраться в формате хранения музыки. Дизассемблер/дебаггер в руки, и вперёд. Благо, там кода немного. |
На сайте Шедевра в разделе "Утилиты" нет дизассемблера для nes, только для smd. Где такую добру взять? _________________ http://RomHacking.RU |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Вт Дек 05, 2006 12:16 am Заголовок сообщения: |
|
|
Цитата: | http://www.romhacking.net/?Category=11&Console=1&Game=0&Author=0&Recm=0&Level=&docsearch=++Go++&title=&dsearch=&page=docs&action=doclist |
|
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вт Дек 05, 2006 6:04 am Заголовок сообщения: |
|
|
TiberiyLTim писал(а): | На сайте Шедевра в разделе "Утилиты" нет дизассемблера для nes, только для smd. Где такую добру взять? |
Кроме сайта Шедевра, в интернете существует как минимум несколько (миллионов?) других сайтов;)
Нет дизассемблеров для NES и SMD, есть дизассемблеры для процессоров 6502, 68000, и Z80. Тебе нужен будет первый, но если ты не понимаешь разницы между консолью и процессором - тебе он на данном этапе мало чем поможет. Ищи любым поисковиком по ключевым словам '6502 disasm', '6502 disassembler', и т.п. |
|
Вернуться к началу |
|
|
TiberiyLTim RRC2008
Зарегистрирован: 14.07.2006 Сообщения: 446 Откуда: 39
|
Добавлено: Вт Дек 05, 2006 12:13 pm Заголовок сообщения: |
|
|
Shiru писал(а): | Нет дизассемблеров для NES и SMD, есть дизассемблеры для процессоров 6502, 68000, и Z80. Тебе нужен будет первый, но если ты не понимаешь разницы между консолью и процессором - тебе он на данном этапе мало чем поможет. Ищи любым поисковиком по ключевым словам '6502 disasm', '6502 disassembler', и т.п. |
Почему 3 вида процессоров привёл, а платформы 2, Z80 - это от чего?!
Для тебя, как для серьёзного ромхакера с большими знаниями в этом деле, сложно было бы заменить музыку в роме? Если это для тебя сложно, то скорее всего это у меня не получится, наверное... Для тебя это лёгкий процесс (замена музы)? _________________ http://RomHacking.RU |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Вт Дек 05, 2006 1:48 pm Заголовок сообщения: |
|
|
68000 - Ассемблер ЦП платформы SEGA
Z80 - Ассемблер Звукового СоПроцессора SEGA |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вт Дек 05, 2006 1:59 pm Заголовок сообщения: |
|
|
TiberiyLTim писал(а): | Почему 3 вида процессоров привёл, а платформы 2, Z80 - это от чего?! |
У SMD два процессора - M68K основной, Z80 - дополнительный (для совместимости с играми SMS, и для управления звуком в нативных).
Цитата: | Для тебя, как для серьёзного ромхакера с большими знаниями в этом деле, сложно было бы заменить музыку в роме? Если это для тебя сложно, то скорее всего это у меня не получится, наверное... Для тебя это лёгкий процесс (замена музы)? |
Я не ромхакер, я скорее с другой стороны.
Для меня это было-бы сложно, т.к. я не имел практики с NES (не писал программ для неё) - я знаю её устройство в общих чертах, но без важных тонкостей, которые выясняются только в процессе практической работы. Также, я не имею опыта написания кода для 6502 и подобных ему процессоров (минимум регистров с кучей способов адресации памяти) - хотя я и писал его эмулятор, работоспособный - т.к. одно дело знать, что делает каждая команда в отдельности, и совсем другое - делать эффективную реализацию своих задач с помощью этих самых команд. Без умения писать свой код разобраться в чужом будет малореально, тем более в таком его объёме (сам плеер музыки для 8-битных систем с PSG - это обычно около 1-2кб кода, но дело осложняется его связью с остальным кодом игры, и общей компоновкой кода/данных игры в ROM'е). Безусловно, все эти проблемы преодолимы, но этот процесс требует времени и большого желания.
В принципе, для простых NES-игр, с технически простой музыкой (нет DPCM, нет слайдов/портаменто/глиссов) - того-же Battle City - можно попытаться использовать стандартные методы начинающих ромхакеров. Например, долго и упорно поганить данные корраптером (конечно, не все подряд, для начала стоит составить карту памяти, сразу отбрасывая области, где лежит графика и данные об уровнях), пытаясь отыскать, где хранятся данные о музыке, и потом пытаться с помощью их изменения выяснить, каким именно образом они хранятся. Но вероятность успеха такого мероприятия очень низка.
Анализ кода при наличии достаточного опыта и знаний гарантирует 100% успех. Но если двигаться в сторону обнаружения блока данных музыки с целью заменить их на свои - помимо знания ассемблера и устройства NES, потребуются также знания, каким образом работают PSG (класс синтезаторов звука, аналогичных используемому в NES), каким образом пишется музыка для их крайне ограниченных возможностей, и т.п. И придётся изобретать способ, каким образом подготовить свои данные (написать свой редактор музыки, например - задачка совсем не из лёгких). Заменить плеер на свой несколько проще, но тут свои сложности. Во-первых, надо более жёстко перераспределять использование памяти картриджа в игре, т.к. свой плеер наверняка будет сложнее оригинального - а это значит, что будет больше кода и данных. Во-вторых, свой плеер надо откуда-то взять - а это значит, что либо опять-таки нужны знания для его написания, либо нужно взять существующий (от FamiTracker, например), и достаточно хорошо разобраться, как он работает. и каким образом заменить им оригинальный плеер.
Общий способ анализа кода игры на предмет обнаружения оригинального плеера таков. Известно, что управляющие регистры синтезатора в NES отображены в диапазон адресов #4000-#4013. Также известно, что любой плеер музыки/эффектов для PSG должен вызываться через некоторые промежутки времени, и для ТВ-системы логично за этот промежуток времени взять время одного ТВ-кадра (1/50 или 1/60 секунды) - т.е. вызов самого плеера должен висеть где-то на прерывании по VBLANK (если такое есть), или сразу после/до цикла ожидания VBLANK. Далее, логично предположить, что запуск мелодий происходит в определённых местах игры - при появлении начальной заставки, при появлении нового уровня, и т.д.; а звуковых эффектов - в момент определённых игровых событий. И делается это, скорее всего (99% вероятности) отдельными подпрограммами, на входе в которые передаётся (через регистр или ячейку ОЗУ) либо условный номер мелодии/эффекта (скорее всего), либо их непосредственный адрес (наименее вероятно). Ну и помимо всего этого, где-то в начале кода игры должен быть вызов процедуры инициализации плеера, которая выполняется однократно. Соответственно, надо найти следующие процедуры: инициализация плеера, запуск мелодии, запуск эффекта, основная процедура плеера (которая вызывается каждый кадр). Инициализацию плеера и основную его часть можно обнаружить по тому признаку, что они обе (сам плеер - точно, инициализация - не обязательно) пишут значения в диапазон #4000-#4013. Т.к. это не zeropage, возможных способов обращения к этим адресам немного, вполне реально найти их с помощью поиска по листингу дизассемблированной программы; и 100% можно найти их с помощью дебаггера, позволяющего ставить точки останова (breakpoint'ы) при обращении к определённым адресам. Далее надо раскручивать программу в обе стороны от этого места - найти, где начинается и кончается процедура. Это может быть подпрограмма, используемая кодом плеера и/или инициализации, а может быть часть самого плеера. Тут уже конкретных способов нет, обычный анализ кода. В итоге будет определена область в ROM'е, где лежит код плеера (который можно будет убрать), и будут определены точки вызова этих подпрограмм (в которых можно изменить вызовы на свои). Скорее всего, процедуры запуска мелодии и эффектов будут лежать где-то рядом, тогда их легко обнаружить; в противном случае придётся искать по коду игры - трассировать моменты, где начинается проигрывание музыки/эффекта. Когда вызовы будут обнаружены, можно будет через анализ кода этих процедур определить, где лежат данные музыки и звуков.
Надеюсь, тему *бли я раскрыл достаточно. |
|
Вернуться к началу |
|
|
evgeny RRC2008
Зарегистрирован: 08.02.2006 Сообщения: 188
|
Добавлено: Вт Дек 05, 2006 2:28 pm Заголовок сообщения: |
|
|
Нужно еще учитывать звуки, которые использует плеер.
И то, что музыка состоит из разных партий.
А найти ее и плеер не особо сложно. |
|
Вернуться к началу |
|
|
TiberiyLTim RRC2008
Зарегистрирован: 14.07.2006 Сообщения: 446 Откуда: 39
|
Добавлено: Вт Дек 05, 2006 6:54 pm Заголовок сообщения: |
|
|
Раскрыл ты настолько всё хорошо, что я прекращаю этим заниматься, а то у меня даже опыта пока нет с работой дебагера или дизассемблера. Нужно ещё подучиться малёхо... _________________ http://RomHacking.RU |
|
Вернуться к началу |
|
|
Guyver RRC2008
Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Вс Янв 07, 2007 11:21 pm Заголовок сообщения: |
|
|
Знания Ассемблера иногда и не обязательны... Если игра не больше 40 кб (типа баттл сити) - то я делаю так:
Беру "поганку" с МЕДЖИКТИМА... И начинаю поганить ром... Музыка хранится в игре точно так же, как текст - т.е. где-то есть на неё указатель, а потом целыми блоками идёт сама "музыка"... Часто эти блоки идут друг за другом в одном определённом месте рома...
Музыкальный фрагмент длиной около 5 сек. занимает всяко больше 30-40 символов. Поэтому я "поганкой" беру и заменяю 10 символов (подряд) на всякую абракадабру... Потом включаю игру и смотрю - изменился ли звук... Если да - то место его расположения найдено, если нет - продолжаю дальше... Таким образом шерстю весь ром :*((((
С игрой весом около 40 кБ я возился около часа, пока не нашёл 1 мелодию, а дальше уже и все остальные без труда обнаружил - они все относительно рядом оказались...
Первая стадия пройдена... Теперь вторая... Проанализировав кусок файла с нужной песней нашёл в нём символ, который обозначает отсутствие звука и забил им всю песню (которую править решил). Проверил - песня не играет как и положено - гробовое молчание...
Теперь третья стадия - забиваю в это место по порядку все коды от 00 до FF и смотрю, какой код какому звуку в гамме соответствует... Таким образом составляю всю гамму...
Пишу мелодию сначала в нотах, потом заменяю ноты кодами и пишу их в самом роме... Главное - уместить новую музыку на месте старой... Это можно сделать увеличив темп музыки... А ещё трудность в том - что некоторые места старой мелодии могут повторяться несколько раз, и при составлении новой нужно это учитывать...
Всё... Я понимаю, что это муторно, но зато знания никакие не нужны, а результат зависит только от терпения и музыкального слуха... _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
|
Guyver RRC2008
Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Вс Янв 07, 2007 11:30 pm Заголовок сообщения: |
|
|
П.С. не знаю насколько всё написанное мной в конечном счёте верно, но мне таким образом удалось именить полностью музыкальное сопровождение в двух игрушках... Правда они маленькие ;о))) _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Янв 08, 2007 1:57 am Заголовок сообщения: |
|
|
Всё верно, я сам пользовался такими кустарными методами. :)
Кроме прочих минусов, есть такой вариант развития событий: внесение изменений в музыку может просто подвесить игру, а ромхакер подумает, что испортил код, отбросит эту часть РОМа и уже ничего не найдёт.
И этот метод подходит лишь для простых форматов хранения музыкальных данных. Хорошо, что большинство NES-игр хранит музыку в виде трекероподобного списка команд звуковому движку (в частности, все игры CAPCOM), в которых можно чётко опознать ноты и писать мзуыку прямо в hex-редакторе. А если там вместо нот лежат параметры синтеза?! |
|
Вернуться к началу |
|
|
TiberiyLTim RRC2008
Зарегистрирован: 14.07.2006 Сообщения: 446 Откуда: 39
|
Добавлено: Пн Янв 08, 2007 3:51 am Заголовок сообщения: |
|
|
G U Y V E R
Это уже меня радует! :D Буду пробовать. Спасибо ещё раз. _________________ http://RomHacking.RU |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Пн Янв 08, 2007 5:48 am Заголовок сообщения: |
|
|
АнС писал(а): | А если там вместо нот лежат параметры синтеза?! ;) |
Какие такие параметры синтеза могут быть на NES? Значение делителя и громкость? Это, во-первых, очень неэффективный метод хранения (так можно минутным треком пару десятков килобайт забить), во-вторых, в этом случае как раз ничего не подвесится. А вот в случае с трекеро-подобным форматом (его, кстати, можно назвать скриптом) подвесить вполне можно.
Вообще, структура данных для хоть сколько-то сложной музыки будет примерно такая:
- Список параметров 'инструментов' (может и не быть);
- Список последовательностей данных, фрагментов мелодии (типа order-list в трекерах, но может быть с переменной длиной фрагментов и с раздельными списками для каналов);
- Сами последовательности данных мелодии.
Второе нужно для того, чтобы не дублировать повторяющиеся данные (фрагменты музыки). Также для этого могут быть специальные команды в последовательностях данных мелодии (ждать столько-то кадров, повторять столько-то раз от сих до сих). Сама музыка может храниться в виде кодов с номерами нот, вместо значений делителя (и где-то также будет табличка значений, которой будет пользоваться плеер), значений громкости, некоторых флажков, номеров 'инструментов', специальных команд. Понятно, что необходимым условием является только первое, остальное по необходимости. Эти данные скорее всего будут храниться в виде набора полей переменной длины, т.к. иначе музыка будет занимать слишком большой объём. Определять длину поля плеер может по 'лишним' битам в коде ноты, или по дополнительному коду-маркеру.
G U Y V E R, видимо, раскопал в упомянутых играх блок данных с фрагментами мелодии, но не раскопал подобие ордер-листа ('некоторые места старой мелодии могут повторяться несколько раз'). Вообще, ордер-лист при блоках переменной длины должен представлять из себя либо сразу табличку поинтеров на эти блоки, либо табличку поинтеров для пронумерованных блоков, и список номеров. Хотя возможны и более злые извраты. |
|
Вернуться к началу |
|
|
Guyver RRC2008
Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Пн Янв 08, 2007 2:23 pm Заголовок сообщения: |
|
|
У меня в играх было всё так:
Сначала в игре идёт команда на включение "звуковых каналов", или как там это называется:
Ищем в роме поиском последовательность 8D1540 - она и включает звук, может быть несколько таких "запускателей" (кстати, если в роме все эти "запускатели" заменить например на 8D1640 - звука в игре не будет вообще)
Потом шли так называемые "инструменты" - блок данных, каждый символ в котором это есть та или иная нота инструмента или звука...
И потом где-то в самом роме лежала сама "музыка" отдельными блоками... И каждый код этих блоков ссылался на блок "инструментов", "беря" именно из него "ноты"...
А что касается зацикливания и повторения "старой" музыки - мне тяжело было найти указатели на эти повторения, так как с поинтерами я до сих пор, к своему стыду, не очень дружу...
Вообще конечно муторно редактировать музыку, мне приходилось создавать что-то типа такой схемы и по ней править мелодии... Замучался...
У меня в играх было всё так:
Сначала в игре идёт команда на включение "звуковых каналов", или как там это называется:
Ищем в роме поиском последовательность 8D1540 - она и включает звук, может быть несколько таких "запускателей" (кстати, если в роме все эти "запускатели" заменить например на 8D1640 - звука в игре не будет вообще)
Потом шли так называемые "инструменты" - блок данных, каждый символ в котором это есть та или иная нота инструмента или звука...
И потом где-то в самом роме лежала сама "музыка" отдельными блоками... И каждый код этих блоков ссылался на блок "инструментов", "беря" именно из него "ноты"...
А что касается зацикливания и повторения "старой" музыки - мне тяжело было найти указатели на эти повторения, так как с поинтерами я до сих пор, к своему стыду, не очень дружу... _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Пн Янв 08, 2007 2:45 pm Заголовок сообщения: |
|
|
G U Y V E R писал(а): | Потом шли так называемые "инструменты" - блок данных, каждый символ в котором это есть та или иная нота инструмента или звука... |
Не, 'инструменты' в случае с PSG-музыкой - это несколько другое. Это описание изменения частоты и громкости звука во времени - чтобы нота могла плавно затихать, или иметь вибрато, и т.п. А то, что ты назвал 'инструментами' - это больше похоже на 'паттерны', т.е. последовательности данных самой мелодии, объединяемые в общую композицию с помощью чего-то, подобного 'ордер-листу' (список с перечислением порядка использования этих блоков). |
|
Вернуться к началу |
|
|
Guyver RRC2008
Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Пн Янв 08, 2007 2:56 pm Заголовок сообщения: |
|
|
А у меня вибратто, стакатто, легато, затихание, усиление звука, изменение темпа и т.д. были уже в самих блоках с мелодией, т.е. там можно было например после ноты ставить опред. символы - и тогда нота или звучала громче, или игралась как стакатто и т.д. Вот какой гемор... _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
|
evgeny RRC2008
Зарегистрирован: 08.02.2006 Сообщения: 188
|
Добавлено: Пн Янв 08, 2007 3:20 pm Заголовок сообщения: |
|
|
По-разному может быть. В Duck Tales музыка начинается с кода остановки предидушей музыки, затем идет пять поинтеров, 4 на каналы (2 основных, бас и ударные) и один на эффекты. В начале каждого канала определяются параметры: скорость, тип звука, громкость и транспортировка звука др. Далее идут ноты, а в месте после которого идет повтор ставится код 04 и поинтер на нужный фрагмент. Здесь я практически полностью разобрался, только на эффектах внимания не заострял, а, кстати благодаря им звуки в игре
и синтезируются.
Во вторых утках нота определяется первой частью байта, а скотость второй. В Черном плаще скорость ставится непосредственно перед нужным участком.
Но изменить в любом случае мелодию можно, нужно только понять структуру. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Янв 08, 2007 3:26 pm Заголовок сообщения: |
|
|
Shiru писал(а): | Какие такие параметры синтеза могут быть на NES? Значение делителя и громкость? Это, во-первых, очень неэффективный метод хранения (так можно минутным треком пару десятков килобайт забить), во-вторых, в этом случае как раз ничего не подвесится. А вот в случае с трекеро-подобным форматом (его, кстати, можно назвать скриптом) подвесить вполне можно. |
Правильно, подвеситься может на первой стадии (если используется список команд), а заморочки с распознаванием формата могут возникнуть на второй стадии (если используется не просто список команд).
Shiru писал(а): | Эти данные скорее всего будут храниться в виде набора полей переменной длины, т.к. иначе музыка будет занимать слишком большой объём. Определять длину поля плеер может по 'лишним' битам в коде ноты, или по дополнительному коду-маркеру. |
В капкомовских играх, очевидно, для экономии места (обычные трекерные паттерны здесь не эффективны) эти данные вообще смахивают на код для некоего вымышленного процессора (а точнее уж - код для парсера звукового движка). Т.е. буквально те же опкоды с последующими параметрами, а если значение байта выше некоего предела (скажем, 80h) - это уже просто ноты. Такую музыку довольно легко редактировать в сыром виде - порой даже легче, чем в трекере.
Сначала в каждом канале несколькими командами прописываются параметры текущего звука (громкость, темп, инструмент), потом прямым текстом - ноты, иногда перемежающиеся с кодами изменения громкости/инструмента. В конце нот - команда безусловного перехода.
И так для каждого канала (отдельно хранятся каналы двух квадратных, треугольной + шума).
В результате можно зациклить одну басовую линию всего, допустим, четырьмя байтами (+3 байта на команду безусловного перехода в начало басовой линии) - это на весь минутный трек! А в квадратных уже что-то подлиннее закодировать...
Ну, это что касается капкомовских движков (в разных играх они различаются незначительно) для NES, а было бы гораздо интереснее узнать формат хранения музыки где-нибудь на Сеге МД. |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Пн Янв 08, 2007 8:24 pm Заголовок сообщения: |
|
|
АнС писал(а): | было бы гораздо интереснее узнать формат хранения музыки где-нибудь на Сеге МД. :) |
А там нет таких проблем с памятью и быстродействием, как на NES - можно хоть SMF (midi) напрямую играть. Возможно, что-то подобное, только более оптимальное, и используют. Хотя в играх от Zyrinx/Scavenger, как я помню рассказ HWM о выковыривании оттуда музыки, использовался трекероподобный формат.
Заменить музыку в играх на SMD, имхо, проще. Т.к. драйвер, скорее всего, будет в коде Z80, и его проще найти/подменить своим (он будет 'чёрным ящиком' по отношению к основной программе). Другой вопрос, что нет средств для создания своей музыки (ну, у большинства нет;), так что придётся изобретать как минимум конвертор midi в более компактный/удобный формат + редактор инструментов. |
|
Вернуться к началу |
|
|
KDEboroda
Зарегистрирован: 13.11.2015 Сообщения: 2 Откуда: СССР
|
Добавлено: Вт Ноя 22, 2016 10:46 pm Заголовок сообщения: |
|
|
У меня вопрос по изменению мелодии на SEGA.
Предполагаю, что надо так: отладчиком отследить момент загрузки данных в память процессора Z80, потом эти данные искать в ROM. Это должны быть мелодия и коды программы для её воспроизведения. Скоро попробую.
Кто что думает? Делали так уже? |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|