作者Append (鴉片)
看板PokeMon
標題[討論] 夢幻卡車@AGDQ2016 (下)
時間Wed Jun 6 02:07:17 2018
# 接續上一篇。開始之前再次說一下。這東西我並沒有完全看懂──
# 這篇會比上一篇難很多。
# 我沒有實作過。我甚至沒有玩過四色版。
# 事實上我也是這兩天才爬文嘗試看懂的。
# 我覺得必要的拼圖還缺了一塊。希望有看得懂的人可以補上。
噓 Append: (メ^_^) 你這其實是一篇幻想文?
.............. > (;・∀・)
噓 Append: (# ゚Д゚) 所以你這是當你個版在貼讀書心得囉?
.............. > (; ・`д・′)
4!> \(°▽ °*)/
┌──────┐
│ ACE原理-8F │
└──────┘
一樣,首先附上原本推文中的參考資料
推 a23962787: https://wiki.52poke.com/zh-hant/任意代碼注入(漏洞)
更詳細的介紹我推薦GlitchCity
https://tinyurl.com/yactg6es
另外會需要記憶體位址對應
https://tinyurl.com/y6vpyjan
這裡有提到一個奇妙的道具
"8F"。
在四色版觸發ACE的眾多方法之中,
透過道具"8F"觸發ACE應該是最容易理解與自己嘗試的,
因此受到許多ACE玩家的推薦。
# 請注意這次推卡車的部分不是用這方法
# 這邊介紹8F是為了更方便的描述並理解ACE的實作原理
8F是個正常遊戲過程中通常不會取得的道具,需要透過其他漏洞取得;
他的功能是「執行$D163開始的代碼」,
或者更直白的說──「
把記憶體中$D163位置之後的資料當成程式碼開始執行」;
那麼從$D163開始,遊戲原本在這裡存了什麼資料呢?
│ ... │ │
├───┼─────────────────────────┤
│$D163 │ 隊伍裡的PM數量 │
├───┼─────────────────────────┤
│$D164 │ 隊伍中每隻PM的種類。$D164是第一隻PM的種類 │
│ ... │ .... │
│$D169 │ $D169是第六隻PM的種類 │
├───┼─────────────────────────┤
│$D16A │ 隊伍清單結束,預設填入FF。 │
├───┼─────────────────────────┤
│$D16B │ 第一隻PM的數據。$D16B這格是種類,會和$D164一樣 │
│ ... │ $D16C-$D16D兩格會裝這隻PM的HP │
│$D196 │ .... │
├───┼─────────────────────────┤
│ ... │ │
也就是說,只要準確的安排這些PM跟屬性,就能產生正確順序的代碼,
然後在使用道具
"8F"的時候執行他。
欸...雖然聽起來很有道理,但是PM屬性能夠控制的部分滿少的,
所以這邊流行的實作都是在這裡寫一段程式碼
『去執行$D322開始的程式碼』
這個組合可以用以下的PM隊伍(剛好五隻,照以下順序)辦到:
波波(HP233)、派拉斯特、大岩蛇、瑪瑙水母、袋獸
這樣的隊伍是現在最流行的"8F Bootstrap Setup",
先準備好這組,然後使用"8F",遊戲就會把$D322開始的資料當作程式碼開始執行。
那$D322是什麼位置呢?
$D322是道具欄中第三個道具的種類。他之後則是數量。
這之後則是第四、第五、...第二十個道具的數量。依序。
從第三個道具到第二十個道具,18個道具總共有36byte的空間可以使用;
除此之外,
"道具下溢錯誤"(item underflow glitch)能夠讓背包道具數變成255。
中文說明 https://tinyurl.com/ybuq2l6j
英文說明 https://tinyurl.com/yc5evjq8
順帶一提,目前流行的道具下溢錯誤的setup是由 Luckytyphlosion 提出的,
而 Luckytyphlosion 同時也是這次推卡車ACE的設計者。
也就是說,準備好隊伍裡五隻固定順序的PM,準備好一個"8F",
剩下的問題就是準備第三格開始的道具列表。
道具列表的準備需要更多的漏洞,這邊列出一些第一世代的漏洞做為參考。
https://tinyurl.com/yaonr77h
也就是說,想好需要的程式碼,寫成組合語言,翻譯成機械代碼,
然後反過來推算這應該對應到什麼樣的道具列表,
然後把這個道具列表用其他的漏洞湊出來,排好順序和數量,
在需要的地方使用"8F",就能夠騙遊戲去執行這些程式碼。
如果想要自己實作一次看看,這邊推薦 TheZZAZZGlitch 頻道的許多影片:
https://youtu.be/Sw0h7ImFsAs
https://youtu.be/98_azamLeh4
https://youtu.be/D3EvpRHL_vk
單純想從0開始操作看看8F的話,這邊有個給初學者的教學:
https://youtu.be/22EYJ0QXPBQ
不過以上我通通都沒有自己嘗試過。我其實沒有玩過四色版。
(坦白說我不是很推薦去自己嘗試啦。每個看起來都要很久很久...)
┌──────┐
│地圖腳本指標│
└──────┘
8F法操作上比較直接,你需要的時候就使用道具"8F"去觸發ACE。
但是...如果我希望他不斷地執行某段程式碼,應該要怎麼辦到呢?
一直按8F? \(°▽°* )
欸...這也不失為一個有效的辦法...
不過邪惡的TAS玩家們當然不是這樣做的。
這裡先回到GDQ影片的表演者回應。
關於GDQ推卡車的細節:
https://pastebin.com/UqRzNKxm
感謝 Luckytyphlosion 提出的構想,並且整理了專文回應。
上面那篇pastebin裡面,Luckytyphlosion 整理了許多必要的資訊,
還有他如何構想並設計出這樣的程式碼;
對ASM版本的程式碼本身有興趣的可以參考連結
https://pastebin.com/6VWNfEKG
這之中有提到另一個核心概念 "Map Script Pointer"(地圖腳本指標):
"遊戲每兩frame都會執行一次這格指向位址的程式碼,位置存在 $D36E-$D36F。"
欸這很方便阿,透過這個機制可以不斷執行一些條件檢查,不用每次都在那邊8F。
所以除了要跑什麼程式碼以外,同時產生了另一個問題:
要怎麼更改這格記憶體,讓他指向我們能夠存程式碼的地方?
這個部分有提到的介紹就很少了──這比較困難一些。
GlitchCity並沒有非常詳細的說明,但是他有提到
https://tinyurl.com/y9nksucp
"透過修改第41個道具種類和數量可以觸發這個漏洞"
(可以參考一下上面的8F法,有提到$D322是第三格道具,與$D36E位置相差不遠。)
除此之外,我稍微Google了一下關於Map script pointer的部分,找到這個影片:
https://youtu.be/2_NO8Dyubu4 (請注意畫面會強烈閃爍,請避免久盯)
他設計了一些物品順序,然後在2:00左右離開選單;
離開選單之後Map script pointer自動觸發,
讓主角不斷的旋轉跳,同時改變畫面的顏色構成。
3:15左右他進行存檔,然後重開遊戲,讀檔──效果竟然有保留下來!
這個方法會把當前的Map script pointer也存起來,讀取後會繼續自動執行。
但是當他往下走離開這個房間,效果就消失了。
很明顯,這是因為換一張地圖的時候,遊戲寫入了Map script pointer,
因此原本的自訂腳本就不會被執行了。
欸這看起來很棒啊,剛好滿足了製作存檔的需求。
這樣就能先製作好ACE然後觸發他,存檔再拿去GDQ現場開機了。
┌──────┐
│回到夢幻卡車│
└──────┘
嗯,看起來不錯,如果是這種情況,如果能走到卡車旁邊,
準備好夢幻卡車的程式碼,然後把Map script pointer指向他,存檔──
下次讀檔的時候就可以推卡車給朋友看了! <( ̄︶ ̄)>
事實上這就是 Luckytyphlosion 最一開始提出來的構想。
2014年他在 Glitch City 貼了這段code
https://tinyurl.com/y8b65op4
同時有一點小小的討論,不過他後來忙了其他東西就擱置了這個構想。
一年後他想到,
"如果能夠在比較大的場合,像是AGDQ,實作出這個,聽起來好像很酷!"
於是他們正式著手這個計畫。
跑者 Shenanagans 建議同時介紹"如何回到聖特安努號",
然後在這個過程才去推卡車,然後發現底下冒出一隻夢幻。
我讀到這裡的時候,覺得這樣就會有幾個考量:
(1) 這大概不能使用8F觸發。
如果要為了節目效果,裝成不小心發現底下有隻夢幻,
就沒辦法打開選單按一下8F。
(2) 如果透過 Map script pointer 觸發ACE,
能夠事先準備好這樣的存檔,然後讓跑者拿到節目上,
就能夠避開"在觀眾面前手動觸發"的部分;
以節目效果來說這點不錯──
但是 Map script pointer換畫面會被遊戲自己的資料蓋過去,怎麼辦?
Luckytyphlosion說。這確實困難了一點,但是並不太難。
每張地圖有自己的 "Tileset" (圖像素材的集合),
其中第7個位元跟圖像無關──他是用來判斷遊戲有沒有需要重新讀取地圖物件。
通過這個機制,在跑者衝浪存檔越過剪票員後,往下切換地圖時,
就能夠騙遊戲不讀取這張地圖的物件,也因此不會把程式碼蓋掉──
欸...不讀取物件的話不就沒有地圖了嗎? /( ̄口 ̄;)\
所以,Luckytyphlosion 設計的這套程式碼裡面,
有判斷當前的地圖ID,自己去讀取地圖需要的物件。 (...這真的是很大的工程...)
最後就是實際上把夢幻卡車的腳本寫下來啦。
檢查有沒有在使用勁力,是不是站在卡車旁邊,有沒有面對卡車,
把角色圖像改成移動裝作那是在推,實際上移動卡車圖像的座標,
放出推石頭的音效,弄出推石頭的沙塵動畫,放一隻夢幻在地圖上,...
然後準備好一個自訂文字的對話框,跟夢幻對話的時候放出來,
然後call進入戰鬥,設定夢幻為5等,...
然後在戰鬥結束後清掉這些圖像,把Map script pointer改回原本遊戲設定的值。
以上全部都用ACE的方式做出來。而且還有更多細節在上面沒有全部提到。
確實是非常非常巨大的工程。
┌──────┐
│ 總 結 │
└──────┘
總結一下──這邊引用 Reddit討論裡面的總結,
https://tinyurl.com/y7zp9gjl
(1) AGDQ的表演確實是使用遊戲主機 (實際上是Game Cube + Game Boy Player)
(2) 遊戲卡帶讀取的存檔是 Luckytyphlosion 在模擬器中製作的,
(3) Luckytyphlosion 透過 stump 提供的 flasher 把存檔寫進卡帶裡面。
(4) 這中間並沒有運作 Gameshark 或是任何類似的金手指工具。
(5) 使用模擬器製作存檔只是因為需要動用的工程太大,用模擬器比較容易控制。
這邊附上一些我目前沒有弄懂的地方:
(1) 這個程式碼很長,ASM有三百多行。不知道實作的時候會存在哪裡。
2014年的討論有提到這點,當初有人提議要另外寫輸入 (像是那些手把輸入),
那時候結論是如果存檔在卡車旁邊應該不會太長;
但是現在這個版本真的複雜非常多,很難想像道具欄竟然塞的下。
嗯...不過組語看起來真的很省byte數,說不定真的可以?
(2) Luckytyphlosion 目前沒有提供這個存檔。他有另外寫一段
Unfortunately, I didn't create a setup to store this code in memory.
stump (twitch.tv/stumpdotio) had a save flasher which he used in order
to flash the save which had the code stored on using an emulator.
If I have the motivation, I may create a setup so you could fool
your friends (Kappa), but for now there isn't a setup.
嗯...這真的很可惜,如果能放出這個存檔應該滿多人會想拿來玩玩看的。
目前還很難想像這樣的SETUP實際上多難辦到。
(3) 回到原PO提出來的討論。
"推卡車到底是真是假?"
嗯,Short Answer:
推卡車是不會有夢幻的。那是謠言。 END.
"那這個影片是造假嗎?"
......我很認真的想了一下這個問題。
Arbitary Code Execution 應該要看成是在造假嗎?
我覺得這真的是個很難回答的問題啊。
我覺得ACE確實是"刻意的設法從遊戲內的手段,塑造出原本不存在的東西";
如果從原作設計的手段來看,這應該可以算是在造假吧。而且是在追求造假。
是在追求"我們有一些真實的手段,這能夠虛構出多少超乎想像的結果"。
而我覺得這個對虛構的追求非常的藝術。
至於這到底多真實──
很可惜我到現在還是沒有辦法看到這個SETUP的全貌,
無法判斷這到底是不是真的能夠全部用實機可行的手段辦到;
說真的就算他把整個SETUP的過程重新整理乾淨放出來,
我覺得總長度可能也不是我真的能全部看完的。(真的好長阿。...)
同時,ACE的手段實在太多,我也是挑比較容易理解的幾個方式試著介紹;
如果真的有把SETUP的過程放出來,大概也會有我沒辦法兩天看懂的方法。
哎,想學會的東西太多了,實在是很難都花時間去看懂阿,
要真的都去嘗試一次就更難了。ACE這樣的長度我實在很難去嘗試。
但是我覺得這沒什麼關係。
我還是很願意去相信那些Setup是實機能夠辦到的,
或是即使現在這個版本並沒有被實機作出來──大概也能找到辦法辦到。
反過來想,你看人家連Skype都可以打出來了,弄個夢幻真的很難嗎...
┌──────┐
│ 後 記 │
└──────┘
(1) 2017年的Pokemon 黃版 TAS "Arbitary Code Execution"
https://youtu.be/Vjm8P8utT5g
是一個我覺得非常巧妙的利用ACE挑戰Gameboy Color硬體極限的TAS
如果要挑一片TAS,來介紹現在能做到的事情──那大概就是這片了。
非常精采。不過如果對ACE的過程有興趣,這東西的作者Comment也很精彩
http://tasvideos.org/5384S.html
裡面為了更高速的即時寫入程式碼,自己寫了三個新的觸發階段;
另外用按鍵即時輸入18KHz的Still Alive,
然後還放了幾秒的海綿寶寶。巧妙至極。
TASbot即時的表演效果更好,但是我覺得以靜態作品來說,這片更是精彩。
(2) 其實我覺得 RiverT 提出的問題並沒有這麼應該被噓。
我覺得GDQ這次的表演其實用了非常深刻的技術;
而我覺得會選擇相信他們不會在現場造假,這其實滿有道理的──
因為最懂這些遊戲的人都正在看著,在現場或是在線上。
在這個場合惡意造假被揪出來,大概一輩子都別想在speedrun社群生存了。
相對的,自己嘗試來否定一個謠言其實很困難,比證實他難很多;
這需要同時證明"自己的操作是完備的,已經嘗試過所有可能性了。"
這很難啊。要怎麼證明自己的操作已經完備了呢?
更何況,如果是從理解ACE的原理的角度看起來,
在ACE存在的情況下,什麼叫做所有可能性...這真的很難說阿。
當然我理解謠言之所以討厭,闢謠到覺得很麻煩的時候,謠言真的很討厭。
如果誰跟我說"RMX4黑傑洛攻擊力比較高一點點"我也會翻臉 ← 一秒惹火鴉片
但是這個世界真的很難想像他究竟能大到什麼程度。哎。超難想像。
所以如果可能的話,我還是希望大家都可以開心的玩遊戲,討論遊戲就好了。
畢竟遊戲本來就是為了要讓玩家開心,才會被設計出來的嘛。
┌───────┐
│ 給按End的人 │
└───────┘
(1) 這是一篇幻想文。我其實沒有操作過,因為操作超長的。
(2) 8F法是ACE的眾多方法中比較容易理解的一種。但是還是很難。
(3) GDQ這次的表演採用的方式是更改地圖腳本指標。
(4) 但是如果按End看到這幾行應該沒辦法看懂。
(5) 所以我覺得大家還是開心玩遊戲吧。
(6) 上面兩頁有另一個精彩的黃版TAS,真的,看嘛看嘛,看嘛看嘛。
以上。
鴉片 (Append) 2018.06.06
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.64.192
※ 文章網址: https://www.ptt.cc/bbs/PokeMon/M.1528222048.A.516.html
推 zxasqw0246: 基本上還是算改造rom阿 只是原本有bug可以用gb輸入而 06/06 02:24
→ zxasqw0246: 已 06/06 02:24
→ zxasqw0246: 從輸入自製程式碼就不算正常遊戲內容了 06/06 02:24
→ Append: Read only memory(ROM) 的部分沒有任何修改,原裝卡帶。 06/06 02:25
推 xkiller1900: 這感覺很像創世神在玩的東西了 06/06 05:51
推 hirokifuyu: 推鴉片 06/06 07:04
推 f6bfb5: 「改造ROM」就是事前直接透過工具、Patch之類的方法強迫修 06/06 08:01
→ f6bfb5: 改,也不需要這麼多麻煩的手段了,ACE最大的特點是他是利 06/06 08:02
→ f6bfb5: 用遊戲或主機設計上的缺失或者極限來達成,因此如同文內幾 06/06 08:02
→ f6bfb5: 支影片,是可以直接在設計過人類操作上不可能達成的輸入源 06/06 08:02
→ f6bfb5: 以及原始的主機卡帶來達成這些效果 06/06 08:03
推 f6bfb5: 補一下前面的受詞,強迫修改「遊戲主體」。 06/06 08:06
推 Aijiang: 推鴉片 06/06 08:08
推 horseorange: 推 06/06 08:25
推 nickmath: 其實另一個更有名且四色版皆可用的夢幻法也是ACE的應用 06/06 08:28
→ nickmath: 而使用新買的卡帶或是從eShop上買下來都能執行 06/06 08:30
→ nickmath: 這樣還能說ACE是改造ROM嗎 06/06 08:30
推 w2776803: 看不懂還是給推 06/06 08:38
推 nisioisin: 不是改造ROM應該是在玩的時候透過漏洞修改RAM? 06/06 09:04
推 WiLLSTW: RMX4黑傑洛攻擊力比較高一點點! 06/06 09:21
(/‵Д′)/~ ╧╧
→ gn00386614: 不是官方要提供的東西就是假的啊 06/06 09:35
推 a23962787: 媽 我在鴉片的文章裡 06/06 09:50
→ rightmask: 傑洛沒差 06/06 09:58
推 riverT: 兩篇都拜讀完了 謝謝回覆 06/06 10:06
→ Append: 是的,透過漏洞來修改RAM的內容,然後騙遊戲執行這個位置 06/06 10:18
推 f6bfb5: 「是假的」「不正常遊戲內容」其實就看怎麼切入,從原始遊 06/06 10:38
→ f6bfb5: 遊戲設計邏輯來說這的確是始料未及的狀況,也是BUG/漏洞 06/06 10:38
→ f6bfb5: 的延伸運用,但魅力也在於簡單如大家都熟知的四色道具99和 06/06 10:39
→ f6bfb5: Level100,到推卡車人們多年來的都市傳說,理論都有辦法在 06/06 10:39
→ f6bfb5: 「原始的主機和遊戲上」(透過人類辦不到的輸入)達成,也 06/06 10:39
→ f6bfb5: 算是遊戲和主機的延伸價值創造。 06/06 10:39
推 zxasqw0246: 他只是用遊戲內漏洞來輸入程式碼阿 06/06 11:39
→ zxasqw0246: 那你會說彩虹小馬是遊戲內容嗎? 06/06 11:39
推 f6bfb5: 他是有辦法透過遊戲內的操作產生出來的遊戲內容沒錯啊XD 06/06 11:46
→ f6bfb5: 另外一個個人覺得很精彩但不是PM的ACE就是洛克人的呼叫End 06/06 11:53
→ f6bfb5: ing,而精彩之處在有玩家實際RTA重現了 06/06 11:54
「這是遊戲內容嗎?」
欸,這很難回答,不過我覺得可以比較準確地回答一個修正過的問題。
「這是正常遊戲內容嗎?」
當然不是阿。所有的bug本來就都不是正常遊戲內容。
如果是正常遊戲內容的話,這些就不會叫bug了,
會說是故意設計的,或可能被覺得設計不良。
會被叫bug的都是那些擺明了不是正常遊戲內容的,
像是中斷訓練師戰鬥抓夢幻之類的,
"遊戲公司大概不太想這樣設計"的,
才有辦法判斷出來那是個bug。
嗯好,那現在再來想一下,「這是遊戲內容嗎?」
...這很難回答阿。
已經被作進來的bug我覺得應該要被看成是遊戲的一部分。
換個角度想好了,其實有滿多東西都可以這樣切入來想他是不是遊戲內容的。
我覺得選擇隊伍是遊戲內容,而且大部分的人都會去選擇自己想要的隊伍;
那麼把隊伍排成「波波(HP233)、派拉斯特、大岩蛇、瑪瑙水母、袋獸」,
這雖然很刻意,但是大概沒什麼辦法說他不是遊戲內容──
從遊戲內容的角度來看,這就是調整隊伍嘛。
但是從"8F"這個道具的角度來看,這樣的隊伍本身就是一小段程式碼阿。
「我可以選擇這個隊伍」和「我可以指定一小段程式碼」是完全一樣的操作,
那麼可以仔細想一下,
「這樣的隊伍選擇」是遊戲內容嗎?
「指定一小段程式碼」是遊戲內容嗎?
這個操作應該要指向不一樣的答案嗎?
這可能就不會有太好的答案。
Bug總是在預期之外,會產生預想外的結果,
而預想外的結果算不算是遊戲內容,這大概很難有個準確地回答。
至於說彩虹小馬算不算遊戲內容──
我覺得「不算」這個直覺回答就是那片TAS的期待。
"我們現在能夠用遊戲內容構造出一些跟遊戲毫無關係的事情"。
但是他完完全全是用遊戲內容構造出來的阿,這樣到底該不該算呢?
如果不算的話,這些構造出來的過程到底要怎麼算呢?
----
ACE的技術原本在TAS裡面也是用來破關的,
一個大家可能更熟悉的例子是黃版的0:00破關,
開場按一按連房間都沒出就進殿堂了。
...嗯,確實這不是正常遊戲內容。但是進殿堂大概是遊戲內容。
這個衝突感就不夠明顯。(好吧我知道還是滿矛盾的)
於是後來就有了一系列根本沒在玩遊戲的ACE TAS。
※ 編輯: Append (1.162.64.192), 06/06/2018 12:47:13
→ w2776803: 0:00破關也太神了 06/06 14:12
推 alanhwung: 狂 06/06 14:33
推 olys: 推推 06/06 14:47
推 ltflame: 感謝分享! 請問理論上只要有辦法找到漏洞 任何遊戲都可 06/06 15:39
→ ltflame: 以放ACE嗎 例如用究極日月上PTT 還是只限古早遊戲呢? 06/06 15:39
當然並不是任何漏洞都可以,也不限於真的很古早的遊戲。
例如ORAS曾經可以。(!!!)
但是你可以想像如果是像3DS這種比較後期的機器,
能夠控制系統就會直接產生改機的問題;
所以更深入的討論會觸犯版規,這裡就必須跳過了。
不過這類型的東西如果有被發現,應該都會在很短時間內patch掉啦。
------
當然古老遊戲和進代遊戲在這些技術上,
難度也是不成比例的。
古老的遊戲在記憶體和效能的運用上比較苛刻,
也因為這樣更容易產生漏洞,更有機會能做出比較奇妙的事情。
※ 編輯: Append (1.162.64.192), 06/06/2018 16:18:36
※ 編輯: Append (1.162.64.192), 06/06/2018 16:22:35
→ ricksimon: "結局什麼的是自己創造的!" 06/06 17:24
→ s32244153: 系統:你的系統已經損壞。 06/06 17:37
推 whatai: 早期遊戲比較可以利用操控記憶體來達成目的 06/06 17:38
→ whatai: 像紅綠版可以利用不斷選擇某個道具 之後去戰鬥 打贏之後 06/06 17:39
→ whatai: 可以直接跳100等 (但是遊戲會變得怪怪的 會有很多亂碼 06/06 17:39
推 PrettyFace: 謝謝鴉片大的分享! 06/06 20:59
推 MUSTANG33: 0:00那個在一樓房間 道具欄打開按一按就過了 06/06 21:16
→ chinhsi: 自己噓自己XD 06/07 01:49
推 Medness: 突然變成哲學題了 06/07 12:27
推 naya7415963: 推後記,世界大的超乎我們想像 06/07 17:03
推 naya7415963: 這麼好的文章怎麼只有20+56p幣 @@ 06/07 17:06
→ Append: 因為我不能忍受在PTT的介面上編輯這麼長的文章, 06/07 18:12
→ Append: 所以我是用PHJCI寫好排版上色才複製貼上... 06/07 18:13
推 ernie1871: 跪了這東西好猛 是因為研究這個 今天才開台玩黃版嗎 06/08 02:46
推 zxc654033: 推推 06/13 00:54