| Разработка и ромхакинг > Ромхакинг и программирование |
| Поиск карт уровней и музыки в играх |
| (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/ Посмотри это |
| Навигация |
| Главная страница сообщений |