向前冲,马力欧!
马力欧在冲刺。
水管工在泥地上飞驰,脚尖点地,向前猛冲,红色的身影像一道划过灰蓝色天空的闪电。
马力欧不只是冲刺。我们常把“冲刺”描述为两点一线的全力奔跑——目标明确,从起点直指终点,距离最近,跑者速度相对恒定,所以用时最短。
这种说法并没有错,不过游戏世界和现实有微妙的差异:现实中的赛道是水平的,游戏的地图是有纵深的,如果把城堡前的旗杆视作终点,从起点出发,马力欧必然经历垂直位置的变动,像是翻过绿色的水管,或是进入水管,途径地下世界。
就像跨栏运动员精简起跳动作一样,砍去不必要的肢体摆动能够节省体力和时间,流畅、简洁的运动轨迹是每一位跑者的目标。马力欧想要尽量快地抵达城堡,除了保持高速奔跑外,也需要规划路线,大到是否进入管道,小到什么时机起跳,甚至只是某一个瞬间的选择:是顶一块砖块?还是踢一颗龟壳?不同决定的结果可能只差1帧,但影响是巨大的,因为所有TAS制作者绞尽脑汁,可能只为了把纪录缩短1帧。
TAS是“Tool-assisted Speedrun”的英文缩写,可翻译为“模拟器辅助类速通”。简单地说,TAS是一种特别的游戏速通方法研究,它能让玩家通过辅助工具,在不改变游戏数据的前提下,实现对游戏的精确把控——理论上可操作的最小单位是帧。辅助包括但不限于即时存档、内存监视和控制游戏的运行速度,只要模拟器支持,同一时间键入的指令数量也没有限制,极限情况下,每秒能输入上百次按键。
所有这些只为一个目的,把游戏的通关时间压缩到理论上的最短。在《超级马力欧兄弟》领域,TAS世界纪录的保持者是HappyLee,他的名字叫李天达,是一名音乐制作人、合唱指挥,兼TAS制作人。
李天达是长春人,他是“雪花青年合唱团”的指挥,也是合唱团的创办者之一。
“雪花青年合唱团是长春的一个业余合唱团,所有团员来自社会的各行各业,几乎没有专业声乐背景出身的歌唱者。”李天达告诉我,“(我们是)业余合唱团,不过是整个长春做得最好的。”
其实不用他做太多介绍,我已经在他的个人视频主页上看到了不少东西——不是简历般的文字说明,而是一段段彩排视频。播放量最高的一个视频里,他们翻唱了流行歌曲《地球之盐》。镜头随着歌声摇摆,窗外的光线温柔明媚,把合唱教室照得透亮。演唱者围成一个大大的半圆,全情投入,脸上藏不下一点阴霾。
歌声在空气中飘荡,站在圆心位置的人拿着鼓锤,小心翼翼地敲击鼓面,汗水从额头渗出,粘住了松散的黑发,但他好像完全不在意,视线仍集中在鼓上。左右手敲击、停顿,如此反复,鼓皮振动发声,低沉而庄严。你很难不注意到这个人,他穿着黑色上衣,下半身是一条白条纹长裤,一边演奏,一边望着队员,深情而专注,好像眼前所见就是全世界的一切。
他就是李天达。
合唱是李天达的工作,也是他热爱和陶醉的事业——你只用看看他唱歌时的眼神,就知道这是一件他非做不可的事。雪花青年合唱团目前是纯公益性质的组织,李天达和其他成员把演出所得全部捐给了希望工程,上一次公演的门票50元一张,90个席位全部售出,他们就捐了4500元。练习的场地由志愿者提供,排练也不收取学费,他们能通过合唱公演获得一些名声,但也仅此而已了。
最重要的原因还是喜欢。李天达真的热爱这个,大学毕业后,他到北京现代音乐学院进修,此前从没有接触过合唱。有一天他去参观校合唱团的排练活动,一下子被唱班的氛围打动。人们平时说话声音平缓短促,但唱歌时却庄严肃穆,胸腔通过有意的控制起伏不定,低音部和高音部的人声叠在一起,干净、温柔,直击心灵。单薄的人声叠在一起,就有了一股力量,令人头皮发麻,有时候听完一曲回过神来,才发现眼角湿湿的。
如今,在李天达的生活中,音乐占了九成,TAS可能只有不到一成。他告诉我,工作忙,自己几乎没时间做TAS了。他上传的视频中,一大半是和音乐相关的内容,剩下的一小部分才是TAS录像——圈内的制作者习惯把通关视频称作“录像”。因为严格地说,他们的成品并不是一段视频,而是记录一个连续输入的操作序列。
我们在玩游戏时,无论使用键盘还是手柄,手头的操作都被机器如实记录,什么时候摁下按键,摁下哪一个按键,是长按还是轻点……所有的操作被转换成机器可识别的电讯号。如果把它们单独拎出来,再组合在一起,就成了一个连续的序列。TAS也是一样,制作者通过反复调试,优化每一处的操作,找到最优解,再把它发布到网上,和圈子里的其他人分享。
最终的视频相当于序列的展示。只要知道方法,所有人都可以把序列下载到自己的电脑上,然后导入程序,游戏自动以最完美的方式运行,就像一个冷峻的机器人在履行指令,精密、细致,而且永不出错。
知乎上有好奇的玩家提问:“TAS究竟是什么?”回答只有零零散散的几篇,但篇幅都很长,大多一眼能看出是出自圈内人之手。其中有一句说得不错:TAS的本质是影像的记录。
李天达低声告诉我,TAS的圈子正在慢慢萎缩下去。好像淋浴时热水器坏了,水温一点点变凉,冷水淋在身上,却只能眼睁睁地看着,什么也做不了。
对于不了解TAS的人来说,很容易产生一个疑惑:TAS是不是作弊?
是啊,TAS的操作太……夸张了,不仅每一步准确无误,有时甚至达到了匪夷所思的地步:马力欧跑着跑着就冲进了墙里,蹬着一面墙能反复弹跳好几次,直到“飞”出画框外。如果你对游戏足够了解,就知道这些都是利用漏洞做出的操作,但要是不懂,大概率只能瞠目结舌地看呆——这是怎么做到的?
人们倾向于用简单的逻辑去解释自己不了解的事物。一个想当然的结论是“他一定是作弊了”,直白,但毫不负责。遗憾的是,网络就像一片叽叽喳喳的树林,里面有悦耳的百灵鸟,也有令人厌恶的乌鸦。李天达——不仅是他,在几乎所有TAS视频制作者的留言中,总有人跳出来指责:这种操作不是实际打出来的,是开挂。
误解与无端的指责总让人寒心。TAS当然不是“开挂”,制作一段TAS录像需要花费相当长的时间,开一个坑意味着制作者要向其中投入数月乃至数年的心血。制作过程冗长而繁杂,一般来说,制作人首先要在纸面上设计好过关路线,可是老游戏如《超级马力欧兄弟》,距离发售已经过去了快40年,游戏中的每个犄角旮旯早已被狂热的玩家摸透了。像是穿墙——马力欧利用龟壳等踩踏物能进入地下墙体,一路奔跑,从怪兽和障碍物底下滑过;“不拉旗”处理能取消过关时小旗子降落的动画,甚至跳过马力欧进入城堡的动作,省下相当可观的时间;另一个常用的操作是高速连续下蹲,能在保持冲刺速度的前提下把身体缩小一半,控制好走位,就能和许多看似不可能躲过的死亡判定擦肩而过。
这类操作说白了是钻游戏的空子,它没有修改任何游戏数据,仍然是输入操作指令,不算“作弊”。理论上说,只要一个玩家手速够快,卡点够精确,就能在实况游玩中打出一样的操作。
“利用游戏Bug”是圈子里的共识。如果只是直线奔跑,那也太没劲了,从某种程度上来说,玩家能钻空子的地方越多,游戏就越能“整花活儿”,做出的TAS也更加好看。TAS制作者经常翻查游戏的内存值,每挖出一个新机制就意味着游戏还能快上几帧。制作者们把挖掘游戏视作TAS的第一要义,只有深入地理解游戏,才能构想出最精妙的通关路线。
因此,所有TAS制作者其实是在解决“怎样通关才最快”的难题,这特别需要和我们一般意义上更熟悉的“速通”区分开。速通是在长期练习后,在实况游戏中,以超高的精确度打通游戏。如果把速通比作实战,TAS更像是“做科研”——探寻理论上最快的速度,并反过来为速通提供理论支持。实际上,不少速通技巧和通关思路正来源于TAS的先期探索,两者的关系就像远航的小舟与灯塔,一个勇闯黑暗,另一个拨开迷雾,指引前路。
当然,在TAS制作中也有出于表演因素的考量,目的也不一定仅仅是“达到最快”,不可一概而论。就像李天达和几位合作者制作的“初代马力欧最少跳”录像,正如其名,制作者不仅要最快通关,还要绞尽脑汁把跳跃次数减至最少,变量增多了,复杂度也几何倍数地上涨。不论如何,有一点是确定的,TAS制作者其实是在探求最佳的通关方法,而这并不是一件容易的事。
不是所有观众都能理解这一点,毕竟一个视频嘛,看过之后或惊呼,或不屑一顾,也都是划走,再下一个。圈子里他们玩得投入,在外却没有得到多少人的认可。游戏论坛里偶然提到TAS,大多数玩家还是两眼一抹黑:“那是啥呀?”
李天达是“超级马力欧兄弟”TAS领域内最知名的制作者之一。他是多项世界纪录的保持者,单是列在TASVideos网站上的纪录就有12个之多。这个网站是全世界TAS制作人的集合地,几乎所有得到承认的纪录都保存在它的排行榜上。在李天达的所有纪录中,最瞩目的无疑是“初代《超级马力欧兄弟》全程最速通关”,时长是18分36秒78毫秒,不跳关,流水一般通过32个关卡。
通关视频中,马力欧向前飞驰,一刻也不停留,食人花、栗宝宝、诺库龟……甚至连库霸王也不能阻挡他分毫。背景急速朝马力欧身后飞去,他虎虎生风地冲向终点,说实话,比起拯救公主,更像是百米赛跑。
这是一项了不起的成就——成为世界第一!想想就令人振奋。《超级马力欧兄弟》是TASVideos上最热门的游戏,竞争者也是所有游戏中最多的,单是发布过的录像数就高达1400个,尝试挑战的玩家只会更多。李天达从开始制作录像到最终完工,断断续续花了6年。他把这段视频上传到了bilibili,点击量不算高——8.4万。和今天首页上动辄上百万播放量的视频相比,“世界第一马力欧”只掀起了一片小小的浪花,很快就平息下去。
除了李天达,Mars也参与了《超级马力欧兄弟》的录像制作。李天达制作了录像的大头,Mars则和他合作,提出了几处细节上的改进。虽然听起来权重不同,但后者的工作同样重要,因为一个TAS项目制作到后期,游戏该发掘的地方全被挖得差不多了,每一处小的改进都可能刷新纪录。Mars对《超级马力欧兄弟》一样有深入的理解,他把录像一帧一帧抠出来播放,发现了几处藏在录像中的优化点,为最后的突破起到了很大帮助。
一般来说,一个TAS制作者会专精一个或几个游戏,数量不会太多,想要拿下一款游戏的纪录不是容易的事,制作人需要对游戏有深入的理解,扒源代码、检索数值地址、监视内存……都是常事中的常事。李天达和Mars能精确地说出马力欧的碰撞体积,拿视频中的“神奇操作”问他们,两三句解释,一下就能说清背后的原理。
Mars的另一个项目是FC版《魂斗罗》速通,国内的老玩家对此再熟悉不过了——“红人”和“蓝人”,比尔与兰斯,两个热血战士直捣虎穴,他是这项TAS的世界纪录保持者。《魂斗罗》在国内是一代人的回忆,但在欧美没那么有影响力。Mars在发布视频时,想到了一个颇为伤感的标题——《老外可能无法理解国人对这个游戏的执着吧》。既孤独,又有点自豪。
视频获得了70多万的播放量,Mars告诉我,这是TAS圈子里播放量最高的视频之一。游戏中,热血战士发出的子弹和观众留言叠在一起,红色和白色弹幕在屏幕中漫天飞舞。“童年!!”“这预判?!”“真是艺高人胆大啊!”等字样反复飘过,偶尔能看见“TAS”,不过了解的人还是不多,一些玩家自发地科普起来,但很快淹没在压倒性的惊呼声中。
70万的点击量转换成了收入——2000元人民币。听起来还不错,但考虑到他的视频制作了8个月,几个玩家一起合作,其实也不算多。要想靠做TAS赚钱,根本不可能,这条视频火爆很大程度上是因为《魂斗罗》在国内地位特殊,它是很多玩家的童年回忆,天然地吸引流量——这样的TAS项目只有少数几个,新人想要入坑,可没有这么好的空缺。
TAS的一大问题是代际困难。圈子内几乎没有新人愿意加入,视频制作周期长,观众不多,火爆一点的游戏早已经被其他人做过了……总之,原因各式各样。做TAS很像科研,是一个积累理论的过程,只有熟练地掌握已有的,才能发现新的,最终在成绩上有所突破。还有一个原因是,制作TAS的过程和科研一样精密复杂,甚至达到了繁冗的地步。付出数不尽的心血,直到最后突破才能收获喝彩声——可是有多少人愿意默默地研究一款几十年前的老游戏呢?
老游戏不吸引人,那就做新游戏吧,可是像Wii平台上的TAS又有很大的局限——Bug少了,失去了钻空子的空间,也就没有了灵光一闪的操作,没有能让人大跌眼镜的独特玩法,TAS和速通的界限逐渐模糊。另一些平台,诸如PSV、3DS上面,没有成熟的、支持TAS功能的模拟器,制作者们又难以下手。Mars告诉我,新平台上的游戏做TAS“很无聊”,整个流程和速通玩家几乎一样,只是绝不出错,像一个完美的范本。速通的魅力在于不连段的高密度和高精度操作,TAS的点则是保证速度的前提下,尽可能多地“整花活”。突破世界纪录的《魂斗罗》视频中,红蓝小人蹦蹦跳跳,时而转身“漂移”,时而左右跳跃微动……花式繁多,可丝毫不影响速度,这也是它独特于速通的地方。
TAS和登山一样,山顶是所有人的目标,但要找到一座合适的山,并超越前人攀至顶峰,太困难了。
生活越来越忙碌。
李天达可以说是“身兼数职”,既要带合唱团排练,空闲时间又要给小朋友上钢琴课,还有音乐制作方面的商业活儿,经常从早忙到晚,不分工作日和周末。好处是相对自由,坏处是工作和生活揉在一起,拉拉扯扯分不清。不过没有办法,这是他的收入来源,而合唱是他的志向,两边都难以割舍。
李天达热爱音乐,大学时期,他在北京理工大学计算机专业就读,本来是一个“理科生”。说实话,他不太愿意用“文科生”“理科生”一类的标签概括自己,或是任何人。他认为人都是复杂的,学理科可能在一定程度上代表着逻辑思维严密,但这并不与感性互斥。计算机系的学生多才多艺,谁也算不上榆木脑袋,更何况“袁隆平也喜欢拉小提琴”。他更愿意把自己定义为一个浪漫的、思维缜密的人。
毕业后,李天达转去学了音乐,打算把它作为未来的事业,当“数字搬砖工”的念头被抛在了脑后。事实上,李天达大二就转了专业,铁了心不做计算机。而且他的音乐梦不是一拍脑袋想出来的,李天达很早就展露出了音乐天赋,自小有“绝对音感”,大学时凭借音乐才能参加了《出彩中国人》。节目中,他说自己能分辨钢琴同时发出的5个音,主持人半信半疑,让音乐组考考他。一阵混杂的钢琴声响起,他听了听,说是“do、mi、降ti、re、la”,钢琴师身上没带麦克风,所以没说话,但直朝他竖大拇指。
才艺表演结束后,主持人抛给他一个问题,你觉得生命的意义是什么?他几乎脱口而出:“是创造和奉献。”
5年后的今天,他依然能够坦然地说出“生命的意义是创造和奉献”,现在,他还给出了更详细的解释,他告诉我,创造和创作不同,创作有一点孤芳自赏的味道,而创造总是想着替别人带来一点什么。如果说创作是内向发掘,创造就是考虑到旁人后结合理想与现实的选择。这时,他停顿了一下说:“创造和奉献其实很像。”无论是做音乐,还是做做TAS,他总想着留下点东西,后来人看见了,能有所得。
雪花合唱团已经办了两年,小有所成,是长春最好的业余合唱团。团员由一开始的几个人,慢慢增长到了近50人,李天达也从一个刚毕业的音乐青年,成了名副其实的团长。事业蒸蒸日上,主动找他的工作越来越多,有时候微信消息积得多了,难免漏掉几条,晚上看到才回复。忙是好事,自由职业者就怕整天闲着,慵懒惯了,人也会颓下去。一切正在走上正轨。
但李天达已经很久没动过TAS了,手上的项目也积压起来,新坑仍开个不停,空闲时间却再也挤不出来。毕竟他的主业还是合唱,一个人带一个团,还有上课和其他的工作,已经忙得不可开交。“TAS只是副业中的副业,生活还是挺难的,工作已经很忙了,做TAS的时间也越来越少了。”
他接着说:“而且对我来说,做TAS不是一个特别轻松的事了,也不会特别骄傲。可能我感觉还是挺头疼的,因为做TAS时必须得保持像解数学题一样的状态。有时候一个地方,想一整天也解不出来,甚至头疼几周也没有一个特别好的解决办法。”
Mars的情况也差不多,他本来在政府机关上班,从事安全检查方面的工作,待遇一般,不过单位管理相当宽松,有大量时间做自己喜欢的事。四平八稳的生活得过久了,心会发慌,他前段时间下定决心,出来再闯闯,辞了职,进了私企,生活顿时忙碌起来,做TAS的时间就不知不觉被挤掉了。
Mars希望这篇文章能够吸引更多的新人入坑,我们聊了一阵子,刚开始兴致很高,却越说越灰心。“每个游戏必然有理论的极限,一旦摸到了底,这个游戏就没有再做下去的意义了。留给新人的项目只会越来越少。”国内TAS圈子几乎就是一个QQ群的体量,48人,群名叫“TAS茶水间”,发言的人不多,就像茶铺的客人,有人想起来就说两句,稀稀落落,有时候几个人三言两语地讨论,有时却一连几天都没人说话。
我问他,如果有一个新人玩家想做TAS,有什么建议吗?
“建议不要入坑。”他半开玩笑地说。话没说完,他自己先笑了笑。“非要入坑的话,建议选择GBA平台的游戏,因为模拟器比较成熟,而且没被挖掘的东西还比较多。”
2018年5月24日,李天达和Mars合作打破了初代《超级马力欧兄弟》的TAS速通纪录,其实这更像是一记回马枪,因为纪录的保持者自2012年以来一直都是李天达,不料在3月份被一位外国制作人抢走了。
当时《超级马力欧兄弟》已经被挖掘得逼近极限,几乎没有能够改进的地方。外国人是一位编程高手,他编辑了一个独特的穷举程序,利用计算机强大的算力,把特定情况下所有的按键策略都输入了模拟器。在李天达原来的纪录中,马力欧在4-4关卡进行了一次穿墙操作,对移动速度和水平高度的要求近乎严苛,他输入了1帧跳跃指令,本以为是最短。穷举后发现,改变特定操作后,延长跳跃指令1帧,能保持其他情况不变,反而让马力欧提前1帧落地。
节约1帧不仅仅是省下1帧。《超级马力欧兄弟》有一项“21帧规则”,游戏以每秒60帧运行,但关底的旗杆每隔21帧才检查一次马力欧是否抵达杆底。21帧是0.35秒,也就是说,游戏的通关时间必然是0.35秒的倍数,玩家想要缩短纪录,必须突破两个21帧间的空窗期。在原本的纪录中,李天达正好差1帧就能抵达下一个21帧的挡板,缩短0.35秒。这个点被别人抢先找到了。
保持6年的纪录怎能拱手让人?李天达和Mars下定决心,无论如何也要把第一夺回来,用他们的话说,“卧薪尝胆了好几个月”。很难描述这有多难,因为没有发现新的Bug,“理论上绝不会再有可优化的地方了”。李天达在发布录像的说明中写道:
“如果我回到2012年刚刚发布上一个纪录视频的时间,告诉自己,还有几处地方能够改进,而且没有一处用到了新的技巧,我一定会觉得自己疯了,因为我早就测试了每一个我能想到地方。”
“可是我后来发现,错过的原因既不是懒惰,也不是粗心,而是新的改进要求制作人拥有无比大胆的想象力和近乎疯狂的乐观主义精神。最后,再加上一点运气。”
幸运的是,无论是狂野的想象还是运气,命运女神似乎站在了他们这边。最后,李天达和Mars各提出了一个新改进,加上外国人发现的两则旧条目——他们也独立发现了其中一处,在2012年录像的基础上,一共缩短了84帧,即1.4秒,同时刷新世界纪录0.7秒。这项纪录保留到现在,无人打破。
在李天达编写的录像发布信息中,对他们提出的3项改动进行了详细的说明。原文档是英文,比较长,为了易读,触乐进行了一定的编译处理。下面是节选后的说明文档:
更快的6-2关卡(提出者:HappyLee)
在原来的纪录中,6-2关卡距省下21帧还差10帧。即使是最出色的TAS制作者,像MrWint一样挖掘代码并编写穷举算法也只能省下2帧,但我们做到了,我们一共省下了10帧。它们分别是:
更快地爬上藤曼——2帧
通过按下“L+D+R”(左+右+下)更快地从藤曼落地——3帧
调整马力欧踩踏诺库龟的时机,以实现更好的移动——5帧
5-1关卡的完美炮弹与不拉旗处理(提出者:Mars608)
为了避开原先挡在6-4关卡中的火焰棒,我们知道,一定得再找出一处改进。
Mars608告诉我,我们唯一还没有测试的是5-1关卡中的炮弹。我当时长叹了一口气,因为我心里知道要让炮弹完美地落在马力欧脚下的可能性非常小,简直微乎其微。但如果真有改进,那也只能是这里了。
后来,我们通过操纵踩踏怪物的组合,拿到了这颗炮弹——这完全是运气!不过也不仅仅是运气,我们的想象力、毅力,以及对游戏机制的理解起到了相当的作用。
接下来的就顺理成章了:我们拿到了完美的炮弹,马力欧起跳,完美的不拉旗……又一个21帧!
在1-4关卡中更快地获得火焰花(提出者:Mars608,PS:MrWint也独立提出了此改进)
1-3关卡中,唯一能够节省21帧的地方是让马力欧更快地获得火焰花。
原本我们是在1-2关卡获得蘑菇,再在1-4中得到火焰花。后来我们进行了调整,在1-3中拿蘑菇,这个改变会让整体用时更短,但距离下一个21帧门槛还差3帧。我们测试了很久,仍然突破不了。
后来一天早上,Mars608惊喜地告诉我:“我做到了!”原来,关键是让方块把马力欧向左推移4个像素,从而获得加速跑的空间。此外,马力欧必须在起跳后的特定1帧触碰到花底的方块,否则他会错过火焰花。
值得一提的是,Mars608在发现这一巨大改进后不太高兴,因为这个技巧当然也能应用到其他的《超级马力欧兄弟》TAS项目中,这意味着他不得不完全重做手头的另一个项目。
(HappyLee、Mars608分别是李天达和Mars在TASVideos和bilibili的ID。)