Android emulator 如何从模拟(SNES)游戏中获取指标?

Android emulator 如何从模拟(SNES)游戏中获取指标?,android-emulator,emulation,Android Emulator,Emulation,我的目标是使用Android仿真器(如Snes9x EX+)模拟游戏(如超级炸弹),并在玩游戏时捕获游戏指标(如分数和级别) 我假设我需要修改开源仿真器和/或修改ROM来实现这一点,但我需要一些关于最佳方法的指导。谢谢 要回答“如何从模拟(SNES)游戏中获取指标?”您需要首先回答“在SNES游戏中哪里可以找到指标?”。后者的答案是“这取决于游戏。” 想想GameShark代码,它们将值写入内存的特定位置 它可以不断地将一个值写入内存位置。比如说,为了让你的生活永远充满了《凡人快拍》 它可以只

我的目标是使用Android仿真器(如Snes9x EX+)模拟游戏(如超级炸弹),并在玩游戏时捕获游戏指标(如分数和级别)

我假设我需要修改开源仿真器和/或修改ROM来实现这一点,但我需要一些关于最佳方法的指导。谢谢

要回答“如何从模拟(SNES)游戏中获取指标?”您需要首先回答“在SNES游戏中哪里可以找到指标?”。后者的答案是“这取决于游戏。”

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

  • 它可以不断地将一个值写入内存位置。比如说,为了让你的生活永远充满了《凡人快拍》
  • 它可以只向内存位置写入一次值。如果你想跳到日落骑士的最后一级
但是,他们如何知道应该写入哪个记忆位置呢?这是一个很难回答的问题。通常可以归结为对ROM进行反向工程。您创建一个映射,该映射的内存位置对应于您正在寻找的每个度量

假设你想在超级马里奥世界中找到你目前的分数和等级。一个可能的解决方案是不断扫描RAM内存,寻找已知值并创建匹配图

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

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

唯一能确保100%的方法是通过反向工程的ROM,这样你就知道游戏去哪里取任何显示在屏幕上的东西

现在要回答您最初的问题“如何从模拟(SNES)游戏中捕获指标?”您必须首先找出这些指标在每个游戏ROM中的位置,并且一旦您知道,您只需要构建一个模拟器来侦听这些内存位置中的修改,以便捕获这些指标


您可以找到许多专门用于反向工程ROM的网站。我建议你看看你的工作

谢谢你提供的所有有用信息!