根據《GIGAZINE》報導,1999 年問世的遊樂園經營模擬遊戲《過山車大亨》,不僅在遊戲設計上深獲玩家喜愛,更因程式碼的高效最優化而成為遊戲開發領域的經典範本。近年來,一位資深遊戲程式設計師拉爾斯·蒂森(Lars Tofte)透過對遊戲程式碼的深入解析,揭示了這款遊戲在當年極度受限的硬體環境下,如何達到驚人的運作穩定性與流暢度。

《過山車大亨》最初由克里斯·索耶(Chris Sawyer)以幾乎全部採用「組合語言」(Assembly Language)開發,這種語言可直接控制 CPU 執行指令,極大化利用硬體資源,但也因開發門檻極高,僅在極少數場合使用。而在 1999 年,大多數遊戲仍以 C 或 C++ 為主,僅在關鍵模組中採用組合語言。然而,索耶卻選擇以組合語言撰寫《過山車大亨》的幾乎全部程式碼,使遊戲在當時的 PC 上仍能穩定運作數千名遊客、多項設施與數十條遊樂設施的模擬。

「這款遊戲之所以被稱為『最優化遊戲』,並非單純因為它跑得快,而是它幾乎在所有設計層面都做到無可挑剔的精準與省資源。」蒂森指出。他以遊戲中「錢幣管理」為例,並非以統一的資料型別處理,而是根據用途,採取不同大小的資料型別。例如,大型設施價值用 4 個位元組(bytes)儲存,而商店價格則僅以 1 個位元組儲存,這種細節在當時極度重視記憶體效能的年代,顯得格外重要。

此外,《過山車大亨》在數學運算上也做了大量優化,例如將乘除法轉換為「位元移位」(bit shift),這種處理方法在處理 2 的倍數時效率極高。例如「×4」只需將數值左移 2 位元,「÷8」則只需右移 3 位元。這種運算方式在當時的 CPU 上能大幅提升處理速度,並被大量運用於遊戲內許多數值計算。

在遊戲設計層面,遊戲也考慮到運算負荷而做出特定設計。例如遊客在移動時,雖有明確的目的地,但其尋路演算法設有上限,避免在複雜地形中產生大量運算。這種設計雖然導致遊客偶有迷路或繞遠路的現象,但也正是遊戲能維持高畫面更新率的關鍵。此外,這種設計也巧妙融入遊戲系統,例如購買園區地圖的遊客便會獲得更廣範圍的尋路能力。

最後,面對經典的「人群擁擠導致當機」問題,《過山車大亨》採用簡化處理方式,遊客之間不會避開彼此,避免大量的碰撞判定運算,這雖然與現實世界有所不同,卻大幅降低了程式的負擔。

「這並不是一款『為了效能』而犧牲設計的遊戲,」蒂森總結說道,「相反地,它是『為了設計』而設計出最佳的效能方案。」

📰 本文資料來源 • GIGAZINE