Разработка и ромхакинг > Ромхакинг и программирование
[NES] Chip & Dale 2 BFS by CaH4e3
(1/4) > >>
CaH4e3:
Итак, выкладываю полные сорсы рекомпилируемого дизасма игры Chip & Dale 2 для NES. Движок реверснут только по верхам, в основном внимание концентрировалось на читаемость и возможность перекомпиляции скриптов, на которых описаны все игровые объекты на уровнях, включая мини-игры. Код полностью перемещаемый, большая часть индексов (спрайты, музыка, словарь сообщений) перемещаемы (но со спрайтами я бы был поосторожней)...

https://github.com/g0me3/bfs_nes_cd2

Под катом все видосики самого процесса от начала и до конца.

Тизер для привлечения внимания
Первая часть
Вторая часть
Третья часть
Четвертая часть
Пятая часть
Шестая часть
Седьмая часть
Восьмая часть
Девятая часть
Десятая часть
Одиннадцатая часть
Финальная часть.
CaH4e3:
Новая часть будет доступна тут, как только загрузится
s1nka:
CaH4e3, Всегда знал, что ты бот и даже как робот разговариваешь. Спасибо за видео. Посмотрю с удовольствием.
Griever:
А ведь Contra Force тоже написана байткодами на виртуальной машине? Отсюда, видимо, и тормоза. Интересно для чего, если писалась она только под NES.
CaH4e3:
парсеры в папке не означают, что все эти игры скриптовые лол. чаще всего они нужны для разбора звуковых данных, которые обычно есть скрипты.

контра форс написана на чистом асме. но тормозит она потому, что движок там считает коллизии всех объектов со всеми. потому можно разрушать части уровня, а враги могут выбивать бонусные ящики... и до кучи куски кода разбросаны по банкам, а переходы туда сюда жрут много тактов. это в разы сложнее чем любой другой движок на денди с более простыми правилами кто кого может подстрелить. ребята хотели такой себе навороченный движок. но в силу ограничений по рому и вообще у денди, не смогли его дооптимизить.
Skay:
А глаза не устают от такого синего? (вообще, откуда в far и hiew именно синий пришел, почему?  :blush:)
CaH4e3:
нортон командер йопта. всегда был синий. турбо паскаль всегда был синий. хз почему потом кто то стал рисовать другим цветом... синяя цветовая схема в иде имеется в наборе стандартных...

вот шутки шутками про детишек лол.. но ..
Skay:
CaH4e3, я знаю что было и как было. Интересно вот почему именно синий. Вырвиглазно же. У меня вот на таком глаза начинают прям вытекать.
На маленьких экранах - всегда удобнее было темный фон светлые буквы (типа черный и зеленое), на больших - sublime идеален Темная тема в MSVS тоже норм. Но вот синий , что на маленьком экране что на большом - просто выжигает глаза лол.
CaH4e3:
а мне норм.
Skay:
CaH4e3, ну значит дело привычки :).
Ну а так, выглядит все как магия. Я с обычным то кодом порой туплю больше, чем тут на видео с эсемблерным листингом %)
spiiin:
Ох, надо будет время найти посмотреть, хоть идой может нормально пользоваться наконец научусь.
Было бы круто, если бы ты аннотации писал в описании видео, что в какой части происходит (а лучше и тайминги). Понимаю, что лишняя работа, но даже полчаса видео может быть слишком много, чтобы за раз посмотреть.
Skay:

--- Цитата: spiiin от 03 Апрель 2018, 14:56:04 ---Ох, надо будет время найти посмотреть, хоть идой может нормально пользоваться наконец научусь.
--- Конец цитаты ---
там далеко не очевидно что и как с идой делать, скрипты хоткеи. Есть от Нарвахи курс для чайников. (перевод на русский не далеко ушедший от машинного перевода, лучше на английском конечно).
CaH4e3:

--- Цитата: spiiin от 03 Апрель 2018, 14:56:04 ---Ох, надо будет время найти посмотреть, хоть идой может нормально пользоваться наконец научусь.
Было бы круто, если бы ты аннотации писал в описании видео, что в какой части происходит (а лучше и тайминги). Понимаю, что лишняя работа, но даже полчаса видео может быть слишком много, чтобы за раз посмотреть.

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

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

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

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

--- Цитата ---в результате вся игра как на ладони лежит и не надо через замочную скважину путем корраптов и прочих извращений узнавать, как она работает
--- Конец цитаты ---
Для реверса мозги нужны, а коррапт можно и без них делать :lol:
CaH4e3:

--- Цитата: spiiin от 04 Апрель 2018, 20:20:24 ---Для реверса мозги нужны, а коррапт можно и без них делать :lol:

--- Конец цитаты ---
я тут один хак копнул одной игры и у меня кровь из глаз полилась. как обычно, чтобы что-то в код добавить, надо что-то удалить, а потом добавить в другое место и то, что добавлено и то, что удалено. и так по всему рому туда и обратно. там такая вермишель из переходов, что я не понимаю вообще как кто то в этом вообще разбирается. но товарищи понаписали кучу своего кода, знают формвты музыки и катсцен... вот спрашивается, мозги есть, а дизасмнуть игру целиком не могут.. или не хотят.. проще конечно вермишель вешать лол
Griever:
Минус полной пересборки - невозможность валидации.
Перепроверить, что игра не виснет ни в одном месте после добавления байта в начало РОМа займет даже больше времени, чем сам дизасм. Мувики с прохождениями обычно быстро пробегают только по основным местам игры.
Даже если игра не виснет, где гарантия, что из-за ошибки в дизасме ты не сдвинул какой-нибудь массив, используемый, скажем, в генераторе псевдослучайных чисел?
Генератор теперь читает из какого-нибудь мусора, но глазами ты это не увидишь. Так же как невозможно проверить, не изменила ли твоя пересборка поведение AI, действие/цену предметов, размер хитбокса или баланс.

С обычными хаками callback'ами таких вопросов нет.
spiiin:
Griever, вот вообще всё не так как ты написал.
1. Хороший мувик, пробегающийся по всей игре практически обеспечит валидацию. Критерий хорошего мувика простой - Code-Data Logger засекает максимальное количество данных.
2. Сделать такой мувик самому быстрее и прогнать намного быстрее, чем сделать дизасм. Тебе не нужно "обычное" прохождение, нужен заход во все места игры.
3. Отслеживать надо не зависание игры, а наличие рассинхронизации просто.
4. Даже обычное тас прохождение рассинхронизируется из-за поломки генератора случайных чисел. То же самое с балансом, поведением AI, действием/ценой предметов и размерами хитбокса - это всё приведёт к рассинхрону в мувике.
5. С обычными хаками колбеками те же вопросы возникают - если авторы используют какую-то область RAM, думаю, что игра её не использует, где гарантия, что горе-ромхакеры проверили, что игра не использует её в какой-нибудь редкой сцене?
CaH4e3:
так вот в том и заключается потребность нахождения всех возможных видов офсетов, которую я на видео озвучиваю. на денди не так сложно найти офсеты на ром. сложнее с офсетами в раму. они менее отличаются от простых констант... бывают и ошибки и недочеты, но обычно это все находится в первые же моменты тестирования и я это покажу позже. в целом же, сам полный дизасм и попутный реверс дает практически 99 процентов всех офсетов, что позволяет делать код в результате перемещаемым. т.е. это вообще считай основная цель такого дизасма. чтобы код можно было модифицировать произвольно. если делать дизасм, но бояться его где-то подвинуть, то такой дизасм бесполезен.

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

бывают вычисляемые офсеты. но их тоже можно найти, если видно, что данные пользовались, а ссылок вообще нет. повод поплотнее поисследовать код.

и на счет мувиков. после любого сдвига в игре в коде или даже иногда в данных, рассинхрон будет в любом случае. сдвиг опкодов ведет к изменению тактовки некоторых инструкций, которые зависят от перехода через страницу памяти. сдвинутый код в большинстве случаев даст рассинхрон и часто сразу... так что тестить надо руками, и двигать по частям а не все сразу. тогда зная, что лежит там где сдвинуто, можно выбрать специальный тест или знать куда пойти и во что ткнуть чтобы проверить..
SeregaZ:
зеру толеранс нам так расковыряйте. а то надо второй банк мелодий... чтоб можно было в нем изменять сэмплы, а остальной код, что после этого банка идет - не плыл.
Griever:
spiiin, 1-4 пункт подтверждаю слова Cah4e3'а. Не знал теории, но пытался прогнать TAS через пересобранную игру на GBC - почти сразу пошел рассинхрон.
5 - RAM - отдельная тема. Запороть RAM можно и при добавлении кода в дизасме. С callback'ами проще: ты нашел область, которая не изменяется в нужный тебе для хака момент времени, используешь её и, в крайнем случае, просто обнуляешь перед выходом из своей врезки.

Вот я и говорю, что кроме внимательного перечитывания полученного дизасма, 100% гарантии тебе никакой инструмент не даст.
А если у меня, например, в 'MGS: GB' 128 банков по 16 кбайт? В основном, конечно, данные, но кода хватает. Вникать в каждую строчку, как в Battle City не вариант.
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии