Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - perfect_genius

Страницы: Назад 1 2 3 4 [5] 6 7 8 9 ... 39 Далее
121
Ещё BlastEm нацелен на точность, лучше и на нём всё проверять. Похоже, он единственный эмулятор, где не заставке Flashback картинка и звук совпадают почти как на реальной приставке.

122
из соседней темы я узнал, что у меня есть огромная семья... что команды надо читать из четного байта.
Из этой же своей темы мог узнать:
при первой же попытке прыжка в подпрограмму проц улетит в исключение, от попытки записи 32бит значения по нечетному адресу
У Сеги код только по чётным адресам, да.

123
Т.е. один Win11 ругается на программу, созданную в другом Win11 :facepalm:
У тебя последние обновления или они заблокированы?

Что надо подправить в роме? Что-нибудь попроще, для начала. Желательно, ближе к началу.

124
антивирус сразу заорал матом и убил ее
Это забавно, учитывая, что я делаю её на Вин11, а её антивирус очень злой. У тебя какой антивирус?

Можно просто запустить её с ромом и потыкать раз 10 и больше, пока не надоест. Может быть увидите глюки, очень нужные вам. Типа, пропуск каких-то лишних заставок или другое поведение футболистов.
Или дайте ваш ром мне, гляну что вылезет.

125
ROM glitcher уже пробовали? Если что-то непонятно, то я объясню там или здесь.
Или у вас нет столько терпения и времени, чтобы изучать игру таким образом? :)

126
Yoti, тоже были мысли про износ моего SSD, но почитал, что это всё мизер в отличие от постоянных записей ОС и браузера (которая сама теперь по сложности как ОС). Иначе бы среды программирования сокращали его срок и разработчики мира заметили бы и что-то предприняли.
Если уж так страшно за износ и за скорость создания рома, то можно ведь создать рамдиск. Но SeregaZ уклоняется говорить причину, спросил его уже несколько раз. Видимо, и сам не знает зачем делает :neznayu:
Так что лучше не оффтопте тут, пожалуйста.

127
В Кеге есть Autofix Checksum же
Действительно помогло, но в нём нет перезапуска рома, только сброс консоли. Приходилось перетаскивать ром в окно эмулятора. Поищу другой.
Также похоже, что исправление контрольной суммы - не универсальное решение:
Вы проверяли ромы с красным экраном? Возможно исправление автоматически происходит. (нашёл кривой ром, автоматически не работает)

Это самописный?
Да, проверка идеи. Но что-то затянуло и выпал из жизни уже на вторую неделю ^_^ Идеи пока не кончаются, так что может что-то из этого и выйдет.



SeregaZ, спасибо, но для решения проблемы не придётся добавлять автоисправление в Глитчер, раз много эмуляторов поддерживает эту возможность.
А в чём у тебя проблема создания рома на накопителе? Всё не получается понять. Почему ты не исправляешь ром прямо в памяти эмулятора или не заливаешь его туда?

128
Там во втором байте всякие адреса и константы же, а по ссылке только случайные числа стоят, для примера. Такое как-то можно надёжно определять как инструкцию?

Тем временем, уменьшение порчи данных из-за проверки возможного адреса возможной инструкции уменьшили веселье со всякими глюками. Теперь более суровое "работает/не работает".
Сейчас побаловался со Streets of Rage 2 и он постоянно выводит красный экран. Это встроенная проверка контрольной суммы рома?
Похоже, вот и нашлась принципиальная проблема для корраптеров, раз любое повреждение рома ничего не показывает. Но нет, через сотню попыток красный экран неожиданно был побеждён и я спасся от эпилепсии. Продолжил локализовать инструкцию, пропадали всякие баги, и в итоге в конце остались примерно 6 повреждённых байтов рома, дальнейший ремонт которых снова вызывает кровавый экран. Видимо, нет одной инструкции, тут комбинация. Надо будет придумать что-то на такой случай.

Далее идея попробовать инвертировать сам алгоритм: пользователь ведь локализует нужную инструкцию, а мешающие баги всё время складируются на потом и повторно случаются много раз, забирая много времени-попыток. А что, если алгоритм будет локализовывать ещё и все такие баги по пути, чтобы их исправлять, т.е. возвращать изначальные инструкции? По идее, поиск без таких тормозящих багов будет становиться всё быстрее. Проверим.

Если уж и это не поможет открыть секретное меню в SoR1 за сотню попыток, то есть идея сделать генетический алгоритм. Такая идея возникла, когда решил перемешать список перед поиском - что, если перемешивать не только перед ним, но и во время неё? Также вспомнилась статья на Хабре, если кто не видел: Методы модификации машинного кода: «селекция» vs. «генная инженерия»

129
Да тут много чего можно улучшить, добавить всякие эвристики и т.д. Но это пока лишь проверка идеи, поэтому максимально простая реализация.
Но ведь даже если прыгнуть по адресу, то любые данные там можно принять за код, т.к. у m68k занят почти весь диапазон байта?
Поэтому вижу вариант понадёжнее - посмотреть чётность адреса. Пересилил лень и проверил... и охренел 0_0

Ultimate Mortal Kombat 3 (U)
26066 -> 14919 (отсеялось 43%)

Streets of Rage (W) (REV00)
4763 -> 3838 (отсеялось 20%)

Streets of Rage 2 (U)
21432 -> 13680 (отсеялось 37%)

X-Men 2 - Clone Wars (UE)
9860 -> 8528 (отсеялось 14%)

Вообще не ожидал, что будет затронуто столько данных :ohmy:
Спасибо, что надоумил :drinks:

130
Рандомизация списка адресов оказалась действенной, игра "ожила" и радует такими смешными глюками, что чуть смехом не разбудил спящих в такое время :rofl:
Персонажей колбасит, музыка заиграла по другому, курсор в меню взбесился и надо успеть нажать нужный тебе пункт...



А ещё надпись "Yuzo Koshiro" на заставке один раз приехала из-за экрана на своё место! Проверил японку - там тоже такого нет. Или есть?

Продолжу мучить, а потом снова попробую мучить UMK3, чтобы узнать как будут дела там с такой обновой.
Смысл перемешивания адресов есть ведь, по идее. Ведь ряд сломанных if'ов подряд в начале рома точно будут постоянно мешать запуску. А нетронутая вторая половина рома не породит разнообразие глюков.


131
Я пока ещё не дошёл до гитхабов.
Если ты про Глитчер, то кинул исходник в личку.
Если про дизасэмблер, то он пока на паузе, т.к. на паузе - создание языка программирования, на котором и делаю дизасэмблер. А язык на паузе, потому что вот отвлёкся на Глитчер. Всё сложно :lol:
Если у тебя есть идеи, как Ида находит блоки кода, недоступные через статический анализ, то можем и поработать.

132
DrMefistO, зачем? Могу дать в личку, но пока нахожу мелкие баги, т.е. код постоянно дорабатывается.
Алгоритм прост: проходит по рому по чётным байтам (Сега же) и собирает адреса байтов 0x67 и 0x66 в надежде, что это BEQ и BNE. Далее по этому массиву адресов проходит двоичным поиском - делит пополам, первый сектор инвертирует BEQ <---> BNE, опрашивает пользователя, инвертирует обратно, потом повторяет это со вторым, потом делит первый пополам, и так до конца.
Пункты:
1 - просто пропускает текущий сектор. Раз баги в секторе мешают понять есть ли в этом секторе нужная инструкция, то лучше оставить на будущее, чтобы раздробить этот сектор.
2 - в этом секторе нет нужной инструкции, удаляем его из массива.
3 - в этом секторе есть нужная инструкция, удаляем все остальные секторы.


Yoti, да, я делаю дизасэмблер для этого. Но так как до его работоспособности далековато, не выдержал вот и сделал примитивный вариант, исследовательский проект  :)
Дизасэмблер будет отличаться тем, что можно вручную инвертировать блоки кода, их условия, чтобы сразу увидеть эффект на экране, отматывать назад, пробовать поменять другие. Т.е. явно быстрее.
У тебя вообще не остались хоть какие-то записи или мысли по своим исследованиям? Было бы интересно и полезно.


Тем временем, попробовал открыть секретное меню в Streets of Rage. Игра весит ~500 килобайт, инструкций в ней нашлось ~4000.
И оказалось, что она очень хрупкая - игра почти всегда неработоспособная после порчи, постоянно убивает BlastEm.
За час и 20 минут пробежал 800 проходов и надоело, очень демотивирует  :lol:
Т.е. найти-то мог далее, но не хотелось делать 4000 проходов, как если бы просто пройтись подряд по всем найденным инструкциям.
Сейчас решил попробовать перемешать инструкции в массиве перед поиском. Может чего даст.

133
Программа редактирует ром особым образом и пользователь проверяет, появилось ли нужное ему изменение. Если не появилось, то ром восстанавливается и изменяется в другом месте. Если нужное находится, то начинается удаление лишних изменений.
Сейчас программа ищет только логику типа "включилось/выключилось", "есть/нет", "случилось/не случилось", "равно/не равно" (инструкции BEQ и BNE) и переключает их в друг друга. Т.е. вряд ли найдёт скорость, цвет, параметры, координаты и т.д. Не ищет и логику "больше/меньше".
Примеры того, что удалось сделать таким способом (в скобках - количество попыток):

Что не удалось:

Можете предложить мне свои идеи хаков для проверки.
Как видно, поиск требует не так много времени - не более 300 попыток, каждая занимает секунд 5 или меньше.
За всё время разработки я ни разу не заглянул в отладчик, т.к. мне было интересно попробовать добиться нужного принципиально только таким способом.

   Как пользоваться
—сохраняетесь перед условием, которое хотите изменить. В моём случае с секретными меню UMK3 и пунктами в опциях SoR я сохранился на предыдущем экране, чтобы код рисовал-обновлял нужный экран. Если сохраниться прямо на нужном экране, то каждый раз будет загружаться только этот сохранённый экран, без нужных дополнительных пунктов.
Если же нужное вам может появляться на экране в любой момент при определённом условии, тогда можно и сохраняться в любой момент - как только Глитчер переключит это условие, нужное появится сразу после загрузки сохранения.
—закидываете ром на иконку программы и открываете его в эмуляторе, загружаете сохранение, смотрите результат и выбираете подходящий пункт меню в Глитчере. Перезагружаете ром, перезагружаете сохранение, смотрите, выбираете пункт меню и так повторяете.
—при закрытии Глитчера ром восстанавливается до первоначального состояния, а поиск сохраняется, чтобы можно было продолжить потом. При этом отменяется последний выбранный пункт - это аналог Ctrl+Z для случая, если ошибочно нажали не ту клавишу. Т.е. достаточно перезапустить программу.
—если при поиске нашли что-то интересное, не связанное с основной целью, то есть два варианта:
1) сделать бэкап файла [поиск на паузе], чтобы искать потом;
2) выбрать пункт 3 и искать нужную инструкцию сейчас - этот пункт создаёт [поиск на паузе] сразу и даст вернуться к основному поиску, если в конце ничего не нажмёте и выйдете из программы.

   Подробнее про пункты интерфейса
1   баги мешают увидеть есть ли нужное изменение
2   баги не мешают увидеть, что нужного изменения нет
3   баги не мешают увидеть, что нужное изменение есть. Далее начинается удаление багов

   Как можно ускорить поиск

Програмка создана в Win11, VS2022 и запакована в zip без сторонних программ самой же ОС. Но, при попытке скачивания архива из интернета, Винда ругается на вирусы и удаляет файл - приходится выключать антивирус :debile: :crazy:
Как назвать такое позорище Мелкомягких приличными словами - у меня не хватает фантазии  :facepalm: :neznayu:
Если кто-то боится, то исходный код могу дать в личку

135
А почему строчные Е и Ё и Ь с Ъ отличаются друг от друга? Ограничение по высоте какое-то или просто на скорую руку нарисованы?

136
Ты уже приходишь к алгоритму дизассэмблера. Не лучше ли тебе тогда делать его? :lol:
Недавно в теме по GensIDA один чел тоже так начал писать проходчик по блокам, но бинаринка.

137
У тебя многоигровка для NES?

138
Да, блоки инструкций соединены друг с другом - блоки вызывают другие блоки и возвращаются назад, или же прыгают без возврата. Но есть и прыжки по адресу, который в регистре или памяти. Этот адрес создаётся инструкциями перед тем как прыгнуть по нему. Зачем это нужно? Например, switch примерно так работает. Есть адрес первого элемента массива адресов для прыжка (пусть этот массив начинается с 0x1234, например). В регистр записываем case (пусть это 2), умножаем его на размер адреса (2 байта) и прибавляем этот самый адрес начала массива. Вот мы получили адрес адреса в массиве (0x1238) и теперь можем прыгать по нему. Получается эффективнее, чем проходить по огромному ряду if'ов. Поправьте меня, если уже забыл детали.
Можно узнать адрес этого массива увидев, как инструкции записывают его в регистр и начинают что-то мутить с ним, а потом заканчиваются прыжком по этому регистру. Но как определить размер массива - уже непонятно, это меня и интересует в работе Иды. Видимо, надёжного варианта нет? Обычно, этот массив можно увидеть после блока с прыжком по регистру, но не всегда. Придётся реверсить Иду ^_^
В своём дебаггере я планирую сделать функцию, собирающую эти адреса. Но это уже динамический анализ, не статический. Т.е. придётся проходить игру несколько раз по разному.

139
Даже если никто не возьмётся, не теряй надежду - через полгода смогу взяться я :)

140
SeregaZ, у тебя Винда 32-х битная или 64? Вроде бы на 32 что-то не идёт или глючит.

141
Раз файл нельзя, тогда ссылку на страницу с replay-файлом.
Повторюсь - иногда людям хочется играть какой-то момент игры, но не хочется проходить до него. Тогда он качает по ссылке на TASvideos рэплэй, проигрывает его до нужного момента и останавливает, чтобы дальше играть самому. Не все знают про тот сайт. Там есть и варианты спидранов без багов, полное прохождение.
Ну или альтернатива - начать добавлять сохранения на каждый уровень.
На сайте уже есть сохранения для PS1, но это случайные места.

142
Я про сайт tasvideos.org, где выкладывают TAS-прохождения игр разных платформ. Это прохождения-спидраны, близкие к идеалу. Если ими заменить обычные прохождения на сайте, то их побить по длительности уже не получится, они будут последними. Поэтому предлагаю решить - или заменять, или же давать их как дополнительный вариант, или давать ссылку на страницу игры на том сайте.

143
Есть прохождения в виде записей нажатых кнопок (replay). Может тогда и отдельно добавлять TAS-прохождения? Т.к. часто хочется просто начать с какого-то момента или просто быстренько просмотреть всю игру.

145
А есть у кого информация или мысли почему игра вышла без кооперативного режима?

146
Ромхакинг и программирование / Скрипты
« : 14 Январь 2024, 20:07:23 »
TerMan, а я очень прошу переименовать тему в [NES] FCEUX - скрипты
Сделаешь лучше и себе, и другим.

147
Не факт ведь, что их защита легче ломается. Они её даже вместе с Денуво пихали - может подсмотрели чего :)

148
Логично - раз некому ломать Denuvo, то незачем ей платить, лучше поставить свою защиту.
Зачем ставить на старые игры? Рискованно тестировать на новых играх, пусть лучше жалуются только несколько человек, если что-то не работает как должно :)

149
"Программирование" в названии раздела связано с ромхакингом. Тема должна быть где-то в Разработка игр или Hard'n'Soft.

150
А в Гидре лучше?

Страницы: Назад 1 2 3 4 [5] 6 7 8 9 ... 39 Далее