第 1 章
录像带的史前史
速通文化的源头不在互联网上,而在《毁灭战士》那个毫不起眼的demo录像功能里。1993年,id Software在游戏中内置了一个名为“demo recording”的系统,它原本的设计意图极为朴素:让玩家录下自己的游戏过程,回放给朋友看,或者用作技术调试。这个系统将玩家的每一次操作——每一次移动、每一次开火、每一次切换武器——都忠实地记录为一个轻量级的.lmp文件。
它不记录画面,只记录输入指令序列;回放时,游戏引擎根据这些指令重新“演算”出一场完全相同的战斗。
这个技术决策在当时看来只是程序员约翰·卡马克众多精妙设计中的一个注脚,但它埋下了一颗种子:游戏过程第一次成为可以被精确复制、传输和检验的客观对象。没有demo录像,就没有速通。速通的前提,是“打得快可以被证明”。要理解这个判断的分量,需要回到《毁灭战士》本身的技术构造里。
卡马克在1993年做出的那个看似不起眼的工程决策——用输入指令序列而非视频流来记录游戏过程——彻底改变了玩家与游戏的关系。.lmp文件的扩展名代表“lump”,这是id Software内部对数据块的称呼,一个粗糙而诚实的名字。它确实只是一堆数据的聚合体:时间戳、玩家坐标、视角角度、按键状态、武器切换指令。文件大小通常在几十KB到几百KB之间,取决于录像时长。一段十分钟的通关录像可能只有不到200KB。在1993年,这意味着它可以通过14.4kbps的调制解调器在几分钟内传输完毕。
这个技术特性在当年是一个纯粹实用主义的产物。id Software的开发者们面临一个简单问题:如何让玩家分享自己的游戏表现?录制视频在1993年几乎不现实——视频采集卡是专业设备,价格以千美元计,生成的视频文件庞大到无法通过拨号网络传输。卡马克的解决方案是工程师式的:不记录结果,只记录过程。
让每一台运行《毁灭战士》的电脑都成为一台可以精确复现战斗的演算机器。这个决策的技术前提是《毁灭战士》引擎的确定性。游戏中的所有行为——怪物的移动模式、武器的伤害计算、子弹的散布范围——都由伪随机数生成器控制。只要初始状态相同,输入序列相同,随机数序列就完全相同。这意味着同一段.lmp文件在任何一台电脑上回放时,都会产生逐帧一致的画面。游戏过程由此获得了一种近乎公证文件的属性:它不可篡改,可以被任何人独立验证。
但这里有一个关键细节容易被忽略。卡马克设计这个系统时,想到的用途是调试和分享,而不是竞赛。id Software的内部开发流程依赖demo录像来复现bug——程序员不需要看到bug的描述,他们只需要拿到一段能触发bug的.lmp文件,在自己的机器上回放,然后在代码层面追踪问题。这个功能也允许玩家录下自己最精彩的战斗片段,发送给朋友炫耀。
在1993年底到1994年初的美国大学机房和计算机爱好者圈子里,《毁灭战士》的.lmp文件开始通过BBS和FTP站点小范围流传。这些早期交换是零星的、私人的。玩家在BBS上留言:“我打过了E1M3,只用了三分半,录像在附件里。”另一个人下载,观看,然后回复:“你第三分钟那个转身慢了。”没有排行榜,没有计时标准,没有社群共识。只有一段段.lmp文件和零散的评论。
但一种新的观看方式已经在这片无人知晓的土壤里萌发:一小群人不再把《毁灭战士》当作一场沉浸式的射击体验,而是把它看作一套可以被优化的动作序列。他们反复观看同一段demo,不是为了欣赏枪战的火光,而是为了数帧——计算某个转身是否多花了三十分之一秒。
《毁灭战士》以35帧每秒的速度运行,这意味着每一帧持续约28.57毫秒。一个多余的转身动作可能浪费三到五帧,也就是零点一秒左右。在正常游玩中,零点一秒毫无意义。
但在反复观看demo的玩家眼中,这个数字开始变得具体,变得可以计算,变得值得被消除。这是一种全新的游戏关系。玩家不再是故事的参与者,而是系统的解读者。他们阅读的不是叙事,而是规则。
1994年,一个名叫克里斯托弗·克莱默的玩家上传了一段demo。这段录像记录了他在“Ultra-Violence”难度下通关《毁灭战士》第一幕的过程,用时远低于任何人的预期。Ultra-Violence是《毁灭战士》的次高难度,敌人数量多,伤害高,弹药有限。正常玩家在这个难度下的通关时间通常在十五到二十分钟以上。克莱默的录像用时远低于这个范围——具体数字在今天已经很难精确考证,因为当年的BBS存档大多散佚,但留存下来的讨论记录表明,这个时间让当时的观看者感到震惊。
这段录像没有解说。没有观众欢呼。没有排行榜上的数字跳动。只有一个孤独的玩家在像素走廊里以近乎病态的精确移动。
克莱默的角色几乎从不走直线——他总是在切角,利用《毁灭战士》引擎的碰撞检测特性来缩短移动距离。他的武器切换发生在敌人出现的同一帧,霰弹枪的射击角度经过计算,确保每一发弹丸都能命中多个目标。在E1M2关卡那个著名的核废料池区域,他的移动路线完全绕过了常规路径,利用墙壁的微小凸起来达到更高的移动速度——这是《毁灭战士》引擎的一个特性:贴着墙壁移动时,速度向量会叠加,导致实际移动速度快于正常奔跑。这个技术后来被速通社群称为“wallrunning”,但在1994年,它没有名字。克莱默只是发现了它,利用它,然后把它录进了.lmp文件里。
观看这段录像的人注意到一个细节:在E1M4关卡的一个走廊转角,克莱默的角色在开火后立即转身,转身角度精确到几乎没有任何多余帧。在正常游玩中,玩家用鼠标或键盘完成转身后,总会有一个微小的修正动作——视角稍微晃一下,然后对准目标。但在克莱默的录像里,这个修正动作不存在。
转身的终点就是下一个移动方向,中间没有一帧浪费。这个操作在今天看来是速通的基本功,但在1994年,它意味着有人第一次将《毁灭战士》的移动系统理解到了帧级别。
这里需要解释一下《毁灭战士》的移动机制。游戏中的玩家移动速度并非恒定值。向前移动的基础速度是一个固定数值,但侧向移动和斜向移动会产生不同的速度向量叠加效果。当玩家同时按下向前和侧向的移动键时,角色实际移动速度会略快于直线前进——这是向量叠加的数学结果,而非设计者的意图。卡马克在编写移动代码时,没有对速度向量进行归一化处理,导致斜向移动速度约为直线移动速度的1.4倍。这个数字来自勾股定理:两个垂直方向的速度向量合成后,斜边长度约为直角边的根号二倍。
更微妙的是墙壁的影响。当角色贴着墙壁斜向移动时,墙壁的碰撞检测会不断修正角色的位置,但这个修正过程本身会产生额外的速度分量。在特定角度下,这个额外的速度分量会叠加到移动向量上,导致角色移动速度快于引擎设定的上限。
克莱默在核废料池区域利用的正是这个特性——他找到了一个特定的贴墙角度,使得速度叠加效果最大化。这些机制的发现过程是孤独的。克莱默不可能从任何文档中读到这些信息。id Software从未公布过《毁灭战士》的物理引擎细节。他只能通过反复测试来推断规则的存在:尝试不同的移动角度,观察通关时间的变化,逐帧比较不同路线的时间差异。每一次测试都产生一段.lmp文件,每一段文件都是对引擎规则的一次探针。他将这些探针的结果汇总,形成对游戏系统的理解,然后将理解转化为更优化的操作序列。
这个过程在认识论层面是革命性的,尽管当时没有人意识到这一点。传统意义上的游戏攻略依赖于对游戏内容的记忆和经验积累:记住敌人出现的位置,熟悉关卡的地形,掌握武器的使用时机。这种知识是定性的、模糊的、依赖于个人体感的。但克莱默的操作体现了一种完全不同的知识类型:它是定量的、精确的、可验证的。
他知道转身需要多少帧,知道斜向移动比直线快多少,知道哪个角度能最大化墙壁加速效果。这些知识不是来自经验积累,而是来自对系统的逆向工程。.lmp文件是这种逆向工程的工具。一段demo录像包含了玩家与游戏规则互动的完整记录。通过逐帧观看,分析者可以反推出规则本身。克莱默的wallrunning操作就是一个例子:某个玩家在反复观看录像后,注意到了贴着墙壁移动时的速度异常,然后在自己的游戏中测试,确认了这个特性的存在,再将它应用到自己的路线中。这个过程是归纳式的:从观察现象到发现规则,再到利用规则。
这就是“规则阅读”最原始的形态。速通者不是破坏者,而是最认真的读者。他们对待游戏的方式,更接近于法学家对待法典:逐条解读,寻找条文之间的缝隙,测试边界条件,发现立法者未曾预料到的解释可能性。克莱默在《毁灭战士》的像素走廊里做出的每一个精确转身,本质上都是在阅读卡马克写下的代码——不是通过反编译或阅读源代码,而是通过观察系统对自己输入的响应。
这个类比需要进一步展开。法律条文在制定时,立法者会设想一些典型的适用场景。但条文一旦成为文本,它就独立于立法者的意图,可以被读者按照自己的理解方式加以解读。聪明的法学家会寻找条文之间的逻辑缝隙:两个条款之间的衔接处是否存在未被明确规定的空白地带?某个术语的定义是否足够精确,以至于可以通过重新解释来扩展或限制其适用范围?这种解读方式并不破坏法律——它恰恰是法律系统的运作方式。法律的生命不在于立法者的原意,而在于解释者的实践。
游戏规则也是如此。卡马克在设计《毁灭战士》的移动系统时,设想的是玩家在走廊里奔跑、射击、躲避火球。他没有设想玩家会利用向量叠加来获得额外的移动速度,没有设想玩家会逐帧计算转身的角度,没有设想玩家会把整个关卡分解为一套可优化的动作序列。
但他的代码一旦写成,就成为了一个客观存在的规则系统,独立于他的意图。玩家可以按照自己的方式阅读这个系统,发现他未曾预料到的解读可能性。克莱默的wallrunning不是作弊。
他没有修改游戏代码,没有使用外部工具,没有违反游戏设定的任何显性规则。他只是读懂了卡马克写下的代码,然后按照自己的理解来执行操作。这正是“规则阅读”的核心:在系统允许的边界内,寻找最优解。这个最优解可能完全背离设计者的意图——卡马克绝对不希望玩家像壁虎一样贴着墙移动——但它完全符合系统设定的规则。
1994年的这些实践者当然不会用“规则阅读”来形容自己的行为。他们只是在试图打得更快。但在试图打得更快的过程中,他们不得不更深入地理解游戏的运作方式。速度不是目标,而是理解的副产品。一个人无法优化自己不理解的东西。克莱默之所以能比其他人更快,不是因为他的反应速度更快,而是因为他对《毁灭战士》引擎的理解更深——他知道哪些操作是必要的,哪些是多余的,哪些路径在物理引擎的计算下会产生更快的移动速度。
这里触及了一个反直觉的结论:速通本质上不是关于速度的。它是关于理解的。速度只是理解的外在表现,是理解转化为操作后的可测量结果。
一个玩家可以花数百小时反复练习同一段路线,将操作精确到帧级别,从而获得极快的通关时间。但如果他只是机械地模仿别人的路线,而不理解每个操作背后的原理,那么他永远无法成为最好的速通者。真正推动时间进步的人,是那些能够发现新规则、新漏洞、新可能性的人——那些将游戏当作文本来阅读的人。
这个结论回应了一种常见的批评。有人会说,速通是一种技术性破坏行为,追求的是绕过设计者意图的捷径,其价值仅在于竞速本身,而非对游戏的深层理解。这种批评误解了速通的本质。速通者确实在绕过设计者的意图——克莱默的wallrunning显然不是卡马克预想的玩法——但他们绕过的前提是理解。你无法绕过你不理解的东西。要发现wallrunning这个技巧,需要理解《毁灭战士》的移动向量计算机制;要利用这个技巧,需要理解墙壁碰撞检测的帧级行为;要将这个技巧整合进完整的通关路线,需要理解整个关卡的敌人配置、弹药分布和时间约束。这不是破坏。这是最深入的阅读。
一个普通的《毁灭战士》玩家可能通关几十次,却永远不会注意到墙壁对移动速度的影响。他沉浸在射击的火光和怪物的咆哮中,体验着设计者为他准备的恐惧和快感。这是游戏作为一种叙事和感官媒介的正常使用方式。
但速通者拒绝这种使用方式。他们关掉声音,忽略画面,只关注引擎底层的数字流动。他们不是在玩《毁灭战士》,而是在阅读《毁灭战士》——阅读它的代码、它的物理规则、它的随机数序列。
这种阅读是孤独的。1994年的《毁灭战士》玩家没有维基百科,没有视频教程,没有论坛上的路线讨论帖。他们只能自己测试,自己观察,自己发现。
BBS上的.lmp文件交换提供了一个验证渠道——你可以看到别人发现了什么,然后在此基础上进一步探索——但这个渠道的效率极低。拨号上网的费用按小时计算,下载一段200KB的文件可能需要支付几美元的电话费。不是所有人都愿意为了一段游戏录像支付这个成本。BBS的使用体验本身就是一个门槛。
用户需要通过调制解调器拨号连接到服务器,等待握手信号建立连接——那段标志性的嘶嘶声和蜂鸣声持续十几秒,然后终端屏幕上出现文字菜单。你需要输入命令来浏览文件列表,选择下载,等待传输进度条缓慢推进。一个200KB的文件在14.4kbps的速度下需要大约两分钟传输。这两分钟里,你只能盯着屏幕上的进度数字,听着电话线里时断时续的载波信号。下载完成后,你退出BBS,断开连接,然后打开《毁灭战士》,加载.lmp文件,才能看到那段录像。
整个过程是异步的、缓慢的、缺乏实时互动的。你在BBS上看到一段demo的上传日期可能是三天前。你下载它,观看它,发现了一个值得研究的地方,然后反复回放、逐帧分析。你可能花几个小时研究一段四十七秒的录像。
然后你录制自己的版本,再次拨号上网,上传到BBS。上传者可能在一两天后看到你的回复,然后下载你的录像,重复同样的过程。这种交流的节奏更像是一种档案交换,而非社群协作。
每个人在自己的电脑前独自工作,BBS只是一个文件交换的中转站。没有实时讨论,没有集体分析,没有共同形成的知识体系。每个发现都是私人发现,即使它通过BBS传播开来,发现者也很难知道有多少人看到了它,更不可能知道这些人从中推导出了什么新的东西。
所以克莱默的录像在很长时间里几乎是无人见证的。它被上传到了某个BBS,被少数人下载和观看,然后被遗忘在逐渐失效的FTP服务器上。没有人在当时意识到这段录像的意义。它只是一段游戏录像,一个玩家对自己成绩的记录。
但它在本质上定义了一种全新的游戏关系:玩家不再是故事的参与者,而是系统的解读者;游戏不再是沉浸式体验,而是可以被逐帧分析的动作序列;速度不是主观感受,而是可以被精确记录和验证的客观数据。
这种关系是私人的。克莱默坐在自己的电脑前,在深夜的显示器光线下反复测试同一段走廊。他可能失败了上百次——角度不对,速度没叠加上,被怪物击中浪费了时间。每一次失败后,他重新加载关卡,重新开始录制。
.lmp文件覆盖旧的.lmp文件。硬盘上只保留最新的、最好的那一段。最终他得到了一段满意的录像,将它压缩,拨号上网,上传到BBS。
然后他关掉电脑,回到正常的生活。没有人鼓掌。没有人知道他的名字。甚至他自己可能也没有意识到自己做了什么。他只是想打得更快一点。
但这正是种子发芽的方式。不是在有光照的地方,不是在被人注视的地方,而是在黑暗的、无人知晓的土壤深处。.lmp文件的技术特性——轻量、可复制、可验证——提供了土壤。克莱默的精确操作——逐帧优化的转身、向量叠加的利用、对引擎规则的逆向阅读——提供了种子。
这两者的结合定义了一种游戏关系的原型:一个人,面对一套规则系统,通过反复测试和观察来理解它,然后将理解转化为可验证的操作序列。这段录像没有改变世界。它只是安静地存在于某个服务器上,作为一个档案,一段记录,一个无人见证的时刻。
在那个著名的走廊转角,克莱默的角色完成了一次在当时看来几乎不可思议的操作:开火的同一帧内,霰弹枪的闪光尚未消失,视角已经开始旋转。转身的角速度在《毁灭战士》中由鼠标灵敏度决定,但克莱默的转身不是平滑的弧线——它是一次精确的跳转,从面向前方的开火方向直接切到侧向的移动方向。在回放时逐帧观看,你会发现开火的那一帧画面上,霰弹枪的枪口火焰正处于最亮的状态;紧接着的下一帧,视角已经转了大约九十度,角色的移动方向已经改变;再下一帧,角色开始以斜向移动的方式贴着墙壁前进。
三帧之内,开火、转身、贴墙加速三个动作全部完成。每一帧都承担了明确的功能,没有一帧被浪费在过渡或修正上。
这种操作在今天有一个专门的术语,叫做“frame-perfect input”——逐帧精确输入。它要求玩家对游戏的帧率有直觉般的感知,知道每一个动作需要占用多少帧,知道两个动作之间的衔接在哪一帧发生,知道在哪一帧按下下一个按键才能实现无缝切换。《毁灭战士》以35帧每秒运行,这意味着每帧之间只有约28.57毫秒的窗口。克莱默在那个走廊转角完成的,是在这个28.57毫秒的窗口内将一个开火指令、一个视角转动指令和一个移动方向切换指令精确地编排在一起。
这不是反应速度的问题。人类的反应时间在150到250毫秒之间,远长于单帧的持续时间。没有人可以在看到一帧画面后做出反应,然后在下一帧到来前完成输入。逐帧精确输入不是靠反应,而是靠节奏——玩家必须提前知道每一帧应该发生什么,然后将整个动作序列内化为一种肌肉记忆的时间节奏,像钢琴家演奏一段快速音阶一样,手指在键盘上的每一次敲击都精确地落在预定的时间点上。
克莱默是如何获得这种节奏感的?他不可能有逐帧分析工具。1994年的《毁灭战士》没有逐帧回放功能,没有输入显示,没有时间轴。玩家只能在正常速度下观看demo录像,或者使用游戏内置的暂停功能来定格画面。要计算某个动作占用了多少帧,唯一的办法是反复播放同一段录像,在每次播放时在同一个位置暂停,然后手动计数——按下暂停键,观察画面,记住角色的位置和状态,然后恢复播放,在下一帧再次暂停,再次观察。
这是一个极其繁琐的过程。一段四十七秒的录像包含大约1645帧。逐帧分析这段录像意味着手动暂停和恢复播放上千次,每次暂停后记录下角色的坐标、视角角度、武器状态和敌人位置。然后将这些记录整理成一份时间线,分析每个动作的持续时间,寻找可以压缩的帧数。
但在它的文件结构里,在那些时间戳和输入指令的序列里,已经包含了速通文化日后一切发展的种子:可验证性、可优化性、规则阅读的方法论,以及那种近乎病态的精确。拨号调制解调器的握手声在1994年的电话线上嘶嘶作响。一段.lmp文件穿过铜线,被另一台电脑接收。有人在深夜打开《毁灭战士》,加载这段录像,看着一个陌生人的角色在屏幕上以自己从未尝试过的方式移动。他按下暂停键,倒回几秒,重新观看那个转身。他开始计算帧数。
他还没有意识到,这种观看方式本身就是一个新世界的入口。他只是在看一段游戏录像。但他看着录像的方式——逐帧、计算、分析——已经不再是观看,而是阅读。他阅读的不是克莱默的操作,而是《毁灭战士》本身。通过克莱默的输入序列,他看到了引擎底层的规则结构。他开始理解那些从未被文档化的机制。他开始在自己的游戏中测试这些机制。
然后他会录制自己的.lmp文件。他会比克莱默更快。或者发现克莱默没有发现的东西。他将自己的录像上传到BBS。
另一个人下载它,观看它,重复同样的过程。这个过程在1994年没有名字。它太小了,太边缘了,太技术化了,以至于没有人觉得它值得被命名。但它已经在运行。在那些深夜的拨号连接里,在那些逐帧回放的画面里,在那些几十KB的.lmp文件里,一种全新的游戏关系正在无人知晓中形成。它等待着一个可以精确计时的系统,等待着将竞争和集体分析点燃的火种。但在那之前,它只是安静地存在于档案中——一段无人见证的录像,一次孤独的阅读,一颗在黑暗中等待发芽的种子。