关于超级马里奥一代bug的详细讲解
序言
相信很多80后们小时候都在fc上玩过一部经典游戏——超级玛丽(正式名称超级马里奥),直到现在还有很多人在研究这个游戏。在研究此游戏的过程中,许多优秀的程序员们和TASer们(即做TAS的玩家)都做出了巨大的贡献。由于开发较早,超级玛丽(后简称smb1,即超级马里奥一代)有很多的bug,在RTA与TAS里都有广泛的运用,但是一直没有人写一篇完整的专栏来介绍。作为一个对smb初代略有研究的TASer,我大致整理了一下,希望对TASer们和RTAer们有帮助。

基础游戏知识一
关于什么是TAS和RTA:
TAS的全称是Tool-Assisted Speedrun(或Tool-Assisted Superplay)。要理解什么是TAS,这里要先介绍一个游戏运行的基本概念,叫“帧”。在smb1中,一帧是最小的时间单位。TAS需要使用特定的模拟器来一帧一帧地输入按键,以达到最完美的操作。通常,一个优秀的smb1TAS作品需要重录上万次甚至上百万次以上,其中包含了TASer很多的心血,所以不要随便在TAS视频下面发“作弊开挂”“这是机器人打的”等评论或弹幕。更多详细内容可见站内的视频和百度百科TAS链接:
https://baike.so.com/doc/5504117-5739861.html
RTA的全称是Real Time Attack,可以简单地理解为人们所熟知的游戏速通。一般地,速通者们也会运用一些游戏bug和技巧快速通关,一遍又一遍刷新记录。
其他简称的补充:
TAP全称Tool-Assisted Play,可以简单地理解为娱乐性质的TAS。在TAP作品中观赏性是被放到第一位的,其次再是速度。

基础游戏知识二
关于smb1穿墙bug的共同特点:
在smb1的bug当中,穿墙bug占了大部分。操作者们通常会运用特定的操作来达到穿墙的目的。它们有一个共性,即要穿墙,总是需要在碰到墙的一瞬间按与马里奥运动方向相反的按键。其中的原理大概是smb1的判定机制是马里奥碰到墙时要向当前按键相反的方向移动,以抵消原来的速度。理解了这一点,之后要理解各类bug就很容易了。


基础游戏知识三
关于smb1超级玛丽初代版本的不同:
smb1可以分为两个主要版本,日版和欧版(当然,盗版的不算)。其中欧版也简称PAL版。两个版本的最主要区别是两个版本的游戏速度不同。但是!欧版它不仅加了游戏速度,还把游戏内各个数值都翻了倍(包括bgm,这也是为什么欧版音乐听着比较急)。这也就导致了某些bug在日版和欧版之间的不同。这篇文章主要介绍日版smb1的bug。
好了,现在进入正题:

不拉旗
通常,smb1日版内的不拉旗都是需要在mario速度较快时在旗杆的底部做一个斜穿并跳起完成的。如下gif

TAS如何完成不拉旗:
最简单的不拉旗就是在到台阶边缘时按一帧跳,在空中微调,很容易就可以做出来。
手操(RTA)如何完成不拉旗:
由于不拉旗的成功与否关乎到亚像素(1/10像素),正常人像TAS一样手调是基本上不可能的,所以就需要特定的操作先调整好关键亚像素(参见此视频)

本bug被klmz发现。第一次应用此bug的视频:

PAL版的不拉旗在进入旗杆底部的方块内的帧数不同,而且会作出类似日版穿地面不进城堡的效果:欧版不拉旗演示(TAS)
2. 藤蔓瞬移
当mario在藤蔓的左侧左右连按(即左加右)时,mario会瞬移到右侧。
如下gif

要更快的做藤蔓瞬移,可以在左侧按一帧上或下再按左+右
(此bug实机无法完成,因为手柄不支持左右连按)
PS:在藤蔓右侧mario落下的时候图像上看着是面朝前,实际上状态是朝后的,加速度比面向前方时快,从而可以更快地加速。
本bug被mana(?)发现。第一个应用此bug的TAS作品:http://tasvideos.org/1331M.html
另一个版本的藤蔓瞬移:

当藤蔓在屏幕的左边缘时,mario有概率会被瞬移到屏幕的最右侧(但是也有可能会被卡住,这与藤蔓在屏幕中的位置有关)。手操可以轻松完成。
3. 斜角入墙
较为困难的bug。原理:在mario在墙的边缘小跳时,游戏在判定mario是否进入墙的时候会出现错误,认为mario不会进入墙内;但是几帧后mario进入墙,游戏便会把mario朝墙外推,这时按下反方向就会被吸入墙内。如mario被吸入的距离大于等于一格,mario便会进入墙内。如下gif。


详细介绍:(来自TASvideos)
在游戏里,任何实体对象(包括管道)都算作地板,这就导致了游戏判断错误而可以完成这一漏洞。
mario需要适当的速度。如果对象只有两个块高,例如1-2末端的管道,则跑步时不能跳入其中。用左+右技巧在跳跃前快速取消加速。如果mario的速度太快,mario会站在物体的顶部而不是里面。
同时,mario需要正确的位置。正确的位置是:尽可能靠近。如果mario离得太近跳起时,mario会撞到它而不会一个像素一个像素地被弹出。
当墙开始弹出mario时,立即转向远离它(指长按与mario运动方向相反的按键)。这会导致墙将mario拉入而不是推出。如果墙现在将mario弹出,则表明之前的某些步骤失败,即玩家没有入满一格墙的距离。
执行此技巧的最简单方法是以步行速度进入两个格子的障碍物:
在正确的距离进行最小高度跳跃(保持1帧)。
如果mario撞到墙上而没有弹出,那就离得太近了;如果mario在地板上落地,那么mario的跳跃保持了一帧以上。
当墙开始弹出时,保持与按住障碍物相反的方向,一旦马里奥穿入墙里,开始正常行走,那么此bug就成功了。
同理,在水中也能做出斜角入墙,并更简单一点,有时甚至能被吸入一格以上。

RTA如何完成斜角入墙的教程:

TAS斜角入墙的教程:
https://tieba.baidu.com/p/855919513?pid=36886017089&cid=0#36886017089
4. 二段跳
非常实用的bug,在绝大部分tas作品中都有广泛的运用。当mario以≥18的速度触碰到两个格子的中部且不处在上升状态时,游戏会错误地认为两个格子中间是“地面”,mario就会在墙上站一帧,这时按跳(a键)就会触发二段跳。手操也可以完成。


关于更详细的二段跳实操:
在多面墙上的二段跳:
相较于在单面墙上的二段跳,这种类型就比较简单一点。在右边的墙完成二段跳时,迅速长按左键并控制按a的时间,使mario在接触到左边墙的一瞬间不处于上升状态且速度大于等于242(即-18)
在单面墙上的二段跳:
建议使mario处于面向左侧的状态时在单面墙上完成n段跳(在墙的左边和右边都可以)。下面的情况默认mario朝向左。
在碰到墙的一瞬间,按下左+a,并控制左或a的按下时间(视情况而定,在上升的格不多时可以多按一段时间的左以获取尽可能大的三次跳速度;在上升的距离比较大时(如HLWL开头的单面直墙)按左的时间则要短一些,并尽量控制mario的下落时间为最小)。在mario跳起几帧后,按下右键并微调,达到n段跳的目的。
如下图,跑步状态下二段跳的极限可以摸到5格高的墙,走路状态下的极限是4格(注意,在mario跳到第三次时都会转为走路状态,所以三段跳的极限是9格)

(要想做到完美的单面二段跳需要控制以达到最大的加速度,不过我现在还不太会qwq)
5. 半身穿墙
属于比较简单的bug,手操可以完成,在很多改版速通中有使用。
在mario站到正上方大约为砖块的边缘时,按下跳和与穿入方向相反的按键,就可以做出一个半身穿墙。
6. 穿直墙
个人认为是smb1中最难的bug,不过熟练后可以轻松掌握,如我现在完成这个动作重录数在50~100次左右。
要完成穿直墙,需要mario马里奥已经在速度至少大于跑步速度的情况下,卡入墙中距完成二段跳低一些的地方。根据卡入墙中的像素大小,可以分为完美穿直墙和普通的穿直墙。
完美穿直墙:当mario在略上升状态中卡入完美位置,可以在1~2跳中完成一个直墙(在不能够顶动和处于大mario状态时会被顶碎的砖块中为2跳,在可以被顶动的砖块中为1跳(又想到HL很早之前说Mana很厉害可以1跳直墙,其实就是忽略了砖块的种类,HL看到了不要打我))
普通穿直墙:又分为3跳直墙和半身直墙,半身直墙就是需要在穿入墙中距离不够的情况下再补一个半身,这样的不完美的直墙在初期做TAS时比较多。
实战时需要提前调整亚像素的位置,否则基本上不可能完成(4-2除外)。1-2RTA穿直墙示例:
飘忽状态穿直墙:可以做到在下落状态中不补半身穿直墙,所以较普通直墙更简单一点。
(注:飘忽状态即在开局第一次跳跃前mario所处的状态,此时mario所受的重力比平常更小,踩弹簧时也会飞得更高)
7. 二段跳的延伸bug(大个子挤墙,小个子挤墙)
大个子挤墙:当大mario在做二段跳时头上有一格方块且处于蹲下的状态,就可以完成一个大个子挤墙(因为头上卡的那一个方块会把mario往墙里面推)。手打可以完成。

小个子挤墙:当小mario在做二段跳时头上有一格方块,有的时候会在跳的那一瞬间墙会把mario往里推一段距离,在配合连跳5~7次即可完全进入墙内。手打很难完成

小个子还可以在一格高的空间中挤墙,原理同上,不过更简单一点,有了连发键甚至手打也可以完成。
8. 卡屏上墙
在各大hack(甚至原版)中具有极其普遍的运用,堪称家喻户晓。

如图,需要把屏幕边缘的墙拖到一定的位置,再通过那个缝隙上墙。这个bug的效果类似于半身穿墙,不过不会被墙顶出来,因此也有了卡在缝隙里的风险
在TAS中很少运用(因为很费时间),不过我在Fux2的hack中见到过一次运用。

接下来是一些比较小的bug类型:
9. 进入敌人体内
在马里奥被伤害后的无敌时间与敌人重合,无敌时间消失之后就可以无敌(前提是不能离开敌人,否则在离开后再碰敌人还是会gg的)
10. 和bowser同归于尽
在mario跑到库巴的右侧时,库巴就会往右移动追mario。这时跳起来脚同时触碰桥斧和库巴的头,mario就会在通关的同时慷慨就义了。有意思的是通关时公主的台词不会变,而且在播放完过场音乐后还会播放马里奥死亡的音效。
11. 不进城堡
当mario通过种种bug遁地后(方式很多,具体可以看全程不跳关TAS),在关尾跳起触碰旗杆底部砖块的左上角(或右上角)会触发这个bug

原理是在mario碰到旗杆的后一帧游戏会检测mario是否碰到砖块开始结算(因为关底城堡入口的右侧其实是有一个实体砖块的,普通方式过关后mario会在碰到那一个砖块后结算,又因为城堡的“入口”是黑色的,挡住了mario,看起来就像是进入了城堡),当mario进入砖块位置较深时砖块会来不及把mario弹开,从而提前进入分数结算画面而起到省去时间的作用。在TAS作品中有广泛运用。
12. 图像bug
包括MJmario原地踏步(全速前进时按下左加右有一定概率会原地踏步)、mario开局滑冰(火球mario开局按右+A+B)、数据溢出产生的bug等,这里不过多介绍了
13.吃金币穿墙
在mario碰到金币的一瞬间墙的判定比较虚,如果下落的过程中吃金币并且旁边有地面的话可能会进入地面中一些距离,如果控制好位置则可以全部进入墙中。
在跳关TAS中4-2的下落直墙看似不可能完成(普通的下落直墙需要补一个半身),实际上就是利用了旁边的金币达到穿入更深的效果。
14. 上下连通的屏幕
不算是smb1的专有bug,其实是fc游戏的“通病”,比如在赤色要塞的TAS中也有运用。

顾名思义,fc屏幕的上边缘与下边缘是相通的,这使mario可以在屏幕的上方吃到调到坑里的道具,踩到敌人等等。如1-1的跳过旗杆就运用了这个特性。
15.无痛苦穿墙
普通的穿墙大部分都会在墙里跳一两下,以让mario更加深入墙内,但这样砸的mario头(手?)生疼。所以在马里奥说你礼貌吗之前,赶快告诉mario下面有两种可以做到不在墙内跳跃就轻松穿墙的方法(极限半身穿墙除外):
隐藏砖块穿墙
如果在隐藏砖块的旁边有一个实体砖块,mario就会无视实体砖块走入墙内;
大mario顶层入墙
(想不到什么可以描述此bug的词,就胡诌了一个,汗)
由于smb1的顶层方块判定较虚,大个子mario可以直接从两边穿入或跳出,手打1-2进入负关可以用。
注:由于吃金币穿墙有辅助下落直墙的特例,所以吃金币穿墙不收入无痛苦穿墙之类
16. 鼻子跳

不做解释,看来mario的鼻子真的很大
在下落的时候mario的身体任何部位都可以“踩”到敌人:

甚至是在上升的时候:

如图,上升的时候用手爆头乌龟还会跳的更高,原因不明。也许是学会了隔壁街霸的升龙拳?

至此,smb1的常见bug就介绍完毕了,但本人才疏学浅,对TAS的研究只是平常的兴趣而已,有些方面整理的并不充分,还少了很多动图,有些路人可能会不理解,在此致歉。(本人是学生党没时间,此文章也是断断续续更了有几个月)
本文有些内容是我“道听途说”得来的,不能保证100%的正确,肯定还有许多错误和遗漏的地方,欢迎在评论区里批评、指正和补充!
参考资料:
TASVideos网站:https://www.tasvideos.org
如有侵权,请立即联系删除!