精華區beta ck54th122 關於我們 聯絡資訊
╭────────────╮ 前言 ── 什麼是 ACE? ╰────────────╯ TAS 的全名是 "Tool-Assisted Speedrun/Superplay", 也就是「用輔助工具製作的通關/遊玩影片」, 他們可以透過不斷的存檔讀檔、監控記憶體、放慢速度錄製動作...等等輔助工具, 達成非人力可及的操作技巧, 進而完成「最快速度通關」或是「某些指定目標」。 大概在 2008 年左右, 網路上出現了不少「不務正業」的TAS, 他們看起來不太打算破關, 像是在 Pokemon 黑白版裡面努力的阻礙交通, https://youtu.be/crb-qQ58EGo
然而這些「不務正業」大致上都還是在遊戲設計的範圍之內。 過了幾年之後這現象越發嚴重, 大約在 2013 年左右, 我發現 TAS 開始不務正業, 開始做一些「跟目前這個遊戲本身沒什麼關係」的事; 同時,這些TAS的標題上,大多都會寫上 "Arbitrary Code Execution" (ACE, 任意代碼執行)。 我大概能想像這個詞彙好像有些抽象, 不太容易馬上看懂這想幹嘛, 所以讓我們來看一個例子──也就是「ACE」這個技術真的紅起來的瞬間。 2014年的一月, 在全世界的遊戲快速通關社群一年一度的盛會 AGDQ2014 之中, 由 DwangoAC 帶領的團隊設計了一台機器人 "TASbot", 讓他們能夠在實機上現場表演TAS。 他們在當時玩了幾個遊戲, 其中最讓人印象深刻, 甚至我覺得震驚世界的 是超任的 Super Mario World 瑪利歐世界。 https://youtu.be/Uep1H_NvZS0?t=31m48s
遊戲開始之後,可以看到瑪利歐騎上耀西, 沿路像雜耍一樣的玩弄一些路上的物件, 然而大約在影片的 33:28 處, 事情變得不太一樣,畫面開始出現一些不太對勁的東西 ... 幾秒鐘後,畫面上出現了兩個可以操作的小遊戲, 就在一台實機超任的瑪利歐世界裡面。 非常明顯,這兩個小遊戲絕對不是任天堂當初設計的部分。 沒錯,這就是他們自己寫的。 他們在實機超任的瑪利歐世界中, 利用一些遊戲的Bug, 在超任的記憶體裡面寫了這兩個小遊戲的程式碼, 然後執行他。 於是這時候可以回到我們這次的主題,「什麼是ACE?」 看過上面的例子,應該大致能夠想像, 他們在遊戲中「執行了一段由他們自己決定的程式碼」, 這就是所謂的「任意代碼執行」。 題外話,在節目裡面他們說, 他們原本想要寫一個紅白機瑪利歐一代, 然後再來跑他的 TAS, 但是實在是趕不上節目, 光是這兩個小遊戲就是表演前一天晚上才作好的。 於是,一年後,有了充裕的開發時間, 他們就在 AGDQ2015 現場端出來紅白機瑪利歐了。 https://youtu.be/HvCoNSq3GEM?t=5m48s
GDQ 後來幾年也都會有 TAS Block, TASbot 團隊也經常端出稀奇古怪的東西, 非常精彩,極度強烈推薦喜歡TAS的人們都可以看看。 ------ ╭─────────╮ ACE 影片範例精選 ╰─────────╯ 「任意代碼執行」從字面上理解, 他幾乎能夠做到任何事情; 那麼大家究竟用ACE做過哪些事情呢? 這裡提供一些經典的ACE影片, 包含了許多不同方向的作法。 (1) 最早期的 ACE TAS 我最早注意到的 ACE 是 2012 年年底的 Pokemon 黃版https://youtu.be/p5T81yHkHtI
他在10分47秒開始花了一分半的時間用按鍵進行大量輸入, 最後放出了彩虹小馬的主題曲。 當時出現的時候, 圈子內的大家多少都知道一些很嚴重的記憶體bug, 「我們可以透過一些 bug 來改變記憶體的數值,達成奇怪的效果」。 就這個概念上,直接寫一段 code 來執行好像也不算是太奇怪的事情, 但是真的作出來還是非常驚豔。 (2) 手動輸入的 ACE 「任意代碼執行」不見得需要透過 TAS。 事實上有些遊戲只憑人力輸入, 就能夠控制好一整段的記憶體代碼, 然後只要有觸發執行的手段, 就能夠不倚賴 TAS 的方式完成ACE。 SethBling 在 2015 年在實機超任的 Super Mario World 中, 透過 ACE 的手段執行了 Credits Warp, 也就是直接跳到破關畫面結束遊戲,總時間花費 5 分 59 秒。 https://youtu.be/14wqBA5Q1yc
後來有許多遊戲有找到類似的手段作出 Credit Warp, 在遊戲開始不久之後直接跳到破關畫面, 讓這成為 Speedrun / TAS 的一種常見的分類。 我自己平常也很喜歡 Pokemon 黃版的 Save Corruption, 自己打一輪通常不用五分鐘的時間,很適合當小遊戲調劑身心。 https://youtu.be/VlmoEpNNiVI
(3) 手動輸入了一整個新遊戲的 ACE TAS 同樣是 SethBling, 同樣在實機超任上, 同樣是 Super Mario World, 2016 年他花了一個小時用人力輸入了 由 p4plus2 撰寫的 Flappy Bird 程式碼並執行他。 https://youtu.be/hB6eY73sLV0
這就是很大的工程了, 能夠不依賴 TAS 就做到這麼複雜的 code 真的非常非常不容易。 (4) 推卡車抓夢幻 @ AGDQ2016 AGDQ2016 有一段節目 "Pokemon Glitch Showcase", 表演很多 Pokemon 第一世代遊戲中的各種遊戲漏洞花式表演, 其中我覺得最震驚世界的一段: https://youtu.be/mCoQm8bIyyw?t=24m
他利用存檔轉向之後讀檔衝浪穿過 S.S. Anne 號遊艇的剪票員, 然後走到了傳說中的卡車旁邊。 這卡車非常有名, 我想不少人小時候大概聽過謠傳, 「聽說用勁力推這個卡車就會跳出夢幻」。 於是,跑者 Shenanagans 就這麼說了, 「我想我在這邊可以澄清一個謠言, 我知道很多人說在對著卡車使用勁力可以獲得夢幻, 但是這並不是真的,(手上一邊按勁力), 我可以現場示範一下這並不是...真的...What??」 (畫面上跑出一隻夢幻,對話框"Mew!",全場歡聲雷動) 這在節目上沒有解釋是怎麼做到, 顯然也沒有時間特別詳細解釋, 但現場、聊天室還有當時的 Reddit 都快暴動了。 畢竟推卡車已經有無數人親手試驗過了, 那應該只是個謠言, 因此許多人懷疑這是改造的 ROM。 跑者後來在推特上解釋, 這並不是一個改造 ROM,而是 ACE。 當然,節目上其實沒有太多時間可以讓跑者操作ACE, 所以這個ACE其實是 在「遊戲存檔」中預先安排好所有需要的程式碼, 讓跑者打開遊戲就自動啟動的。 比較詳細的原理討論可以參考我的另外兩篇文章: #1R5j0WyX (PokeMon) [ptt.cc] [討論] 夢幻卡車@AGDQ2016 (上) #1R5j5WKM (PokeMon) [ptt.cc] [討論] 夢幻卡車@AGDQ2016 (下) (5) 用超任玩 N64 / 傳送門 / Skype @ AGDQ2017 AGDQ2017 TASbot - 對,又是 TASbot。 這次他們選擇的遊戲是超任上的薩爾達傳說https://youtu.be/7CgXvIuZR40?t=1400
前幾分鐘看起來還像是在玩遊戲, 但影片27分5秒左右畫面淡出, 幾秒後回來的是 N64 上的 Super Mario 64, 竟然是比他高一階的主機上的遊戲, 而且還花了五分鐘跑了一次 Speedrun; 然後馬上接著的是另一次的傳送門 Speedrun, 然後接上來的是──他們現場打了一通 Skype。 好,看到這裡大概能夠想像, 上面這些非常非常明顯的超出了超任這台主機的性能; 所以實際上這很明顯不是以超任為主來執行的內容。 在這個 ACE 中,他們實際上作的是, 「把畫面資訊通過八隻手把傳給超任, 然後把超任當作一個螢幕」。 超任實際執行的程式碼, 其實只有處理「把畫面顯示出來」的工作。 ------ ╭───────────────╮ 所以 ACE 到底是怎麼發生的? ╰───────────────╯ TASvideo.org 有一篇對於 ACE 的介紹, 對ACE的原理描述大概是這樣的: http://tasvideos.org/ArbitraryCodeExecutionHowTo.html 每個遊戲系統都會有一格記憶體去紀錄「現在要執行的程式碼」; 這是理所當然的,不然遊戲也不知道自己現在執行到哪裡了。 通常遊戲的程式碼會存在遊戲卡匣/光碟/磁片這些唯讀裝置中, 在正常遊玩下,這些部分通常是沒辦法被更改的。 然而,如果我們能夠去寫入 「現在要跑哪一段程式碼」的那一格記憶體, 把它指向某個我們能夠比較自由操作的記憶體空間── 例如 Pokemon,他有比較大的背包/攜帶道具的系統, 因此玩家可以透過更換隊伍順序/物品順序的方式, 在那一段記憶體中安排好「要執行的程式碼」, 然後讓遊戲去執行他。 然而,TAS 常常更傾向, 把「要執行的程式碼」指向「按鍵輸入」的記憶體位址。 只要能夠辦到這件事,程式碼多長都不怕── 用所有手把上的所有按鈕打進去就是了。 當然有時候這件事情很難一步到位, 所以你可能會在一些 ACE 的 TAS的投稿紀錄中, 可以看到作者 Comment 的欄位中寫著, 他們做了不同階段的記憶體調整, 一開始先用比較容易達成的方式, 然後再寫一小段程式碼讓遊戲去讀取手把輸入, 甚至用更高頻率讀取。 好,我知道上面這些句子仍然有些抽象, 可能不太容易看懂這怎麼連到實際運作方式, 但實際的運作原理真的是很冗長而困難, 我覺得不太適合放在這樣一篇介紹性的文章裡面。 真的有興趣的話, 可以參考我之前寫來介紹 AGDQ2016 的夢幻卡車的文章: #1R5j5WKM (PokeMon) [ptt.cc] [討論] 夢幻卡車@AGDQ2016 (下) ------ ╭───╮ 預告 ╰───╯ - 經典的 ACE 里程碑 - 2017 年的 Pokemon 黃版 - 後記──如果 TAS 不再玩遊戲 ------ ╭────────────╮ 給按End的人的重點整理 ╰────────────╯ (1) ACE 是利用遊戲的漏洞,在記憶體中安排程式碼並執行。 (2) ACE TAS 可以做到很多很多事情,從2012年開始越來越匪夷所思。 (3) 上面的幾個 ACE 影片都很精采,特別是 TASbot 相關的那些。 AGDQ2014 ACE紅起來的瞬間 https://youtu.be/Uep1H_NvZS0?t=31m48s
AGDQ2016 推卡車抓夢幻 https://youtu.be/mCoQm8bIyyw?t=24m
AGDQ2017 用超任打N64/傳送門/Skype https://youtu.be/7CgXvIuZR40?t=1400
-- ███◣ ◢██◣ ◢██◣ █ ◢█ ◣ ◢ ◢██◣ ◣ █ █ ██ █ ██ █ ██ █◢█◤ █◣◢█ █ ██ █◣ █ █ ██ █ ██ █ ██◤ ████ █ ██ ██◣█ @ ptt.cc ███◤ █ ██ █ ██◣ █◥◤█ ████ ████ █◥█◣ █ ██ █ ██ █◥█◣ █ ██ ◥█ 鴉片(Append) ◥█ ◥██◤ ◥██◤ █ ◥█ █ █ █ ██ twitch.tv/append -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.48.54 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1599023529.A.A3F.html
bben900911: 推。 09/02 13:19
hotbread: 說這麼多不就外掛仔(誤) 09/02 13:20
DarkyIsCat: 有趣 09/02 13:20
eightyseven: 原來是玩弄記憶體的遊戲 09/02 13:21
FeiYue: 推鴉片 09/02 13:28
gipo776: 推 09/02 13:29
Lex4193: 很多人連金手指和外掛可以逆向操作拿來增加遊戲難度都不 09/02 13:31
Lex4193: 知道了 09/02 13:31
RYOTSUKI: 推鴉片 09/02 13:33
catinclay: 推 09/02 13:37
DaYehNO1: 好有趣,之前我看過比較簡單的TAS是玩弄任天堂大腦鍛鍊 09/02 13:43
DaYehNO1: 遊戲 09/02 13:43
AllanCat: 推鴉片 09/02 13:49
Segal: 那個用薩爾達跑N64真的是巫術,手把匯流排的頻寬不夠傳送 09/02 14:00
Segal: 每幀的畫面吧,雖然看得出來有降低解析度。要怎麼送過去還 09/02 14:00
Segal: 是很不可思議,畢竟超任的硬體也不太可能在上面跑硬解 09/02 14:00
> -------------------------------------------------------------------------- < 作者: Append (鴉片) 看板: C_Chat 標題: [討論] TAS的任意代碼執行(ACE)(下) 時間: Wed Sep 2 13:12:19 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. 3https://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://www.ptt.cc/bbs/C_Chat/M.1599023542.A.3B1.html ※ 編輯: Append (220.135.48.54 臺灣), 09/02/2020 13:14:50
BITMajo: 09/02 13:17
Cubelia: MrWint的黃版ACE展示真的超精采 09/02 13:22
randyko: 推解說,只是個人期待的TAS還是玩這個遊戲,而不是玩這 09/02 13:36
randyko: 個遊戲的程式 09/02 13:36
Lex4193: 我也做過TAS,可以這麼講,要做TAS並不困難,你需要的只是耐 09/02 13:37
Lex4193: 心而已,但要做ACE很難,你得懂程式 09/02 13:38
Append: 這也是不少社群內的玩家的意見,很多人還是傾向回到遊戲 09/02 13:38
FeiYue: 推鴉片 09/02 13:38
micheline: 好文推一個 學到不少東西 09/02 13:41
weltschmerz: 推推 長見識了 09/02 13:45
AllanCat: 推鴉片 09/02 13:51
catinclay: 推推 好文 09/02 13:53
RM9: 專業好文!給按End的重點整理可以提一下文末的結論,我覺得這 09/02 13:55
RM9: 個對他們來說比影片重要 09/02 13:55
kindamark: 推 09/02 13:56
DaYehNO1: 再推一下,開頭那段很有趣 09/02 13:57
Iceoffreeze: 值得推的專業介紹文 整理資料辛苦了 09/02 13:58
tony90122001: 推 09/02 13:58
otakublack: 推 09/02 13:59
bnn: 推鴉片 09/02 14:01