第 18 章

第18章 双子星的余晖(约 1999 年)

传真机吐出最后一页确认回执时,id Software的商务主管还在盯着那张薄纸看。纸张边缘卷曲,油墨微微反光,上面的瑞典电话号码和公司名——Starbreeze Studios,斯德哥尔摩——在荧光灯下安静得像一块墓碑上的铭文。这不是第一份引擎授权协议,也不会是最后一份,但它在1999年6月那个下午的办公室里制造出一种奇怪的寂静。传真机不再响了。空调的嗡鸣重新填满房间。商务主管把文件装进档案夹,动作很轻,好像那张纸承载的重量远远超过它本身的克数。他并不知道自己在完成什么。他只是完成了一份工作。而在那之后不到两年,基于《雷神之锤》引擎的《魔法门之黑暗弥赛亚》会在另一个大陆上被组装出来,卡马克的代码和罗梅罗早已不再亲手触碰的关卡设计原则,将在斯德哥尔摩的办公室里被一个新的团队重新缝合。遗产的转移完成了最后一道手续:卡马克和罗梅罗共同创造的那个世界,已经不再需要他们了。

他们变成了自己遗产的旁观者,各自等待冰层碎裂、选择带来不可逆转终点的那一天。但冰层碎裂的声音并不来自传真机。它来自更早。1991年冬天,路易斯安那州什里夫波特。软盘公司(Softdisk)的办公室里,六个年轻人挤在从二手市场淘来的工作站前,屏幕上的绿色像素逐行刷新,那是一只会跳的精灵,一个戴着头盔的小男孩,在锯齿状的地板上奔跑。那个男孩叫基恩。他脚下的世界只有十六种颜色,他的跳跃高度由帧率决定,他的敌人是一群从十六进制编辑器里直接拖出来的土豆形状的生物。但基恩可以跑。他可以跑过屏幕边缘,跑进下一个房间,跑进一块从未被预先绘制好的区域。在那个时代的游戏里,这几乎是一种暴力:基恩不是被固定在单屏画面里的囚徒,基恩是一个入侵者,一个在内存里横冲直撞的变量。而写这个变量的手属于约翰·卡马克。他坐在离其他人稍远的位置,键盘敲得比所有人都快,屏幕上翻滚的不是游戏画面,而是编译器的输出日志。

他正在做的事情在当时没有人能完全理解——他在写一个平滑卷轴的引擎,在MS-DOS的实模式下,在286的寻址限制里,用汇编语言硬生生凿出一条通道,让像素流可以横向移动而不撕裂画面。那是1990年秋天的事情。到1991年冬天,那个引擎已经变成了《指挥官基恩》三部曲,被Apogee Software以共享软件的形式发行,第一张版税支票寄到了他们手里:一万零五百美元。约翰·罗梅罗在那张支票抵达的时候发出了一声大叫。他跳起来,在房间里转了一圈,拍打每一个人的肩膀,然后冲下楼去买披萨。他回来的时候手里举着披萨盒,嘴里叼着一根没有点燃的香烟,眼睛亮得像吃饱了燃料的引擎。那一刻他是快乐的。十年后他会站在另一个大陆的另一个房间里,手里没有披萨,眼睛里没有燃料,面对的是一张印着自己照片的广告,广告上的文字在互联网上被人反复截取、嘲笑、变形,最后变成一个他永远无法收回的姿势。但那是后来的事。

1991年冬天的夜晚,他和卡马克坐在同一张桌子两端,中间散落着空披萨盒和喝完的可乐罐,屏幕上的基恩正在通关,而罗梅罗正在纸上画新关卡的草图,线条从铅笔尖下涌出来,一条走廊分出三条岔路,每条岔路通向一个隐藏区域,每个隐藏区域里藏着一件道具,每件道具都对应一个秘密。卡马克抬头看了一眼那张草图,没有说话。他低下头继续写代码。他们的手在同一个项目上移动,但已经指向不同的方向。罗梅罗画的是王国。卡马克写的是虚空。传真机事件往前推三年,1996年6月,达拉斯。罗梅罗把《雷神之锤》典藏版放进纸箱,封好胶带,走出id Software的黑色玻璃大楼。他身后的办公室里,卡马克正在修复一个内存泄漏漏洞,屏幕上跳动的十六进制地址像一条永无尽头的隧道。没有人送别。没有仪式。车库时代最耀眼的摇滚明星带着他的长发和海报走出大门,而引擎还在继续运转,冷却风扇的转速丝毫不减。那扇玻璃门在他身后合拢时,发出的声音比传真机更轻。但声音不是本章的命题。

本章的命题是回声。1999年,千禧年之交,两个约翰的命运已经完全锁死在两个不同的轨道上。卡马克在达拉斯的办公室里,面前是《雷神之锤III竞技场》的渲染管线。他正在做的事情可以用一句话描述:他正在建造一个完全不需要叙事的世界。竞技场的地面由数学曲面构成,墙壁的纹理从算法中生成,光照模型精确到每一帧的浮点运算。玩家在这个世界里奔跑、跳跃、射击,但他们永远不会知道这里曾经有过一个故事。卡马克把故事拿掉了。不是因为他恨故事,而是因为故事对引擎来说是一种不必要的负担。故事需要解释,需要情绪,需要在某些帧上暂停渲染管线去等待一段对话滚过屏幕。而竞技场不需要这些。竞技场只需要速度,需要精度,需要每一颗子弹的轨迹在服务器上被精确计算,需要每一个玩家的死亡在三个帧内被确认并广播。这是一个纯粹的空间。一个没有历史的虚空。卡马克坐在这个虚空的正中央,手指在键盘上移动,光标在代码编辑器里跳动,他的脸上没有任何表情。

他正在做他最擅长的事情:他正在建造一台机器,这台机器不需要他。罗梅罗在达拉斯Galleria塔楼的顶层办公室里,面前是《大刀》的关卡编辑器。他正在做的事情同样可以用一句话描述:他正在试图在一个已经不属于他的时代里,建造一座属于他的王国。离子风暴的办公室铺着黑色大理石地板,墙上挂着重金属乐队的海报,会议室里摆着从德国进口的皮椅。Eidos的一千三百万美元躺在银行账户里,像一笔永远不会花完的燃料。但燃料正在漏。关卡设计师们坐在格子间里,屏幕上的几何体在缓慢生长,一条走廊通向一个大厅,一个大厅通向一个祭坛,一个祭坛上站着一个需要被击败的恶魔。这是罗梅罗在《毁灭战士》里做过的事情,在《雷神之锤》里也做过的事情,但这一次,他拥有不受限制的预算、不受卡马克约束的引擎、不受任何技术限制的创作自由。他可以用任意多边形数量建造任意尺寸的房间,他可以在任意位置放置任意数量的光源,他可以让恶魔的牙齿在近距离被精确渲染,每一颗牙齿的纹理都从照片采样。

他正在建造他梦想中的哥特式宇宙。但这个宇宙正在坍塌。交付日期一延再延,引擎的性能瓶颈没有因为卡马克的缺席而消失,设计师们开始怀疑他们正在建造的不是一座王国,而是一座墓碑。罗梅罗站在办公室中央,长发垂在肩后,手里拿着鼠标,屏幕上是一个未完成的关卡。他正在做他最擅长的事情:他正在建造一个世界,这个世界正在从他手中滑落。两条轨道。两个方向。虚空和王国。但本章不是结局。本章是那个更漫长、更安静、更不可逆转的过程的起点:他们各自留下的东西,会在历史中重新合拢。不是因为他们本人走向彼此,而是因为他们共同创造的东西——那个在密西西比河边的车库里启动的机器——拥有一种他们从未预期、也无法控制的引力。1999年,《毁灭战士》的源代码在GPL准则下公布。卡马克签下了那份文件。他做这件事的时候没有犹豫,没有感伤,没有长篇大论地谈论开源运动的意义。他只是认为代码应该被公布。

引擎的生命周期已经结束,下一代引擎已经就绪,旧的代码躺在服务器里就像一块废弃的矿石,而公布它不会造成任何商业损失。于是他公布了。成千上万的程序员下载了那份代码,在各自的卧室、宿舍和地下室里编译、修改、重新发布。他们给《毁灭战士》添加了新的渲染器,新的物理模型,新的网络协议,新的怪物行为。他们把引擎移植到Linux、Mac OS、PlayStation、Dreamcast、任天堂64、路由器、打印机、数码相机、ATM机。他们用卡马克的虚空建造了无数个卡马克从未想象过的东西。而罗梅罗的王国——那些关卡设计的原则,那些隐藏区域、秘密通道、节奏控制、武器摆放、敌人配置——也在同一条数据流中被搬运、拆解、重组。Mod社区的创作者们用《毁灭战士》引擎建造了他们自己的世界:一艘宇宙飞船,一座购物中心,一间高中教室,一个他们在梦里反复穿过的童年卧室。那些世界不是罗梅罗设计的,但没有罗梅罗的语法,它们不可能存在。

他已经教会了一代人如何在一张二维平面图上用高度变化制造压迫感,如何在走廊尽头放置一个闪烁的光源引诱玩家走向陷阱,如何在一个空旷的房间中央摆放一把等离子步枪,让拾取动作本身成为一种高潮。这些规则变成了常识。常识不需要签名。常识在一条又一条网线中传播,在无数个深夜里被吸收,在一个又一个新游戏里被重新表达,而它们的原作者已经不再被提及。卡马克和罗梅罗变成了他们自己遗产的旁观者。这个表述在字面意义上也是准确的。1999年,卡马克坐在id Software的办公室里,正在为《雷神之锤III竞技场》调整网络延迟补偿算法,而他的窗外——如果他有时间抬头看窗外的话——达拉斯的天际线在阳光下毫无变化。他并不知道在同一座城市里,罗梅罗正在离子风暴的会议室里和Eidos的发行代表进行一场艰难的对话,对话的内容涉及预算超支、交付延期和市场上正在发生的口味变化。

他也不知道在更远的地方——密苏里州的地下室里,一个十六岁的少年正在用《毁灭战士》的关卡编辑器建造他的第一个房间,他调整地板高度,放置一个恶魔,测试,再调整,再放置,再测试,直到凌晨三点。那个少年不会成为卡马克,也不会成为罗梅罗。他只是一个玩家。但他在做的事情,正是两个约翰在1991年冬天的什里夫波特做过的事情:用代码和关卡,在虚空里建造王国。而那个传真机,那份发往斯德哥尔摩的引擎授权协议,是一个更抽象但同样精确的版本:一家公司,一个引擎,一个团队,一个项目,一个产品。id Software的商务主管把文件放进档案夹的时候,他并没有意识到自己刚刚完成了一次交接。但历史已经在那个档案夹里被重新分配了。双子星的光芒不再照射他们自己,而是照射在那些他们从未见过的人身上。2005年8月19日,《雷神之锤III》的源代码公布。

2007年,卡马克在苹果全球开发者大会上宣布id Tech 5,它消除了纹理内存限制,允许在像素级别上对整个游戏世界实现独特的定制设计,并提供了几乎无限的视觉真实性。他在台上演示时,屏幕上出现了一个拥有无限细节的虚拟空间,每一块岩石的纹理都独一无二,每一面墙壁的磨损痕迹都由算法生成。台下响起掌声。卡马克点头致意,然后继续讲解渲染管线的技术细节。他的声音平静,手势精准,幻灯片上的数学公式在聚光灯下闪闪发光。这是他最舒服的状态:站在技术的前沿,向世界展示引擎能做到什么。但他没有提到关卡设计。他不需要提到。关卡设计是别人的问题。引擎的使命是提供可能性,至于这些可能性会被如何使用,那不是引擎的职责。卡马克建造了一个能够容纳无限细节的虚空,然后把它交给世界。世界用它做了什么呢?世界用它建造了《狂怒》,一个末世背景的射击游戏,拥有惊人的视觉效果和贫瘠的叙事,在Metacritic上得到中等评价。

世界用它建造了《德军总部:新秩序》,一个架空历史的纳粹统治题材,在叙事上比id以往的任何作品都更加大胆。世界用它建造了《毁灭战士》(2016),一个重启的版本,在保留原版核心机制的同时注入了一种自我意识:它知道自己是一个关于毁灭战士的游戏,它让毁灭战士本人成为神话的一部分,它在暴力中找到了一种近乎宗教的庄严。卡马克没有参与这些项目。他已经在火箭科学里找到了新的虚空。但他写的代码仍然在屏幕上运行,每秒六十帧,精确,稳定,冷酷。而罗梅罗的王国同样在经历他无法控制的变形。《大刀》失败了。这个事实不需要委婉的修饰:它失败了。评价平庸,销量惨淡,离子风暴的达拉斯办公室在2001年关闭。罗梅罗离开达拉斯,搬到了加州。他后来会说他从失败中学到了很多东西,会在采访中承认“婊子”广告是个错误,会在游戏开发者大会上分享教训,会以长者的姿态谈论那个曾经让他成为摇滚明星的行业。但那是后来的事。在1999年,失败还没有完全降临。

它悬在头顶,像一块还没有落下的冰层。罗梅罗在办公室里踱步,长发在肩后晃动,他仍然相信自己可以逆转一切。他仍然相信王国可以建成。他手里还有资源,还有团队,还有时间。但时间正在以一种他无法控制的方式流逝,而流逝本身正在改变一切:玩家社区的口味正在从单人战役转向在线竞技,发行商的耐心正在从延期交付的项目中撤出,而《半条命》的反派AI和《网络奇兵2》的叙事深度正在重新定义第一人称射击游戏的边界。罗梅罗的王国——那个哥特式的、黑暗的、充满秘密和节奏的王国——正在被一个更复杂、更庞大、更不依赖单一作者意志的市场消化。消化不是否定。消化是吸收,然后排泄出它不再需要的部分。但历史不会排泄。历史只会堆积。2013年,QuakeCon。卡马克站在舞台上,提到他对函数式编程的兴趣。台下坐着一群程序员,他们中的许多人从少年时代就开始阅读卡马克的代码,他的习惯、他的偏好、他的思维模式,从缩进风格到内存分配策略,都已经被他们吸收并内化。函数式编程。

卡马克说这几个字的时候语气平淡,像是在陈述一个事实:他正在学习一种新的编程范式,它更接近数学,更少依赖可变状态,更具可证明性。这是一个技术细节,对大多数人来说毫无意义。但对那些了解卡马克的人来说,这是一个信号:他还在寻找。他还在向更深、更抽象、更接近纯粹逻辑的领域移动。虚空还没有尽头。引擎还在运转。而此刻,罗梅罗不在QuakeCon。他在另一个地方,也许在加州的家里,也许在某个独立工作室的办公室里,也许在玩一个他曾经参与定义的类型的游戏,手指在手柄上移动,眼睛在屏幕上扫描,一种复杂的情绪在胸腔里起伏。那是什么情绪?不是嫉妒。不是悔恨。不是愤怒。也许是一种更轻的东西,轻到几乎无法察觉:一种被时间磨平棱角之后的平静。他曾经是摇滚明星。他曾经是那个让玩家成为他的婊子的男人。他曾经是关卡设计之神。现在他只是一个游戏开发者。一个在行业里工作了二十多年的老兵。

他的名字仍然出现在游戏史的书籍里,他的照片仍然出现在怀旧网站上,他的设计原则仍然被教授给游戏设计专业的学生。但他本人已经不再是那个需要被聚光灯追逐的人。聚光灯已经移到了别处。移到了下一代,移到了那些从未听说过《指挥官基恩》的玩家身上,移到了那些用Unity引擎建造他们第一个房间的少年身上。那些少年不知道罗梅罗的名字。但他们正在使用他发明的语法。他们调整地板高度,放置一个敌人,测试,再调整,再放置,再测试,直到凌晨三点。他们不知道自己在重演什么。但历史知道。镜头最后落在两处空旷的场所。莫哈韦沙漠。火箭发射架在正午的阳光下投下锐利的阴影,金属结构在高温中微微膨胀,发出几乎听不见的嘎吱声。卡马克站在发射架旁,手里拿着数据板,屏幕上是一串遥测数据。引擎的轰鸣现在来自液态燃料,而不是显卡。氧化剂和燃料在燃烧室里混合,产生的推力以吨为单位计算,火焰从喷嘴中喷射出来,在沙地上掀起一阵热浪。

这是一个和《毁灭战士》完全不同的引擎,但它服从同样的物理法则:输入,处理,输出。卡马克看着那团火焰,也许在计算推重比,也许在检查燃烧室压力,也许在思考下一个迭代方案。他已经不再是游戏行业的中心。他是犰狳宇航的创始人,一个私人火箭公司的拥有者,一个试图将航天成本降低到商业可行水平的工程师。他从游戏引擎中赚到的钱变成了液氧罐和碳纤维复合材料。他从显卡中榨出的每一帧变成了火箭的每一秒燃烧。虚空不再是虚拟的。虚空是真实的,是大气层之上的那一片黑暗,是没有空气阻力、没有加速度上限、没有帧率波动的绝对空间。卡马克正在向那个虚空移动。他还没有到达。但他已经离开了。加州。一片停车场的废墟。地面上的沥青已经开裂,裂缝里长出杂草,杂草在午后的光线里呈现出一种干枯的黄色。罗梅罗站在停车场边缘,看着那些裂纹。他曾经在这里玩过街机。

那是他十几岁的时候,在加州的某个街机厅里,手里攥着硬币,眼睛盯着屏幕上的像素飞船,心跳加速,手指在按钮上敲击,周围是电子音效和香烟烟雾。那个街机厅已经不存在了。它被拆除了,被推平了,被铺上了沥青,被画上了停车线,然后被废弃了。罗梅罗站在那片废墟上,也许在回忆,也许没有。他手里没有硬币。他耳朵里没有电子音效。他身后是加州的高速公路,车流在午后阳光下发出持续的嗡鸣,像一台永远不会停机的引擎。他曾经是那个街机厅里的摇滚明星。他曾经是那个让整个行业都仰望的人。现在他站在停车场的废墟上,头发已经剪短,眼神已经不再燃烧,手里没有披萨盒,嘴里没有香烟。他变成了一个和卡马克完全不同的人,也变成了一个和年轻时的自己完全不同的人。但他仍然站在同一个星球上,呼吸着同样的空气,被同样的引力固定在地面上。而那个引力,那种将一切拉回地面的力量,也在拉回他的遗产。不是拉回他本人。是拉回他留下的东西。他们不是和解了。他们从来没有和解。

在1996年那个夏天之后,他们的对话次数可以用一只手数完。他们没有在某个深夜拨通对方的电话,没有在某个会议上握手言和,没有在某个采访中互相赞美。他们只是各自沿着自己的轨道运行,像两颗被同一个引力源抛出的恒星,向着相反的方向飞去,速度越来越慢,光芒越来越暗,最终变成两个光点,在夜空中固定不动。但光点仍然在发光。不是因为他们自己还在燃烧,而是因为他们曾经燃烧过,而光需要时间才能到达观测者的眼睛。游戏史会将他们重新并置,不是因为任何个人修复,不是因为任何迟来的和解,不是因为任何戏剧性的重逢。而是因为《毁灭战士》作为一个文化复合体,它同时需要卡马克的虚空和罗梅罗的王国。没有虚空,王国无法存在。没有王国,虚空毫无意义。这个事实不会因为两个约翰是否互相说话而改变。它已经写进了《毁灭战士》的源代码,写进了那个十六岁少年在凌晨三点建造的第一个房间,写进了那台在博物馆里仍然运行的街机。那台街机。

它站在某座博物馆的展厅里,屏幕闪烁,投币口微微反光,机身上的贴纸已经褪色,但游戏还在运行。屏幕上,毁灭战士正在穿过一条走廊,墙壁是256色的像素纹理,地板是平面几何,敌人在前方等待,武器在屏幕下方闪烁。这段走廊是罗梅罗设计的。让这段走廊在屏幕上以每秒三十五帧的速度滚动的代码,是卡马克写的。他们两个人已经不再站在屏幕前。但他们的代码和关卡仍然在屏幕上互相吞噬,像素在吞噬像素,逻辑在吞噬逻辑,虚空在吞噬王国,王国在吞噬虚空。而坐在屏幕前的人早已换了无数代。那些手握着鼠标和键盘的人,那些在午夜时分盯着屏幕的人,那些在虚拟走廊里奔跑、跳跃、射击、死亡、重生的人,他们不知道两个约翰的名字。他们不需要知道。他们只需要知道,在这条走廊的尽头,有一个闪烁的光源,一个隐藏的开关,一个等待被击败的恶魔。而这条走廊,从1993年12月10日《毁灭战士》上传到威斯康星大学麦迪逊分校的FTP服务器那一刻起,就再也没有真正关闭过。传真机不再响了。引擎的轰鸣还在继续。