“我给Claude塞了一份详尽的规格,连同反汇编源码和截图,然后说,去,把游戏做出来。”不久前的一个早晨,我这么干了。它交出来的东西,“用‘垃圾’来形容都算客气了”。
这并非人与AI的对决,而是一场考古——为什么一款诞生于1986年的游戏无法被随便复制。没错,就是那款BBC Micro上的经典,由Jeremy C. Smith在16到18岁时独立完成的作品:旋转、重力、惯性、炮塔、燃料采集、吊舱回收,一堆复杂的物理在8位机上灵动运转。我天真地想看看时下最强的AI能不能在浏览器里重现它。
![]()
先跑个题。过去这一年我沉迷于自研引擎,刚用WebGPU手搓了一款回合制4X策略游戏,八个文明,无需安装,打开就能玩。正是这种“什么都想从零造”的冲动,让我手痒想把童年最爱也复活。毕竟BBC Master就摆在桌边,我还时不时插卡打两把《Thrust》《Elite》《Exile》和《Holed Out》,其中三款已被我用不同方式复刻,第四款也越来越躲不过了。
于是那天早晨,我带着被OpenAI和Anthropic最新能力宣言催生的错觉,开始跟Claude Code对话。我列了一份足够详细的需求文档,又把Kieran Connell注解过的完整反汇编源码喂给它——那可是把6502汇编一行行转译并注释出来的宝库,再加上截图和玩法说明。心里盘算着:有了这些,你总不能再胡搞了吧?
Claude确实没胡搞。它迅速生成了一个浏览器页面,上面有个隐约像那款经典的东西:扫描线效果有几分神似,飞船、洞穴、炮塔也都有模有样。但只要按下方向键,灾难就开幕了。飞船跌落的姿态完全不对,不像被重力拽下,倒像被一只无形的手笨拙地摁下去。惯性几乎不存在,旋转后的动量累积更是杳无音信。整个手感轻飘飘的,像在操作一帧帧低精度动画,与那种每一帧都带着沉重且精确反馈的“物理感”隔着十万八千里。
说白了,它做出一幅皮囊,但这款游戏的灵魂从来不是几块岩石和飞船的贴图。在它的世界里,浅层的“像个样”一文不值。用现代引擎的思路,你很容易搭出相似的东西:以设备帧率跑主循环,用基于时间增量的物理公式计算坐标和速度,画几个多边形,完工。但那样产出的体验与原版完全是两个物种。原版的魔法全藏在精确的时序里——飞船的质量感、推力响应曲线、动量如何逐帧堆积、旋转时惯性怎样维持、碰撞后的回弹细节。对经历过原版的人来说,这些细节就是一切。而AI,哪怕拿到了原始源码,也根本抓不住它们。
这反倒彻底勾起了我的兴致:原版究竟是如何做到的?8位机的开发者到底用了哪些技巧,才能在如此局促的硬件上实现这种级别的物理?我开始自己的考古。我继续把那份反汇编注解文档丢给Claude,问出一连串问题:重力是怎么更新的?加速查表是怎么回事?扫描线效果如何在不到3MHz的处理器上实现?就从这里起,整件事变得有趣起来。
不是因为AI写出了什么高级代码——那份源码本身并不复杂,缩到极致也不过一段段6502汇编。它真正的价值在于,AI成了一个极有耐心的技术讲解员。它能把三十八年前用汇编和定时器中断写就的逻辑,翻译成现代人读得懂的语句,还能告诉我为什么当时必须那样写,为什么搬到浏览器里就注定惨败。
先聊聊时钟。整个游戏的运行逻辑完全建立在垂直消隐中断上。BBC Micro的显示系统每秒产生50次帧同步信号,游戏的主循环就挂在这个中断下。这意味着一切物理更新——重力加速度、推力、惯性衰减、碰撞检测——全以50Hz的恒定频率执行,而不是像现代浏览器的requestAnimationFrame那样随设备刷新率起舞。当你用标准的“Delta Time”去模拟,哪怕差分方程再精致,在掉到十几帧的高负载下也会出现累积误差,让飞船的坠落轨迹变得诡异。而原版根本不需要“时间差”这个概念,每个帧周期只做一次固定加减,三十多年如一日的稳定。
再看重力。它不是一个简单的“每秒y坐标增加若干像素”的公式。原版使用一个16位精度的速度累加器来处理飞船的垂直运动:每帧把重力常数加到速度值上,然后将速度的高位字节作为位移量去更新坐标。与此同时,推力并非直接改变速度,而是通过一张推力查表——根据飞船的朝向角度,读取预先算好的水平和垂直分量,再与当前速度混合。这种查表法避免了实时三角函数运算,在6502这样的处理器上既快又准。
旋转与惯性更是精妙。船体转动时,角速度并非直接转换为视觉旋转,而是先更新一个方向向量,再与已有的线速度交互,使得惯性在旋转中得以保留。你能做出侧向漂移、急转弯后仍沿原先方向滑行的动作,这全拜一套用加法器和移位就能完成的状态更新所赐。而AI生成的版本却把这些物理耦合拆得七零八落,仿佛只要画对了飞船方向,手感就会凭空出现。
最让我着迷的,是扫描线效果的实现。BBC Micro每帧50场,利用显示系统的定时器中断,在每行扫描之间快速切换调色板,从而在洞穴上营造出渐变光影。这套时序极度依赖与硬件刷新率的精确同步,任何一丝延迟都会让画面撕裂成碎纸。在现代浏览器中用通用定时器去模拟,就像试图用节拍器指挥交响乐团——能出声,但永远找不到那个呼吸。
这场考古的结尾,我并没有得到一款能玩的复刻。但Claude帮我摊开了原版那薄薄的机器码之下,层层叠叠的物理直觉与硬件智慧。当年那位少年用查表、累加器和50Hz心跳搭出了一个在重力中飘浮的世界。三十八年后,最强的语言模型能从文字里提炼出他的巧思,却造不出哪怕一帧真正的重力。或许这正是伟大与复制的距离:伟大不是功能清单,而是每帧脉冲里的精确诗意,也是所有试图速成的“做出来”永远够不着的那把尺。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.