開發者茶水間:《魔獸世界:經典版》
你好啊!《魔獸世界:經典版》的開發正在進行中,而我們非常興奮能分享一些我們面對的挑戰,以及我們如何克服它們。如同我們在上次的 BlizzCon 提過的,重現經典遊戲不是一個線性的工作,對我們而言很重要的是要花時間跟努力把事情做對-包括檢視遊戲版本、資訊、工程與數字,並且仔細確認我們在這些年間做的所有變動。肯定的是:《魔獸世界:經典版》團隊正在努力實現它,而我們已經到了可以分享一些成果的時候。
《魔獸世界:經典版》:最初雛型
我們必須做出的第一個—也是最重要的其中之一,是決定要專注在哪個版本上。就像你們很多人已經注意到的,經典時期長達兩年,並且充滿了變動。戰場就是在這段時間出現,而許多代表性的地城和團隊副本也是在這時候加入的。在仔細的考慮後,我們決定採用更新檔 1.12 當作基礎,因為它是經典體驗中最完整的版本。
我們決定了起點之後,就開始檢視原始碼的存檔以及我們能作到什麼,包括花了很多時間參看原來的開發資料庫。在把幾個關鍵拼湊起來之後,我們就有了一個在內部運行的更新檔 1.12 重建版。我們的團隊可以創造人物、進行基本任務和升級—以及死掉,這個我們幹了不少次。當作測試。這很明顯。
我們最初的運作暴露了幾個(意料之中的)問題:遊戲有時候會崩潰、無法識別現代的顯示卡,並且跟我們現有的登入系統不相容。通過的也無法支援任何我們現代的安全與反作弊功能。顯然如果要讓《魔獸世界》經典伺服器跟上暴雪的品質標準並提供玩家所期待的體驗,我們有很多事要做。我們就在這些挑戰中生活跟呼吸,《魔獸世界:經典版》工程團隊也就這樣漸入佳境。
一路前行:第二個原型
說到工程方面,《魔獸世界》是一個非常以數據主導的遊戲,意思是基礎程式碼很有彈性,而且它運作有特定的方式,由資料庫所持有的資訊控制。像是任務、怪物、物品,以及所有這些東西的互動規則,都由設計師與美工人員在數據中定義出來。
所以我們自問,如果我們用有著所有後端改良與變動的現代程式碼來處理 1.12 版的遊戲數據,有辦法提供原汁原味的經典體驗嗎?儘管看起來有些違反直覺,這將會納入像是寵物快樂值、武器技能升級、經典天賦等等,但是卻不會包括像是寵物對戰、隊伍搜尋器及成就等等較晚期的功能。在幾週的研究與開發、實驗與原型製作之後,我們有信心可以提供《魔獸世界》的經典內容與遊戲體驗,而不需要犧牲《魔獸世界》在過去超過 13 年來所受益的後端開發人力工時
我們最初的努力幫助我們決定了想要提供的體驗,而這第二個原型則真正定義了我們如何完成它。從一個現代結構-有著所有安全與穩定性變動-開始,標示出要提供原版的經典體驗所需的工作。任何開發構組與原版體驗間的差異都可以系統性地登錄與修正,同時仍然在穩定和安全的基礎之上運作。
深入挖掘
所以用現代的工程技術重現原版的經典體驗需要什麼?就從把構成《魔獸世界》的遊戲數據分成不同類型開始吧:
- 資料庫數據:這類型的資訊幾乎總是用數字呈現。一個生物有多少生命值、一個物品有多少力量值,或何時在哪裡會生成特定的生物,全都是我們存在資料庫裡的數字型數據的例子。我們也可以儲存並執行不同數據間的關係。
- 檔案數據:這通常是非常稠密的數據,像是 3D 模組、材質、動畫與地形。我們的使用者介面是用 XML 和 LUA 檔案建構的。很多美術檔案跟美術工具生成的格式不同。我們把這些初步的美術檔案處理成最適合讓我們的遊戲讀取並運行的狀態。
- LUA 腳本:有些功能是由設計師所寫的 LUA 腳本引導的,這讓他們可以輕易地以伺服器端的邏輯定義自訂的動作,不需要高深的工程知識。
工程是如何轉變
我們面對的一個挑戰是,所有經典的數據都是當時原本的格式,但是格式已經有了根本的改變。在這部份需要進行的主要工作是讓現代的客戶端相容於經典數據。
例如,法術本來只能對目標進行三個動作。做成表格看起來繪像這樣:
ID |
名稱 |
效果一 |
效果二 |
效果三 |
光環一 |
光環二 |
效果傷害一 |
光環傷害一 |
光環傷害二 |
1 |
火球術 |
造成傷害 |
套用光環 |
無 |
無 |
定期造成傷害 |
30 |
無 |
3 |
2 |
冰霜箭 |
造成傷害 |
套用光環 |
無 |
無 |
緩速 |
20 |
無 |
無 |
如你所見,有很多欄位填著「無」。在整個《魔獸世界》營運期間,我們改進了數據設計並且將我們的資料庫數據標準化。今天,同樣的數據會這樣被分開:
表格名稱:法術
ID |
名稱 |
1 |
火球術 |
2 |
冰霜箭 |
表格名稱:法術效果
ID |
法術 ID |
效果 |
傷害 |
1 |
1 |
傷害 |
30 |
2 |
2 |
傷害 |
25 |
ID |
法術 ID |
光環 |
傷害 |
1 |
1 |
定期造成傷害 |
3 |
2 |
2 |
緩速 |
無 |
在這張表格中,浪費的欄位減少了,而法術也不再被限制只有三個效果。但在我們可以讀取任何資料庫數據前,我們需要把舊數據轉成新的格式。這不只限於法術,幾乎所有遊戲系統 (包括物品、生物、玩家角色、生成、 AI 等等) 都有在資料庫格式上的改變。
展望未來
我們正在做的所有工作最終會允許我們在一個經過更多最佳化並且更穩定的平台上重現原版的經典體驗,幫助我們避免延遲與穩定性的問題。其他現代化的改良包括現代的反作弊/機器人偵測、消費者服務以及與 Battle.net 的整合,以及所有其他合理的玩家導向改良。
我們很期待面對前方的挑戰並與你分享對經典遊戲的熱情;每一行我們簽入資料轉換的程式碼都都讓《魔獸世界:經典版》更接近你—和我們—所希冀的原版體驗。感謝你加入這趟旅程。