作者Append (鸦片)
看板Emulator
标题[讨论] TAS的任意代码执行(ACE)(下)
时间Wed Sep 2 13:13:54 2020
╭─────╮
│ 前情提要 │
╰─────╯
- 前言 ── 什麽是ACE?
- ACE 影片范例精选
- 所以 ACE 到底是怎麽发生的?
------
╭──────────────────────╮
│ 经典的 ACE 里程碑 - 2017 年的 Pokemon 黄版 │
╰──────────────────────╯
MrWint 在这一片 TAS 中,
巧妙的利用 ACE 的手法,
挑战 Gameboy Color 硬体极限;
到现在已经三年,但我觉得,
这仍然是目前最接近「
ACE 现在能做到的事情」的介绍。
这个 TAS 後来拿到了
TASvideo 2017 年的年度 TAS 大奖,
在标题前被标上了
「
星级」(Star Tier, TASvideo的最高级别)、
「
推荐给新手」(Recommend for newcomers)
以及「
显着改进」(Notable improvement)。
值得一提的是,他刷下的上一个同类别纪录是
「在画面上印圆周率」的黄版 ACE;
那个影片只有 3 分 14 秒 15,
而这个影片的输入操作超过五分钟,
乍看之下似乎是比较慢的,
但是这个影片的细节太过精彩,
社群是一面倒的好评,
大家几乎都认为这应该要被接受。
影片不长,大概七分钟左右,
但是内容非常丰富,
在技术和观赏性之间取得了很好的平衡。
在我们开始介绍他之前,
强烈推荐大家先点开影片,
在没有解说的情况下看一次。
https://youtu.be/Vjm8P8utT5g
------
这边我先假设读者在这时候已经看过了一次影片,
这时候的感觉多半会是「我到底看了三小.JPG」;
不过没有关系,现在让我们重新来过,
简单介绍一下这影片都干了些什麽──
当然,也希望能避开一些太难的部分。
游戏一开始他立刻存档,
在存档到一半的瞬间切断电源重开,
然後开始不断的交换PM位置/道具位置。
切断电源中断存档能够产生「
资料损坏错误」,
让他能够突破 PM 列表 6 只和背包上限 20 格的限制,
这样他就有足够大的记忆体空间可以操作。
於是他马上利用
交换 PM 位置/道具位置的手段进行 Setup,
让游戏能够读取「
按键输入」当作程式码,
这让她从原本「每个 byte 需要数秒操作」
加速到「
每秒可以执行接近一千次操作」(!!!),
同时还启动了 Gameboy Color 内建的
加速模式 (Double Speed Mode),
增加每秒可以处理的运算量。
这让之後所有的 Setup 几乎都是即时的,
因此在以下过程中几乎看不出他做了什麽操作。
这时候画面一闪,他直接进入了殿堂去找大木博士。
大木博士: 「我们的公主在另一栋城堡里」,
然後画面又一闪进入了金版的开头动画,
结果读档之後跑进入的却是水晶版。
走到旁边的草丛中进入战斗,跳出一只野生的闪光雪拉比,
主角丢出自己身上的闪光梦幻开始捕捉。
TAS 嘛,一颗红白球就要抓到是基本的。
走进旁边的宝可梦中心看小孩打俄罗斯方块,
TAS 嘛,技术鬼神一点也是基本的。
走出宝可梦中心来到萨尔达传说的地图,
主角林克东张西望了一下,彷佛在说这里是谁我是哪里,
然後摸摸鼻子往右走过原野回家。
进入房子,原来是水晶版的主角家,
但是一上楼发现回到了黄版的主角房间。
这时主角打开房间里的红白机,
玩了一款超级玛莉1代的1-1。
(其实这应该要是 Gameboy Color 上的 Super Mario DX,
是红白机版的重制)
到这里为止,
这些内容大多还是在 Gameboy 上其他游戏可以做出来的内容;
然而那时候的每块游戏卡带,
其实都不只是游戏 ROM 的内容不一样,
硬体也多少有些不同,
例如金银水晶版的卡带会有电池来计时,
而黄版是无论如何不会有的。
所以如果单纯的把其他游戏的 ROM 的程式码读出来执行,
常常没办法正常运作。
但其实这也没有需要,
要达到一个影片期待的效果,
只需要执行那些影音相关的程式码。
这些影音的来源甚至不一定要直接来自其他游戏,
他们完全可以从完全无关的地方来。
於是作者 MrWint说,
他需要作到的,
并
不是在游戏里面玩其他的游戏,
而是
把 Gameboy 当成一个影音播放器,
然後看他能把硬体极限推到哪里。
放出一些 Gameboy 游戏上的内容,
很明显并不是他的极限,
所以作者接下来就要做一点更极限的事情。
收起红白机,一下楼又回到了殿堂,再次遇到大木博士。
结果这次他深情款款的对主角唱出 Portal 的片尾曲 Still Alive,
看来这大木博士是 GLaDOS 伪装的。
这个 Still Alive 是「
即时用按键输入」的。
值得一提的是,
Gameboy Color 有四个声音频道,
其中两个用来输出方波,一个用来输出噪音,
最後一个可以输出任何波型,
但他对应的
记忆体空间只装的下 32 个取样;
如果取样率像是我们平常习惯的 44.1 KHz,
那只有不到千分之一秒的声音。
同时,这每一个取样都只有
4bit 来描述声音的
振幅,
也就是
只有 16 种声音大小,
用来描述波型势必会变得非常粗糙。
这也是为什麽我们在 Gameboy Color
,
虽然有可能可以听到一些声音,
像是黄版开头的"
皮卡啾",
但是
音质总是相当破碎,
不太适合用来播放人声。
然而,由於他已经可以即时用按键写入记忆体的内容,
记忆体空间再也不是问题;
4bit 的声波振幅的部分,
他选择了一个非常直接暴力的做法──
多加上一次
音量旋钮的控制。
音量控制能够让他有八种不同大小的声音,
两个相乘能够让他使用
大约一百种不同大小的声音振幅,
这样就能够有更好的描述波型的方式。
最後他选择以大约
18KHz 的取样率进行声音输出,
就是我们最後能够听到的 Still Alive,
以 Gameboy Color 来说,
音质真是意外的好呢。
事实上这个部分大概是这个影片最危险的地方,
毕竟 40 秒的 Still Alive 的使用实在是有点长了,
会有些
版权问题。
TASvideo 最後决定接受,而且还是挂上了最高等级的星级,
但前提是──
要好好的帮引用的这些版权内容
打上广告,
避免一些可能的版权争议。
就在此时,派大星跳出来说出了大家的心声:「How Does He Do That?」
最後他打算 demo 一下影音同时播放的功能,
特别是以 Gameboy Color 的硬体性能,
如何在
色彩深度/影片大小和输入速度取得平衡。
他选择使用
15fps/960 色的作法,
选择了一个很短的片段,
几经挑选之後,
最後选择的就是这个「How Does He Do That?」
前面的几个片段中他多少还是有一些现成的 code 可以使用,
特别是那些从不同游戏来的片段,
那些影音需要的 code 很多都可以直接 copy 过来;
然而这次影片播放的部分,
他必须要
完全自己用组合语言写一个播放器,
来准确的使用每次的 CPU Cycle。
在执行过各种稀奇古怪的内容之後,
作者最後选择跳进 Ending,
然後把控制权交还给原本的游戏,
回到正常的黄版 Credits,
在结束这个 TAS 的同时「完结」这款游戏。
这里有一个我觉得特别值得分享的是,
Masterjun 统计了在这个 TAS 之中,
每个 frame 的输入次数,然後把他们做成直方图。
https://i.imgur.com/5F83kxb.png
可以看到大概在 17500 frame 附近,
每 frame 的输入次数大约是稳定的
770,
这对应到的就是
Still Alive 的区间;
相对的,20600 frame 附近,
也就是
海绵宝宝的区间,
每 frame 输入的次数大约是
3251。
------
╭───────────╮
│ TASvideo 的社群反应 │
╰───────────╯
这个 TAS 影片投稿之後,
TASvideo 社群的反应
非常正面。
讨论页面上的投票「你觉得这个影片有趣吗?」
比数是
144 Yes / 1 No / 5 Meh。
不仅仅是技术上的重大突破,
绝大部分的人都同意,
这个影片的内容非常有趣,
有编排好的故事内容,
巧妙的把 Gameboy Color 上不同的游戏画面串在一起,
然後带入了後面两个声音(Still Alive)
和影像(海绵宝宝)的极限测试。
在同时考虑技术性和娱乐性之後,
社群内许多玩家也都给予极高的评价,
我想大概没什麽人会意外他拿到了最高的星级判定。
在这之中,有一则留言我觉得很有代表性:(嚼翻译蒟蒻)
「其实,我开始认为 ACE 从概念上来说已经相当完善,
已经没什麽空间可以发展了;
这中间的问题在於,
一但你能够用手把输入任何影像和声音,
事实上我们现在已经在超任 (GDQ) 和 Gameboy上都看到了,
那麽做其他任何事情都已经没有意义了──
当你已经明显的无所不能,
去讨论你可以做什麽就已经毫无意义。」
「虽然是这样说,
但即使这个技术让 ACE TAS 从现在开始变得无趣,
我们仍然应该留着至少一个 TAS 来表现他。
所以,我投同意。」
整个讨论里面其实有许多这样的担忧;
大家都同意这个影片的娱乐价值,
但是也担心着
「当我们什麽都能做到之後,
会不会之後充满着跟游戏没有关系的影片呢?」
在讨论是否要接受这个影片的过程中,
讨论串中也出现了一些质疑──
当时对 ACE 的影片的判定标准不够明确,
照这个概念来投稿,
各种稀奇古怪跟游戏无关的 demo 也都有可能被投上来,
游戏都只会成为载体。
也因此,几天後 TASvideo 新增了一些对於 ACE 的规范,
保证了
ACE TAS 必须要和游戏的内容有关:
- 对於那些为了
最短时间破关的 ACE,原则上接受。
(通常这就会是
Credits Warp,直接跳进破关画面。)
-
不接受在「
全要素」(100%) TAS中使用
ACE。
(直接改记忆体装做拿到所有要素是不被接受的。)
- 如果是
玩耍型 (Playarounds) TAS:
- 重视品质,他的
娱乐性至少要到「月级」。
(Moon Tier,比星级低一阶。)
- 必须要「
看起来有结束这款游戏」。
- 需要在游戏中做出一些内容,
看起来像是原本游戏的延伸。
------
╭───────────────╮
│ 後记──如果 TAS 不再玩游戏 │
╰───────────────╯
在结束这篇文章之前,
让我们最後再看一个例子。
这个例子很可能会是,
或至少已经非常接近
TAS 的极限。
TASbot 在
SGDQ2016 有一段表演,
选择的游戏是
NES 上的
Super Mario Bros. 3。
https://youtu.be/1GF_LFPz34U?t=2675
游戏的时间
只有两秒。
事实上因为
GDQ 是人工计时的,
实际上的时间大概更短一点,
我猜是在一秒左右。
他们打开电源,
读取开头画面,
然後就
立刻进入了破关画面,
游戏根本就还没有开始──
以概念上来说,
这大概就是最快的 TAS 了。
这奠基於一个 NES 的硬体 bug:
「如果 NES 的音效处理器在读取资料的同时,
CPU 尝试读取手把的输入,
那麽这时候 CPU 会拿到错误的资料。」
这其实是个满严重的问题,
如果不加以处理的话,
只要声音一边播放,
就会有很多手把输入因此失效;
因此,许多游戏在读取手把的时候,
会需要作一些额外的
妥协方案。
Super Mario Bros 3 选择的
妥协方案是:
「
在同一个 Frame 中尝试连续读取两次,
如果两次结果一样,
就认为这是真正的输入讯号;
如果两次结果不同,
就继续读取到
连续两次相同。」
由於每次读取只需要大约 0.1 毫秒,
一个 Frame 的时间大概是他的一百多倍,
通常多读取几次也不会出什麽问题;
这确实是个不错的方法,
毕竟
人手输入的速度很慢,
不太可能在一个 Frame 连续作出完全不一样的输入。
不过,对於 TAS 来说,
一个 Frame 作出很多次的输入,
这完全是做得到的。
如果透过 TAS,
故意让他每次读取结果都没有重复,
他就会一直重复读取,
因而
产生更大的延迟,
而读取手把的工作仍然无法完成。
过一阵子,
系统会开始读取同一 frame 要执行的其他程式码──
通常其他工作会假设手把输入的部分已经结束了,
毕竟读取手把大概只需要百分之一画格的时间,
但是
很不巧的手把读取的工作还在进行,
因此系统会切换读取的目标,
然後
读取到错误的资料,
并把他们当作程式码来执行。
如果有注意到的话,
上面这个操作的关键就是,
这会需要
在几个画格内维持秒速大约八千次的输入。
这是人手办不到的操作──但 TAS 是可以的。
因此,他们经过巧妙的设计,
让 NES 在几个 frame 後,
让读取程式码的部分直接指向了手把的输入,
然後直接的让 NES 跳进了 Super Mario Bros. 3 的 Ending,
总时间不到两秒。
然而如果仔细看这个影片,
过几秒後开始跑结尾动画的时候,
游戏卡住了。
他们在前面的操作中,
很不巧的可能也动到了结尾的部分,
导致这个游戏
没有办法正常的跑完结尾动画,
因此他们认为这不算是一个完成游戏的过程。
经过了三年的努力,
他们总算成功的找到
让破关动画正确播放完的方式,
完成了这个 Speedrun,而且时间比之前更短。
於是他们总算能够投稿到 TASvideo 上面。
https://youtu.be/jQXHKm21Wpk
而且...这个 TAS 确实可以用 TASBot
实机执行。
https://clips.twitch.tv/RepleteFastSamosaTebowing
如果你点进上面的影片,
你甚至会看到在影片中会有
「This "
was" a tool assisted recording」的标示──
是的,在这个标示显示出来之前,
TAS的部分已经结束了,
只有 0 秒 78,
这是
目前世界上最短的TAS。
虽然仍然没办法说是极限,
但就概念上,
这大概没有办法再有更明显的突破了──
因为已经没有游戏过程了。
然而,这次 TASvideo 的社群反应就很两极,
「你觉得这个影片有趣吗?」的比数是
62 Yes / 27 No / 16 Meh。
有不少人都认为,TASvideo 仍然期待影片的
娱乐性,
而这个影片和直接去搜寻「Super Mario Bros. 3 结局影片」,
基本上没有区别;
当我们把游戏的内容都拔掉之後,
剩下的是非常高的技术价值,
而失去了影片的娱乐意义。
然而,抱持这些意见的人们,
很大部分也都同意这个影片应该要能够发表,
毕竟这个影片
没有违反 TASvideo 的任何规则,
也确实是很明显的技术进展。
最终,这个影片被分类到了「
储藏级」
(Vault Tier,娱乐价值不如星级和月级,
但技术上仍然有足够价值的影片)。
评论中也有提到,
这个 TAS 影片其实带来了一个问题:
究竟什麽是「
游玩过程」(Gameplay)?
在这个 TAS 中,
所有的操作都在标题画面完成,
这能够被看成是游玩过程吗?
在这个影片之前,Super Mario Bros. 3 的计时规则都是
「
在标题画面按下Start进入游戏的瞬间开始计时」,
这是一个不错的定义「游玩过程」的方式,
但是这个 TAS 在那之前就已经完成了这个游戏。
我自己觉得这个例子,
和文章上面的 2017 年的 Pokemon 黄版 TAS,
都给了我们同一个讯息──
如果 TAS 不再玩游戏,那麽人们应该如何看待 TAS 呢?
在 Pokemon 黄版的例子、
以及前一篇提到的超任萨尔达传说的 TAS 中,
影片的目标都是放出适合的影音,
而游戏主机都已经被当成一个
影音播放系统;
在本文最後的 Super Mario Bros. 3 中,
所有的
游戏过程更是整个被直接略过了。
这更像是在
玩游戏主机,
而不是在玩游戏本身。
在上面两篇 TAS 的论坛讨论中,
对这点也有不少反思;
读到这边的你也可以想想,
如果出现了一些不同游戏的 ACE TAS,
但每个都是在玩主机,而不是在玩游戏──
你对 TAS 的印象又会变得如何呢?
------
╭───────────╮
│ P. S. 写这一篇的动机 │
╰───────────╯
会写这麽长一篇,
其实只是因为之前在C洽版上回了一个主题
「
哪个游戏 TAS 起来最看不懂」,
我推荐了2017年的
Pokemon 黄版 TAS;
我觉得这真的看不懂,
而且我觉得非常好看。
然後我就被嘘文了呜呜。
嘘文的意见是
「任意 code 注入已经不算在 TAS 范畴」
「改程式码不算 TAS」
当然底下已经有许多推文反驳了这些意见,
实际上既然 ACE 都已经被 TASvideo 接受成为一个常见的分类,
甚至还为它订了专用的规则,
我想 ACE 是不是 TAS 这点应该已经不需要争论了。
不过仔细想想,
我其实觉得这个考虑,
某种程度上有些道理啊。
我想,读到现在的你,还有 TAS 社群里的人们,
大概还是会同意 ACE TAS 仍然是 TAS;
但是
如果把程式码改到原本的游戏都不见了,
这样的 TAS 还应该要被看成是
这个游戏的 TAS 吗?
我还是会倾向同意,
但是这真是个困难的问题啊。
------
╭────────────╮
│ 给按End的人的重点整理 │
╰────────────╯
(1) Pokemon黄版ACE挑战GBC的硬体极限。
https://youtu.be/Vjm8P8utT5g
(2) TASbot透过ACE两秒破关玛莉欧三代。
https://youtu.be/1GF_LFPz34U?t=2675
(3) 本文这两个ACE TAS影片都很精彩,不想看文章还是强烈推荐看看影片。
--
███◣ ◢██◣ ◢██◣ █ ◢█ ◣ ◢ ◢██◣ ◣ █
█ ██ █ ██ █ ██ █◢█◤ █◣◢█ █ ██ █◣ █
█ ██ █ ██ █ ██◤ ████ █ ██ ██◣█ @ ptt.cc
███◤ █ ██ █ ██◣ █◥◤█ ████ ████
█◥█◣ █ ██ █ ██ █◥█◣ █ █ █ ██ █◥██ 鸦片(Append)
█ ◥█ ◥██◤ ◥██◤ █ ◥█ █ █ █ ██ █ ◥█twitch.tv/append
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.48.54 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Emulator/M.1599023637.A.386.html
※ 编辑: Append (220.135.48.54 台湾), 09/02/2020 13:14:12
※ 编辑: Append (220.135.48.54 台湾), 09/02/2020 13:14:33
1F:推 djboy: 推 09/02 13:55
2F:推 BadGame: 好累 推 09/02 19:53
3F:→ Jay915: 推 09/02 20:54
4F:推 Jay915: 推 09/02 20:57
5F:推 icf10076328: 这篇更厉害了 09/03 10:01
6F:推 advencer: 推! 09/03 12:29
7F:推 EDGE: 这两篇写的深入浅出又有趣,推您的解说跟TAS爱好者~ 09/04 20:30
8F:→ AmosYang: 推 09/09 21:17
9F:推 oscar60111: 感谢大大分享 上下两集超精彩! 09/09 22:52
10F:推 playerlin: 其实重点是,要有娱乐性,否则再快观众还是会投No跟Meh 09/12 14:57
11F:→ playerlin: 至於改成别的游戏这点我的感觉是,能做到这种等级的ACE 09/12 14:59
12F:→ playerlin: TAS其实不多(许多游戏其实都有很多限制导致很难办到, 09/12 14:59
13F:→ playerlin: 或是展现出来的感觉很无聊),所以其实是感觉还好。 09/12 15:00
14F:→ playerlin: *否则再快或是再夸张 09/12 15:01
15F:推 xiue: 推认真解说,不过还是比较喜欢有观赏性的TAS或Speedrun,ACE的 09/12 15:10
16F:→ xiue: 的发展後来比较像是在玩TAS而不是在玩游戏了. 09/12 15:10
17F:推 tv1239: 推中文详细解说 09/16 10:19