NESBlockFinderПрограмма для автоматического поиска адресов блоков в любых NES-играх.
Способ использования:
1. Запускаем ROM в эмуляторе Fceux, загружаем уровень, в котором нужно найти блоки.
2. Открываем окно Debug->Hex Editor... и в меню выбираем File->Dump to file->PPU Memory, появляется окна сохранения файла.
3. Сохраняем дамп в файл, например dump.bin.
4. Запускаем программу NESBlockFinder.exe, в поле ROM File выбираем ROM с игрой, а в поле PPU dump выбираем сохранённый файл dump.bin.
5. Отмечаем галочками необходимые методы поиска блоков (можно оставить выбранные по умолчанию пункты, они подходят для большинства игр).
6. Жмём кнопку Run и изучаем результаты поиска.
Пример результата поиска:
Search 2x2 blocks, left-right #выбранный метод поиска
C0B3 (11 blocks around) #наиболее вероятный адрес расположения блоков для уровня в ROM. В скобках показано количество найденных блоков по этому адресу
[4, 11, 17, 23, 42, 48, 56, 62, 64, 69, 74] #список найденных блоков
C283 (11 blocks around) #следующий вероятный адрес расположения блоков
[4, 11, 17, 23, 42, 48, 58, 62, 64, 69, 74]
C285 (11 blocks around)
[3, 4, 11, 17, 39, 42, 48, 62, 64, 69, 74]
7. Открываем ROM в hex-редакторе, переходим по найденному адресу и пробуем изменить несколько байт в нём. Дальше открываем изменённый ROM в эмуляторе и проверяем, изменились ли блоки на уровне.
8. Если с первого раза не получилось, и блоки в игре не изменились, можно попробовать взять следующий адрес из списка обнаруженных программой и попробовать изменить данные в этому адресу.
9. Если выбранные методы не дают результата (находится слишком мало блоков или они не находятся совсем), нужно попробовать включить все возможные галочки, в частности, включить метод Search block parts with stride range, и перезапустить поиск.
На практике, если было найдено >10 блоков, практически гарантированно, вы обнаружили область в ROM, в которой хранятся блоки.
Описание способов поиска блоков:Search 2x2 blocks - искать блоки размером 2x2
Search 4x4 blocks - искать блоки размером 4x4
Search 2x4/4x2 blocks - искать блоки размером 4x2 и 2x4 (используются редко)
Left-right block search - искать блоки, в которых описание тайлов хранится слева-направо сверху-вниз.
Top-down block search - искать блок, в которых описание тайлов хранится сверху-вниз слева-направо.
Search block parts with stride 255 - искать блоки размером 2x2, в которых 1-е четв хранятся в массиве из 256 элементов, затем хранятся 2-е четвертинки блоков, затем 3-и и 4-и четверти. Распространённый случай.
Search block parts with stride range - аналогично предыдущему методу, но поиск выполняется в массивах любой указанной длины.
Эти методы поиска покрывают практически все возможные способы хранения информации о блоках в играх. Проверял на 50 разных играх, находит блоки в каждой, в которой они есть
Может, кому пригодится.