如何从模拟(SNES)游戏中捕获指标?

时间:2016-12-16 18:56:21

标签: android-emulator emulation

我的目标是使用Android模拟器(例如,Snes9x EX +)模拟游戏(例如,Super Bombliss)并在游戏进行时捕捉游戏指标(例如,得分和等级)。

我假设我需要修改开源模拟器和/或修改ROM​​来执行此操作,但我需要一些关于最佳方法的指导。谢谢!

1 个答案:

答案 0 :(得分:1)

回答"如何从模拟(SNES)游戏中捕捉指标?"你需要先回答"我在哪里可以找到SNES游戏中的指标?"。后者的答案是"这取决于游戏。"

想想GameShark代码,他们会将值写入内存的特定位置。

  • 它可以不断地将值写入记忆位置。例如,为了让你的生命吧永远满满的真人快打。
  • 它只能将值写入内存位置一次。如果你想跳到Sunset Riders的最后一级。

但他们如何知道应该写入哪个内存位置?这是一个难题。通常它归结为逆向工程ROM。您可以创建一个映射,其中的内存位置与您要查找的每个指标相对应。

我们假设您想要在超级马里奥世界找到您当前的分数和当前水平。一种可能的解决方案是不断扫描RAM内存,寻找已知值并创建匹配图。

知道您的分数是321,您可以转储RAM并查找包含321的内存位置。如果只有一个匹配,则很可能是记忆位置指示您的分数。如果你有更多的比赛,你应该保留所有比赛的列表,并继续比赛,直到你的分数改变。如果现在更改为567,则从上一个列表中检查是否有任何内存位置现在保持值567.

例如,对于阶段级别6-3,并不总是直截了当。你应该分别在内存中查看6和3吗?如果游戏只将一个变量存储在一个表示为BCD 63的变量中,那该怎么办呢?那么你就必须寻找完全不同的东西。

确保100%的唯一方法是对ROM进行逆向工程,这样你就可以知道游戏在哪里获取屏幕上显示的内容。

现在回答你原来的问题"如何从模拟(SNES)游戏中捕捉指标?"你必须首先弄清楚这些指标在每个游戏ROM中的位置,一旦你知道你只需要构建一个模拟器来监听这些内存位置的修改,这样你就可以捕获这些指标。

您可以找到许多专门用于逆向工程ROM的网站。我建议你看一下http://www.romhacking.net/所做的工作。