7月17日消息,開發者Yifeng Wang近日將經典射擊遊戲CS移植到初代PSP掌上遊戲機上,項目命名為OpenStrike,僅占用12MB內存即可穩定運行60幀。
Yifeng Wang為該項目搭建了雙引擎架構:底層使用Rust語言自研的3D引擎Pocket3D,負責玩家移動、碰撞檢測、AI機器人、武器、子彈和場景繪製等對幀率要求極高的任務。
上層使用自研JavaScript引擎PocketJS,通過內嵌的QuickJS執行JavaScript和TypeScript,處理遊戲規則、武器參數和血量、彈藥、準星、比分等界面邏輯。
這種分層設計讓開發者只需修改rules.ts文件就能調整回合流程、機器人數量或武器設定,無需重新編譯整個3D引擎。

初代PSP配備32MB內存,但實際留給用戶程序的可用空間約24MB,根據Yifeng Wang公開的內存分析,Rust引擎、QuickJS、JavaScript程序和處理完成的地圖執行文件約占6.2MB,QuickJS堆、引擎狀態和每幀頂點緩存區使用峰值約4.4MB,整體占用約12MB,剩餘約13MB可用空間。
OpenStrike能在PSP上維持60幀的關鍵在於儘可能減少不必要的運算,原版CS使用GoldSrc時代的BSP地圖格式,BSP全稱二元空間分割,會將整張地圖切分為多個區域,地圖文件中包含PVS(可能可見區域)數據。
引擎通過查表就能瞬間判斷畫面可視範圍,牆後看不到的房間和通道直接跳過檢測和繪製,不浪費GPU性能。
現代顯卡有足夠算力處理更複雜的遮蔽剔除算法,但PSP最缺的就是運算資源,直接沿用1990年代預計算好的結果反而更高效。
光影處理採用同樣思路,GoldSrc地圖原本附帶Lightmap記錄牆面和物件的陰影明暗變化,OpenStrike沒有讓PSP在運行時重新計算光影,而是在電腦編譯階段將Lightmap結果放進模型頂點顏色。
PSP只需按頂點顏色繪製三角形,硬體自動完成顏色漸變,無需疊加實時光影層。代價是畫面沒有動態光源和華麗陰影,但對於4.3英寸、480×272解析度的PSP螢幕來說,這個取捨完全合理。
目前OpenStrike為v0.1概念驗證版本,已測試8張經典CS地圖,包括de_dust、de_dust2、de_inferno和cs_office。玩家可在地圖中與AI機器人進行殲滅戰,消滅所有機器人即獲勝,玩家先死亡則判定失敗,遊戲自動開始下一回合併保留比分。
項目已以MIT授權在GitHub開源,支持桌面版和PSP的EBOOT執行文件,也可通過PPSSPP模擬器運行。







