ForestForest

风云之天下会:跟 AI 一起修复一个 1998 年的游戏

7 min read

上篇文章里我说过,要去找风云之天下会来玩。

说到做到。


下载容易,打开难

风云之天下会,1998 年的游戏,Steam 上没有。要玩的话,你只能去游民星空、3DM 这些地方下载。

下载倒是很顺利。但打开以后——黑屏,弹个错误框,退出。干脆利落,一秒钟都不给你多等。

意料之中。一个 Windows 95/98 时代的游戏,在 Windows 11 上能直接跑起来才见鬼了。网上翻了一圈评论,Windows 10 和 11 上基本都不能玩。

有些下载资源会附带一个"游戏启动器",本质上是个 wrapper,把游戏包在里面模拟以前的运行环境。听起来很贴心,但这东西你敢用吗?Windows Defender 直接把它标红了。评论区里一半人在说"终于能玩了",另一半人在说"打开以后电脑中毒了"。这个赔率,我不太想赌。

要么冒险用别人的东西,要么自己动手。

我选了后者。


让 AI 来当侦探

我跟 Claude 说了情况:一个 1998 年的 Windows 游戏,在 Windows 11 上跑不起来,你帮我看看怎么回事。

它倒是不含糊,上来就给游戏做了个"尸检"——PE 分析。

PE 是 Windows 可执行文件的格式。分析 PE 头,就像拆开一台机器看里面的零件清单:这个程序什么年代造的、用了什么技术、依赖哪些系统组件,一目了然。

结果出来了,病历写得挺详细:

  • 32 位程序,Borland Delphi 编译,目标系统 Windows 95
  • 图形用的是 DirectDraw,8 位调色板模式,256 色,640×480
  • 视频播放用的是 MCI(比 DirectShow 还老的多媒体接口)
  • 背景音乐走的是 CD 音轨——但现在的电脑哪还有光驱?

四个问题。每一个在现代 Windows 上都是致命的。难怪一打开就黑屏——这游戏身上插着四根管子,管子那头连的设备全被拔掉了。


风云之天下会修复架构:游戏通过三个兼容层连接到 Windows 11

三刀下去

修复过程说起来简单,做起来折腾。总结下来是三刀:

第一刀:砍掉视频和 CD 音乐。 游戏启动时要播放一段 MPG 开场视频,还要打开 CD 驱动器放背景音乐。这两样在 Windows 11 上都会报错,游戏直接挂掉。解决方案是写一个 winmm.dll 代理——游戏调用多媒体接口的时候,我们的代理把请求拦下来,假装"播放成功了",实际上什么都没干。视频直接跳过,CD 音乐假装一直在放。游戏被骗得很开心,继续往下走。

第二刀:修复画面。 DirectDraw 的 8 位调色板模式,256 色,放到 2026 年来看简直是上古技术。Windows 11 对它的支持已经严重退化,不装兼容层的话,画面就是一堆花花绿绿的条纹,像电视机没信号。AI 帮我试了三个方案——dgVoodoo2 画面最好但会崩溃(游戏有个 bug,会缓存已释放的内存指针),cnc-ddraw 菜单显示不全,最后用 DDrawCompat 才搞定。这东西好就好在它不做 API 转译,而是直接修补 Windows 自身的兼容性问题。放进去就能用,不需要配置。

第三刀:解决中文乱码。 打开游戏,满屏的 ÎÞ´æµµ¼Ç¼,看着像加密电报。其实就是编码问题——游戏用的是 GBK,但我系统区域设置是英文。改成中文简体,重启,乱码变回了汉字。

三刀下去,游戏活了。


跟 AI 协作的真实体验

说起来很流畅,实际过程远没有这么顺利。

AI 最大的优点是——它什么都知道一点。PE 分析、DLL 代理、stdcall 调用约定、DirectDraw 的 surface 机制、MCI 的设备类型……这些东西我以前完全不懂,但 AI 不仅懂,还能帮你写代码、编译、调试。你说"我要拦截 winmm.dll 的 MCI 调用",它立刻就能给你一个能编译的代理 DLL 源码。这种感觉有点像你突然多了一个什么都会一点的朋友,随叫随到。

但这个朋友有个毛病:它太急了。

有好几次,遇到一个错误,它不去查根本原因,上来就开始"试着改改看"。改了一通,问题没解决,代码反而变得更乱了。你得拍桌子打断它:停,先搞清楚 root cause 在哪,再动手。这跟带新人其实差不多——能力是有的,但需要有人把方向盘抢过来。

另一个更头疼的问题是对话变长以后,它会迷路。 前面讨论过的结论,后面它可能就忘了,又绕回老路上去。我用了好几次 rewind——回滚到某个正确的节点,重新出发。你得学会在合适的时候"存档",就像打游戏一样。讽刺的是,我在修游戏的过程中,用了打游戏的技巧。

踩坑的过程倒是挺有意思的。比如编译出来的代理 DLL,一开始只导出了 6 个函数——我们觉得够了。结果 AMD 显卡驱动也依赖 winmm.dll 里的其他函数,找不到就崩溃。最后不得不把全部 192 个导出函数都做了转发。还有 CDAudio 的处理——一开始对所有设备都立即返回"播放完成",结果游戏像个强迫症患者一样不断重新播放,陷入死循环。后来才想明白:视频要"播完就走",CD 音乐得"假装一直在放"。这些细节 AI 第一次想不到,但你指出来以后,它改得很快。

整个过程花了不少时间。来来回回,反反复复。但最终游戏跑起来了——画面正常,中文正常,鼠标键盘正常。


以前我会怎么做

说实话,修复一个 1998 年的老游戏,从实用角度看没什么意义。我又不会天天玩它。

但我一直在想的一件事是:如果没有 AI,我会怎么做?

答案很简单——我不会做。

PE 分析、DLL 代理、编译 32 位 Windows DLL,这些东西对我来说就是另一个世界的语言。我会去搜索引擎上找现成的修复包,下载下来,祈祷里面没有病毒,然后双击运行。如果运气好,游戏能玩。如果运气不好,电脑多了几个你从没见过的进程。这就是以前的模式——你只能在别人已经铺好的路上走,没有路的地方你就过不去。

现在不一样了。这次修复过程中,我最大的感受不是"AI 好厉害",而是我居然在跟一个东西讨论 stdcall 调用约定和 MCI 设备类型。 一个礼拜前我连这些名词都没听过。我并没有真正"学会"这些技术——让我从头写一个 DLL 代理我还是写不出来。但我能跟 AI 一起,把问题拆开,一块一块地解决。这种感觉很奇怪,像是你突然能看懂一种外语,但还不会说。

也许这就是这个时代的工作方式:你不需要什么都会,但你需要知道该问什么问题。


写在最后

前天买了地下城守护者,打开一看,马赛克大得像 Minecraft。

今天修好了风云之天下会,打开一看——当然了,以今天的标准来看,画面肯定是粗糙的。但那些招式的特效,步惊云的排云掌、聂风的风神腿,在 1998 年绝对是顶级水准。我甚至觉得某些招式的演出放到最终幻想 8 旁边也不怯场。有些东西确实经得住时间。

不过话说回来,最让我满意的不是游戏本身,而是这次修复的过程。以前碰到这种事,我只能去找别人打包好的东西,里面有没有病毒全看运气。现在至少多了一个选项——自己动手,虽然过程曲折,但干净。

接下来准备把这套修复思路做成一个更通用的东西。如果能做到扔进去一个老游戏的 exe,自动诊断、自动配置兼容层,那就有意思了。

先放着。等下一个想玩的老游戏出现的时候,再试。

Share this article

Comments

0/2000