Разработка и ромхакинг > Ромхакинг
Поиск карт уровней и музыки в играх
(1/1)
DrMefistO:
Возник тут вопрос (точнее два):
какой есть приблизительный план при поиске карт уровней (PLANE MAPPINGS) в играх (меня интересует SMD)?
Игра мне попалась такая, что использует во всю практически все возможные для SMD алгоритмы сжатия (Kosinski (текст), Nemesis (графика) - 100%, возможно Enigma - для карт уровней, и Saxman - для музыки), поэтому данные карты будут пожаты с вероятностью 90%. Возможно, так же есть какой-то продуманный план при поиске банков музыки (SOUND BANKS)?
Ведь вы как-то пишете редакторы уровней для Чипа и Дейла, Beyond Zero Tolerance и т.д.
Smoke:
Я нашел карты в BZT тупо просматривая дизасмнутый код. Да и не сжаты они там, так что сложностей не возникало
DrMefistO:
Ну а как отличить данные для карт, и данные для, к примеру, чего-то еще?
Smoke:
Ну блин, заполнить всяким мусором и запустить посмотреть, что получится :)
Ti_:
--- Цитата: DrMefistO от 16 Июля 2012, 15:47:25 ---какой есть приблизительный план при поиске карт уровней
--- Конец цитаты ---
Вначале найти номер уровень в памяти, далее поставить на него брейкпоинт в дебагере эмулятора перед началом уровня. Далее запускаем уровень, т.к. будет много обращений(от 1 до 10-15) к нему составляем список адресов в rom. Среди всех должен попасться тот который отвечает за чтение номера уровня и далее определение по номеру уровня нужной графики, конфигов, карт тайлов и прочее. Поскольку часто ссылки на ресурсы уровня для smd в 4байта, то номер уровня умножается на 4 (move.w (lelel_id),d0 ; lsl.w #2,d0; но может быть просто указан и номер соответсвующего архива, а анпакер уже сам высчитает адрес.
Самый удобный способ проверить за что отвечало данное обращение, подменить в этом месте (например введя код через game-genie, сменив тем самым уровень с 0 (1-ого ) на 1(2-ой). Тогда например загрузится графика 2-ого уровня а не 1-ого. (Счет почти всегда с 0-ого идёт.)
(Пример вместо lsl.w #2,d0, впишем moveq #4,d0 (т.к. 1*4=4 ; adress:7004)
Добавлено позже:
--- Цитата: DrMefistO от 16 Июля 2012, 19:18:48 ---Ну а как отличить данные для карт, и данные для, к примеру, чего-то еще?
--- Конец цитаты ---
На smd используй эмуль+скрипт от r57shell к IDA. Надо пробежатся по большей части игры (например скачать прохождение), тогда он(эмулятор) составит карту памяти, где проходило чтение кода. А потом через скрипт дизасмнется в ida. На Nes есть FceuX там тоже составляется карта из кода +данных, но куда ее потом загружать не знаю. (зато там показывает % отделенного )
Добавлено позже:
--- Цитата: DrMefistO от 16 Июля 2012, 19:18:48 ---Ну а как отличить данные для карт, и данные для, к примеру, чего-то еще?
--- Конец цитаты ---
Если данные от данных? Ну если сжатые то никак. Только методом тыка.
Если не сжатые то некоторые можно и на глаз определить. Карты тайлов например. Просто надо знать как они выглядят. Несжатаю графику определять не надо т.к. есть тайл-эдиторы.
Что касается конфигов каких-то объектов уровней, то для каждой игры они уникальны и могут быть по своему построены. Ну иногда там например бывает много нулей. Или небольших цифр (<10). Поэтому в WinHex справа они отображаются в виде точек.
Добавлено позже:
--- Цитата: DrMefistO от 16 Июля 2012, 15:47:25 ---Возможно, так же есть какой-то продуманный план при поиске банков музыки (SOUND BANKS)?
--- Конец цитаты ---
Ну для начала можно узнать имя используемого звукового движка.
Segaman:
карты тайлов можно найти например в оперативе и отследить их загрузку.
тоже самое можно делать и с самим уровнем, если нашлось место, где генерируется слой уровня.
можно тупо бряк на запись постваить и проверить откуда читались данные для заполнения слоя.
обычно тайлы в памяти могут иметь вид такой:
номер палитры*2000+перевертывание*800+приоритет*400+номер тайла
номера палитры от 0 до 3х
перевертывание от 0 до 3х
приоритет от 0 до 1
номер тайла от 0 до 3FF
обычно в играх первая палитра под игрока и интерфейс отведена, так что скорей всего палитра не будет 0вой и тайловый слой найти будет просто.
тайлы могут повторятся как и палитры. пример:
--- Код: ---2201,2201,2201,2201
2201,2201,2201,2201
2201,2201,2201,2201
2201,2201,2201,2201
--- Конец кода ---
вот блок 32*32 заполненный тайлом $201 со второй палитрой (точнее с 1вой, считаем же с нуля :D)
Smoke:
--- Цитата: DrMefistO ---Возможно, так же есть какой-то продуманный план при поиске банков музыки (SOUND BANKS)?
--- Конец цитаты ---
http://emu-russia.net/ru/articles/common/rom-music-rip/
Посмотри это
Навигация
Перейти к полной версии