第85章

Millenium 游戏存档文件

“Millenium Return to Earth”是一款很老的DOS游戏(1991),你可以挖掘矿产资源,修建船只,在其他星球上装备它们等等。

就像其他游戏一样,你可以将游戏状态存入一个文件中。

咱们来看看能不能找到点什么。

下面这是游戏中的一处矿井。有些星球的矿井工作更快,也有工作慢的。资源的设置也不同。来看看现在底下埋的是什么样的资源:

第85章 - 图1

我保存了游戏状态。存档文件大小为9538字节。

我在游戏中等了“几天”,现在我们可以从矿井中得到更多的资源:

第85章 - 图2

我再次保存了游戏状态。

下面我们使用简单的DOS/Windows FC 工具来比较二进制存档文件。

  1. FC /b 2200save.i.v1 2200SAVE.I.V2
  2. Comparing files 2200save.i.v1 and 2200SAVE.I.V2
  3. 00000016: 0D 04
  4. 00000017: 03 04
  5. 0000001C: 1F 1E
  6. 00000146: 27 3B
  7. 00000BDA: 0E 16
  8. 00000BDC: 66 9B
  9. 00000BDE: 0E 16
  10. 00000BE0: 0E 16
  11. 00000BE6: DB 4C
  12. 00000BE7: 00 01
  13. 00000BE8: 99 E8
  14. 00000BEC: A1 F3
  15. 00000BEE: 83 C7
  16. 00000BFB: A8 28
  17. 00000BFD: 98 18
  18. 00000BFF: A8 28
  19. 00000C01: A8 28
  20. 00000C07: D8 58
  21. 00000C09: E4 A4
  22. 00000C0D: 38 B8
  23. 00000C0F: E8 68
  24. ...

这里的输出并不完整,有许多不同之处,我截取了结果来展示最有趣的部分。

在第一个状态中,我有14个单位的氢气,102个单位的氧气。在第二个状态中则分别是22和155个单位。如果这些值保存到了存档文件中,我们会看到差异。的确如此,较老存档的0XBDA处的值为0x0E(14),而在新存档中则变成了0x16(22)。这可能是氢气。同样,老存档的0XBDC处的值为0x66(102),新存档中值变为0x9B(155)。这看上去是氧气。我将两个文件都放在我的网站上,想要自己实验了解更多信息的请戳这里:beginners.re

下面是在Hiew中显示的新存档文件,我将游戏中与资源相关的值标记了出来:

第85章 - 图3

我检查后确认它们是16-bit值,不是16-bit DOS软件中什么奇怪的东西,16-bit的DOS软件int类型为16比特。

下面来验证咱们的假设吧。我在第一个位置(氢气的位置)写入1234(0x4D2):

第85章 - 图4

然后我加载这个已改变的文件到游戏中,查看矿井的数据:

第85章 - 图5

这就对了。

现在我们尝试让这个游戏更快结束,把值设为最大:

第85章 - 图6

0xFFFF就是65536,现在我们拥有了许多资源:

第85章 - 图7

我在游戏中跳过了“几天”,结果有些资源变少了:

第85章 - 图8

溢出发生了。游戏开发者可能没考虑到会出现这么多的资源的情况,没有设置溢出检查,但游戏中的矿井仍然在工作,资源在增加,所以导致了溢出。我想我不应该那么贪婪。

可能大量的数值都保存在了这个文件中。

这就是非常简单的游戏欺骗方法。高分文件可以通过这样打补丁轻松得到。

更多关于文件和内存快照的比对:63.4 第681页