Автор Тема: о взаимозаменямости музыки GEMS в различных играх  (Прочитано 1330 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
в данном случае рассматривался пример Doom Sega x32 и Sonic Spinball, но по идее таким образом можно заменять музыку или спецэффекты практически в любой игре, которая использовала GEMS аудио драйвер. конечно есть исключения и дикие дебри типа МК3 с двумя наборами банков и там черт ногу сломит разобраться, но в общем и целом вполне себе можно заменять музыку.

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

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


Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
итак... процесс потихоньку двигается. и додвигался он пока-что до маленького затыка :) как-бы предполагается что база адресов (то есть не самих мелодий, а именно адресов, где они записаны в ром файле игры) будет онлайн... но когда это еще будет :) да и создать её еще надо. посему решил сделать автоматический поиск этого места, где записаны адреса гемс банков. затык заключается в том, что у меня к примеру есть адрес $00 00 56 DB - если искать по этому значению, то его может быть хоть 10 штук по всему рому разбросаны там да сям. хорошо, предположим я все эти адреса засуну в массив. точно так-же сделаю с остальными тремя банками. в результате у меня 4 рандомных массива с адресами. и тут, значит, вопрос на три миллиона рублей: как их крутануть в цикле - эти четыре массива - так, чтобы они нашли такое сочетание 4 адресов, которые были бы рядышком в пределах от 2 до 20 байт к примеру? это еще ладно... а ведь может быть что банков будет не 4, а 3... или того хуже - 2 банка. только инструменты и мелодии. а модуляции и сэмплы в этой игре, скажем, отсутствуют. это же капец просто :)

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

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
утро вечера мудреннее... вроде бы родил чото такое, что видимо работает :)

алгоритм такой:
берем игру, после из буржуйского архива берем банки от этой игры - ложим в одну папку, и копируем туда поисковик
поисковик ищет адреса в роме, где лежат банки
после ищет те места, по которым записаны адреса банков. и поскольку значение адреса = 4 байта - очень короткое, то подобное сочетание 4 байтов может быть в нескольких местах рома. типа графика это или еще чего.
собираем все найденные предполагаемые места 4 банков гемс в 4 архива
крутим цикл из 4 массивов и заполняем во временный 4 слотовый массив значения адресов банков
сортируем этот 4 слотовый массив по возрастанию
начинаем вычитать из 4 ячейки 3, из 3 - 2, из 2 - 1... и крутим массив до тех пор, пока значение всех вычитаний не будет от 4 до 20 примерно.
как нашлось такое сочетание адресов, делаем вывод что вот она! чаша Грааля! то есть задача была найти такое место, где все 4 адреса были бы рядом. то есть в теории мы нашли место, где записаны адреса банков GEMS.

конечно есть нюансы... типа если банки сэмплов и модуляций пустые. получается искать надо всего 2 адреса - мелодий и инструментов. а мест, где всего 2 значения могут быть рядом - может быть куда больше, чем 3 или 4 значения. то есть шанс что программа найдет это место неверно - довольно высоки :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Юбилеееееееееей! 2 тысячное сообщение на форуме :) сей немаловажный праздник надо обозначить очередным эпическим видео. теперь это короткий видео итог тех операций, что вручную проводились в часовом видео. но на этот раз практически все автоматизировано. конечно есть еще огрехи, а я прям торопился записать видос, что даже толком не оттестировал все что наваял за эти дни :) но результатом доволеееееееееееен что капец :) прям на позитиве сейчас.

напомню - не любую GEMS игру можно будет подобным образом поромхачить в плане звука. некоторые игры настолько глубоко были переработаны, что на обычной козе - стандартном драйвере - туда даже близко не подъедешь. посему этот метод замены подойдет лишь к части игр, где был самый простой драйвер. там причем следует иметь ввиду, что онлайн база расчитана была все-таки на Дюну, с её новой версией драйвера GEMS, то есть 2.8. прочие же игры - как например Zombie, которые жрут моих соседей - имеют более старую версию драйвера. которая в принципе не сильно отличается НО! более качественные сэмплы, которые 10.4k проигрывать не умеют. там максимум 7k с хвостом подойдут. но в базе то сэмплы могут быть как раз 10.4... и поэтому там нужны будут дополнительные танцы с бубном. так-же как и со сложными играми, в плане модифицированного GEMS, типа MK3, Zero Tolerance и всякие такие сложные случаи, где или пережатие сэмплов было, или два набора банков GEMS... так что нюансов еще хватает :) но все равно доволен :)


Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
тем временем в процессе внесения адресов в базу вылезли и первые жертвы :) Batman Returns внезапно содержит не точный адрес, где лежат банки, то есть типа: $00027732 - а лишь последние два байта: $00007732
сия катавасия портит мне всю малину :) пришлось придумать флаг запрета на распаковку оригинальных банков. то есть Batman Returns по итогу нельзя распаковать автоматом и соответственно использовать с данной программой. вручную только и то после сборки потом править адреса допольнительно вручную. кароче печаль.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
в принципе готово. хотя можно еще добавить что-то типа проверки - если размер новых банков меньше или равен старым банкам - то писать в оригинальные места в роме, тем самым можно сохранить место. ну и так-же может быть дополнительные инструкции по чтению и записи адресов в случае как с Бэтменом и потом еще к нему в други напросился Cliffhanger - там тоже вместо полного адреса только последние три буквы... ой... последние два байта. и база адресов будет не полная. начал вписывать по алфавиту... умаялся, плюнул, стал добавлять только более менее игры на слуху.

Добавлено позже:
и да, Мортал Комбат 3, WWF Arcade как то там, Zero Tolerance, Flashback - вносить не буду. потому что там нужен будет отдельный подход по типу как для ZT менеджер звука. то есть когда спецэффекты растут из другого места, хотя казалось бы GEMS... МК3 и рестлинг - там двухбанковый метод. здесь же только один банк можно ковырять. так-же Toy Story по моему два.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2328
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Multi Game GEMS Database GUI

очередной мой мегаглючныйшедевр, в котором предполагается возможность редактировать GEMS банки для большинства GEMS игр.

1. создаем папку проекта
2. копируем туда программу
3. копируем тогда оригинальный ром игры
4. запускаем программу, указываем путь до эмулятора, после указываем путь до рома, жмем load. еще наверное не мешало бы нажать кнопку обновления online update addresses database.
5. если я добавлял игру в онлайн датабазу - она все сама найдет и распакует.
6. если все хорошо - появится список справа с номерами 000, 001, 002... это ячейки внутри GEMS банков. берем и переносим какие нужны мелодии или спецэффекты из других игр, предварительно скачав их из списка по кнопке.
7. когда все мелодии и спецэффекты выбраны, то можно собирать ром путем тыркания кнопки с джойстиком и руками. если до этого был указан путь до эмулятора, и если ром соберется без ошибок - то сразу же запустится в эмуляторе для тестов. называться ром будет что-то там  RomMod или что-то такое. появится рядом с оригинальным ромом, рядом с программой. после можно переименовать... ("сохранить как" не доделал. хотя надо бы наверное. или просто чтоб копировал имя оригинала и дописывал в конец "mod". может потом... когданить.)

В: это касается больше оригиналов, но я уже сделал мегаромхак, мне просто нужны другие звуки...
О: так ты возьми оригинал, проделай все операции, протестируй что все работает, а после открой папку GEMS, промотай в конец папки и там будут 4 файла - это банки GEMS, с уже новыми мелодиями. добавляй их в свой ромхак и будет тебе щасье. адреса, куда вписывать новые адреса - будут в окошках внизу программы. правда в твоем ромхаке эти адреса могут съехать куда-то... со сборщиками игр как-то проще. там просто банки указаны в asm файле и оно само знает куда чего записать.


в целом занимательно вышло :) уже вижу что можно было бы Battletech доперевести. поймать лицо женской национальности и заставить все фразы записать :) как я с ZT делал в качестве эксперимента. а то графика то есть русская, а озвучка ПиПиСи... аутоканон... дэнжер! овер хитинг! печаль... толи дело: жарко мне, Василий!... забил снаряд я в пушку туго!... Ракету мне, ракету!
правда возможно там будут проблемы с очередностью вызовов сэмплов. как в ZT было - что в оригинале шотган коллектед. но нам такое не подходит. дробовик найден? но благо там в другом месте порядок редактировался и это место известно и там изменялся порядок и длительности - красота. в Battletech где такое - я не знаю. я ж не ромхакер. эти вызовы видимо в другом месте. но может итак сойдет.

если какую оригинальную GEMS игру не ловит - пишите. добавлю. если сам найду. предварительно проверять а GEMS'овая ли та игра, которую хочется поромхачить - можно здесь: https://segaretro.org/GEMS