В общем, засел я конкретно за дизассемблер Batty. Вначале думал, что вот сейчас объединю кодовые блоки и выложу очередной вариант дизассемблера игры, потом ещё что-то, а потом ещё что-то и т.д. А в итоге продвинулся довольно серьёзно, просидев все выходные с утра до вечера. До анализа самого кода я пока ещё не добрался, но структура игры сейчас чётка видна. Графика и данные практически полностью разобраны. Для примера прикладываю все спрайты, которые есть в игре. Чтобы их получить, пришлось написать программу на Python. Это облегчило анализ таблиц графики. Есть ещё небольшой участок (его границы известны) с графикой, которая отвечает за отрисовку поля: обрамления и текстуры раунда.
В процессе разбора программы выяснилось, что в игре есть пустые спрайты. Судя по всему должна была быть анимация увеличения шарика после получения соответствующего бонуса, а также должен был быть ещё один какой-то бонус.
Встречается и мёртвый код - небольшие подпрограммы, которые нигде не вызываются.
В начале игры то, что я изначально принял за декодирование блока, оказалось инверсией спрайтов (плюс ещё какие-то манипуляции с данными). Почему автор сразу не положил графику в нужном виде, а непосредственно перед запуском инвертирует её, совсем непонятно.
Сейчас у меня есть листинг, который компилируется обратно в код на 100% совпадающий с исходным. Однако нельзя сказать, что дизассемблер полноценный, так как если изменить адрес компиляции, то игра перестаёт работать. Где-то есть таблицы и данные, которые пока не учтены.
После каждой правки исходного текста я компилирую программу и обязательно сравниваю с эталонным кодом, чтобы убедиться, что я ничего не сломал и что получаемый код полностью соответствует оригиналу. Как только я достигну момента, что больше не буду знать, что делать дальше, я обязательно выложу результат.




Ответить с цитированием