開發者 Yifeng Wang(網名 doodlestrike)近日發布開源專案 OpenStrike,成功將經典射擊遊戲 Counter-Strike 移植到 2004 年推出的初代 Sony PlayStation Portable(PSP)。專案運作時僅佔用 12MB 記憶體,卻能穩定維持 60 幀畫面更新率。

雙引擎架構 分離運算與遊戲邏輯
要在效能有限舊機款上跑動射擊遊戲,絕非單純程式碼移植,而是需要對系統資源作嚴格分配。PSP-1000 只配備一顆 333MHz 的 MIPS 處理器核心,亦沒有為 JavaScript 而設的 JIT 即時編譯技術,每個程式邏輯都要逐行直譯執行。Yifeng Wang 為 OpenStrike 量身設計獨特雙引擎架構,將高負載運算與遊戲邏輯完全分離。
底層採用他以 Rust 語言自研的 3D 引擎 Pocket3D,負責所有對更新率要求極高的任務,包括玩家移動控制、碰撞偵測、AI 機械人邏輯、武器射擊、子彈彈道計算,以及最核心場景渲染繪製。這部分效能正是遊戲能維持 60 幀關鍵所在。
上層則運用另一款自研 JavaScript 引擎 PocketJS,透過內嵌 QuickJS 執行 JavaScript 與 TypeScript 程式碼,專門處理介面邏輯與規則,例如武器參數、玩家血量、彈藥庫存、準星設定以及比分系統。根據開發者官方網誌披露,遊戲規則以 TypeScript 撰寫,HUD 介面則以 Solid 框架建構。這種分層設計帶來極大開發便利,只需修改 rules.ts 檔案,便能調整回合流程、AI 機械人數量或武器設定,毋須重新編譯整個 3D 引擎。

記憶體精算 12MB 內完成一切運算
初代 PSP 配備 32MB 記憶體,扣除系統保留區後,可留給使用者程式空間僅約 24MB,對現代遊戲開發而言屬極狹窄空間。
根據 Yifeng Wang 公開記憶體分析數據,OpenStrike 資源分配非常精準。Rust 底層引擎、QuickJS 核心、JavaScript 程式碼本身,加上經處理遊戲地圖執行檔案,合共佔用約 6.2MB;QuickJS 堆疊空間、引擎運作狀態,加上每影格所需頂點緩衝區使用峰值則約 4.4MB。整個遊戲運作記憶體佔用量因此壓制在 12MB 左右,甚至為老機款保留約 13MB 剩餘空間。
沿用 GoldSrc 舊技術 減省渲染負擔
OpenStrike 能在 PSP 維持 60 幀運作,最大秘訣在於盡量減少不必要運算。原版 CS 建構於 GoldSrc 架構,使用 BSP(二元空間分割)地圖格式,預先將整張地圖切分多個區域,並在地圖檔案內置 PVS(可能可見區域)資料。透過此預處理資料,OpenStrike 引擎只需簡單「查表」,便能瞬間判斷目前畫面可視範圍,玩家隔牆看不到的房間與通道會直接跳過渲染,不浪費 PSP 寶貴 GPU 效能。
光影處理方面,開發者採用相同「預算」思路。OpenStrike 沒有讓 PSP 在執行時重新計算即時光影,而是在編譯階段,直接將 GoldSrc 地圖原有 Lightmap 運算結果「烘焙」進 3D 模型頂點顏色。PSP 實際運作時只需按頂點顏色繪製三角形,硬件本身會自動完成顏色漸層過渡,毋須額外疊加即時光影運算層。此做法代價是失去動態光源與即時陰影效果,但考慮初代 PSP 該塊 4.3 吋、解像度僅 480×272 的螢幕,這種技術取捨相當合理。
已測試全部 8 張經典地圖 支援 PS Vita 與 PPSSPP
目前 OpenStrike 仍處於概念驗證版本階段,開發者已測試全數 8 張經典 GoldSrc 時代地圖,當中已確認包括 cs_assault 及 cs_office。玩家可在地圖與 AI 機械人展開殲滅戰,消滅畫面上所有機械人即勝利,若玩家率先陣亡則判定失敗,每局結束後系統自動結算比分並直接開始下一回合。不過 PC Gamer 及 Tom’s Hardware 均指出,遊戲招牌的購買裝備階段功能現時仍未實現。
值得一提,這並非首次有玩家嘗試將 CS 玩法帶到 PSP。早於接近 20 年前,已有名為 CS Portable 的同人專案,借用 Quake 的 Gyro 物理引擎移植 CS 到 PSP,惟該作與這次 Yifeng Wang 全新自研引擎的 OpenStrike 屬完全不同技術路線。
除初代 PSP 外,有媒體報道專案同時支援 2011 年推出的 PS Vita,可在原生 960×544 解像度下運作,完全不需要放大 3D 渲染或 2D 元素。專案已採用 MIT 授權條款,在 GitHub 平台 pocket-stack/open-strike 完全開源,支援電腦版本與 PSP 原生 EBOOT 執行檔案,即使沒有實體 PSP,亦可透過 PPSSPP 模擬器體驗這款在 12MB 記憶體中創造奇蹟的經典之作。玩家需自行提供 Counter-Strike 遊戲素材資料方能運行。
資料來源:PC Gamer、Tom’s Hardware、PocketJS Blog、GitHub
