| Разработка и ромхакинг > Ромхакинг и программирование |
| NES Block Finder |
| (1/1) |
| spiiin:
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 разных играх, находит блоки в каждой, в которой они есть :cool: Может, кому пригодится. |
| grenuar:
Привет. Подскажи что требуется программе для нормального запуска (ошибка на скрине). Заранее спасибо. |
| Roket:
spiiin, аналогично, пару раз запустилась, затем перестала и стала вылетать. Ну и антивирус ругается ещё. |
| spiiin:
Да ничего ей не надо, всё зависимости в exe-файл включены. Пересобрал так, чтобы она ошибки в консоль писала при запуске. grenuar попробуй перекачать архив и запустить из командной строки, она в неё ошибку напишет, из-за чего не запускается у тебя, я тогда диагностировать проблема смогу. Второй вариант - установить Python 2.7 и запускать скрипт NesBlockFinder.py вот отсюда https://github.com/spiiin/NesBlockFinder |
| Guyver(X.B.M.):
Установить питон?!?!?! Ну уж нафиг! :lol: |
| grenuar:
--- Цитата: spiiin от 30 Июль 2016, 15:32:21 ---Да ничего ей не надо, всё зависимости в exe-файл включены. Пересобрал так, чтобы она ошибки в консоль писала при запуске. grenuar попробуй перекачать архив и запустить из командной строки, она в неё ошибку напишет, из-за чего не запускается у тебя, я тогда диагностировать проблема смогу. Второй вариант - установить Python 2.7 и запускать скрипт NesBlockFinder.py вот отсюда https://github.com/spiiin/NesBlockFinder --- Конец цитаты --- Спасибо. Помог второй вариант. Скрин ошибки во вложении. |
| spiiin:
grenuar спасибо за помощь. Проблема в инсталляторе была, он не допаковал библиотеку туда. Исправил архив в первом посте, теперь должно запускаться без проблем. Guyver(X.B.M.) Ну запускай из exe, разницы никакой :lol: , это я на случай Roket'а, который вирусов боится, исходники дал. |
| Guyver(X.B.M.):
Дык я бы скачал и запустил ;о) Но с моей скоростью это около часа. Уже 3 раза ты заменяешь файл в топике - и я ни разу не успел его докачать полностью ещё, максимум до 80% докачивал ;о))) |
| Roket:
spiiin, Ну теперь не ругается но и не работает. Вылетает с консольной ошибкой. |
| grenuar:
--- Цитата: Roket от 30 Июль 2016, 15:57:52 ---spiiin, Ну теперь не ругается но и не работает. Вылетает с консольной ошибкой. --- Конец цитаты --- Распакуй архив в корень диска С и переименуй папку NesBlockFinder в NBF. У меня заработало только после такой манипуляции. |
| Guyver(X.B.M.):
Программа работает. Но не даёт вводить цифры нормально в поля Max range и Min range, Числа вводятся новые, но стереть нельзя. Т.е. стирание вообще не работает и цифра просто прибавляется к уже существующим. Кое-как можно менять цифры, выделив нужную. А если выделить 2 цифры - новая вставится левее них, а эти 2 так и останутся... Короче, надо что-то делать... P.S. Какая ужасная среда разработки. Куча файлов. Жесть... Проще на делфи 1 файл забабахать, который и весить будет много меньше... |
| spiiin:
Там защита ввода такая, в любой момент в полях должно быть число от 1 до 256, неудобно немного. Эти числа менять и не надо зачастую, там хорошие значения и так стоят. Если надо - могу убрать проверки, не вопрос. Насчёт среды разработки - вопрос идеологический. Программа - по сути, скрипт на питоне, запакованный в exe для ленивых, отсюда и размер - там всё что надо из питона. Проще один раз его установить - и тогда вес программы целиком - 20 кб всего ;) на дельфи с формами побольше будет. По сути - если с какими-то играми работать не будет, пишите, попробую понять почему. Из проверенных мной программа "не берёт" Micro Mashines (находит несколько областей, в которых меняются какие-то участки трассы, не очень похожие на блоки), и Jurassic Park (вообще ничего не находит, не знаю почему). |
| Guyver(X.B.M.):
Я начинал с мелких игр, типа Натс энд Милк. Там нашлось, правда формат там хранения весёлый. Пробовал несколько других мелких, штук 5 - не нашёл ничего. Ну это понятно, в мелких играх там всё пожато-пережато-оптимизировано. Из крупных Amagon нашлось вроде что-то, но формат там странный тоже. Блоки травы нашлись. Твоё ограничение на ввод не работает. К примеру стоит 64 в поле. Я хочу поставить 70, выделяю 64 - набиваю на клаве 70 и в итоге получаю 064 Выделяю ещё раз и пишу 0 - получаю 0064 В итоге можно добиться числа вроде 0004829464 - и его НИКАК нельзя стереть... |
| spiiin:
--- Цитата ---Я хочу поставить 70, выделяю 64 - набиваю на клаве 70 и в итоге получаю 064 Выделяю ещё раз и пишу 0 - получаю 0064 --- Конец цитаты --- Это корректные числа, нули можно добавлять и стирать. --- Цитата ---В итоге можно добиться числа вроде 0004829464 --- Конец цитаты --- Поподробнее, в какой момент некорректное получается? жму 0,0,4,8,2,9,4 - нули проходят фильтр, остальные не проходят. |
| spiiin:
Обновил программу, добавил новые виды поиска: Search 1x1 blocks - искать блоки размером 1x1 (тайлы). Такой метод позволяет обнаружить описание сцен, в которых не используюстя блоки (полноэкранные заставки, глобальные карты, кат-сцены). Данный метод позволяет искать в том числе и сжатые различными способами карты. Обнаружил, что такой метод работает в нескольких играх, случайно. Search attributes - позволяет находить аттрибуты (биты палитры) блоков. Работает в играх с блоками размером 4x4, а также в некоторых других. Для работы программы в системе должен быть установлен интерпретатор Python. Проще не запускать exe, а запускать из исходников https://github.com/spiiin/NesBlockFinder |
| Навигация |
| Главная страница сообщений |