| Разработка и ромхакинг > Ромхакинг и программирование |
| о взаимозаменямости музыки GEMS в различных играх |
| (1/1) |
| SeregaZ:
в данном случае рассматривался пример Doom Sega x32 и Sonic Spinball, но по идее таким образом можно заменять музыку или спецэффекты практически в любой игре, которая использовала GEMS аудио драйвер. конечно есть исключения и дикие дебри типа МК3 с двумя наборами банков и там черт ногу сломит разобраться, но в общем и целом вполне себе можно заменять музыку. видео конечно затянуто, так как много воды и ручного ковыряния ромов, но я думаю подключить онлайновую базу к сему делу, то есть помимо самих банков с мелодиями - думаю можно будет сделать базу оригинальных адресов, то есть мест, где в оригинальных играх лежат как сами банки, так и указатели на них. таким образом процесс подмены музыки будет не столько задр... замудреным. автоматика правда зло, и вместо того, чтобы знать предмет - человек будет тыркать кнопки не думая... ну да ладно. архив с нужным софтом, использованным в видео не прилагаю - так как, повторюсь, засяду делать автоматику. и потом уже добавлю к сей теме. поэтому больше для ознакомления видео, чем полноценный гайд так сказать... |
| SeregaZ:
итак... процесс потихоньку двигается. и додвигался он пока-что до маленького затыка :) как-бы предполагается что база адресов (то есть не самих мелодий, а именно адресов, где они записаны в ром файле игры) будет онлайн... но когда это еще будет :) да и создать её еще надо. посему решил сделать автоматический поиск этого места, где записаны адреса гемс банков. затык заключается в том, что у меня к примеру есть адрес $00 00 56 DB - если искать по этому значению, то его может быть хоть 10 штук по всему рому разбросаны там да сям. хорошо, предположим я все эти адреса засуну в массив. точно так-же сделаю с остальными тремя банками. в результате у меня 4 рандомных массива с адресами. и тут, значит, вопрос на три миллиона рублей: как их крутануть в цикле - эти четыре массива - так, чтобы они нашли такое сочетание 4 адресов, которые были бы рядышком в пределах от 2 до 20 байт к примеру? это еще ладно... а ведь может быть что банков будет не 4, а 3... или того хуже - 2 банка. только инструменты и мелодии. а модуляции и сэмплы в этой игре, скажем, отсутствуют. это же капец просто :) так что вот... думаю. ежели у кого, внезапно, тоже возникнут идеи - пишите. бумага все стерпит :) обязательно почитаю и обоср... эээ... приму к сведению. |
| SeregaZ:
утро вечера мудреннее... вроде бы родил чото такое, что видимо работает :) алгоритм такой: берем игру, после из буржуйского архива берем банки от этой игры - ложим в одну папку, и копируем туда поисковик поисковик ищет адреса в роме, где лежат банки после ищет те места, по которым записаны адреса банков. и поскольку значение адреса = 4 байта - очень короткое, то подобное сочетание 4 байтов может быть в нескольких местах рома. типа графика это или еще чего. собираем все найденные предполагаемые места 4 банков гемс в 4 архива крутим цикл из 4 массивов и заполняем во временный 4 слотовый массив значения адресов банков сортируем этот 4 слотовый массив по возрастанию начинаем вычитать из 4 ячейки 3, из 3 - 2, из 2 - 1... и крутим массив до тех пор, пока значение всех вычитаний не будет от 4 до 20 примерно. как нашлось такое сочетание адресов, делаем вывод что вот она! чаша Грааля! то есть задача была найти такое место, где все 4 адреса были бы рядом. то есть в теории мы нашли место, где записаны адреса банков GEMS. конечно есть нюансы... типа если банки сэмплов и модуляций пустые. получается искать надо всего 2 адреса - мелодий и инструментов. а мест, где всего 2 значения могут быть рядом - может быть куда больше, чем 3 или 4 значения. то есть шанс что программа найдет это место неверно - довольно высоки :) |
| SeregaZ:
Юбилеееееееееей! 2 тысячное сообщение на форуме :) сей немаловажный праздник надо обозначить очередным эпическим видео. теперь это короткий видео итог тех операций, что вручную проводились в часовом видео. но на этот раз практически все автоматизировано. конечно есть еще огрехи, а я прям торопился записать видос, что даже толком не оттестировал все что наваял за эти дни :) но результатом доволеееееееееееен что капец :) прям на позитиве сейчас. напомню - не любую GEMS игру можно будет подобным образом поромхачить в плане звука. некоторые игры настолько глубоко были переработаны, что на обычной козе - стандартном драйвере - туда даже близко не подъедешь. посему этот метод замены подойдет лишь к части игр, где был самый простой драйвер. там причем следует иметь ввиду, что онлайн база расчитана была все-таки на Дюну, с её новой версией драйвера GEMS, то есть 2.8. прочие же игры - как например Zombie, которые жрут моих соседей - имеют более старую версию драйвера. которая в принципе не сильно отличается НО! более качественные сэмплы, которые 10.4k проигрывать не умеют. там максимум 7k с хвостом подойдут. но в базе то сэмплы могут быть как раз 10.4... и поэтому там нужны будут дополнительные танцы с бубном. так-же как и со сложными играми, в плане модифицированного GEMS, типа MK3, Zero Tolerance и всякие такие сложные случаи, где или пережатие сэмплов было, или два набора банков GEMS... так что нюансов еще хватает :) но все равно доволен :) |
| SeregaZ:
тем временем в процессе внесения адресов в базу вылезли и первые жертвы :) Batman Returns внезапно содержит не точный адрес, где лежат банки, то есть типа: $00027732 - а лишь последние два байта: $00007732 сия катавасия портит мне всю малину :) пришлось придумать флаг запрета на распаковку оригинальных банков. то есть Batman Returns по итогу нельзя распаковать автоматом и соответственно использовать с данной программой. вручную только и то после сборки потом править адреса допольнительно вручную. кароче печаль. |
| SeregaZ:
в принципе готово. хотя можно еще добавить что-то типа проверки - если размер новых банков меньше или равен старым банкам - то писать в оригинальные места в роме, тем самым можно сохранить место. ну и так-же может быть дополнительные инструкции по чтению и записи адресов в случае как с Бэтменом и потом еще к нему в други напросился Cliffhanger - там тоже вместо полного адреса только последние три буквы... ой... последние два байта. и база адресов будет не полная. начал вписывать по алфавиту... умаялся, плюнул, стал добавлять только более менее игры на слуху. Добавлено позже: и да, Мортал Комбат 3, WWF Arcade как то там, Zero Tolerance, Flashback - вносить не буду. потому что там нужен будет отдельный подход по типу как для ZT менеджер звука. то есть когда спецэффекты растут из другого места, хотя казалось бы GEMS... МК3 и рестлинг - там двухбанковый метод. здесь же только один банк можно ковырять. так-же Toy Story по моему два. |
| SeregaZ:
Multi Game GEMS Database GUI очередной мой мегаглючныйшедевр, в котором предполагается возможность редактировать GEMS банки для большинства GEMS игр. 1. создаем папку проекта 2. копируем туда программу 3. копируем тогда оригинальный ром игры 4. запускаем программу, указываем путь до эмулятора, после указываем путь до рома, жмем load. еще наверное не мешало бы нажать кнопку обновления online update addresses database. 5. если я добавлял игру в онлайн датабазу - она все сама найдет и распакует. если не добавлял, то понадобится архив товарища буржуя с вытащенными из ромов банками GEMS из множества игр. 5.1 переносим ром файл игры в папку AddrFinder 5.2 из архива распаковываем те банки, что нам нужны. причем чтобы буква была такая-же. типа ром оригинальный E - значит и банки из архива нужны E. 5.3 запускаем address finder. если ссылка на архив не известна, то сразу запускаем address finder - он сам предложит скачать архив из гугл доков того буржуя. качать его нужно только один раз, после просто распаковывать из него банки нужных игр. (там из-за миссклика буржуй два раза сам себя заархивировал. архив в архиве.) 5.4 этот адрес файндер все должен найти... в теории. но может и не найдет. тогда написать здесь на форуме что за игра, я добавлю в базу. после базу просто обновляем по кнопке. если нашел, то данные по этому конкретному рому он сохранит в папке с гемс базой в Моих Документах. после стоит вернуть ром игры обратно на папку выше, рядом с программой и нажать еще раз load - должно все загрузится и распаковаться. 6. если все хорошо - появится список справа с номерами 000, 001, 002... это ячейки внутри GEMS банков. берем и переносим какие нужны мелодии или спецэффекты из других игр, предварительно скачав их из списка по кнопке. нюансы: 6.1 мелодии бывают разные. если это интро, скажем, то там можно использовать мелодии с сэмплами. если это для боя, скажем, то лучше без сэмплов. сохраняя возможность проигрывания сэмплов для спецэффектов или голоса, если они используются в игре. 6.2 мелодии бывают зацикленные, а бывает нет. если это какой-то этап, и мелодия должна играть бесконечно, но мы вставили из другой игры, где мелодия играет всего 1 минуту, то следует произвести зацикливание. правой кнопкой мышки в списке и выбираем опции. там ставим play x и вводим нужный номер. если это ячейка 034 к примеру, значит так и пишем в окошке 34. то есть в конце мелодии происходит запуск самой себя и в итоге получается бесконечное проигрывание. 6.3 старые версии драйверов, типа Zombie Eat My нейборс как его там правильно, не любят сэмплы с топовым GEMS качеством 10.4к. нужно или отказаться от сэмплов, либо перекодирывать их в 7.4 или сколько-то там... я забыл... 7.3к, уточнил. узнать, что оказывается нужно ресэмплирование - можно если в итоге слышно похрипывание в игре. или еще какие инородные звуки. это скорей всего как раз эта проблема. драйвер старой версии может играть максимум 7.3, а ему 10.4 суют - естественно он будет недоволен. 6.4 некоторые игры имеют двойной набор банков GEMS - эти игры сюда не подходят. там отдельным подходом надо будет разбираться. MK3, WWF Arcade, Toy Story 6.5 некоторые игры имеют гранаты не той системы. вроде бы GEMS, но по факту там только мелодии. а спецэффекты из другого места вызываются, но тем не менее спецэффекты и инструменты лежат в банках GEMS. комбайн товарища r57shell обратно запаковывает только то, что видит, то есть то что используется в нотных листах. а если спецэффект использовался из другого места, то комбайн просто выкинет этот инструмент, но игра то будет помнить что за номером инструмента 47 лежала большая пушка... и попробует вызывать её, а там большой и толстый хер нет этой пушки. не хорошо в итоге выйдет. посему тем играм опять-таки нужен будет специальный подход. Zero Tolerance, Flashback. 6.6 некоторые игры имеют пережатые сэмплы. тут опять таки на стандартной козе не подъедешь и нужны будут танцы с бубном с дополнительной перекодировкой. типа MK3, WWF Arcade и Punisher (но это не точно) имеют DPCM. впрочем таблица кодирования там известна. можно попробывать сделать конвертер. а вот Comix Zone и Ooze имеют черт знает что. я там понятия не имею что происходит... я тупо записывал через Fusion уже распакованные 8 битные сэмплы и после добавил их в онлайн базу. но в оригинале там 4 bit ADPCM. по идее надо попробывать повтуливать в Comix Zone обычные 8 битные PCM и по моему работать будет, а вот с MK3 нужно конвертировать обязательно - так как там по всей видимости эти 4 бита не спроста - во первых экономия места, а во вторых - главное - по моему там есть возможность играть сразу два сэмпла. то есть и барабаны в мелодии в бою, и всякие кия кия во время драки. мультисэмплинг типа. стандартный GEMS такое не умеет. там только 1 сэмпл может быть. 7. когда все мелодии и спецэффекты выбраны, то можно собирать ром путем тыркания кнопки с джойстиком и руками. если до этого был указан путь до эмулятора, и если ром соберется без ошибок - то сразу же запустится в эмуляторе для тестов. называться ром будет что-то там RomMod или что-то такое. появится рядом с оригинальным ромом, рядом с программой. после можно переименовать... ("сохранить как" не доделал. хотя надо бы наверное. или просто чтоб копировал имя оригинала и дописывал в конец "mod". может потом... когданить.) В: это касается больше оригиналов, но я уже сделал мегаромхак, мне просто нужны другие звуки... О: так ты возьми оригинал, проделай все операции, протестируй что все работает, а после открой папку GEMS, промотай в конец папки и там будут 4 файла - это банки GEMS, с уже новыми мелодиями. добавляй их в свой ромхак и будет тебе щасье. адреса, куда вписывать новые адреса - будут в окошках внизу программы. правда в твоем ромхаке эти адреса могут съехать куда-то... со сборщиками игр как-то проще. там просто банки указаны в asm файле и оно само знает куда чего записать. в целом занимательно вышло :) уже вижу что можно было бы Battletech доперевести. поймать лицо женской национальности и заставить все фразы записать :) как я с ZT делал в качестве эксперимента. а то графика то есть русская, а озвучка ПиПиСи... аутоканон... дэнжер! овер хитинг! печаль... толи дело: жарко мне, Василий!... забил снаряд я в пушку туго!... Ракету мне, ракету! правда возможно там будут проблемы с очередностью вызовов сэмплов. как в ZT было - что в оригинале шотган коллектед. но нам такое не подходит. дробовик найден? но благо там в другом месте порядок редактировался и это место известно и там изменялся порядок и длительности - красота. в Battletech где такое - я не знаю. я ж не ромхакер. эти вызовы видимо в другом месте. но может итак сойдет. если какую оригинальную GEMS игру не ловит - пишите. добавлю. если сам найду. предварительно проверять а GEMS'овая ли та игра, которую хочется поромхачить - можно здесь: https://segaretro.org/GEMS |
| Навигация |
| Главная страница сообщений |