開發者 Yifeng Wang 公佈了他將經典 CS 移植到初代 PSP 的項目「OpenStrike」,不僅跑起來了,而且穩定維持在 60fps(僅佔12MB)。

初代 PSP 的硬件條件苛刻,總 RAM 僅 32MB,實際留給程式的空間大約只有 24MB,OpenStrike 之所以能塞進這副身板,靠的是一套精心設計的雙引擎架構。底層使用 Rust 自研的 3D 引擎 Pocket3D,專攻玩家移動、碰撞檢測、AI機器人、武器與子彈運算、場景繪制。上層則跑著一個自研的 JavaScript 引擎 PocketJS,通過內嵌 QuickJS 來執行 JS 和 TypeScript,負責處理遊戲規則、武器參數,以及血量、彈藥、准星、比分這些界面邏輯。這種分層想調整回合流程、機器人數量或武器設定時,只需要修改一個 rules.ts 檔案,完全不用碰底層的 3D 引擎。

根據 Yifeng Wang 公開的分析數據,Rust 引擎、QuickJS、JS 程式和已處理的地圖檔案加起來約 6.2MB,QuickJS 堆、引擎狀態加上每幀頂點緩存區的峰值用量約 4.4MB,整套系統跑起來佔用約 12MB,還剩下大約 13MB 的空間。

穩住 60fps,思路是盡量不乾多餘的活,原版 CS 使用的 BSP 地圖格式,地圖被預先切割成多個區域,檔案中包含了 PVS(可能可見區域)數據,引擎只需要查表就能瞬間判定視野範圍內該畫什麼,牆後面看不到的房間和通道一概跳過,不浪費一絲算力。現代顯卡有足夠算力去跑更複雜的遮蔽剔除算法,但對運算資源極度匱乏的 PSP 來說,1990年代這套預計算方案反而高效。

GoldSrc 引擎的地圖原本就附帶 Lightmap,記錄了牆面和物件的明暗變化。OpenStrike 沒有讓 PSP 在運行時重新計算任何光影,而是在電腦端編譯階段就把Lightmap結果寫入模型的頂點顏色中。到了PSP上,硬件只需要照著頂點顏色畫三角形,漸變自動完成,完全不需要疊加實時光影層,代價是畫面沒有任何動態光源和炫麗陰影。

目前 OpenStrike 處於 v0.1 概念驗證階段,已經可以在 8張經典 CS 地圖中與 AI 機器人進行殲滅戰,包括 de_dust、de_dust2、de_inferno 和 cs_office。規則是消滅所有機器人即獲勝,玩家先陣亡則判負,遊戲自動進入下一回合併保留比分。項目已在 GitHub 以 MIT 協議開源,提供桌面版和 PSP 用的 EBOOT 執行檔案,也可以通過 PPSSPP 模擬器直接體驗。

 

_______

更多平台立即 Follow:Qooah IG (@qooah)Qooah YouTube,八掛產品發佈會現場,睇盡靚靚 Show Girls