不知道大家還記不記得?從 Windows 95 到 Windows XP,在作業系統一直都有內建的 3D 彈珠台(Space Cadet Pinball),也是除了新接龍以外,無聊打發時間最常玩的小遊戲。這款遊戲在 Windows Vista 開始就突然消失,多年來外界普遍認為是版權問題所致。但微軟資深工程師 Raymond Chen 近日在部落格揭露了真正原因:移植 64 位元時該遊戲屎山代碼太多,加上看不懂的原始碼,最終讓團隊選擇放棄。

Space Cadet Pinball:從 95 到 XP陪伴三代 Windows 的經典
3D 彈珠台的原型出自 1995 年由 Cinematronics 開發、Maxis 發行的《Full Tilt! Pinball》,這款遊戲內含三張彈球桌面,微軟僅授權了其中的「Space Cadet」桌面作為主打。該桌面收錄在同年 8 月 24 日與 Windows 95 同步上市的 Microsoft Plus! 擴充套件中,由於彈珠台本身的高娛樂性與 Windows 95 的龐大裝機量,Space Cadet 很快成為那個世代電腦使用者的共同記憶。
後續的 Windows 98、Windows Me 與 Windows XP 都直接將這款遊戲納入系統內建清單,安裝 Windows 後打開「附屬應用程式」就能找到。對許多人來說,3D 彈珠台就是 Windows 的其中一部分。Raymond Chen 曾在 2012 年的部落格文章中澄清,3D 彈珠台的移除與授權無關。真正的原因發生在 2000 年代初期,他的團隊正在為 Windows XP 64 位元版做準備,負責將數百萬行 Windows 程式碼從 32 位元移植到 64 位元架構上。
幽靈般的彈球:64 位元下的碰撞偵測異常
移植完成後,3D 彈珠台在 64 位元環境下出現了一個詭異的狀況:彈珠會像幽靈一樣直接穿過桌面上的障礙物、擋板與彈板,直接掉出桌面底部,遊戲完全無法正常運作。
BUG 原因是碰撞偵測程式碼中一個隱蔽的浮點數捨入誤差,在 64 位元環境下的行為發生變化。這支程式碼來自外部公司多年前撰寫的授權軟體,沒有任何註解,微軟內部沒有人理解其運作機制。Chen 在部落格中的說法很直接:「我們甚至連碰撞偵測器在哪裡都找不到。」團隊試圖修復,但很快發現此路不通:沒有原始開發者、沒有文件、沒有測試案例,光是找到錯誤發生的確切位置就要花上好幾天。
Chen 其實對這款遊戲有很深的感情,但在數百萬行程式碼的移植截止日期壓力下,沒有團隊有時間花好幾天去研究一支看不懂的第三方遊戲原始碼。最終管理層決定將 3D 彈珠台從後續 Windows 版本中移除,而且這個決定是在 XP 還在開發時就做出的,後續沒有任何人提出重新納入的計畫。Chen 坦言這是他 Windows XP 時期少數讓他感到遺憾的決定之一,因為他自己也很喜歡這款遊戲的設計。他在多篇部落格中都提過,看到使用者對彈球消失感到失望時,他很能理解那種心情。
版權的雙重枷鎖
雖然移除的直接原因是技術問題,但版權也讓彈球無法以其他形式回歸。微軟當年的授權合約僅允許將 Space Cadet Pinball 收錄在 Windows 與 Plus! 擴充套件及其後繼產品中,不能獨立發行或開放原始碼。Cinematronics 與 Maxis 後來都被美商藝電(EA)收購,授權關係更加複雜,即使微軟想重新簽約,也找不到原來的授權窗口。
2018 年,微軟 Garage 團隊曾試圖重新打包仍在 32 位元上正常運作的彈珠台版本,但法務審查後確認為授權限制,無法獨立發行。近二十年來雖然有民間開源重製版問世,甚至有人用 Unity 引擎從頭打造類似的彈珠台遊戲,但官方版本至今沒有回歸任何現代 Windows 平台。



