第 11 章
第11章 摇滚明星的失重(约 1996 年)
那个文件夹没有名字。约翰·罗梅罗把光标移到屏幕右上角,点击了保存。Worldcraft编辑器弹出默认路径对话框,目标文件夹是系统自动生成的“新建文件夹”。他没改。他按下回车键。那张经过六次修改的关卡线框图——穹顶弧线被简化,壁龛被填平,北墙上方无法修复的复杂交界面被替换成平面——安静地存入了硬盘。五个月前,他在设计文档里画下的那个哥特式大厅还有飞扶壁、尖拱窗、三层交错回廊和一道藏在阴影里的螺旋阶梯。现在它是一组能在引擎里正确渲染的多边形,帧率稳定,纹理不再撕裂。它不再是那座城堡。罗梅罗关掉编辑器,程序窗口缩成任务栏上的图标然后消失,露出桌面壁纸——那是《毁灭战士II》最终首领的原始概念画,一张从美术部要来的扫描件,他已经用了两年。画面上那个巨大恶魔头颅从墙体里浮现,额头嵌着裸露的脑组织,嘴里喷出成排火球,左下角一个像素化的太空陆战队员正用双管霰弹枪还击。在这个游戏里面,罗梅洛以最终首领邪恶化身(Icon of Sin)的形象出现。
那是他设计的最著名的一关。无数玩家在那面墙前死过,活过来,再死,直到找到藏在升降台后面的火箭发射器角度。一封来自加拿大十四岁男孩的粉丝信,用圆珠笔写在横格纸上,钉在他右手边软木板上:罗梅罗先生,我在你的关卡里学会了永远不放弃,因为每一个陷阱都有破绽。那张信纸现在被一张《PC Gamer》杂志封面遮住了大半。封面上是《毁灭战士》的经典截图——手持电锯的第一人称视角,正对着一群粉色恶魔冲过去。那期杂志出版于1994年12月,在id搬进这栋黑色玻璃大楼之前。他把封面钉上去那天,阿德里安·卡马克从门口探头说,你把你自己挂墙上了。罗梅罗笑了。那时候他的笑声能穿过走廊传到编程区,卡马克偶尔会从显示器后面抬起头,不是被干扰,而是像在确认某种背景噪音还在正常运转。现在那个封面的边缘已经翘起,纸质在德克萨斯州的空调干燥空气中卷曲。罗梅罗伸出手指按了按卷角,指尖触到光滑的铜版纸表面,下面软木板微微凹陷。他没把它重新钉平。
走廊尽头那束白光还在。约翰·卡马克办公室门缝下漏出的光带,宽度不到四分之一英寸,是荧光灯那种不带任何暖意的冷白。它稳定地投射在地毯上,边界清晰,两侧地毯纤维被长期照射压得比周边更为扁平。罗梅罗知道那间办公室里的样子:三台显示器呈弧形排列,左侧代码编辑器,中间引擎渲染窗口,右侧调试器。卡马克坐在那张从什里夫波特时期就跟着他的旧椅子里,椅背塌陷,扶手皮革磨穿露出海绵。他可能从昨天下午就坐在那里了,中间只起来去过两次洗手间,喝掉六罐健怡可乐,吃掉两片微波炉披萨。他对引擎的优化进入了第四周,每天的工作日志只有一行:渲染管线重构——延迟仍在16ms以上,需继续优化纹理缓存命中率。十六毫秒。屏幕刷新率六十帧每秒,每帧渲染预算是十六毫秒。超过这个阈值就会掉帧。掉帧在《雷神之锤》里不是画面卡顿的问题——它意味着玩家转身时屏幕撕裂,意味着在多人对战里慢对手零点一秒,意味着死亡。卡马克不能让引擎掉帧。这束白光,与第10章结尾那‘不肯熄灭的记号’是同一道光,它穿过走廊的空气,穿过紧闭的门,成为两人渐行渐远的视觉锚点。
所以他坐在那扇门后面,把渲染管线拆成原子,一段一段优化,而每一次优化都意味着某个设计上的可能性被关闭。罗梅罗在两个月前提出过一个想法:在关卡中加入真正可破坏的墙壁——不只是《毁灭战士》里那种按下开关就降下去的隐藏门,而是被火箭弹击中后会炸开不规则洞口的动态墙体。玩家可以用爆炸物在城堡里凿出一条自己的路径,每一局地图都会因战斗而变形。他花了三天写了一份设计文档,画了六张概念图,甚至做了一个纸面模型来演示爆炸碎片的物理轨迹。星期四下午的周会上,他把这些摊在会议桌上。卡马克看了三分钟,然后说了两个字:不行。不是因为创意不好。是因为动态破坏意味着每一面墙都不能再作为静态几何体预计算,可见性集合必须实时更新,纹理内存要额外分配碎片贴图,渲染管线的负担会超出十六毫秒预算。卡马克逐一解释了技术约束,每一条都精确到具体代码模块和内存地址,语气平直,像在读一份没有排版的内部技术备忘。
他的眼睛没离开过天花板上的某一点,手指在膝盖上敲着三快一慢的节奏。罗梅罗听完了。他坐在会议桌另一端,手搭在文件夹上,纸面边缘抵着指腹。会议室里还有其他人——阿德里安坐在他右手边隔一个位置,手里端着一杯凉了的咖啡,目光落在自己面前的绘图板上;蒂姆·威利茨在笔记本上画着什么,可能是一个数据包传输拓扑图;杰伊·威尔伯靠在椅背上,双臂交叠,脸上带着那种在商务谈判桌上学到的中性表情。没人说话。不是因为罗梅罗的提议没有价值。所有人都知道可破坏墙壁会让游戏更好玩。没人说话,是因为没有人拥有足够的技术储备来质疑卡马克关于渲染管线可见性集合更新机制的分析。阿德里安可以和你讨论哥特式建筑中肋拱穹顶的光影变化,可以在一天之内手绘出二十个不同形态的恶魔概念图。但他说不清纹理缓存的分配策略,说不清多边形裁剪的视锥剔除算法。威利茨可以搭建一个能同时承载十六名玩家而不丢包的联网架构,可以优化数据包传输时序使死亡竞赛的同步延迟低于五十毫秒,但他也说不清动态破坏的几何体重构开销。在《雷神之锤》的开发体系里,能全局理解引擎技术细节的人只有一个。他坐在会议桌尽头,手指敲着膝盖,刚刚说完了“不行”的所有技术理由。罗梅罗那天把文件夹带回了自己的办公室。它放在桌上,三天后表面积了一层几乎看不见的灰尘。他再没提起动态破坏。
走廊尽头那束白光动了一下。不是光线本身在动,是有人影从门后走过,短暂地挡住了它,在地毯上投下一个快速移动的阴影。卡马克在调试代码时偶尔会在办公室里踱步,从一面墙走到另一面墙,眼睛盯着空气,脑子里在处理某个递归函数的调用栈。罗梅罗见过这个场景很多次。在湖街公寓,卡马克也这样踱步,但车库空间狭小,三步就到头了,他走起来像在绕着看不见的轴心旋转。那时候罗梅罗就在距离他五英尺的折叠桌上看代码,屏幕上是《指挥官基恩》的精灵动画。卡马克说完一个技术方案,罗梅罗会接话说,能不能让激光枪的弹药多掉一点,那样玩起来更爽。卡马克会在踱步中途停下来,停顿几秒,然后说,可以改弹药掉落表。那个响应时间是几秒钟。不是几天。不是一份文档加六张概念图加一个纸面模型加三天沉默。罗梅罗站起来,椅子在地毯上发出一声低沉的摩擦。他走向窗边,推开百叶窗的一条缝隙。梅斯基特的凌晨,停车场里路灯投下间隔均匀的橙黄色光斑,他自己的黑色保时捷停在靠近入口的专属车位上。再往远看是一条高速公路,偶尔有一辆货运卡车驶过,车灯光束切开黑暗,然后消失在下一个出口后面。这个城市地势平坦,通往外界的公路没有任何起伏,开车经过时几乎注意不到自己正在往前移动。他想起什里夫波特的那条河。密西西比河边那个两居室单元,他们把家具推到墙边,用四个折叠桌围出一个工作区。空调是老旧的窗机,夏天制冷时发出推土机般的噪音,他们就开风扇,风扇把电路板手册和披萨广告单和传真过来的版税支票吹得到处乱飞。那时候没有关卡编辑器。
罗梅罗用一个文本编辑器把关卡数据写成ASCII码的二维数组,每一块墙、每一个敌人、每一组弹药的位置都用数字和符号表示。他可以在一个下午写出一整关,用自制编译器编译进游戏数据文件,然后在测试模式里跑一遍,看看那些数字变成墙壁和怪物之后是什么感觉。从设计到测试的循环不到一小时。如果某个陷阱太狠了,他改几个数字,重新编译,再跑一遍——这次用霰弹枪而不是手枪来闯,感受完全不同。全三维不是这样一个循环。三维引擎里,修改一面墙不仅仅是改变它的位置坐标。坐标改变会影响相邻多边形接缝的法线方向,法线方向变化会影响光照计算,光照变化会影响纹理映射的明暗表现,纹理映射的偏移会导致接缝处出现可见裂缝。罗梅罗理解这些。他的编程背景足以让他读懂渲染管线的大部分概念——他九十年代初写的图形算法至今仍在某些嵌入式系统的代码库里运行。但理解一件事物和主宰一件事物是两回事。他能读懂卡马克的引擎代码,但他无法在那些代码里改变优先级。
引擎的优先级——渲染稳定性优先于几何体多样性,帧率优先于特效,碰撞检测精度优先于环境交互——不是写在某个配置文件里可以调整的参数。它们嵌入在函数调用顺序、内存分配策略和主循环设计中,融入上千上万行C语言代码,只有持续不断、每天十八小时沉浸其中的人才能感知到哪些可以调整,哪些是不可配置的骨架。卡马克是那个人。整个id Software只有他是那个人。引擎不再是工具。引擎变成了一个主权领土,而卡马克是唯一拥有完整地图的人。当他说“不行”时,那不是一个意见,是地图本身表明这条路不存在。罗梅罗松开百叶窗。塑料帘片合拢的声响在安静的办公室里很突兀。他转回身,视线扫过软木板上的粉丝来信和杂志封面,扫过书架上几本《龙与地下城》规则手册——那还是他和阿德里安在《毁灭战士》开发期间用来研究恶魔分类学的参考书,书脊已经裂了——扫过墙角那台被淘汰的486电脑,机箱上贴着一张手写标签:第一版DOOM关卡编辑器,勿删。
那台机器最后一次开机是八个月前,为了从旧硬盘里翻出一份丢失的贴图文件。现在它蹲在角落里,灰色塑料外壳在荧光灯下泛着年代久远的黄色。标签上的字迹是汤姆·霍尔的。霍尔在1993年离开id时,这张标签还贴在他使用的第二台开发机上。罗梅罗把那台机器搬进自己办公室,因为他不想让搬家工人在搬进新楼时把它和淘汰的旧显示器一起扔掉。霍尔走后没有人再提起过他,就像那个被填平的壁龛,就像北墙上方那个被替换成平面的复杂交界面。缺席者的形状最终会被多边形简化算法吃掉。罗梅罗走回桌前。屏幕已进入休眠模式,黑色面板像一面镜子,映出一个穿着褪色黑色T恤的三十岁男人,头发往后梳成马尾,颧骨比几年前更突出,眼眶下面有两条青灰色痕迹。他胸前印着《毁灭战士》的主角,手持一把霰弹枪冲向前方,上面一个像素化的红字:ID。
1996年1月17日,星期三。那天下午的周会记录上写着:E1M3光照方案讨论,与会人员:卡马克,罗梅罗,阿德里安,威利茨,威尔伯。实际发生的事情比会议记录多一行。罗梅罗提前十分钟到了会议室。他把E1M3——第一幕第三关——的关卡设计稿打印在十一乘十七英寸的高光相纸上,一共六张,依次铺在会议桌中央。黑色背景上用黄色线条标注了玩家路径,红色标记了敌人触发点,蓝色标记了武器和弹药位置,绿色虚线表示三条不同的潜行路线分支。这个关卡结构的复杂程度是他过去三个月里逐渐推进的设计方向——更非线性的探索节奏、更黑暗压抑的哥特氛围、更需要战术决策的敌人AI行为模式。具体到E1M3,他设计了一个三层嵌套的教堂废墟:玩家从地下墓穴进入,经过一段被洪水淹没的回廊,上升到主殿。主殿穹顶塌了一半,月光从缺口漏下来成为唯一光源,而敌人是隐形的怪物,在黑暗中只能通过微弱的反光和水面波纹来判断方位。玩家需要在月光和阴影之间移动,利用环境光遮蔽作为掩体。这是一套比《毁灭战士》的任何关卡都更复杂的空间叙事。
他把水面的技术要求单独写在一页纸上:动态水面效果需要在八乘八的网格上进行高度场模拟,每一个波峰波谷都要根据玩家移动和爆炸冲击波实时更新。水面网格下方需要额外渲染一层水下纹理,波光折射需要三次采样——一次反射,一次折射,一次菲涅尔效应计算。他把这一页放在六张关卡图旁边,一起等待卡马克审阅。卡马克走进会议室的动作和每天完全一致:左手端着第四罐健怡可乐,右前臂夹着那本翻旧了的《计算机图形学:原理与实践》,运动鞋在地毯上踩出沉闷和轻快的交替声响。他在靠窗的位置坐下。那个位置从搬进这栋大楼第一天起就没变过,虽然没有任何会议制度规定圆桌的主位。没人要求他坐在那里,也没人选择坐在那里。罗梅罗开始讲E1M3的结构。从地下墓穴的垂直空间设计开始,他解释了如何通过一系列逐渐上升的螺旋阶梯引导玩家自然地向上移动,而不需要任何文字提示——这是他从《德军总部3D》时期就开始打磨的空间引导技术。在《毁灭战士》E1M1里,他可以让一个从未玩过第一人称射击游戏的人在三秒钟内学会移动、射击和开门,完全不需要手册,因为这些动作都在关卡几何体里被暗示了。现在他想把同样的直觉扩展到气氛营造上,让关卡本身成为叙事。
他讲了大约四分钟,然后停下来,看向卡马克。这是他在几十次周会上养成的节奏:抛出想法,等待技术反馈,根据反馈调整或坚持,最终达成某种可以实施的折中方案。在《毁灭战士》开发期,卡马克通常会在他讲到三分之二处就开始插话——那不是打断,是一种同步,两个大脑在同一频率上快速迭代,把构想和约束压缩成实际可行的设计。最极端的一次,罗梅罗刚开始描述一个房间的布局,卡马克就说可以写进编辑器,前后不到二十秒。那时候两人的对话速率快得让会议记录完全跟不上,威尔伯后来干脆放弃了纪要,只在讨论结束时记下分配好的任务清单。这一次,卡马克没有在罗梅罗讲到三分之二时插话。他等罗梅罗讲完,等了一个完整安静的拍子,然后把他面前那本书翻到夹了标签的一页,扫了一眼,抬起头来。他的声音和说“不行”时一样平直。
水面网格运算如果放进主循环,每帧会吃掉至少四到五毫秒。如果放进独立线程,同步机制需要重新设计整个帧缓冲写入顺序。目前渲染管线的纹理缓存命中率还没有优化到可以承受三次采样。可以先做不透明的水面,用一张静态纹理代替。隐形的敌人如果依赖反光检测,AI感知系统需要额外的光线追踪步骤——每帧每个敌人都要跑一遍反射矢量和玩家视角的交点测试。当前AI循环预算是每个敌人每帧零点三毫秒。反射检测至少需要额外的零点八毫秒。这个做不了。
零点八毫秒。这个做不了。这句话落在会议室里时,没有任何回响。不是物理上的没有回响——这个房间的声学处理做得很好,椭圆形天花板分散了声波,使每一句话都清晰但不产生回声。是人的反应没有任何回响。阿德里安在听到“这个做不了”时,右手端起了咖啡杯,举到嘴边,发现杯子已经空了,又放下了。整个过程他的视线没离开过绘图板光滑的白色表面。威利茨用笔在笔记本上画了一个不是字的符号,然后划掉,然后重新开始画一个新的。威尔伯的双手交叠着搁在肚子上,食指一下一下地轻叩自己的手背,一下,两下,三下,停下来。罗梅罗站在原地,六张设计图在他面前一字排开,高光相纸在荧光灯下反射出不规则的光泽。他能感觉到自己右手食指在微微发力,指腹压在E1M3主殿那张图的边缘上,纸面的光滑触感被指纹的纹路放大。他没有继续争取动态水面。他问了第二个问题:能不能在引擎里增加一个环境光遮蔽的参数,让阴影区域的暗度可以根据封闭空间深度动态调节——如果玩家在地下三层,光衰减到百分之九十——而不占用完整的光线追踪预算?
卡马克没有翻书。可以用一个全局衰减系数。一个可以在控制台输入的CVAR参数。但这个参数不是真正的环境光遮蔽,只是一个线性衰减,不能根据具体几何体变化。所有室内区域都用同一个数值。零点五到零点九之间,罗梅罗可以自己调。一个全局参数。一个可以在控制台输入的变量。一个数字。罗梅罗的哥特式三层嵌套废墟,每一层都是手工搭建的多边形网格,每一堵墙的纹理都是阿德里安从哥特建筑参考书上临摹下来的,每一处月光漏下的缺口都经过了十几次位置微调以创造特定的光斑图案——所有这些,最终的光影表现,将取决于一个全局变量,用一个控制台命令就可以改变。罗梅罗说,行。他把自己面前那页写了动态水面技术需求的纸挑出来,折叠,塞进文件夹最后一页。行,用一个参数。
阿德里安的咖啡杯搁在绘图板旁边的桌面上,发出一声轻响——陶瓷碰在复合木板上的声音,不尖锐,但在这个无人说话的间隙里足够清晰。阿德里安没有抬头。他的右手搭在绘图板边缘,拇指和食指之间夹着一支2B铅笔,笔尖朝上,悬停在半空中。他能用一支铅笔在二十分钟内画出一个从噩梦里爬出来的怪物的完整解剖结构,肌肉群的走向和骨骼的比例都经得起生物力学检验。在过去五年里,他为id的每一款游戏贡献了视觉内核——从《德军总部3D》里块状的纳粹士兵,到《毁灭战士》里那些让全世界家长头疼的恶魔与僵尸,到此刻他桌面上摊着的《雷神之锤》怪物设定稿,那些长了链条手臂的食人魔、能在空气中相位移动的幽灵、从哥特式石像鬼演变而来的飞行敌人,每一张都是他亲手画的。但他无法参与这场讨论。问题在于一个参数值而不是一张怪物设定稿,解决方案写在图形学教材里而不是人体解剖图谱里。罗梅罗看着阿德里安手里的铅笔。笔尖悬浮在纸面上方大约半英寸,一动不动,像在等什么——等一个不需要那本《计算机图形学:原理与实践》也能参与的讨论,等一个能把城堡建筑的采光方案拉回到视觉美术层面的切入机会。机会没有来。卡马克的注意力已经转移到下一个议题:威利茨的网络同步机制中,玩家死亡后的尸体如何处理。尸体作为静止物体可以减少客户端更新开销,但尸体位置必须在服务器端记录下来以便新加入的玩家看到。卡马克和威利茨开始讨论数据包封装格式。阿德里安的铅笔尖仍然悬在纸面上方。半英寸。
会议结束后,罗梅罗回到自己办公室。他把主殿的设计图摊在桌上,在某个光斑效果旁边用铅笔做了一个标注:CVAR r_ambient 0.7。那行字很小,写在那张十一乘十七英寸的高光相纸上,几乎看不见。那是哥特式教堂的光影设计最终的实现方案。一个数字。零点七。
《PC Gamer》的杂志采访在一月二十五日进行。记者格雷格·韦斯特是英国人,头发剪得很短,穿一件皱巴巴的格子衬衫,用的是索尼的专业手持录音机,麦克风海绵罩上有咖啡渍。他对《毁灭战士》的设计哲学表现出了超出常规的兴趣——他不是那种只会问常规问题的大众记者,他能说出E1M1走廊灯光和敌人位置的对应关系,能谈论弹药分配与玩家心理压力的节奏控制。罗梅罗带他参观了id办公室,指给他看美术部的怪物模型、正在开发中的关卡截图、服务器机房里嗡嗡作响的联机测试环境。他在自己办公室里接受了正式采访,身后墙上就是那张《PC Gamer》封面。
韦斯特问了他一个问题:作为《毁灭战士》的核心设计师,你如何定义游戏设计师的角色?罗梅罗回答了大约二十分钟。他从《指挥官基恩》的跳跃手感讲到《德军总部3D》的秘密房间设计,从《毁灭战士》的武器平衡讲到死亡竞赛模式的意外诞生。他讲了自己对玩家心理的观察——恐惧和快感共享同一条神经回路,只是触发阈值不同;一个优秀的关卡设计师应该像游乐场工程师那样懂得在紧张后及时释放,又在释放后重新收紧;设计不是放置墙壁和敌人,是给玩家的情绪编写节拍。他说到一种他从九十年代初开始在笔记本上草草记录、但从未正式命名的思路:游戏设计在本质上是时间艺术,游戏在时间中展开,关卡设计师本质上是时间轴的雕刻者,每一个拐角、每一个陷阱、每一个隐藏奖励,都是放置在玩家前进路径上的情绪路标。韦斯特的录音机红灯一直亮着。
罗梅罗谈到了《雷神之锤》。他没有透露具体关卡细节——新游戏的保密协议不允许——但他谈到了在三维空间中进行空间叙事的难度。当不再用二维箭头指引玩家,而是用光影、声音、环境细节来暗示方向时,每一个多边形都变成了叙事单元。他指着墙上阿德里安画的一张哥特式地牢入口概念草图说,城堡的石头质感在告诉玩家:这里很古老,这里发生过很多事,你接下来看到的东西可能比你更老、更危险。环境在和玩家对话。采访持续了两个小时。最后韦斯特收起录音机时,从包里拿出一本翻旧了的《毁灭战士》官方攻略书请罗梅罗签名。罗梅罗用黑色马克笔在扉页上写:用霰弹枪。别停下。约翰·罗梅罗。
一月三十日,韦斯特把采访稿发给了id的市场部。稿件标题是《约翰·罗梅罗与游戏设计师的哲学》,副标题为《从〈毁灭战士〉到〈雷神之锤〉:一位关卡设计大师的思维过程》。市场部把它附在了当天下午的公司内部邮件列表里,抄送给了包括卡马克在内的所有合伙人。卡马克的回复出现在二月一日下午。那封邮件只有四句话,发送自他的id Software邮箱,接收者是罗梅罗,抄送了其余四位合伙人。罗梅罗坐在自己办公室里打开邮件时,显示器右下角是下午四点二十二分。走廊里能听见威利茨在和网络工程师讨论某种新的数据压缩方案,能听见阿德里安的美术部里传出的铅笔在纸上快速摩擦的沙沙声,能听见威尔伯的电话那头隐约传来零售商讨价还价的声音。屏幕上的邮件客户端是id内部自己写的简易程序,白底黑字,发件人栏里写着卡马克的邮箱地址。
第一句:如果你有时间花两个小时跟记者讨论“设计师的哲学”,你就有时间优化E1M3。第二句:E1M3目前的玩家平均通关时间是十二分钟,目标设计时间是八分钟。你的节奏控制还需要调整。第三句:专栏和采访不产生可编译的关卡数据。第四句:我们离代码封版还有八周。
罗梅罗读了四遍。第一遍他在读到“不产生”这个词时停了下来,用拇指按住了自己右手虎口上那道旧茧——那是多年握笔和按鼠标磨出的硬皮,在《毁灭战士》开发期间变得硬币般大小。第二遍他注意到了一个他在第一时间没反应过来的细节:卡马克在提到E1M3时,括号里写了一个具体的平均通关时间,十二分钟。那意味着卡马克亲自跑了一遍那关,用秒表计时,和基准设计文档里的目标值做了对比,量化了偏差。他用数据在说:你的关卡不符合规范。不是你的采访不符合规范。用这一组数字来证明那篇采访代表了注意力的错误分配。第三遍他读了抄送名单。四位合伙人。阿德里安。威利茨。威尔伯。凯文·克劳德——公司技术合伙人,负责声音引擎,但在设计决策上从不发言。没有漏掉任何人。第四遍他发现自己已经盯着屏幕超过三分钟而一个字都没打。他的手指悬在键盘上方,光标在回复栏里一闪一闪地跳动。
他能想到六种可能的回复。解释采访是市场部安排的,不是他主动联系的。指出E1M3的设计时长延长是因为引擎限制了潜行分支援军逻辑的实现——那个关于隐形敌人AI感知的问题卡马克自己在周会上说过做不了。反问。道歉。攻击邮件的语气本身。不回复。他把手放在键盘上,打了几个字,删掉。又打了卡马克的名字,删掉。然后把手从键盘上拿开,十指交叉搁在桌面上,感受着自己指节之间那些被反复敲击键盘磨出的细微凹凸。十四岁时,他在加利福尼亚的街机厅里可以用两只手打穿《太空侵略者》的高分记录,屏幕上的敌机在他眼里不是移动的像素,是一组可预测的弹道路径,所有飞行轨迹都在大脑里自动转化成几何数列。那时候没有关卡编辑器。没有十六毫秒的预算限制。没有需要三次采样才能正确显示的动态水面。游戏就是代码,代码就是游戏,两者之间没有那层叫做引擎的中间厚度,没有那张只有一个人能看懂全貌的领土地图。他选择了第六种回复。关闭邮件窗口。邮件标为未读。放在收件箱里。办公室里只剩下了空调出风口送风的白色噪音,以及从他身后书架方向传来的轻微纸张滑动声——那是杂志封面在干燥空气中继续卷曲。
那个文件夹在他桌上放了将近一个月。不是E1M3的设计图文件夹——那一个他每天都要打开,因为关卡还在调整。是一个新的文件夹,黄色牛皮纸封面,从办公用品柜里拿的,里面夹着他从1992年开始写的游戏设计笔记。有些是打印出来的电子邮件,有些是写在横格纸上的手稿,有些是餐巾纸上画的概念图。这些东西曾经堆在他办公室的一个纸箱里,和旧显卡、备用鼠标、几盘忘记还给威利茨的备份磁带混在一起。他在二月第一个星期的某个深夜把它们翻了出来,一张一张摊在会议桌上,按时间顺序排列。
最早的笔记写于《德军总部3D》开发中期。一张从活页本上撕下来的纸,蓝色圆珠笔字迹,列出了五条基本原则。秘密房间必须让玩家感觉“我发现了别人没发现的东西”。弹药永远比需要的少百分之二十,强迫移动。每一个拐角后面要么是奖励要么是威胁,不能让玩家走空路。关卡结尾需要一次压倒性的对抗,让玩家用掉之前囤积的所有重型武器。死亡不是惩罚,重新开始是游戏的一部分。他用圆圈把第五条圈了起来,旁边用铅笔加了一行注:汤姆说这跟传统设计思维相反,但我觉得这才是街机灵魂。汤姆·霍尔的铅笔字。
1993年4月的笔记。一张打印出来的A4纸,边角被咖啡渍染黄了一片,内容是关于《毁灭战士》E1M1的流程设计。纸上画了一个粗略的流程图,标注了从玩家进入关卡到拿起第一把霰弹枪之间的时间应该在多少秒之内,中间必须经过几个视觉引导点,每一个引导点的光照强度都标了相对值——最亮的区域是玩家应该去的方向,阴影是用来隐藏奖励的。那张图的右下角有一行写给自己的批注:想想初次接触街机的感觉——没有人教你怎么玩,但你在三十秒内就知道该怎么玩。
1994年11月的笔记。一封打印出来的电子邮件,发件人是一个斯坦福大学的学生,主题是《毁灭战士》的空间句法分析。那个学生用在建筑系学到的空间分析理论,把E1M1的关卡地图转化成了一张节点网络图,统计了每一个房间的平均可视距离、每个决策点的分支数量、玩家路径的熵值。邮件的结论是:E1M1的路径熵值在同类游戏中排名最高——它给玩家制造了最大程度的方向感迷失,但每次迷失都在三十秒内提供一个方向提示,使得挫败感永远不会累积到退出阈值。罗梅罗在那封邮件上用红笔画了一个五角星,旁边写:这就是设计哲学。
1995年4月的笔记。《毁灭战士II》发布后一个半月。一页横格纸,写得密密麻麻。开篇第一句是:全三维是下一场革命,但革命会杀死革命者吗?下面是一串关于三维空间设计的预判:三维迷宫容易迷路,需要更强的视觉锚点;跳跃机制改变关卡节奏,解密要素的位置必须重新思考;动态光源会让隐藏房间很难藏住,必须用别的手段来代替——也许是移动物体,也许是环境音效?最后一个问题后面画了一个问号,问号下面又划了一道加重线。
罗梅罗把这些笔记一张张翻过去。纸张在指间摩擦的声音干燥而细碎,像秋天踩在落叶上。他把每一个批注、每一个问号、每一个被强调的词语都看了一遍。这些字是他写的。这些图表是他画的。这些设计原则是他在密西西比河边的车库里、在湖街公寓的折叠桌前、在搬到这栋黑色玻璃大楼后的第六层办公室里,逐条积累下来的。他打开电脑,新建了一个文档。光标在空白页面上跳动,屏幕的荧光打在他脸上,映得眼窝和颧骨的阴影比平时更深。他打出标题,删掉,重新输入了两个词:设计笔记。
他写了三千字。没有用复杂术语,没有引学术论文。他写的只是他已经做的、正在做的、以及想做但还没做成的事。关于为什么玩家喜欢秘密房间——不是因为奖励本身,是因为发现的行为激活了大脑的奖赏回路。关于为什么弹药短缺比弹药充足更让玩家专注——因为专注来自轻微的不安全感,不是来自碾压的满足感。关于为什么关卡节奏和音乐节奏遵循同一条原理——紧张和释放的交替频率决定了人类的注意力能持续多久,无论是听一首歌还是闯一关。他写道:他做的所有设计决策,最终都可以追溯到十四岁时在街机前学到的一个道理,在那台机器前,他只有三十秒让玩家觉得这个游戏值得继续玩下去,如果玩家在这三十秒内没有获得某种形式的积极反馈,就会走向隔壁那台机器。这是街机厅的达尔文主义。它塑造了他,也塑造了他做的每一款游戏。
写完后他把文章打印出来,装进那个黄色文件夹,夹在所有笔记最前面。他在文件夹封面上用马克笔写了一个日期:1996年2月8日。他没有把它发出去。他把它放在了办公桌右手边的抽屉里,抽屉拉开的轨道有点涩,需要用一点力才能完全打开,像某种故意设置的物理屏障。
二月十四日,星期三。威尔伯安排了一次电话会议,和发行商GT Interactive的市场部讨论《雷神之锤》的上市宣传计划。罗梅罗被要求在会议上汇报关卡设计的特色亮点,用于制作宣传材料。他提前准备了四十分钟,从E1M1的垂直空间延伸讲到死亡竞赛模式下的地图平衡,从哥特建筑的美学一致性讲到潜行路线的多样性。他把内容拆成十个演示要点,每个要点配了一张截图——那些截图是在引擎优化稍好的版本里截的,没有显示任何纹理撕裂或多边形闪烁。他汇报得很流畅。节奏、语气、信息密度,都恰到好处。在《毁灭战士》时期,威尔伯会把他推到台前做媒体演示,因为他的语速和他在关卡里移动的速度一样快,记者们被他带着跑,根本没时间问刁钻的问题。发行商的人在他汇报完后问了几个技术细节:多人在线模式需要多少带宽,最低配置要求是什么,游戏预计的安装光盘容量是多少。罗梅罗知道这些问题的答案,但他回答了前两个后,转向威尔伯说,网络部分的细节最好由威利茨亲自回答,他对那个领域只能概括,不能精确。威尔伯点了点头。威利茨接过电话,开始解释数据包封装和调制解调器握手协议。
通话结束后,威尔伯走到罗梅罗办公室门口,敲了敲打开的房门。他的西装外套搭在左手臂弯里,领带松了一个结,脸上带着一种罗梅罗认识他五年来很少见到的表情——不是担忧,不是恼怒,而是一种介于两者之间的、在商务谈判中从来不会用到的表情。“你刚才主动把话题交给了威利茨。”威尔伯说。这不是一个问题。“他比我懂。”罗梅罗说。他坐在椅子上,椅子向后倾斜,重心压在两个后轮上,前面的轮子微微离地。这个坐姿是他在《毁灭战士》开发期间养成的:在等待关卡编译器完成时,就往后一靠,用腹肌维持平衡,脑子里重构下一组敌人布局。“我不懂的东西不应该乱讲。”
威尔伯看着他,靠在门框上,右手食指在门框漆面上轻轻敲了一下,那个频率和他在周会上敲手背的节奏一模一样。“以前的你会自己全部讲完,”他说,“讲完之后再打电话给威利茨补充细节。”
“以前引擎不是我完全不懂的东西。”罗梅罗说。
威尔伯沉默了几秒钟。然后他把领带彻底解下来,叠了两折放进西装口袋里。“你有什么想让我知道的吗?”
罗梅罗没有立刻回答。他把椅子放平,前轮落回地毯上,发出一声沉闷的接触声。他看着自己的办公桌——那台正在运行的不流畅的关卡编辑器、那个没有名字的文件夹、那本摊开的游戏杂志、那张《PC Gamer》封面——然后说:“没有什么你现在还不知道的。”威尔伯站了一会儿,点了点头,离开了门框。他的脚步声沿着走廊往东,在经过卡马克紧闭的办公室门时没有丝毫停顿,一直延伸到走廊尽头他自己的办公室。
二月十九日。阿德里安·卡马克在晚上七点半走进罗梅罗的办公室。他手里端着一个塑料饭盒,里面装着微波炉加热过的意式肉酱面,番茄酱的酸味在空调过滤过的空气里格外明显。他没有坐椅子,而是直接坐在罗梅罗办公桌对面的矮柜上,把饭盒搁在膝盖上,用叉子卷起一团面条。他说E1M3的石像鬼纹理改完了。他说话的方式和他画画的方式一样——没有多余的笔触,没有装饰性的线条。他描述了如何在石像鬼翅膀根部增加了一组细微的裂纹贴图,使每一只石像鬼看起来都像随时可能从墙上挣脱。然后他说到了E2M2——一个地下陵墓关卡——的墙面植被贴图。那个贴图耗费了他两天时间,因为卡马克的引擎要求所有纹理尺寸都必须是二的幂次方,而最接近他原画比例的那个尺寸会让贴图在远处出现摩尔纹。他不得不把原画的细节密度降低百分之十五以适应尺寸限制。他用叉子戳了一块肉丸,嚼了几下,咽下去。“我在想,”他说,“如果引擎支持更高分辨率的纹理,我可以做更多东西。”
罗梅罗看着他。阿德里安和卡马克没有亲戚关系,但他们在某些时刻有一种奇妙的相似性——说话时眼神会飘向某个无形的点,不是犹豫,是在那一点上看到了某种还不存在但应该存在的东西。卡马克看到的是算法。阿德里安看到的是图像。“你跟卡马克提过吗?”罗梅罗问。“提了。他说纹理缓存的预算已经满了。目前引擎的纹理内存分配是十二兆,所有关卡共享。提高分辨率需要每关独立加载纹理包,那意味着重新设计磁盘读取顺序和内存分页机制。他说这件事在他的列表上排在光照优化和网络同步延迟之后。排在第十六项。”阿德里安把叉子插在饭盒里的面条中间,像在画布上确定了某个色块的位置。“排在第十六项。”
阿德里安没有继续讨论这个话题。他用叉子把饭盒里剩余的面条和肉酱拌均匀,然后平静地说,卡马克现在在电梯里跟他说话的语气,有时候像在汇报进度或者安排工作。他没有指明“他”是谁。罗梅罗也没有问。阿德里安把最后一口面条吃完,盖上饭盒盖子,站起来。他走到门口时停了一下,手在门把手上悬了一秒,但没有转身。他说E1M3的月光缺口他重新画了纹理。罗梅罗原来设计的是六个光斑,他只能做三个。多边形接缝在另外三个位置上会出现可见裂缝。三个光斑加上那个零点七参数,应该能接近罗梅罗要的效果。尽量接近。他走了。走廊里响起运动鞋踩在地毯上的声响,渐行渐远,然后被编程区服务器风扇的持续嗡鸣吞没。
罗梅罗关掉Worldcraft编辑器,打开了那篇三千字的文章。他重新读了一遍,改了七个词,删了一段,又加了一句关于死亡竞赛的论述——他认为死亡竞赛是人类历史上第一个真正意义上的虚拟竞技运动,不是电子版的棋类游戏,不是模拟的体育运动,而是属于计算机原生的竞技形式。然后他打开电子邮件客户端,新建了一封邮件,收件人是《PC Gamer》的韦斯特。他在邮件正文里写道:格雷格,上次采访里提到的那些想法,我整理成了一篇文章。如果你觉得适合发表,可以用。我只是想把一些东西说清楚。约翰。附件:设计笔记。他点了发送。邮件客户端弹出一条简短的状态提示:邮件已发送。他看了一眼时间——晚上十一点四十七分。走廊尽头那束白光还在。它现在的位置和两小时前一模一样,不偏不倚地落在门缝正下方,两侧的地毯纤维被长期照射压得比旁边的更为扁平,形成了一道浅槽。
罗梅罗关掉电脑,从椅背上抓起皮夹克——那件夹克从什里夫波特时期就跟着他,皮质已经磨出了包浆,左袖口裂过又缝过,留下一条像伤疤一样的线迹——然后走出办公室。走廊是空的。吸顶灯已经自动切成了夜间模式,只有每隔一个灯管亮着,在铺着浅灰色地毯的走廊里投下间隔相等的椭圆形光斑。他自己的影子从身后拉长,越过一段又一段光斑,在前方拐角处消失。他经过卡马克的办公室。门缝下的白光稳定而无声。门的另一侧,键盘被快速敲击的细碎声响持续不断,像一台永远不关机的电传打字机。他没有敲门。他走过那扇门,走出走廊尽头,推开安全门进了楼梯间。皮鞋在水泥地面上敲出空洞的下行节奏,一直响到地下停车场那一层。黑色保时捷的车门开启又关闭,引擎启动的低沉声浪在混凝土空间里反弹、衰减、消失。然后停车场里只剩下荧光灯镇流器的嗡鸣,以及七层楼上那间办公室门缝下漏出的稳定白光——它仍然照着走廊地毯上那道被压平的浅槽,照着罗梅罗软木板上一张翘起卷边的杂志封面,照着那个没有名字的文件夹里那张被改过六遍、不再是一座城堡的线框图。
引擎的轰鸣在停车场里消失后,走廊尽头那束白光仍然稳定地投射在地毯上。它穿过门缝,穿过走廊的空气,穿过罗梅罗办公室门缝的间隙,在黑暗中形成一个模糊的、遥远的、不肯熄灭的记号。那道光不需要睡眠。它有自己的时间,那是引擎核心的时钟频率,是代码在凌晨的编译周期,是一个正在被他建造出来的圣杯的重量。它的光芒透过门缝,照在铺着地毯的走廊上,而整栋黑色玻璃大楼的隔音墙壁里,储满了所有没有发出的邮件和所有没有敲响的门。