命令与征服将军预购探究
众所周知,在资源随意分享的年代,找到个将军镜像就很不错了,因而很少会有玩家在意游玩的将军购买的方式,更别说还有预购奖励。所以本帖旨在略微介绍一下将军的预购到底有什么不同。
在开始之前,我要感谢伤痕无数所提供的实体版的图片和实体CD镜像,没有他的支持本帖将缺少实物图和CD内容图片。
首先呢,当年的游戏基本都是实体的版本,所以理所应当的,预购奖励也是实体的。下面所展示的东西就是预购奖励:一个白信封,上面写了奖励的内容。

我们可以清楚的看到预购包含了一个改变游戏内艺术的神秘代码,科技树卡片,多人地图战略卡片和包含三阵营监视图(实际上就是介绍三阵营)的CD。神秘代码的事情最后说明,因为这部分是整个探究的重要地方 。其它实物图也许有人已经在别的什么地方见过相片了,CD内容也许也有人从别处获得过镜像了,但是神秘代码相关的内容,我目前还是有自信我要介绍的内容算是首发的 。
科技树卡片和多人地图战略卡片,似乎将军最后发售的零售版都包含,所以大致放一下图片就行了。




然后就是CD内容了。CD盒是长这个样子的


光碟的内容就是简简单单的各种介绍和草图,顺便吐槽一下这东西是真一股廉价的味儿,竟然用flash做的……

下面就是重点内容了:剩下还有一张卡片,上面详细写了预购有哪些奖励,也具体提到了神秘代码和兑换的步骤。

这张卡片交代了如果去兑换神秘代码的话,需要访问generals.ea.com/officersclub网站。介于EALA倒闭十几年了,这个网站肯定现在是不再能够访问的。不过好在有Wayback Machine这么个网站,它包含了许多网站的历史备份,因此我们也可以查阅到当年的网站大概是什么个样子。

那么,这个页面也就详细介绍了你的神秘代码能够解锁的游戏内艺术资产:一个奖章,显示在角色页面和自定义比赛时你的名字旁边,以及一个旗子,在你的指挥中心。
到这里我们也就能够明白了这个神秘代码奖励了什么东西了。同时页面也清楚地写明了想要兑换的话就得通过这个网页进行,因此由网站的介绍合理推测可得:这个奖励机制最后是在服务器端通过绑定序列号来绑定你的预购奖励资格。那么问题随之也显而易见:现在服务器关闭十几年了,该如何重现当年预购奖励解锁的东西呢?
这个时候别无他法,只能挖掘游戏本身来获取答案了。通过我对主程序(game.dat)的调试,我发现了点线索:虽然整个绑定和验证过程都发生在服务器,但是游戏是否启用这些预购奖励仅仅是通过服务器发送的数据来进行控制。
那么接下来就需要弄明白需要接收什么样的数据才能让游戏认定我们有预购奖励的资格。很幸运的是,进行判断的字符串是明码的,很轻易就能从游戏里找出来:(本图所展示的game.dat为将军原版1.8版本)

从图里就可以看出来,游戏最后会判断所接收的数据是否包含 “\preorder\1”字符串,如果包含这个字符串,就会标记[esp+0x1A4]处为1,即代表启用预购奖励模块,否则标记为0,即不启用。
所以核心的部分也就清晰且明白了。剩下没讲的完整过程就大致讲一下:在登录在线账号之后,游戏会向服务器发送数据,然后会接收服务器那边的返回数据。当然这个时候的数据并非是明码的,还需要进行一个转换,然后会被送到上图的地方进行判断,如果有\preorder\1字符串,则开启预购奖励内容,否则不开启。
现在我们也就能够明白了,预购奖励的确是通过服务器进行控制的。但是新的问题又来了:是不是我要想看到这个奖励内容,就必须得登录在线吗?现在服务器早没了,我又不想用第三方服务器,那是不是也没办法在单机的时候显示了?幸运的是,答案并不是这样。
在进行上述判断之后,游戏并不是什么都不做,而是会向系统内写入一条注册表:

注意到名字为Preorder的项了么,在确认获得了资格之后,游戏会向这个路径里写下名为Preorder,类型为REG_DWORD,值为1的注册表,来记录你的资格。(此路径为64位系统下的路径,若是32位系统则路径中间没有WOW6432Node)。此后,如果你不手动删除这个注册表,那么即使你不再登录在线服务器,你也能在遭遇战里面看到你的勋章,以及在游戏内看到你的旗子。


所以总结下来,如果你想看到预购奖励的话,只需要添加一个注册表项即可,实际上还是挺简单的。
当然,如果你想看看在线服务器上什么样子的话,可以配合cnc-online,以及修改上面所展示的判断条件,即可自娱自乐地看见了 (毕竟cnc-online不会给别的玩家发送你有预购的信息,别人的游戏又没被修改)效果图大概是这样的:


以上差不多就是将军预购的所有内容了,实际上比起后面作品的预购奖励确实逊色了点,而且我才不说我是为了最后的醋包的饺子(
顺便,绝命时刻也残留相关的代码,但是我并不推荐启用,因为在绝命时刻下勋章的展示有显示上的bug,效果并不理想。
最后,Good luck, general.