開放源碼的遊戲大冒險
這一篇是我給自由軟體鑄造場電子報的稿件,刊登於第一百零九期 (2008/08/11)。
開放源碼的遊戲大冒險
不管從軟體還是從硬體的角度來看,遊戲都無疑是促進資訊產業進步的最大助力之一。每年都有不計其數的使用者,為了要玩遊戲,購買更快的 CPU、更多的記憶體、更強悍的顯示卡、更大的網路頻寬;幾十年來,電腦的作業環境也不斷朝著更容易玩遊戲的方向發展,許多與多媒體相關的應用程式介面與函式,甚至可以說是為了遊戲而出現的。
讓我們把時光倒回二十年前,那是個還不很便利的年代,光是要把一套遊戲安裝進電腦執行,就有可能遇到非常多的阻撓⸺檔案管理、驅動程式(滑鼠、搖桿、音效卡、後來出現的光碟機)、記憶體空間與常駐程式(像是遊戲修改程式)、中斷呼叫等,每一樣都教人挫折到俯跪不起。
但正是在這樣的環境之中,造就了許多對資訊有興趣的人⸺大家其實不過是要玩個遊戲,卻因此開始摸索起批次檔、組合語言、反組譯……(也有很多人為了玩遊戲,而學了不少英文、日文,不過這並不是我們這次要討論的)。這些人長大之後,遇到了新的阻撓:小時候買不起玩遊戲所需的軟、硬體,長大之後使用的軟硬體遠遠超出這些遊戲的年代,太新太快,反而無法執行這些遊戲,這可怎麼辦呢?
開放源碼軟體/自由軟體社群的其中一項重要價值,在於重視少數人的需求;並且讓散居世界各個角落的「少數人」能更容易地團結在一起,照顧彼此的需求。筆者不是唯一遇到前述玩遊戲阻撓的人,有更多的人為了要玩遊戲,什麼事都做得出來⸺於是出現了一個叫 DOSBox 的開放源碼軟體專案,功能是讓你在各種不同的作業系統(例如 Windows、FreeBSD、Fedora、Gentoo、Mac OSX、OS/2、BeOS、Risc OS 等)上,模擬出一個純正的 DOS 作業環境,然後讓你能在裡面玩 DOS 時期的種種遊戲。
這個 DOS 模擬器一口氣把光碟機、音效卡、顯示卡、記憶體配置等麻煩事都解決掉了,只要改改參數或設定檔,就可以直接獲得你想要的主記憶體/XMS/EMS 數量⸺這簡直是當年的美夢!顯示卡跟音效卡可以直接模擬、對應到宿主系統上的,不再有支援不良或亂當機的苦惱;除了可以使用真正的光碟機外,也可以把光碟映像檔或某個硬碟上的目錄掛載成光碟機,這不但省掉了光碟驅動程式,而且當你在玩銀河飛將(Wing Commander)、殺人月(Under a Killing Moon)等以光碟片數量著稱的遊戲時,也就不用再拼命換片了。如果你玩網路遊戲的話,DOSBox 可以在 UDP 上模擬 IPX,在 TCP/IP 上模擬數據機通訊,意味著要跟別人連線對戰初代魔獸爭霸(Warcraft)或毀滅戰士(Doom)也沒問題。
如果你對於 DOSBox 組態檔不熟,或者祇想要更快地開始玩遊戲,那麼在各個平台上也有一堆專門寫給 DOSBox 的前端程式,協助管理遊戲與組態檔。有了這些前端程式,不但那些懷念純文字介面的人能重溫舊夢,想朝拜老遊戲的新朋友們也能更快入門。
DOSBox 有時候比真正的 DOS 機器還容易使用,甚至可以透過 DOSBox 來執行早期版本的 Windows;最近有個新聞,說有人在 Nokia N800/N810 上面執行 Windows 3.1 與 Windows95,這正是透過 DOSBox 辦到的。從 2002 年釋出的 0.5 版起,到最近的 0.72 版,DOSBox 六年來已經累積千萬次下載;這或許不是個大數目,但也不容小覷。
DOSBox 提供了一條出路。但開放源碼軟體/自由軟體的樂趣在於:辦法不祇一種。所以這個故事到這裡還沒說完。
在所有的遊戲類型當中,我最喜愛的還是冒險遊戲⸺這裡指的是那種以故事和劇情為主幹、幾乎不需要任何敏捷的手指技巧、到了二十一世紀已經所剩無幾的遊戲類型;也就是猴島小英雄(Monkey Island)系列、紗之器(Loom)、國王密使(King's Quest)系列、宇宙傳奇(Space Quest)系列、警察故事(Police Quest)系列、幻想空間(Leisure Suit Larry)系列、瘋狂大樓(Maniac Mansion)系列、印第安那瓊斯(Indiana Jones)系列、狩魔獵人(Gabriel Knight)系列、凱蘭迪亞傳奇(The Legend of Kyrandia)系列這類,至於鬼屋魔影(Alone in the Dark)系列、古墓奇兵(Tomb Raider)系列這種,則不算在內。
這些純冒險遊戲到了二十一世紀後,逐漸被新型態的互動故事(例如帶有解謎成分的動作遊戲、第一人稱射擊遊戲、角色扮演遊戲,這是 1999 年 Sierra 老闆娘 Jane Jensen 寫給 Sierra 的公開情書中的說法)取代,但就算以今日的眼光來看,這些遊戲仍舊充滿著豐富內涵,值得再三回味。
這些純冒險遊戲通常都會有個劇本系統,例如 LucasArts 的 SCUMM 引擎、Adventuresoft/Horrorsoft 的 AGOS 引擎、Coktel Vision 的 GOB 引擎、Sierra 的 AGI 引擎與 SCI 引擎、Humongous Entertainment 的 SPUTM 引擎等等,所以除了用 DOSBox 來執行這些遊戲外,另外也可以剖析他們的「劇本」,從資料檔取出各種媒體材料(圖片、動畫、音效、音樂等),重新拼湊出完整的遊戲。首先我們要介紹其中最有名的開放源碼軟體專案⸺ScummVM。
SCUMM 是 1987 年 Aric Wilmunder 和 Ron Gilbert 為了 LucasArts(當時是 Lucasfilm 的遊戲部門)的冒險遊戲瘋狂大樓(Maniac Mansion)所製作的,全名叫「Script Creation Utility for Maniac Mansion」,亦即「為了瘋狂大樓而做的劇本創造工具」;後來 LucasArts 以此引擎為基礎,陸續推出了多款冒險遊戲,包括異形大進擊(Zak McKracken and the Alien Mindbenders)、瘋狂大樓2:瘋狂時代(Day of the Tentacle)、紗之器(Loom)、印第安那瓊斯:聖戰奇兵(Indiana Jones and the Last Crusade)、印第安那瓊斯:亞特蘭提斯之謎(Indiana Jones and the Fate of Atlantis)、猴島小英雄:猴島的祕密(The Secret of Monkey Island)、猴島小英雄2:理察克的復仇(Monkey Island 2:LeChuck's Revenge)、猴島小英雄3:猴島的詛咒(The Curse of Monkey Island)、妙探闖通關⸺大腳之謎(Sam & Max Hit the Road)、異星搜奇(The Dig)、極速天龍(Full Throttle)。
ScummVM 在 2001 年發起之初,就是以 SCUMM 引擎為目標,要在各種不同的平台上,重溫 LucasArts 的經典冒險遊戲。這個專案相當地活躍,現在已經有超過 60 位開發者參與,SVN 檔案庫裡的修訂版次超過三萬,支援的作業環境包括 Windows、Fedora、Debian、SlackWare、Mac OSX、PlayStation2、PSP、Nintendo DS、Symbian S60、Symbian UIQ、PalmOS、Windows CE、Opie、Maemo、Dreamcast、GP2X、Solaris、BeOS、AmigaOS、Atari、OS/2、MorphOS、Mandriva、PocketPC、HanheldPC 等,甚至支援最新的 Wii(非官方移植)與 iPhone;各種 SCUMM 引擎的遊戲都有 90% 以上的支援度,另外也支援許多其他非 SCUMM 引擎的遊戲,包括前述 Adventuresoft/Horrorsoft 的 AGOS 引擎、Coktel Vision 的 GOB 引擎、Sierra 的 AGI 引擎、Humongous Entertainment 的 SPUTM 引擎等,共計 100 個遊戲,其中有 88 個遊戲的支援度在 80% 以上。
SourceForge 自從 2006 年起舉辦社群票選獎以來,ScummVM 年年入圍最佳遊戲玩家專案,並獲選為 2007 年年度最佳遊戲玩家專案(同年亦入選年度最佳專案)⸺然而你所不知道的是,ScummVM 有不少部分是靠著苦命的逆向工程實現,以及各種針對特定遊戲、特定平台而做的補綴。目前 ScummVM 除了主計畫外,還分支出兩個子計畫:ScummEx 與 Residual。
ScummEx 是 SCUMM 的資源檔瀏覽器、檢視器與擷取器;Residual 則是 GrimE 引擎的模擬器⸺LucasArts 最後一個用 SCUMM 引擎製作的冒險遊戲是猴島小英雄3:猴島的詛咒(The Curse of Monkey Island),下一個冒險遊戲神通鬼大(Grim Fandango)換了用 Lua 全新撰寫的 GrimE 引擎,這個引擎後來也拿來製作 LucasArts 最後一個冒險遊戲,猴島小英雄4:逃出猴島(Escape from Monkey Island);與 SCUMM 引擎最大的不同之處,在於 GrimE 引擎採用的是 3D 繪圖,這讓 ScummVM 難以處理,所以纔有了這麼一個子計畫。(有的讀者看到 Residual 這個名字,異想天開地問道:它未來會支援惡靈古堡 Resident Evil 嗎?不,它不會,永遠也不會。)
ScummEx 大約在 2006 年的時候進入停頓期,而 Residual 則還有在緩慢地發展⸺玩遊戲纔是真正的動力來源嘛。
ScummVM 並不是開放源碼界唯一一個這麼做的專案。有個叫 FreeSCI(原始專案網頁 http://freesci.linuxgames.com/ 已經連不上,但是其原碼已納入 ScummVM 專案)的專案也是針對特定的冒險遊戲引擎(Sierra 的 SCI,這個引擎並不在 ScummVM 的模擬之列)而發起的。SCI 全名是 SCript Interpreter 或 Sierra Creative Interpreter,用這套引擎製作的遊戲包括幻想空間(Leisure Suit Larry)二代到七代、宇宙傳奇(Space Quest)三代到六代、國王密使(King's Quest)四代到六代、英雄傳奇(Quest for Glory)一代到四代等。
FreeSCI 的成熟度與開發速度都比 ScummVM 還要低很多,目前穩定支援的平台也較少,但也是一條路,而且也很歡迎任何有能力、有興趣的人參與。就算是少數中的少數,開放源碼也帶來了一線希望。
由於 ScummVM 已經支援 Sierra 的 AGI 引擎,而成熟度及開發活躍度又比 FreeSCI 領先不少,也有不少人建議將這兩個專案合併,藉此提昇 SCI 引擎的支援。然而,任何真正接觸過開放源碼軟體專案的人都知道,合併專案⸺尤其是合併原本就小眾的專案⸺並不容易,最壞的情況下就是要把其中一邊的程式碼重新清理乾淨,移植到另一邊,而且會需要對兩邊程式碼都熟悉的人來做這件事。如果有熟悉 SCI 引擎的人能夠把 FreeSCI 的程式碼移植進 ScummVM,為什麼不讓他先專心補綴/改善 FreeSCI 呢?
另一方面,前面也有提過,ScummVM 針對不同遊戲、不同作業平台,做了很多特定的補綴,而不是真的一套辦法從頭適用到尾,因此把 FreeSCI 合併到 ScummVM 的話,這些苦工並不會瞬間生效,處理 SCI 引擎的人還是得再面對相容性等議題。這兩個專案不大可能會合併,但是若有任何一方有哪段程式碼值得學習(例如模擬器本身的介面等),另一方總是能自由地學習、採用⸺因為已經是開放源碼了呀。
隨著 ScummVM 闖出知名度,也有不少人打起了 SCUMM 的主意:既然所有用 SCUMM 引擎製作的遊戲,都幾乎能完美地用 ScummVM 來執行,那麼我們是否可以拿 SCUMM 來寫自己的遊戲,搭配 ScummVM 來玩呢?
理論上這是可行的,但是 ScummVM 為了支援舊遊戲所做的補綴,可能會讓自製的 SCUMM 遊戲發生問題;再說,目前根本沒有任何工具或套件,能夠拿來製作 SCUMM 所需的各種資源檔。換句話說,ScummVM 是為了玩遊戲而發起的專案,並不建議拿來「製作」遊戲。
如果你就是想要自己做一套遊戲呢?同樣地,開放源碼軟體/自由軟體是你的好朋友⸺有許多跟遊戲製作有關的開放源碼軟體/自由軟體專案,像是 SDL 跟 Lua,都很適合拿來製作跨平台的遊戲。稍早我們提到 LucasArts 最後的冒險遊戲引擎 GrimE,就用了 Lua,因此用 Lua 來製作冒險遊戲絕對是可行且恰當的。
事實上,有個叫 MAD 的開放源碼軟體專案,就是運用 Lua 所做的跨平台開放源碼遊戲引擎(這個引擎就叫「MAD」)。如果你想要製作自己的冒險遊戲,但是又不想重頭刻起,那麼 mad 或許是個不錯的開始。
為日常繁忙的工作感到疲憊嗎?對時下動輒打殺的遊戲感到空虛嗎?不妨泡杯咖啡,翻出經典的冒險遊戲,重溫多年前的精采故事吧!
補充說明:MAD 最後一次更新已經是多年之前;除了 MAD 外,還有一些「免費」(但是並不自由)的冒險遊戲開發套件,像是 Adventure Game Studio、Visionaire Studio、SLUDGE 等。有個叫 Maniac Mansion Deluxe 的遊戲,就是狂熱的玩家用 Adventure Game Studio 復刻的瘋狂大樓(Maniac Mansion),還獲得了 2004 年的 Adventure Game Studio 年度最佳程式腳本獎。