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

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


Сообщения - perfect_genius

Страницы: [1] 2 3 4 5 ... 46 Далее
1
Общий / [ALL] Большая коллекция багов в играх
« : 30 Сентябрь 2025, 19:27:39 »
Интересно, как ты смог добавить коммент без его объединения с предыдущим, но лучше обедини их и удали лишний - незачем добавлять работы Призрачному псу :biggrin:
Ты проверял и на Е и на U?

2
Общий / [ALL] Большая коллекция багов в играх
« : 30 Сентябрь 2025, 02:55:46 »
точно не повторяется баг
Проверял все регионы?
Ничего не нашёл, только такой глитч:
Если можешь, глянь прохождение на Ютюбе и подскажи время и этот одиночный блок - в будущем я поищу сам.

3
Игра весит только 2 МБ, т.е. столько же места для графики есть, если надо, чтобы запускалась на железе.

Вот программа для корректировки сетки пиксельарта за нейросетью.

4
Общий / [ALL] Большая коллекция багов в играх
« : 27 Сентябрь 2025, 01:36:28 »
Там если и есть про баги, то только к прототипам. На SegoRetro упомянут баг про перезапуск игры при взрыве нескольких мин подряд, и всё - нет упоминания бага с читом на неуязвимость. Опять таки, только игры Сеги там.

AuAurora, НЭС или Сега? На эмуляторе баг пробовал повторить?

5
Общий / [ALL] Большая коллекция багов в играх
« : 26 Сентябрь 2025, 15:51:39 »
Не могу найти нигде коллекцию багов в играх - неужели такого нет? Есть фансайты по той или иной игре, есть Son of a Glitch и ему подобные на Ютюбе, TASVideos, но нет именно систематизированного сборника в одном месте. Если нет, то давайте соберём тут.
Можете описать текстом как повторить баг, вставить видео или дать ссылку на описание багов - я выпишу их сюда.


Battletoads (NES, U)
На 11-м уровне (Clinger Winger) у второго игрока не работает управление, отчего ему остаётся только умирать



Green Beret (NES)

Rebelstar: Tactical Command (GBA)


Tiny Toon Adventures: Buster's Hidden Treasure (SMD)

6
всё это описано в этой теме
Т.е. столько найдено, а указатели на графику ускользнули? Очень уж сложная структура кода, получается. Наверно, надо искать её корраптерами типа Поганки.

Не ты ли автор
Не.

7
Почему-то сохранки в формате .srm сюда не прикрепляются.
Форум понимает только известные форматы, есть же список. Засунь в zip или rar.

Спортивные игры ЕА прям страшный кошмар для моей программы - в игре понаставлена куча проверок на всё и любые почти изменения приводят к ошибке. Больше не буду предлагать так искать их игры :lol:

В обоих играх большие массивы: 3196 элементов (FIFA 96, адрес 15aef4) и 3198 (FIFA 97, 16280a). Если копировать один элемент на другой, то в игре меняется кадр анимации или ракурс. Например, все начинают стоять спиной к экрану.
Если пройти по этим указателям, там на глаз что-то похожее на структуры, даже надписи. Т.е. просто взять и вставить один массив со всеми структурами по указателям не выйдет, надо в структурах искать указатель на саму графику.
Вроде бы это всё уже было известно?

В FIFA 96 нашёл массив с волосами - цвет и причёски. Вроде бы тоже мелькало в этой теме.

Сравнение в BCompare показывает, что игры очень похожи. Красное - несоответствие, розовое - частичные мелкие различия (обычно, тот же код, только смещения-адреса другие), а белое - полное соответствие:
298625-0

8
Открыл ром, запустил матч, сохранился и начал прогонять переставлятелем, отвечая на вопрос: "повлияло ли изменение". После кажого прохода запускал новый ром, который автосоздавался в папке с программой.
Т.е. ты сохранился прямо на экране, где модели уже видны? И каждый раз грузил это сохранение? Если так, то обычно игры распаковывают и грузят графику перед тем, как её показать. Т.е. игра во время матча уже не обращается к сделанным тобой изменениям, поэтому это было бесполезно, графика неизменно бралась из сохранения каждый раз.
Такое пользователям, далёким от программирования, никак не объяснить, конечно. Это недостаток такого способа поиска.
Попробуй сохраниться перед появлением экрана с футболистами или дай мне ссылку на игру и скажи куда заходить, как запускать. Вряд ли чем-то помогу, но вдруг.

Как ... найти функцию , активируемую кнопкой "B" и отключить её в роме FIFA96 ?
Просто не нажимать B - не вариант? Или её нажатие обязательное? По идее, достаточно сохраниться перед нажатием и каждый раз после загрузки рома и сохранения пробовать нажимать. Именно отключить может и не выйти, но нажатие кнопки может начать делать что-то другое.

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

9
Без спойлера всё норм же:

    uint64_t PRGSize = header[4] * 0x4000;
    uint64_t CHRSize = header[5] * 0x2000;
    bool isTrainer = (header[6] & 0x04) == 0x04;

    // NES 2.0
    if ((header[7] & 0x0C) == 0x08) {
        uint64_t PRGSizeHigh = header[9] & 0x0F;
        if (PRGSizeHigh != 0x0F) {
            PRGSize += (PRGSizeHigh << 8) * 0x4000;
        }
        else {
            uint8_t E = header[4] >> 2;
            if (E > 0x3D) { // >= 2 EiB (exbibyte)
                PRGSize = 0;
            }
            else {
                PRGSize = ((uint64_t)1 << E) * ((header[4] & 3) * 2 + 1);
            }
        }

        uint64_t CHRSizeHigh = (header[9] & 0xF0) >> 4;
        if (CHRSizeHigh != 0x0F) {
            CHRSize += (CHRSizeHigh << 8) * 0x2000;
        }
        else {
            uint8_t E = header[5] >> 2;
            if (E > 0x3D) { // >= 2 EiB (exbibyte)
                CHRSize = 0;
            }
            else {
                CHRSize = ((uint64_t)1 << E) * ((header[5] & 3) * 2 + 1);
            }
        }
    }

    uint64_t start_prg = 16;
    if (isTrainer) {
        start_prg += 512;
    }
    uint64_t end_prg = start_prg + PRGSize; // Не включая end_prg
    uint64_t start_chr = end_prg;
    uint64_t end_chr = start_chr + CHRSize; // Не включая end_chr

10
Sharpnull спасибо, я перекрестился и передумал добавлять поддержку NES :hi:

11
Возможно ли расширить окошко с кодом внутри спойлера до нормального размера? Приходится копировать и вставлять в текстредактор.


12
Уклонился от ответа :shifty:
Раз в одном случае "счетчики" и заглавные буквы, а в другом уже "счётчики" и строчные, то предположу, что тут смешанный опыт - твой и чужой.

Есть ли подобное описание, но для SMD?
Код есть код, как и логика, независимо от платформы. Т.е. всё это касается и SMD.

13
StrikeDJU, в BCompare удобно сравнивать файлы разного размера. Он сразу покажет вот так что где совпадает.

Вот бы найти ещё байты, которые отвечают за модели футболистов.
Вот бы была простая программа специально для поиска ресурсов игры, да?
Что-то никто не предлагает такую в этой теме уже несколько раз... ::)

14
так и на оригинал тоже надо на иконку программы кидать файл
Это написано на привычном языке, не надо знать другой :)

поиграв с ADD/SUB
Наверно знаешь, что там несколько этих + и -
SUB
SUBX
SUBA
SUBI
SUBQ

ADD
ADDX
ADDA
ADDI
ADDQ
И тоже достаточно инвертировать один бит.

15
Оказывается, он только в старой консоли, а не в новой Windows Terminal, т.е. отпадают владельцы Виндов ниже Десятки. Оригинальный Глитчер совместим со всеми Виндами, в Переставлятеле ради этого пришлось немного заморочиться.
Ты не обижайся, просто я снял с себя ответственность за возможные сюрпризы от ЫЫ.
Посмотрев твой код на меня снизошло озарение, что я забыл, что на NES код отделён от графики, а значит большая вероятность инвертировать инструкции, а не данные. Значит надо бы добавить возможность глитчить и ромы NES :thumbup:

Интересно, почему твой экзэшник не удаляется сразу после скачивания антивирусом Вин11. Получается, он ведь как-то подписан или сертифицирован. Или же нейросеть знает как писать код, не раздражающий антивирусы.

просто сделай что написано на экране
Но там ведь написано на английском. А то, что на русском - закрывает окно.

Вот стали менять протэстированный работающий код сомнительным способом, да ещё перевели на ненашский язык - отсюда и проблемы пошли :biggrin:

16
euror, у тебя ром не в архиве ли? Какое у него окончание названия?
AnyZero использовал нейросеть для добавления фич, поэтому там могут быть баги. Один там точно есть, но некритичный :)

17
Да уж, этот твой эксперимент впечатляющий. Я делаю рекурсивный дизассэмблер, по вычисляемым прыжкам будет прыгать человек - в эмуляторе. Но весь остальной пропущенный код придётся искать по твоему способу, какими-то подобными эвристиками. Даже думаю реверсить Иду, чтобы подсмотреть у неё :)
Поиск делался методом от противного: цепочка опкодов, которая НЕ приводит к явной ошибке, а например, заканчивается условным прыжком, потенциально может быть валидным кодом. Благо, в m68k очень много ограничений на валидные опкоды (включая требование к чётным адресам) и метод от противного хорошо работает.
Но а что насчёт перекрывающегося кода? Т.е. массив байт может распознаваться как один код, а если начать чуть с другого места - уже другой.
И TRAP ведь не только Landstalker может использовать.

18
А это что такое?
ROM Glitcher: Branch Inverter
версия 0.2.3  (12.09.2025) - совсем свежая
Глянь, автор же pav13. Он встроил Инвертер в эмулятор, отчего тебе надо лишь выбирать какую из двух кнопок нажать.
Глитчер - это два инструмента же: Инвертер инвертирует логику кода (Да<--->Нет), а Переставлятель даёт переставить ресурсы игры местами или множить их.

я действительно не хочу, чтобы ты тратил на это свое время
Мы остановились на том, что исправили выбивание мяча в нижней части поля. А баги верхней части собирался собрать-сохранять ты, но пропал. Если не мешает, то ок.

Подождем, пока нейросети научатся достойно реверсить.
А если до пенсии не доживёшь? :)

19
Ого, какие люди. Где пропадал полтора года?
Переставлятель не развивается, лишь поправлен неприятный баг интэрфэйса.
А что там с тем багом выпинывания мяча, который удалось исправить Инвертером?
Не выявились баги из-за этого изменения?
Будем исправлять и для верхней части поля?

20
Была ещё такая версия таблицы
В её счётчике скачиваний я давно есть :)
Но она кажется ещё сложнее. Например, что значит xxxl, Bxxx и крестики в самой таблице?

допустимые опкоды сделаны в виде таблиц с двумя масками: с AND и с OR
Т.е. как я делаю, но я наоборот для недопустимых?

pav13, крутота, то что надо! :jumpy:
Получается, надо будет поправить таблицу: сделать невалидными инструкции, отсутствующие в Сеге, а также все нечётные смещения - видимо, 16 инструкций * 128 нечётные смещения каждой = 2048 лишнего.

Все невалидные отмечены как m68k_op_illegal, но у Сеги есть официальная инструкция Illegal (0x4AFC). Интересно, как она там названа?.. Тоже m68k_op_illegal! Ну логично ;)

Вот, пример для первой таблицы.
Понятно теперь, тебе не понравились вот эти области:

Да, ужасно. У себя такое не допущу.
Есть идеи, почему в таблице названия некоторых инструкций выделены зелёным? Особенно с SR.

Sharpnull такой злой, будто мы ему спать мешаем :lol:
Сжать таблицу в биты - идея интересная. Посмотрим в будущем, получится ли в битовых масках ещё компактнее.
Тут и RLE можно применить :shifty:

21
Я, как обычно, предложу свой Переставлятель :)
Игры почти не отличаются по виду, так что может быть и внутри тоже. Можно попытаться найти Переставлятелем графику с футболистами и просто перенести их через хекс-редактор. Даже если не получится, проверить это не займёт много времени.

22
Если кто-то ищет секреты прямо в коде игры, то подкину идейку. На Сеге возможно перекрытие кода, т.е. код прыгает на середину инструкции и с этого места массив байтов начинает распознаваться как другой код. Автор игры постарался с защитой своего творения, а значит мог и в коде так поразвлекаться :biggrin:

23
paul_met, ты взорвал мне мозг :lol:
Цитата
В заголовке таблицы не помешало бы пронумеровать биты
Потому что ты отправляешь в функцию номер бита, а не отсеиваешь по битовой маске? Или зачем?

Цитата
добавить вертикальные полоски
Но ведь они там есть, через 4 бита, или ты про что? :unsure:

Цитата
чтобы сразу было видно какой бит какое значение принимает
Снова - они же уже обозначены нулями и единицами :debile:

Короче, если не лень, накалякай в Пэйнте простой набросок что ты предлагаешь.
Обновил, переделал вот так:

298693-0

т.к. нули и единицы мельтешат, разницу было углядеть сложно. +добавил ещё линию, делящую на 4 бита к концу инструкции, чтобы лучше различать полубайты.

24
SeregaZ, ты же сам пробовал - понравилось? m68k и x86-64 - самые сложные наборы инструкций, легко допустить ошибки при создании дизассэмблера и займёт много времени. Подключать существующие - может много весить, производительность может быть не очень, и баги. Встречал тэсты, где дизассэмблеры не всегда правильно определяют некорректные инструкции, даже мой любимый Capstone (авторам которых я и сам отправлял ошибки).
Хотя, как помню, у тебя было даже проще - ты разбирал уже разобранный код.

DrMefistO, я рассматривал такой вариант, но, как описал выше, не доверяю им в плане некорректных инструкций - обычно они все направлены на корректные. И даже если он будет без ошибок, то боюсь не справиться с фильтрами и допустить ошибку, если он выдаст огромную портянку всех вариантов.
Exodus направлен на отладку и разработку, поэтому ему доверяю больше. Тут он оказался даже точнее BlastEm, хотя это 2017-ый и второй мог догнать уже.

+я хочу привести вот эту таблицу в человеческий вид, а то глазам больно :)

297812-0

25
Только Motorola 68000, т.е. Sega Mega Drive/CD/Saturn, Neo Geo, Atari Jaguar

Иногда может понадобиться определить, является ли некий массив байтов инструкцией m68k, но подключать дизассэмблер или писать свой - не вариант. И может быть достаточно определить обратное - что эти байты не являются инструкцией, что проще

Для дизассэмблирования использую эмулятор Exodus

0000 0000 0.11 11..
0000 0000 11.. ....
0000 0000 0000 1...

0000 ...1 ..11 11** (кроме 00)

0100 1110 0111 1...
0100 1110 0111 0100

1010 .... .... ....

0111 ...1 .... ....

1111 .... .... ....


Список пополняется
Прошу накидать мне сюда или в личку, если у вас есть свои

26
Как тебе такое, Илон Ма SeregaZ? :)
Твой бедный SSD не насилуется, всё делается в памяти, как ты и хотел.
+всё автоматизировано до предела, буквально надо выбирать из трёх кнопок аки подопытная обезьяна :biggrin:

нужен эмулятор в виде дллки, чтобы подключать его к своим проектам и чтобы он работал с образом памяти, дабы не гадить на жестком диске

27
AnyZero, для тех, кто не играл в игру - пушек стало две, да? А урон тоже удвоился?

28
Новая версия Инвертера: исправлены баги интэрфэйса, уменьшено время поиска, добавлены дополнительные проверки при поиске кандидатов в инструкции ("инструкция не может указывать внутрь себя"), из-за чего отброшены сотни ложных инструкций:
версии первая и последняя (-"инструкции")
SoR1       3838    3804   (-34)
SoR2       13680  13274 (-406)
Contra     9271    9195   (-76)
MK3        18103  17637 (-466)
UMK3      14919  14627 (-292)
Robocop  9674    9268   (-406)

Попробовал Глитчер от pav13, встроенный в эмулятор, и это очень круто, когда эмулятор делает половину работы, а тебе надо лишь выбирать пункт :thumbup:
Поиск происходит ещё быстрее. Надеюсь, форк примут в основной код и такой поиск встанет рядом со стандартным поиском значений в памяти.

29
Chaotix, получается, если дело только в звуке, то теоретически игру можно переделать под Сега Сиди, чтобы не требовался особый эмулятор, так?

30
Похоже, нужен конструктор, чтобы каждый мог собрать свою версию игры :)
Или такой уже есть?

Страницы: [1] 2 3 4 5 ... 46 Далее