故事 › 遊戲裡藏著一整個網站

遊戲裡藏著一整個網站

你的遊戲資料夾裡有一個叫 easo 的資料夾,519 個檔案。 那不是「一些網頁」,是一整套 2005 年的社群網站 —— 註冊、好友、俱樂部、錦標賽、排行榜、線上配對。 它跟著光碟一起裝進你的硬碟,而它要連的伺服器早就不在了。

這是全站門檻最低的一次探索

不用解壓縮、不用十六進位、不用任何工具。 裡面 127 個 .html 和 11 個 .js,記事本直接打得開。

想跟著做,就從暖身課那套心法開始: 先備份、只看不改。這一課連改都不用改。

它有多大

副檔名檔數是什麼
.jpg261背景圖、頭像卡
.swf115Flash —— 一整層已經死掉的技術
.html127網頁。記事本打得開
.js11JavaScript。也打得開,而且沒有壓縮過
.xml2文字表
.txt / .png3其他
合計519約 10.8 MB

它叫什麼名字

easo 是縮寫。這個資料夾自己說出了全名 —— 打開 data\easo\mvp\help\about1.html,第五行就寫著:

EA SPORTS(tm) Online

不是這款棒球專用的。「common」開頭的四個資料夾是 EA 所有運動遊戲共用的同一套殼, 棒球只是把自己的內容塞進去。

⚠️ 一個很容易上當的搜尋

想確認「遊戲主程式真的會去開這個資料夾」,直覺是去主程式裡搜 EASO

本站這樣做,撈到 22 個片段,看起來證據充分。但那是假的。

SEASON 這個字裡面就含有 EASO

S-EASO-N。棒球遊戲裡「賽季」這個字出現幾百次, 每一次都會被當成 EASO 撈進來。

把含 SEASON 的片段排掉之後,22 個只剩下 4 個

DISC_EASO
POSTEASO
EASO_ADVANCE
IMVPEASOInterfaceWWW

這四個才是真的。證據從 22 個縮到 4 個,但這 4 個是真的。

這是本站反覆遇到的同一件事: 搜尋器會丟掉單字母grep 對二進位檔會靜默失效、 現在是關鍵字被包在別的字裡搜出一堆命中,跟搜出正確答案,是兩件事。

當年它能做什麼

說明頁有 26 個主題,光看標題就是一張完整的功能表。 下表照分類把篇數列出來,「主題」那一欄是舉例不是全部 —— 標了「等」的四列,本站沒有把該分類的每一篇都列進來(22 個列在下面,另外 4 個沒有):

分類篇數主題
俱樂部6 建立、尋找、我的俱樂部、設定、管理成員
錦標賽5 建立、大廳、我的賽事、歷史紀錄
制度6評等、等級、代幣、排名賽、會員選單
線上配對3配對大廳、建立對戰
個人3生涯、數據、設定
其他3首頁、排行榜、即時通

Flash 檔裡還能撈出 48 個伺服器端點名稱。光看名字就知道規模:

create_club        join_club          leave_club
recruit_member     ban_member         unban_member
transfer_commissioner    accept_commissioner
edit_club_logo     edit_club_news     get_cvc_leaderboard

會長可以轉讓、可以封鎖會員、可以改俱樂部新聞、還有俱樂部對俱樂部的排行榜。 這是 2005 年,一款單機棒球遊戲的隨附品。

上面列出來的那些是不含主機位址的相對路徑(同一批 Flash 檔裡另外還有十幾條帶主機名的舊網址,本站不列),而且對應的伺服器早就不存在。 這裡列出來是為了說明當年的功能,不是可以連的東西。

開發者忘了收乾淨的東西

11 個 JavaScript 檔共 1,826 行。把所有會跳出訊息框的那行找出來,一共 78 行

狀態行數
被註解掉了31
被偵錯開關擋住(開關是關的)40
沒被擋,玩家真的會看到7

計法:alert 跟左括號之間允許有空白。這頁上線時只搜了 alert(,少掉 patcher.js 裡 5 行寫成 alert ( 的 —— 那 5 行全部是被註解掉的,所以 73 應為 78、26 應為 31,下面兩列不受影響。31 + 40 + 7 = 78。

那七行是這些:

alert("iamge too large")
alert("iamge too large")
alert("not an image")
alert("SERVER_ERROR_10016")
alert("iamge file too large")
alert("no game api available")
alert("FAKEGAME")

一、iamgeimage 拼錯了

而且錯了三次。這是玩家上傳俱樂部隊徽、檔案太大的時候,真的會跳出來的字。

二、一個永遠翻不出人話的錯誤訊息

SERVER_ERROR_10016 是代號,不是句子 —— 正常應該去文字表換成人看得懂的話。

去查 data\easo\mvp\main\MVP_lt_en.xml 這張英文字串表:裡面有 32 個 SERVER_ERROR 代號 —— 31 個編號從 10000 排到 10213,另外一個是 SERVER_ERROR_-1(工作階段逾時)。

偏偏沒有 10016。

所以玩家看到的就是 SERVER_ERROR_10016 這串字本身。 這個錯誤從出貨那天起,就沒有翻譯可以對。

三、FAKEGAME

它在 mvp/main/easoAPI.js第 6 行 —— 檔案最開頭。

看起來是開發時用來測試「網頁跟遊戲主程式接不接得上」的假訊號。 推測 本站沒有解出它實際什麼時候會跳。

為什麼這些東西還在

這一整套東西現在完全沒有用 —— 伺服器不在了,Flash 也早就被瀏覽器全面停用。 但它還躺在每一份安裝裡,佔著 10.8 MB。

跟本站其他頁講的是同一件事

介面檔裡有目錄根本不指向的資料(本站測試機那份 ingame.big 是 92.6%,剛安裝好的原版只有 0.04% —— 那 92.6% 是後來一次次改檔疊出來的,不是遊戲的性質)、 語音庫有一批號碼沒有人在用(本站測試機七成,剛安裝好的原版三成)、 球隊欄位名還停在 2004 年

遊戲從來不刪東西。它只是不再指向那些東西。 所以二十年後打開,那些東西都還在原地。

你可以自己去看

這一課不需要任何工具,也不會動到任何檔案。三個起點:

打開這個檔你會看到
data\easo\mvp\help\about1.html它自己說出全名
data\easo\commonJS\logoUpload.js 三個 iamge 拼錯,就在檔案中段
data\easo\mvp\main\easoAPI.js第 6 行的 FAKEGAME

用記事本開就好。看完直接關掉,不要存檔 —— 記事本可能會偷偷改掉換行符。

本站沒有解出的部分

四件事

一、115 個 Flash 檔的畫面長什麼樣,本站沒有還原。 只從裡面撈出了文字。未解
二、FAKEGAME 實際在什麼情況下會跳。推測
三、那 48 個端點回傳什麼格式、當年實際怎麼運作。未解
四、本站沒有、也不會嘗試連線任何伺服器。 這頁全部是讀本機檔案讀出來的。

📌 重點整理

接下來