Список форумов www.shedevr.org.ru www.shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

NSF вставить в ром с игрой возможно?!

 
Начать новую тему   Ответить на тему    Список форумов www.shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
TiberiyLTim
RRC2008
RRC2008


Зарегистрирован: 14.07.2006
Сообщения: 443
Откуда: 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
RRC2008


Зарегистрирован: 14.07.2006
Сообщения: 443
Откуда: 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
RRC2008


Зарегистрирован: 14.07.2006
Сообщения: 443
Откуда: 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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
RRC2008


Зарегистрирован: 14.07.2006
Сообщения: 443
Откуда: 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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
RRC2008


Зарегистрирован: 08.02.2006
Сообщения: 188

СообщениеДобавлено: Вт Дек 05, 2006 2:28 pm    Заголовок сообщения: Ответить с цитатой

Нужно еще учитывать звуки, которые использует плеер.
И то, что музыка состоит из разных партий.
А найти ее и плеер не особо сложно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
TiberiyLTim
RRC2008
RRC2008


Зарегистрирован: 14.07.2006
Сообщения: 443
Откуда: 39

СообщениеДобавлено: Вт Дек 05, 2006 6:54 pm    Заголовок сообщения: Ответить с цитатой

Раскрыл ты настолько всё хорошо, что я прекращаю этим заниматься, а то у меня даже опыта пока нет с работой дебагера или дизассемблера. Нужно ещё подучиться малёхо... Crying or Very sad
_________________
http://RomHacking.RU
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Guyver
RRC2008
RRC2008


Зарегистрирован: 12.05.2005
Сообщения: 301
Откуда: СИНЕГОРЬЕ

СообщениеДобавлено: Вс Янв 07, 2007 11:21 pm    Заголовок сообщения: Ответить с цитатой

Знания Ассемблера иногда и не обязательны... Если игра не больше 40 кб (типа баттл сити) - то я делаю так:

Беру "поганку" с МЕДЖИКТИМА... И начинаю поганить ром... Музыка хранится в игре точно так же, как текст - т.е. где-то есть на неё указатель, а потом целыми блоками идёт сама "музыка"... Часто эти блоки идут друг за другом в одном определённом месте рома...

Музыкальный фрагмент длиной около 5 сек. занимает всяко больше 30-40 символов. Поэтому я "поганкой" беру и заменяю 10 символов (подряд) на всякую абракадабру... Потом включаю игру и смотрю - изменился ли звук... Если да - то место его расположения найдено, если нет - продолжаю дальше... Таким образом шерстю весь ром :*((((

С игрой весом около 40 кБ я возился около часа, пока не нашёл 1 мелодию, а дальше уже и все остальные без труда обнаружил - они все относительно рядом оказались...

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

Теперь третья стадия - забиваю в это место по порядку все коды от 00 до FF и смотрю, какой код какому звуку в гамме соответствует... Таким образом составляю всю гамму...

Пишу мелодию сначала в нотах, потом заменяю ноты кодами и пишу их в самом роме... Главное - уместить новую музыку на месте старой... Это можно сделать увеличив темп музыки... А ещё трудность в том - что некоторые места старой мелодии могут повторяться несколько раз, и при составлении новой нужно это учитывать...

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

Мой сайт: GUYVERperevod
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора MSN Messenger
Guyver
RRC2008
RRC2008


Зарегистрирован: 12.05.2005
Сообщения: 301
Откуда: СИНЕГОРЬЕ

СообщениеДобавлено: Вс Янв 07, 2007 11:30 pm    Заголовок сообщения: Ответить с цитатой

П.С. не знаю насколько всё написанное мной в конечном счёте верно, но мне таким образом удалось именить полностью музыкальное сопровождение в двух игрушках... Правда они маленькие ;о)))
_________________
Я не волшебник - я только учусь...

Мой сайт: GUYVERperevod
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора MSN Messenger
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2794

СообщениеДобавлено: Пн Янв 08, 2007 1:57 am    Заголовок сообщения: Ответить с цитатой

Всё верно, я сам пользовался такими кустарными методами. :)

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

И этот метод подходит лишь для простых форматов хранения музыкальных данных. Хорошо, что большинство NES-игр хранит музыку в виде трекероподобного списка команд звуковому движку (в частности, все игры CAPCOM), в которых можно чётко опознать ноты и писать мзуыку прямо в hex-редакторе. А если там вместо нот лежат параметры синтеза?! Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
TiberiyLTim
RRC2008
RRC2008


Зарегистрирован: 14.07.2006
Сообщения: 443
Откуда: 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
RRC2008


Зарегистрирован: 12.05.2005
Сообщения: 301
Откуда: СИНЕГОРЬЕ

СообщениеДобавлено: Пн Янв 08, 2007 2:23 pm    Заголовок сообщения: Ответить с цитатой

У меня в играх было всё так:

Сначала в игре идёт команда на включение "звуковых каналов", или как там это называется:

Ищем в роме поиском последовательность 8D1540 - она и включает звук, может быть несколько таких "запускателей" (кстати, если в роме все эти "запускатели" заменить например на 8D1640 - звука в игре не будет вообще)

Потом шли так называемые "инструменты" - блок данных, каждый символ в котором это есть та или иная нота инструмента или звука...

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

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

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

У меня в играх было всё так:

Сначала в игре идёт команда на включение "звуковых каналов", или как там это называется:

Ищем в роме поиском последовательность 8D1540 - она и включает звук, может быть несколько таких "запускателей" (кстати, если в роме все эти "запускатели" заменить например на 8D1640 - звука в игре не будет вообще)

Потом шли так называемые "инструменты" - блок данных, каждый символ в котором это есть та или иная нота инструмента или звука...

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

А что касается зацикливания и повторения "старой" музыки - мне тяжело было найти указатели на эти повторения, так как с поинтерами я до сих пор, к своему стыду, не очень дружу...
_________________
Я не волшебник - я только учусь...

Мой сайт: GUYVERperevod
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора MSN Messenger
Shiru



Зарегистрирован: 25.10.2006
Сообщения: 295
Откуда: Russia, Moscow

СообщениеДобавлено: Пн Янв 08, 2007 2:45 pm    Заголовок сообщения: Ответить с цитатой

G U Y V E R писал(а):
Потом шли так называемые "инструменты" - блок данных, каждый символ в котором это есть та или иная нота инструмента или звука...

Не, 'инструменты' в случае с PSG-музыкой - это несколько другое. Это описание изменения частоты и громкости звука во времени - чтобы нота могла плавно затихать, или иметь вибрато, и т.п. А то, что ты назвал 'инструментами' - это больше похоже на 'паттерны', т.е. последовательности данных самой мелодии, объединяемые в общую композицию с помощью чего-то, подобного 'ордер-листу' (список с перечислением порядка использования этих блоков).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Guyver
RRC2008
RRC2008


Зарегистрирован: 12.05.2005
Сообщения: 301
Откуда: СИНЕГОРЬЕ

СообщениеДобавлено: Пн Янв 08, 2007 2:56 pm    Заголовок сообщения: Ответить с цитатой

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

Мой сайт: GUYVERperevod
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора MSN Messenger
evgeny
RRC2008
RRC2008


Зарегистрирован: 08.02.2006
Сообщения: 188

СообщениеДобавлено: Пн Янв 08, 2007 3:20 pm    Заголовок сообщения: Ответить с цитатой

По-разному может быть. В Duck Tales музыка начинается с кода остановки предидушей музыки, затем идет пять поинтеров, 4 на каналы (2 основных, бас и ударные) и один на эффекты. В начале каждого канала определяются параметры: скорость, тип звука, громкость и транспортировка звука др. Далее идут ноты, а в месте после которого идет повтор ставится код 04 и поинтер на нужный фрагмент. Здесь я практически полностью разобрался, только на эффектах внимания не заострял, а, кстати благодаря им звуки в игре
и синтезируются.
Во вторых утках нота определяется первой частью байта, а скотость второй. В Черном плаще скорость ставится непосредственно перед нужным участком.
Но изменить в любом случае мелодию можно, нужно только понять структуру.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2794

СообщениеДобавлено: Пн Янв 08, 2007 3:26 pm    Заголовок сообщения: Ответить с цитатой

Shiru писал(а):
Какие такие параметры синтеза могут быть на NES? Значение делителя и громкость? Это, во-первых, очень неэффективный метод хранения (так можно минутным треком пару десятков килобайт забить), во-вторых, в этом случае как раз ничего не подвесится. А вот в случае с трекеро-подобным форматом (его, кстати, можно назвать скриптом) подвесить вполне можно.


Правильно, подвеситься может на первой стадии (если используется список команд), а заморочки с распознаванием формата могут возникнуть на второй стадии (если используется не просто список команд).


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


В капкомовских играх, очевидно, для экономии места (обычные трекерные паттерны здесь не эффективны) эти данные вообще смахивают на код для некоего вымышленного процессора (а точнее уж - код для парсера звукового движка). Т.е. буквально те же опкоды с последующими параметрами, а если значение байта выше некоего предела (скажем, 80h) - это уже просто ноты. Такую музыку довольно легко редактировать в сыром виде - порой даже легче, чем в трекере.
Сначала в каждом канале несколькими командами прописываются параметры текущего звука (громкость, темп, инструмент), потом прямым текстом - ноты, иногда перемежающиеся с кодами изменения громкости/инструмента. В конце нот - команда безусловного перехода.
И так для каждого канала (отдельно хранятся каналы двух квадратных, треугольной + шума).
В результате можно зациклить одну басовую линию всего, допустим, четырьмя байтами (+3 байта на команду безусловного перехода в начало басовой линии) - это на весь минутный трек! А в квадратных уже что-то подлиннее закодировать...
Ну, это что касается капкомовских движков (в разных играх они различаются незначительно) для NES, а было бы гораздо интереснее узнать формат хранения музыки где-нибудь на Сеге МД. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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. Это должны быть мелодия и коды программы для её воспроизведения. Скоро попробую.
Кто что думает? Делали так уже?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group