2026年8月29日星期六

WhaleAgent
微軟解畫:3D 彈珠不是輸給版權

微軟解畫:3D 彈珠不是輸給版權

微軟終於解釋 3D 彈珠 Space Cadet 為何在 Windows Vista 消失,答案不是傳了近二十年的版權問題。工程師 Raymond Chen 表示,Windows XP 做 64 位元移植時,彈珠一發射就穿過推桿掉出畫面,而遊戲由外部公司寫成、注釋極少,團隊連對撞偵測那段程式碼都找不到,最終在死線前直接把它刪走。

微軟終於解釋 3D 彈珠 Space Cadet 為何在 Windows Vista 消失。答案不是外界猜了近二十年的版權問題,而是 64 位元移植期間一個沒有人修得好的對撞偵測錯誤:彈珠一發射就穿過推桿和枱面掉出畫面,工程團隊在死線前選擇把遊戲直接刪走。

事件背景

3D Pinball for Windows - Space Cadet 隨 1995 年的 Microsoft Plus! 附加包首次登場,之後長年內建於 Windows 98、Windows ME 和 Windows XP,是不少人第一款接觸的電腦遊戲。到 2007 年 Windows Vista 推出,這個彈珠枱悄悄消失,此後再沒有回到任何一代 Windows。

由於枱面設計來自外部開發商 Cinematronics,發行方是 Maxis,多年來最流行的解釋一直是微軟的授權到期或出現法律障礙。微軟資深工程師 Raymond Chen 在官方開發者博客 The Old New Thing 撰文否定了這個說法,並在 2018 年和 2022 年補充細節。

真正的原因是一段找不到的程式碼

Chen 表示,問題出在 Windows XP 的 64 位元移植工程。當年團隊要把數以百萬行計的程式碼由 32 位元搬到 64 位元,測試機並非 Itanium,而是 Compaq 在 1999 年終止 Windows 支援後、被微軟改作 64 位元測試平台的 Alpha AXP 機器。

在這批機器上,彈珠的物理行為完全崩潰。遊戲一開始,彈珠掉進發射槽,然後直接穿過推桿和枱底墜出畫面。用 Chen 的原話,當時「遊戲通常都很短」。

更麻煩的是沒有人看得懂那份程式碼。遊戲多年前由外部公司寫成,注釋極少,團隊連負責把彈珠留在枱面的那段對撞偵測都找不到,更遑論修正背後的浮點捨入誤差。Chen 的說法是,團隊「無法花幾天時間研究程式碼,去查出是哪個晦澀的浮點捨入誤差令對撞偵測失效」。當時仍有數以百萬行程式碼等着移植,為一款舊遊戲拖慢整個作業系統的排期並不划算,於是彈珠枱被移除。

後續:錯誤其實早已修好

故事還有一個 Chen 本人事後才知道的轉折。他在 2022 年的補充文章中提到,問題根源很可能是 C 執行時期函式庫設定的預設捨入模式;後來有人修正了這個相容性問題,再拿彈珠重新測試,一切正常。據 The Register 引述,可玩版本確實曾在 64 位元 XP 和 Vista 的早期預覽版中出現過,但沒有人通知 Chen,他一直以為這款遊戲永遠回不來。

最終 Vista 正式版仍然沒有內建彈珠枱。到了這個階段,真正擋住復活的反而變成版權:微軟當年只取得在 Windows 和 Plus! 附加包中附送該枱面的授權,而 Cinematronics 和 Maxis 先後被 Electronic Arts 收購,要重新談一份授權遠比修一個技術問題複雜。

為何 Windows 11 再沒有這種東西

微軟今天已經不再隨 Windows 附送娛樂內容,Windows 11 沒有內建遊戲,也沒有像 Windows 10 鎖定畫面那張 Wharariki Beach 相片般讓人記得住的細節。當年那些小遊戲是作業系統性格的一部分,現在同類內容則被歸類為要另行下載的商店應用。

彈珠枱的下場說到底不是一個法律故事,而是一段沒有人有時間去理解的舊程式碼,剛好撞上一次趕死線的大規模移植。

來源

No comments yet