SpringRTS 中的 Lua/什麼是 Spring 引擎
簡單來說,引擎是遊戲的核心。通常,遊戲開發團隊會製作一個引擎來處理大部分繁重的工作,例如物理和 3D 渲染。物理和 3D 渲染是遊戲中最消耗 CPU/GPU 的部分,也是通常包含整個遊戲中最多程式碼的部分。3D 模型、紋理等則儲存在引擎之外。
這樣做的原因是為了避免調整遊戲需要對整個遊戲的程式碼進行重大更改。在過去(引擎還沒有被使用之前),曾經存在包含所有遊戲內容的大型檔案,因此如果有人想要更改遊戲中的內容,那將會是一件很麻煩的事情。這個人必須深入研究遊戲的每一行程式碼,並仔細檢查更改後沒有任何問題。將模型、紋理和其他遊戲元素分開,使得維護遊戲變得容易得多,也方便了將來進行調整。
Quake 的示例
你可能聽說過 Quake 引擎,它被公開發布。有了引擎,人們就可以改變很多東西(修改)甚至製作新的遊戲。例如,從 Quake 引擎衍生出了一個開源遊戲叫做 Warsow(以及其他遊戲)。Warsow 的開發者所做的事情是採用引擎並使用自己的模型、紋理和其他檔案。他們可能還稍微更改了引擎以滿足他們的需求。重要的是,你可以自己使用 Quake 引擎並使用自己的模型,如果你願意還可以進行修改。這樣,只需修改一小部分遊戲,就可以讓它看起來像一個新的遊戲。
這種“遊戲修改”的方法甚至在市場上廣泛使用。一個團隊開發一個引擎,然後用同一個引擎製作一系列不同的遊戲,這很常見。這樣,未來的遊戲只需要有限的編碼工作。
Spring 引擎是基於舊遊戲《全面戰爭》而構建的。這就是為什麼許多不同的遊戲(mod)擁有相同的特徵,例如金屬和能量資源系統。
當為 Spring 製作遊戲時,你實際上是在製作一個修改(mod)。引擎保持不變,唯一改變的是外部部分,例如地圖、單位模型、單位行為、紋理、音軌、AI 行為等。遊戲的核心仍然存在於引擎中,因此你的自由度有一定限制。
即使有這樣的限制,你仍然可以透過多種方式改變遊戲的畫面。你甚至可以改變金屬/能量系統,但這需要大量的 Lua 程式碼,最終會使遊戲執行速度變慢。請記住,Lua 的執行速度比 Spring 引擎使用的 C++ 語言慢 3 倍。