【问题标题】:Crack C64 game with sprite collision用精灵碰撞破解 C64 游戏
【发布时间】:2019-08-08 06:26:55
【问题描述】:

我正在尝试破解一款名为“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

我还能检查什么?谢谢!

【问题讨论】:

  • 嗯,我想知道这是不是这里的主题,或者在Retrocomputing上更好。
  • 如果碰撞导致变量发生变化,例如健康、生命、积分,请尝试搜索这些变量之一,然后搜索引用这些变量之一的代码。如果计算此类变量的地址,这可能是个问题。
  • @NickWestgate: 或者reverseengineering.stackexchange.com,但是对于在 6502 等旧处理器上破解旧游戏来说,逆向计算可能是更好的选择。
  • @NickWestgate 这里是主题,因为它是关于编程的。这个问题是否在另一个网站上是主题无关紧要。这里没有规定要求问题与足够现代的技术有关,逆向工程问题也不是题外话
  • 您是在模拟器中运行它吗?如果是,请尝试从 VIC2 冲突寄存器中读取数据(例如,Vice 控制台中的break load $d01e $d01f

标签: assembly sprite reverse-engineering 6502


【解决方案1】:

如果我正在编写一个大量使用 VIC2 的游戏(我想所有游戏都这样做),我会考虑将 VIC2 的基地址存储在某处,然后使用索引寻址访问其中的寄存器。因此,您可以查找在某个位置存储基地址(或 VIC2 范围内的任何地址)的任何代码。任何此类代码都必须首先在某些时候执行LDA #$D0(或LDXLDY)。

要检查的另一件事是您的程序是否与中断例程混淆。 VIC2 可以编程为在检测到精灵冲突时引发中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多