Lua скрипт для эмулятора FCEUX
ROM Glitcher: Instruction Inverter
Инструмент для казуального поиска глитчей
Идея Глитчера:
perfect_Беларус. Реализация скрипта:
pav13
ROM Glitcher: II — внешний скрипт для эмулятора FCEUX (NES/Famicom/Dendy), позволяющий находить и активировать скрытые возможности игр, менять логику их поведение и открывать "секретный" контент.
Вместо ручного перебора кода на ассемблере Glitcher делает это автоматически: ищет потенциальные "точки интереса", проверяет их корректность и даёт возможность переключать эффекты прямо во время игры.
Пригодится

:
- ROM-хакерам и исследователям игр.
- Любителям "фанового" геймплея.
- Тем, кто хочет обойтись без ассемблера, HEX-редакторов и сложных отладчиков, но при этом находить чит-эффекты и секреты.
Поддержка FCEUX 2.2.3+
Языки интерфейса: английский, русский, испанский, португальский, немецкий и итальянский.
Доступные опкоды: AND_EOR, BCC_BCS, BEQ_BNE, BPL_BMI, BVC_BVS, CLC_SEC, CLD_SED, CLI_SEI, INX_DEX, INY_DEY, PHA_PLA, PHP_PLP, ROL_ROR, TAX_TXA, TAY_TYA, TSX_TXS
Все изменения в памяти эмулятора, на диск ничего не пишется и ROM файл не изменяется.
Все загрузки/перезагрузки происходят автоматически, переключаться между окнами не надо. Есть возможность сохранить модифицированный ROM.
Как пользоваться:
- Запустить эмулятор
- Загрузить ROM игры
- File -> Load Lua Script
- Выбрать файл скрипта
- Нажать Start
- Следовать подсказкам в консоли
Управление и другие параметры можно изменить в файле
rom-glitcher-FCEUX-config.cfg (создаётся после первого запуска).
В процессе сбора информации .... если есть чем поделиться - пишите.
Для NES характерно, что многие баги и моды (бессмертие, бесконечные прыжки, игнорирование коллизий) находятся через изменение условных переходов (BEQ/BNE, BCC/BCS, BPL/BMI) и операций с флагами (CLC/SEC, CLI/SEI). Логические операции AND/EOR часто отвечают за маскирование битов (например, инвентарь или бонусы).
1: Условные переходы (B-команды)| Команда | Применение в играх |
| BEQ / BNE | Бессмертие, открытие дверей/уровней, окончание уровня, подбор предметов, сравнение с нулём (таймеры, жизни). Самые частые для хаков. |
| BCC / BCS | Столкновения (коллизии), проход сквозь стены, границы экрана, переносы при сложении (Carry). |
| BPL / BMI | Направление движения (влево/вправо, вверх/вниз), проверка знака (например, отрицательная скорость при прыжке или падении), состояние флагов статуса. |
| BVC / BVS | Редко, но может встречаться в физике или графических эффектах, связанных с переполнением (overflow) при сложении/вычитании. |
2: Работа с флагами процессора| Команда | Применение в играх |
| CLC / SEC | Подготовка к сложению/вычитанию (CLC перед ADC, SEC перед SBC), искусственное изменение переноса для создания багов (например, бесконечные предметы, неправильный счёт). |
| CLI / SEI | Разрешение/запрещение прерываний. Используется в загрузчиках, музыке, многозадачных трюках. Реже — в читерских кодах для стабилизации или вызова эффектов. |
| CLD / SED | Десятичный режим (BCD). В NES используется крайне редко (в основном в играх с японской локализацией). SED может включать странную арифметику. |
3: Пересылки между регистрами (T-команды)| Команда | Применение в играх |
| TAX / TXA | Копирование аккумулятора в X или обратно. Часто встречается в циклах, скроллинге, обработке спрайтов. |
| TAY / TYA | Копирование аккумулятора в Y или обратно. Используется в таблицах данных, косвенной адресации. |
| TSX / TXS | Работа со стеком (указатель стека). TSX читает состояние стека, TXS меняет его. Используется в защите от копирования и редких модах (сдвиг стека). |
4: Инкременты / декременты и ротации| Команда | Применение в играх |
| INX / DEX | Счётчики циклов, таймеры, перебор объектов, позиция в массиве данных. DEX — основа для задержек и анимаций. |
| INY / DEY | Аналогично X, но чаще для работы с графическими данными (намалками, атрибутами) или указателями в нулевой странице. |
| ROL / ROR | Сдвиг с переносом. Используется для умножения/деления на 2, работы с многобайтными числами, псевдослучайных чисел, эффектов мерцания. |
5: Логические операции и стек| Команда | Применение в играх |
| AND / EOR | Маскирование битов (AND — убрать лишнее, EOR — инвертировать). Часто в коллизиях, цветах, защите от дублирования предметов, переключении режимов. |
| PHA / PLA | Сохранение и восстановление аккумулятора в стеке. Нужно во временном хранении значений внутри сложных подпрограмм. |
| PHP / PLP | Сохранение/восстановление регистра статуса (флагов). Используется в прерываниях (NMI, IRQ) и при возврате из подпрограмм с изменёнными флагами. |
0.3.1 (20.04.2026)
+ добавлены языки интерфейса: español, português brasileiro, deutsch, italiano.
+ добавлены инструкции для инвертирования: AND_EOR, CLC_SEC, CLD_SED, CLI_SEI, INX_DEX, INY_DEY, PHA_PLA, PHP_PLP, ROL_ROR, TAX_TXA, TAY_TYA, TSX_TXS
0.3.0
+ внешний файл локализации интерфейса
+ выбор языка при первом запуске
0.2.2
* багфиксы
0.2.1
+ больше информации в режиме отладки
* рефакторинг кода
0.2.0
* совместимость с 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
- сохранение настроек
- полноценное консольное меню
«Я не учитель. Я просто помогаю тебе изучать глитчи.»