Игра Crack C64 со столкновением спрайтов

Я пытаюсь взломать старую игру коммодоров под названием "Katz und maus". Я уже реализовал бесконечные жизни, переписал баллы и на полпути к реализации скачка уровня. Я думаю, что столкновение спрайтов будет ключом к завершению прыжка уровня.

Проблема в том, что я не смог найти в коде какой-либо части, которая могла бы отвечать за столкновение спрайтов и персонажей.

Я пытался найти его с помощью эмулятора воспроизведения действий: безрезультатно.

В мониторе MC я искал D01E и D01F, но все совпадения были вызваны кодами операций:

H 0000 FFFF 1E D0

H 0000 FFFF 1F D0

Я также пытался искать LDA $D01E и LDA $D01F, но безрезультатно:

H 0000 FFFF AD 1E D0

H 0000 FFFF AD 1F D0

Что еще я могу проверить? Спасибо!


person Paxi    schedule 08.08.2019    source источник
comment
Хм, интересно, это здесь по теме или лучше на Retrocomputing.   -  person Nick Westgate    schedule 08.08.2019
comment
Если столкновения приводят к изменению переменных, таких как здоровье, жизни, очки, попробуйте найти одну из этих переменных, а затем найдите код, который ссылается на одну из этих переменных. Это может быть проблемой, если вычисляются адреса таких переменных.   -  person rcgldr    schedule 08.08.2019
comment
@NickWestgate: или, может быть, на reverseengineering.stackexchange.com, но да, ретрокомпьютинг может быть лучшим выбором для взлома старых игр на старых процессорах, таких как 6502. .   -  person Peter Cordes    schedule 08.08.2019
comment
@PeterCordes, да, я думаю, что знание платформы является ключевым и сосредоточено на ретрокомпьютинге. Я могу отладить современное ядро ​​или взломать/взломать игру Apple II, но я не мог ответить на этот вопрос C64 без большого исследования.   -  person Nick Westgate    schedule 08.08.2019
comment
@NickWestgate Это здесь по теме, потому что речь идет о программировании. Является ли вопрос по теме на другом сайте, не имеет значения. Здесь нет правила, требующего, чтобы вопросы касались достаточно современных технологий, а также вопросы обратного проектирования не по теме.   -  person Ross Ridge    schedule 08.08.2019
comment
Вы запускаете его в эмуляторе? Если да, попробуйте прервать чтение из регистров коллизий VIC2 (например, break load $d01e $d01f в консоли Vice)   -  person Cactus    schedule 10.08.2019
comment
Да, я пытаюсь запустить его на vice и ccs64. Я попробовал ваше предложение, но, к сожалению, это не помогло. Я также попытался найти строки, в которых хранится базовый адрес, как рекомендовал @JeremyP, но я нашел только некоторый код, который запускается каждый раз (поэтому не запускается каким-либо событием), который выглядит следующим образом: LDA $D010 AND #$01 CMP #$01 BEQ $A2BA LDA $8996 SEC ... Я думаю, что они не использовали аппаратное столкновение, потому что он будет распознан эмулятором картриджа воспроизведения действий. Может быть, они использовали программную коллизию?   -  person Paxi    schedule 10.08.2019
comment
Формы, которые кажутся спрайтами, на самом деле могут быть символами, определенными пользователем, или программист может использовать информацию о координатах, а не систему VIC для обнаружения столкновений. – Найдено по ссылке . Я предполагаю, что информация о координатах имеет место.   -  person Paxi    schedule 11.08.2019


Ответы (1)


Если бы я писал игру, которая интенсивно использовала VIC2 (полагаю, все игры так делают), я бы подумал о том, чтобы где-нибудь сохранить базовый адрес VIC2, а затем получить доступ к его регистрам, используя индексированную адресацию. Таким образом, вы можете искать любой код, который хранит базовый адрес (или любой адрес в диапазоне VIC2) в определенном месте. Любой такой код должен сначала выполнить LDA #$D0 в какой-то момент (или LDX или LDY).

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

person JeremyP    schedule 08.08.2019