Автор Тема: Поиск карт уровней и музыки в играх  (Прочитано 3427 раз)

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Возник тут вопрос (точнее два):
какой есть приблизительный план при поиске карт уровней (PLANE MAPPINGS) в играх (меня интересует SMD)?
Игра мне попалась такая, что использует во всю практически все возможные для SMD алгоритмы сжатия (Kosinski (текст), Nemesis (графика) - 100%, возможно Enigma - для карт уровней, и Saxman - для музыки), поэтому данные карты будут пожаты с вероятностью 90%. Возможно, так же есть какой-то продуманный план при поиске банков музыки (SOUND BANKS)?

Ведь вы как-то пишете редакторы уровней для Чипа и Дейла, Beyond Zero Tolerance и т.д.

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Поиск карт уровней и музыки в играх
« Ответ #1 : 16 Июль 2012, 19:09:26 »
Я нашел карты в BZT тупо просматривая дизасмнутый код. Да и не сжаты они там, так что сложностей не возникало

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Поиск карт уровней и музыки в играх
« Ответ #2 : 16 Июль 2012, 19:18:48 »
Ну а как отличить данные для карт, и данные для, к примеру, чего-то еще?

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Поиск карт уровней и музыки в играх
« Ответ #3 : 16 Июль 2012, 19:22:48 »
Ну блин, заполнить всяким мусором и запустить посмотреть, что получится :)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Поиск карт уровней и музыки в играх
« Ответ #4 : 16 Июль 2012, 23:57:21 »
какой есть приблизительный план при поиске карт уровней
Вначале найти номер уровень в памяти, далее поставить на него брейкпоинт в дебагере эмулятора перед началом уровня. Далее запускаем уровень, т.к. будет много обращений(от 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)


Добавлено позже:
Ну а как отличить данные для карт, и данные для, к примеру, чего-то еще?
На smd используй эмуль+скрипт от r57shell к IDA.   Надо пробежатся по большей части игры (например скачать прохождение), тогда он(эмулятор) составит карту памяти, где проходило чтение кода.   А потом через скрипт дизасмнется в ida.     На Nes есть FceuX там тоже составляется карта из кода +данных, но куда ее потом загружать не знаю. (зато там показывает % отделенного  )
Добавлено позже:
Ну а как отличить данные для карт, и данные для, к примеру, чего-то еще?
Если данные от данных?  Ну если сжатые то никак. Только методом тыка.   

Если не сжатые то некоторые можно и на глаз определить.  Карты тайлов например. Просто надо знать как они выглядят.  Несжатаю графику определять не надо т.к. есть тайл-эдиторы. 
Что касается конфигов каких-то объектов уровней, то для каждой игры они уникальны и могут быть по своему построены.  Ну иногда там например бывает много нулей. Или небольших цифр (<10). Поэтому в WinHex справа они отображаются в виде точек.
Добавлено позже:
Возможно, так же есть какой-то продуманный план при поиске банков музыки (SOUND BANKS)?
Ну для начала можно узнать имя используемого звукового движка.
« Последнее редактирование: 17 Июль 2012, 00:29:50 от Ti_ »

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: Поиск карт уровней и музыки в играх
« Ответ #5 : 17 Июль 2012, 08:06:09 »
карты тайлов можно найти например в оперативе и отследить их загрузку.
тоже самое можно делать и с самим уровнем, если нашлось место, где генерируется слой уровня.
можно тупо бряк на запись постваить и проверить откуда читались данные для заполнения слоя.
обычно тайлы в памяти могут иметь вид такой:
номер палитры*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

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Поиск карт уровней и музыки в играх
« Ответ #6 : 17 Июль 2012, 20:09:56 »
Цитата: DrMefistO
Возможно, так же есть какой-то продуманный план при поиске банков музыки (SOUND BANKS)?

http://emu-russia.net/ru/articles/common/rom-music-rip/
Посмотри это