[討論] TAS的任意代碼執行(ACE)(下)

看板Emulator作者 (鴉片)時間3年前 (2020/09/02 13:13), 3年前編輯推噓10(1007)
留言17則, 11人參與, 3年前最新討論串1/1
╭─────╮ 前情提要 ╰─────╯ - 前言 ── 什麼是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/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

09/02 13:55, 3年前 , 1F
09/02 13:55, 1F

09/02 19:53, 3年前 , 2F
好累 推
09/02 19:53, 2F

09/02 20:54, 3年前 , 3F
09/02 20:54, 3F

09/02 20:57, 3年前 , 4F
09/02 20:57, 4F

09/03 10:01, 3年前 , 5F
這篇更厲害了
09/03 10:01, 5F

09/03 12:29, 3年前 , 6F
推!
09/03 12:29, 6F

09/04 20:30, 3年前 , 7F
這兩篇寫的深入淺出又有趣,推您的解說跟TAS愛好者~
09/04 20:30, 7F

09/09 21:17, 3年前 , 8F
09/09 21:17, 8F

09/09 22:52, 3年前 , 9F
感謝大大分享 上下兩集超精彩!
09/09 22:52, 9F

09/12 14:57, 3年前 , 10F
其實重點是,要有娛樂性,否則再快觀眾還是會投No跟Meh
09/12 14:57, 10F

09/12 14:59, 3年前 , 11F
至於改成別的遊戲這點我的感覺是,能做到這種等級的ACE
09/12 14:59, 11F

09/12 14:59, 3年前 , 12F
TAS其實不多(許多遊戲其實都有很多限制導致很難辦到,
09/12 14:59, 12F

09/12 15:00, 3年前 , 13F
或是展現出來的感覺很無聊),所以其實是感覺還好。
09/12 15:00, 13F

09/12 15:01, 3年前 , 14F
*否則再快或是再誇張
09/12 15:01, 14F

09/12 15:10, 3年前 , 15F
推認真解說,不過還是比較喜歡有觀賞性的TAS或Speedrun,ACE的
09/12 15:10, 15F

09/12 15:10, 3年前 , 16F
的發展後來比較像是在玩TAS而不是在玩遊戲了.
09/12 15:10, 16F

09/16 10:19, 3年前 , 17F
推中文詳細解說
09/16 10:19, 17F
文章代碼(AID): #1VJoeLE6 (Emulator)