关服20年的赛车游戏,点开网页能跑120帧

关服20年的赛车游戏,点开网页能跑120帧

游戏保存WebAssembly极品飞车逆向工程WebGPU

数据源:HN + web research

凌晨三点,上千人在浏览器里通宵飙车

美东时间凌晨三点,虚拟城市湾景城(Bayview)的街道依然喧闹。一千多名玩家正开着改装赛车在街上跑。

游戏首页实时显示着三组数据:当前游玩人数、历史总玩家数以及自由漫游在线人数。一旦主服务器人数饱和,新加入的玩家需要在网页端排队等待。页面还会弹出一行提示,提醒车手不要刷新标签页,刷新就会被重置回队尾。

玩家屏幕上的这片夜景,来自 2004 年 11 月面世的《极品飞车:地下狂飙 2》。当年这款游戏在全球卖出约 1,100 万份,成为一代街头赛车游戏的标杆。

商业游戏的寿命往往由发行商决定。2006 年 8 月,发行商 EA 切断了官方联机服务器。网线拔掉之后,正版光盘迅速沦为书架上的塑料收藏品。

二十年后,爱好者搭建了名为 nfsu2.xyz 的站点。用户不需要寻找老旧安装包。他们不需要注册平台账号,更不用折腾复杂的系统兼容层。在现代浏览器里输入网址,车库大门就会在网页中央直接推开。

操作体验并没有因为网页形态而打折。游戏支持键盘、主流手柄与专业力反馈方向盘。手机玩家同样可以加入狂欢,依靠触控或陀螺仪转向,甚至能开启「保持地平线水平」模式防晕车。两端玩家共用同一套服务器,在同一片虚拟街道上相遇。

开源仓库中附带的浏览器版起始页截图 图:开源仓库中附带的浏览器版起始页截图。来源:GitHub th0mk/nfsu2-web。

不用模拟器,480万字节机器码直通网页

要在现代电脑上重温二十年前的 Windows 老游戏,传统路线往往是安装虚拟机或模拟器。玩家要四处搜寻光盘镜像,再配置复杂的虚拟显卡与 Direct3D 转换接口。即便在高端硬件上,模拟器软件翻译底层指令的开销依然巨大,很容易出现卡顿与发热。

在浏览器沙盒环境里跑全套虚拟机,性能损耗更加严峻。开发者 th0mk 开源的 nfsu2-web 项目走出了另一条技术路线。它的底层依赖开发者 Talha Müderrisoğlu 的 NFSU2Recomp 项目,核心手段是静态重编译(Static Recompilation)。

项目团队跳过了模拟硬件层。他们直接将原始游戏程序视作源代码,进行机器翻译。当年针对 32 位 x86 处理器编译的机器码,被逆向工具深度解析。这些底层指令被还原为现代 C 语言代码,随后直接编入 WebAssembly 模块。

最终生成的程序是原生为 WebAssembly 架构打造的现代应用。浏览器在执行时如同运行原生网页应用,消除了模拟器的指令翻译惩罚。

整个开源仓库保持着严格的版权边界。代码仓库中没有包含任何受保护的游戏原始代码或美术数据。

如果玩家选择自行编译部署,必须提供原版 v1.2 版本的 SPEED2.EXE 执行文件。构建脚本会严格核验该文件的大小,必须精确到 4,800,512 字节,并通过 SHA-256 哈希校验。只有合规的原始文件,才能提取出核心二进制数据完成重编译。

调用现代显卡,老古董跑出120帧

进游戏后最直观的变化是刷新率。在宽屏显示器上,游戏能够跑出最高 120 帧(fps)。这个数字放在浏览器里尤其扎眼:同一段代码二十年前要在一台装着独立显卡的 PC 上跑,如今只需要一个标签页,转向和漂移的跟手感也随之变得利落。

过场动画依然维持在 30 帧。这个设计完整保留了原作的影视分镜质感,避免了高帧率破坏原本的叙事节奏。

支撑这套图形表现的核心是现代浏览器标准 WebGPU。老旧的 Direct3D 图形调用被翻译为现代着色器指令,直接交由本地图形芯片并行计算,音频则由 Web Audio 接口负责输出。

要把二十年前的单机大作搬进网页,浏览器需要提供严肃的基础设施。游戏页面运行时必须满足三项硬性条件。标签页需要处于跨源隔离(cross-origin isolated)状态,浏览器必须开启多线程,并且系统要预留出 4 GB 共享 WebAssembly 内存。

首次进入游戏时,浏览器会在本地建立缓存。随后的加载过程被压缩到秒级。借助现代 Web 底层标准,浏览器早已演变为功能完整的应用运行环境。

浏览器版自由漫游实机画面,摄于 2026-10-21 图:浏览器版自由漫游实机画面,摄于 2026-10-21。来源:underground2online.com 收录的实机录像截图。

官方拔线20年,民间服务器点亮联机世界

很多经典单机游戏的衰落,始于官方多人服务的终止。单机模式虽然能够单人游玩,但一旦失去多人互动,整座城市就会沦为单调的空壳。EA 拔掉网线之后的二十年间,官方联机协议早已在公共视野中消失。

民间爱好者自己搭起了联机服务端,让车辆位置同步、房间匹配这些原本由官方服务器承担的工作重新跑了起来。具体实现细节项目方没有公开,但从「手机和 PC 共用同一套服务器」这一点看,同步逻辑是在服务端统一处理的。

多人世界被拆成多个实例,平衡网络负载与街道拥挤度。站点的在线计数里,主世界是 4,191,World 1 是 162,World 2 是 95,World 3 是 99。World 4 特意关掉幽灵模式,让它保持 86 这个规模,允许车辆发生真实的物理碰撞。

玩家的数据主权被重新交还到用户手中。游戏提供可选的云端存档机制。存档使用玩家自设口令进行本地加密,不依赖任何中心化账号体系。玩家可以随时导出本地备份,也可以随时清空云端存储。

语言本土化同样依靠全球 MOD 社区二十年的沉淀。KyoriAsh 贡献了涵盖中文、日文在内的 13 种语言包。TraduMix 与 MixMods 则补充了巴西葡萄牙语、波兰语和土耳其语支持。一群素未谋面的爱好者,用各自的代码和文本填补了官方撤出后的服务真空。

浏览器版车辆改装界面实机画面,摄于 2026-10-22 图:浏览器版车辆改装界面实机画面,摄于 2026-10-22。来源:underground2online.com 收录的实机录像截图。

跳过重制陷阱,代码重编译夺回游戏寿命

商业软件普遍存在人为制造的生命周期终结。当维护服务器不再产生丰厚利润,商业公司倾向于关停老旧设施。他们更愿意引导玩家等待售价不菲的复刻重制版。

过去几十年里,老游戏的数字化保存高度依赖档案馆。复杂的软硬件仿真门槛过高,往往只能停留在小众爱好者的设备里。

nfsu2.xyz 的出现提供了一种新的解法。游戏本身并没有死亡,老化的只是承载它的硬件接口和中心化服务。

借助静态重编译技术,原本深埋在光盘中的 x86 机器码被重新释放。结合 WebAssembly 和 WebGPU,它们被转化为任何终端都能运行的标准指令。官方服务器断电二十年之后,社区用开放协议重新架起了桥梁。

当重编译技术遇上现代浏览器,游戏的寿命便不再受制于商业公司的服务器账单。那些跨越二十年的虚拟引擎声,最终在玩家自己的手中长久回响。

参考链接:

  • GitHub 仓库 th0mk/nfsu2-web 项目文档与源码
  • TheGamer 报道:Players Revive NFS Underground 2 In Browser With 120 FPS
  • underground2online 社区技术复盘与实机演示
  • Talha Müderrisoğlu 的 NFSU2Recomp 静态重编译项目说明