破解《模拟城市 2000》存档
文章摘要
这是博客 Schemescape「个人计算机回忆录」系列中的一篇(发表于 2026 年 9 月 29 日),接在作者讲 Commodore 64 的那篇之后。作者自谦说这不是什么惊心动魄的故事,但它是自己学会「磁盘上的字节」和十六进制的那一刻,记忆鲜明,值得记下来。
童年时作者家里有一台米色的 Packard Bell 386SX 台式机,配 CRT 显示器,跑 MS-DOS 5、6。作为孩子,他把电脑主要当游戏机:《大地英豪卡门·圣地亚哥》、Operation Neptune、《俄勒冈之旅》、Scorched Earth、《模拟城市 2000》等;后来想起来其实也用过教育软件,比如音乐很棒的 Dinosaur Adventure,以及 Orbits——它会在各行星的模拟重力下同时丢鸡蛋,看哪颗落得最快,在冥王星上掉下的鸡蛋甚至不会碎(作者特意提醒,那时冥王星还算行星)。他还回忆起去 Egghead Software、Electronics Boutique 逛店,软件有精美大盒装也有成摞的 3.5 英寸软盘,并感慨那时你是真正「拥有」软件,而不是像如今这样只拿到有限授权或者干脆租用。
《模拟城市 2000》是一款等距视角的城市建造游戏。他其实玩得不多,也不擅长,总是钱用完了还没建成想要的城市。后来他得知(具体怎么知道的已经想不起来,他九成确定不是自己想到的)存档就是磁盘上的文件,可以修改。方法是:记下游戏里的金额,存档,打开存档文件搜索这个数值,改大后保存,再读档。但 DOS 自带的 EDIT 只能编辑文本,于是他接触到了「十六进制编辑器」,大概是 Norton Utilities 里的 DiskEdit。理解了十六进制就是在十进制基础上加上 A 到 F、凑成 2 的幂之后,他就能找到金额并改成全 F。
这里还有个小技巧:当时他以为存档用尽量少的字节写金额,比如初始 2 万美元(十六进制 4E20)只占两个字节,改成 FFFF 最多 65535 美元;于是他读档后随便赚几块钱,再重复一遍,就能改到 FFFFFF,约 1600 万。作者后来查了别人逆向出的存档格式才知道真相:数据经过游程编码(RLE),金额其实一直是有符号 32 位整数,只是高两个字节「0000」被压缩成了「8100」(意思是把下一个字节 00 多重复一次)。童年的方法照样有效,只要你的金额里没有重复字节。
他还记得爸爸应孩子们的要求,用 C(可能是 Power C 编译器)写过一个十进制转十六进制的小程序,他在文中用标准库重写了一个几行的版本。不过在复核记忆时他发现,DiskEdit 自带进制转换器,这一节完全多余。他还附上复现提示:DiskEdit 只在 DOSBox-X 中可用,需要通过 IMGMOUNT 挂载原始磁盘镜像,因为它直接操作硬盘而不经过 DOS 文件接口。
此后他几乎在每个游戏上都试过这招,后来还找到能在游戏运行时搜索并修改内存的工具(他记得叫 Game Wizard),可以随时把血量改满,他猜 NES 的 Game Genie 也是这么工作的。他总结作弊教会了他三件事:十六进制便于显示原始字节;磁盘上的文件可以随意访问(至少在 DOS 下,现在的手机上就没这么容易了);内存和磁盘上的字节都可以修改。这点基础看似微小,却为他后来在计算机方面的成功打下底子,也让他学会「赢」了《模拟城市 2000》之后,开始想让电脑去干一件更有野心的事:做自己的游戏。
HN 评论精华
讨论规模不大(25 条左右),主要是大家各自的童年「破解」回忆,以及对作者几处说法的纠正。
纠正与补充
- duskwuff 纠正了作者对 Game Genie 的猜测:Game Genie、Action Replay 这类设备并不是修改内存里的数据,而是给卡带里的代码打补丁(最初的 NES Game Genie 最多改三个字节),通常是改掉初始化生命值的常量,或者跳过让玩家受伤、死亡的代码。
- Sohcahtoa82 对作者「不确定这游戏口碑如何」的说法哭笑不得:它大概是 90 年代公认最伟大的游戏之一。OrderlyTiamat 补充现在在 GOG 上几乎白送;Markoff 觉得「最伟大」有点夸张,但在建造策略类里确实与 Transport Tycoon、《幽浮:未知敌人》并列。
- vidarh 一眼认出截图里的十六进制是 IFF 格式(「FORM」加块类型),自嘲这说明自己老了。
- ssharp 和 Scaled、joshstrange 提起游戏内置的作弊码,如「porntipsguzzardo」和「priscilla」(后者会打开一个调试菜单,可以直接加钱),不过 joshstrange 觉得改十六进制酷得多。
同类回忆
- cestith 讲了一个很有画面感的故事:游戏发售当天,同事在商店开门前就买回办公室,三个人商量能最快做出什么,结果他写的 Perl 存档改钱脚本午饭前就发到了 Usenet 上。
- gullevek 有完全相同的经历,还顺便学到了有符号/无符号整数:钱改太多会变成负数。
- joshstrange 描述了内存修改器的经典用法:血量 100 时搜 100,掉到 95 再搜 95,反复缩小范围直到只剩一个地址。OptionOfT 回忆在《红色警戒 2》里切出游戏改钱,对比如今在《刺客信条》里要掏信用卡买货币,而且付款时还有「不可撤销」的警告。
- db48x 用老爸买的 VEdit 编辑器做十六进制编辑,曾不小心损坏了 DOS 目录项;还帮朋友把 Spacewar 退出时的「May the farce be with you!」改成了「force」。jiscariot 用扇区编辑器修改《冰城传奇 2》的角色,经常把角色变成「二重身」。brokenmachine 和 10729287 则分享了少年时靠重命名文件「破解」成人图片的糗事。
今天的孩子还有这种机会吗?
- ticulatedspline 感叹孩子们越来越难有这种「越轨」式探索:手游只能沿着轨道走,网游作弊会被封号。aaronax 举出反例:史上最畅销的游戏《我的世界》极易修改,玩家甚至在游戏里用逻辑门造出了计算机;ronsor 认为它是例外而非常态,crtasm 则指出 ModDB、GameBanana 上的 mod 社区一直很活跃。ticulatedspline 补充,他认识的这个年龄段的孩子很少有「电脑」,都在平板上玩。
- zamadatix 提醒不要美化过去:90 年代的大多数孩子也没用过 Game Genie,也不会改字节,爱不爱折腾一直是个人选择;不过那时至少没有个性化广告和内购。gxd 也认为 Steam 上大量支持 mod 的游戏和复古游戏热,会让这类探索延续下去。
- exogeny 说最失望的游戏体验之一,是发现这游戏的核心循环基本就是各类分区的比例,其余设置全是摆设;db48x 补充严格说是要平衡人口和就业,并认为 Cities: Skylines 的模拟有趣得多,但看看 CPU 需求就能明白 Maxis 为什么直到 2013 年才走这条路。