Разработка и ромхакинг > Ромхакинг
[Дэнди/NES/SMD] ROM glitcher - сделай себе хак не зная ромхакинг
SeregaZ:
напрямую писать в эмуль было бы лучше. ничего с собой дополнительно носить не надо. типа мой редактор мог бы не создавая файл на жестком диске сразу в эмуль отправлять. с рам-эмулятор-дисками это надо устанавливать софт дополнительно. в 2025 это такое себе. хотелось бы чтоб в одном флаконе все-же было. пока поставил какой-то ImDisk Virtual Disk Driver. пока полет нормальный. но это костыльное решение все-же. большие буквы этож надо шифт жмакать. но в своей теме по программированию я жмакаю :) это в других темах без.
Беларус учит русский:
Новая версия Инвертра:
-поддержка Юникода - теперь в названии рома могут быть русские буквы, иероглифы или вообще всякие смайлики
-можно закидывать ром прямо в окно консоли. Вин7 в этом случае не поддерживает ромы с Юникодом в имени рома, а Вин11 - всякие смайлы и прочую экзотику, поэтому в этих случаях придётса закидывать ром на иконку програмы
-привязка к эмулятру - теперь не надо переключатса на окно эмулятра вручную - только обратно в програму. Надо будет переназначить кнопки переоткрытия рома и загрузки сохранения на F-клавишы
-автообновление програмы - теперь не надо отключать антивирус перед скачиванием новой версии, скачивать архив с ненужным исходником, заменять старую версию новой и потом удалять архив
Sharpnull:
--- Цитата: Беларус учит русский от 28 Ноябрь 2025, 04:43:31 ---Вин11 - всякие смайлы и прочую экзотику
--- Конец цитаты ---
Как я понял, _getwch() игнорирует символы из 4 байтов. С _cgetws_s() работает, но путь отображается в консоли и нужно нажать Enter после перетаскивания, я проверил этот код в Win10:
--- Код: ---wchar_t buffer[1024] = { };
size_t result;
_cgetws_s(buffer, 1024, &result);
std::wstring путь_до_файла;
путь_до_файла.append(buffer);
--- Конец кода ---
Беларус учит русский:
Всяких get'ов - куча, а штобы не приходилось нажимать Enter после ввода - только _getch() и _getwch(), потому и выбраны они.
И почему тот же самый _getwch() работает по-разному на разных ОС?
Поэтому верю нейросети, которая упорно твердит, што это именно отличие самих ОС:
--- Цитата ---Windows 7 и более старые версии: Консоль по умолчанию работала с кодовыми страницами (OEM-кодировка, например, CP866 для русского). При перетаскивании файла с путем, содержащим Unicode-символы (кириллица, эмодзи, китайские иероглифы и т.д.), система пыталась преобразовать этот путь в текущую кодовую страницу. Если символов не было в этой кодовой странице, они заменялись на знаки вопроса ? или искажались.
Windows 10 (начиная с версии 1809) и Windows 11: Microsoft провела масштабную работу по модернизации консоли и добавила экспериментальную поддержку UTF-8 как на уровне консоли, так и в API. Теперь, при определенных настройках, консоль может корректно принимать и отображать пути в кодировке UTF-8.
--- Конец цитаты ---
И не такая уж это проблема - пользователей Вин7 всё меньше, а всякое странное ("zß水🍌ю" - мой тэст) использовать в имени - это полная дикость.
На крайняк можно ещё скопировать путь такого рома и вставить в консоль правой кнопкой мышы. Если эта опцыя включена в настройках, конешно.
Беларус учит русский:
А почему не Джава? Я сменил ник и ты сразу забыл нашы обсуждения? :ohmy:
Я ж изучаю С++, с чево бы мне изучать другое?
С ИИ ты ж намучился и начал больше писать код сам. У AnyZero вон сколько багов вылезло в "один клик". Вряд ли за месяц нейросети продвинулись сильно в этом плане.
Добавлено позже:
Забываю про тех, кто играет на железе. Поэтому добавил исправление контрольной суммы.
pav13:
добавь возможность указать не только f-клавиши, но и комбинацию, чтобы не переназначать в эмуляторе. пытался забиндить f12 и f11, после f11 окно консоли стало на весь экран и заблокировался ввод, кроме 1/2/3. мне стало больно и дальше не осилил.
и насчёт обновления не понял, оно заменит исполняемый файл даже если он переименован? то есть назад на предыдущую версию будет не откатиться. да и запрос бы не помешал типа "есть новая версия. обновить?"
upd:
как основной вариант развития - сделать gui. и там клавиши указывать, выводить информацию вместо консоли, путь к ром или то же перетаскивание, указать путь к эмуляторам nes и sega, "альтабится" на окно процесса по имени exe-файла, сохранение настроек в config.ini
Беларус учит русский:
Комбинацыы сделать слишком сложно (там разные сложные случаи типа "пользователь сначала нажал букву, а не модификатор"), а ещё у терминала много разных горячих клавиш, оказываетса.
Пользователю в любом случае надо найти комбинацыю для переоткрытия (это самое сложное) - там же и переназначит.
Грузить сохранение удобнее одной клавишей, и вряд ли юзер использует все F-клавишы, штобы было проблемой туда назначить.
--- Цитата: pav13 от 01 Декабрь 2025, 13:37:39 ---после f11 окно консоли стало на весь экран
--- Конец цитаты ---
Мда, неожыданно. В консоли этово нет или не всегда работает, а в терминале уже имеет высокий приоритет. Заблокировать простым способом невозможно, может быть через какие-то хаки-хуки. Поэтому трюк - при нажатии F11 просто нажымаетса снова.
Буду теперь обязательно тэстировать свои поделки в них обоих.
--- Цитата: pav13 от 01 Декабрь 2025, 13:37:39 ---заменит исполняемый файл даже если он переименован? то есть назад на предыдущую версию будет не откатиться
--- Конец цитаты ---
Да, как и везде уж? Зачем тебе старая версия? :neznayu:
--- Цитата: pav13 от 01 Декабрь 2025, 13:37:39 ---запрос бы не помешал
--- Конец цитаты ---
Какое устройство в твоей жызни так делает? Игровые приставки? :)
--- Цитата: pav13 от 01 Декабрь 2025, 13:37:39 ---как основной вариант развития
--- Конец цитаты ---
Усложнять всё - слишком легко. Гораздо интереснее всё упрощать, вот это сложно.
pav13:
Lua скрипт для эмулятора FCEUXROM Glitcher: Instruction InverterИнструмент для казуального поиска глитчей
Сайт эмулятора FCEUX
Идея Глитчера: perfect_Беларус. Реализация скрипта: pav13
ROM Glitcher: II — внешний скрипт для эмулятора FCEUX (NES/Famicom/Dendy), позволяющий находить и активировать скрытые возможности игр, менять логику их поведение и открывать "секретный" контент.
Вместо ручного перебора кода на ассемблере, Glitcher делает это автоматически: ищет потенциальные "точки интереса", проверяет их корректность и даёт игроку возможность переключать эффекты прямо во время игры.
Пригодится :thumbup::
* ROM-хакерам и исследователям игр.
* Любителям "фанового" геймплея.
* Тем, кто хочет обойтись без ассемблера, HEX-редакторов и сложных отладчиков, но при этом находить чит-эффекты и секреты.
Доступно на двух языках - русском и английском.
Поддержка FCEUX 2.2.3+.
Все изменения в памяти эмулятора, на диск ничего не пишется и ROM файл не изменяется.
Все загрузки/перезагрузки происходят автоматически, переключаться между окнами не надо. Есть возможность сохранить модифицированный ROM.
Как пользоваться:
* Запустить эмулятор
* Загрузить ROM игры
* File -> Load Lua Script
* Выбрать файл скрипта
* Нажать Start
* Следовать подсказкам в консоли
Управление и другие параметры можно изменить в файле rom-glitcher-FCEUX-config.cfg.
0.2.0 (10.12.2025)
* совместимость с FCEUX 2.2.3+ (работает менее стабильно чем с 2.6.6)
* один русскоязычный файл скрипта для Qt и не-Qt версии
* улучшение консольного интерфейса
+ добавлена возможность сохранения модифицированного ROM
+ добавлены инструкции ветвлений: BCC, BCS, BMI, BPL, BVC, BVS
+ добавлена возможность выбора групп инструкций для поиска
+ сохранение настроек в cfg-файл (можно редактировать управление и другое)
+ добавлен режим отладки с выводом в файл
- убрано определение размера ROM по заголовку NES 2.0 (временно)
0.1.2
+ добавлено определение размера ROM с NES 2.0 заголовком (пока не проверял)
* повышение совместимости
* оптимизация
0.1.1
* исправление багов
* повышение стабильности
+ возможность вернуться к шагу до локализации
0.1.0 (03.12.2025)
* первый выпуск
* поддержка BNE/BEQ инструкций
* вывод ROM адреса найденной инструкции в консоль
* один 'Шаг назад'
ни к чему не обязывающий список:
- узнать что такое nes 2.0 и добавить поддержку
- добавить инструкции счётчиков и подобного
- единый файл скрипта для разных языков
-
- добавить выбор несколько групп инструкций
- сохранение rom
- сохранение настроек
- полноценное консольное меню
--- Цитата: ... всё тот же великий человек ---«Я не учитель. Я просто помогаю тебе изучать глитчи.»
--- Конец цитаты ---
euror:
@pav13 что я делаю не так? у меня ошибка ROM Glitcher FCEUX v0.1.1
…/rom-glitcher-fceux-0.1/rom-glitcher-fceux-0.1.lua:60: attempt to call getfilename (a nil value)
Добавлено позже:
--- Цитата: pav13 от 04 Декабрь 2025, 21:02:53 ---euror, возможно старая версия эмулятора 2.2.3, я всё проверял на последней 2.6.6
--- Конец цитаты ---
пофиксил нейросеткой постоянный вызов с rom.getfilename(): , по крайне мере у меня теперь окно не вызывается постоянно с этой ошибкой :) но все равно не работает, буду дальше гонять нейронку для положительного результата.
Добавлена функция safe_get_rom_filename(), которая использует pcall для безопасного вызова rom.getfilename(). Если rom не существует или метод недоступен (например, ROM не загружена), возвращается nil без краша. Это исправляет ошибку "attempt to call field 'getfilename' (a nil value)" в строках, где вызывался этот метод (примерно строки 560 и 699 в оригинальном коде).
pav13:
обновил Lua скрипт для FCEUX
0.2.0
* совместимость с FCEUX 2.2.3+ (работает менее стабильно чем с 2.6.6)
* один русскоязычный файл скрипта для Qt и не-Qt версии
* улучшение консольного интерфейса
+ добавлена возможность сохранения модифицированного ROM
+ добавлены инструкции ветвлений: BCC, BCS, BMI, BPL, BVC, BVS
+ добавлена возможность выбора групп инструкций для поиска
+ сохранение настроек в cfg-файл (можно редактировать управление и другое)
+ добавлен режим отладки с выводом в файл
- убрано определение размера ROM по заголовку NES 2.0 (временно)
немного погрузился в изучение lua и документации fceux. конечно, это скриптовый/встраиваемый язык, но блин, какая же лафа по сравнению с си в плане синтаксиса и типов переменных.
Cyneprepou4uk:
Можно добавить поддержку CDL и игнорировать незалогированные команды, если стоит цель найти что-то конкретное, а не рандомные сюрпризы. Сэкономит кучу времени при поиске.
Пример: активировать Konami Code в Contra. Запустил логгер, запустил игру, нажал Start на титульнике, загрузил 1й уровень, остановил логгер. Прогнал ром через прогу, реверснув только залогированные команды.
Беларус учит русский:
Такая идея тоже была, но:
-народу интереснее искать што-то забавное
-усложнение процеса, определённые эмулятры
-што делать с проверкой контрольной суммы в случае с Сегой? Т.е. когда весь ром отмечаетса как данные.
Добавлено позже:
Но если Луа в FCEUX имеет доступ к CDL, и Genesis Plus GX тоже умеет логировать, то это дельное улучшение, да.
Cyneprepou4uk:
За код и данные отвечают разные биты CDL.
Прямого доступа к CDL нет в FCEUX Lua, надо искать одноименный файл в папке с ромом.
Беларус учит русский:
--- Цитата: Cyneprepou4uk от 15 Декабрь 2025, 12:20:27 ---За код и данные отвечают разные биты CDL.
--- Конец цитаты ---
Функцыя игры читает весь ром, логер весь ром из-за этого помечает как данные - разве нет? Или потом новые доступы обновляют, перезаписывает метку "данные"?
Cyneprepou4uk:
Ну помечает весь ром как данные, и что) это же не пометка выполненного кода. В FCEUX биты кода и данных CDL ставятся независимо друг от друга. Насчет Gens я хз.
pav13:
--- Цитата: Cyneprepou4uk от 15 Декабрь 2025, 00:44:02 ---Можно добавить поддержку CDL и игнорировать незалогированные команды, если стоит цель найти что-то конкретное, а не рандомные сюрпризы.
--- Конец цитаты ---
будет ли такой поиск более эффективным - однозначно да, но будет ли практичным - тут уже вопрос.
когда переглючиваются случайные инструкции в rom, то пользователю "достаётся" лишь часть из них на каждом шаге и это не так сильно ломает игру.
если обрабатывать только задействованные инструкции, то придётся буквально по несколько штук менять, чтобы игра хоть как-то "ворочалась".
опять же как ведут себя данные CDL и являются ли они частью savestate? потому как весь процесс завязан на loadstate.
--- Цитата: Cyneprepou4uk от 15 Декабрь 2025, 00:44:02 ---Сэкономит кучу времени при поиске.
--- Конец цитаты ---
после добавления Глитчера в эмуляторы с этим проблем нет, каждый шаг это одно нажатие и доли секунды занимает.
Беларус учит русский:
Тоже так думал, но штобы можно было выбирать двух одинаковых персонажей в Hard Corps - это всё ещё очень долго, чуть более 100 шагов, вот тут это сильно помогло бы.
При этом в поиске этого игра почти всё время сломанная, хуже вряд ли будет :)
--- Цитата: pav13 от 16 Декабрь 2025, 21:53:17 ---как ведут себя данные CDL и являются ли они частью savestate?
--- Конец цитаты ---
Просто отбираютса инструкцыы по нему и всё, далее он не участвует и сохранки-загрузки уже не важны.
Cyneprepou4uk:
В FCEUX сейвы никаким образом не связаны с CDL. Но в Mesen для каждого сейва есть свой лог, если я правильно помню.
Навигация
Перейти к полной версии