快科技7月17日消息,開發(fā)者Yifeng Wang近日將經(jīng)典射擊游戲CS移植到初代PSP掌機(jī)上,項(xiàng)目命名為OpenStrike,僅占用12MB內(nèi)存即可穩(wěn)定運(yùn)行60幀。
Yifeng Wang為該項(xiàng)目搭建了雙引擎架構(gòu):底層使用Rust語(yǔ)言自研的3D引擎Pocket3D,負(fù)責(zé)玩家移動(dòng)、碰撞檢測(cè)、AI機(jī)器人、武器、子彈和場(chǎng)景繪制等對(duì)幀率要求極高的任務(wù)。
上層使用自研JavaScript引擎PocketJS,通過(guò)內(nèi)嵌的QuickJS執(zhí)行JavaScript和TypeScript,處理游戲規(guī)則、武器參數(shù)和血量、彈藥、準(zhǔn)星、比分等界面邏輯。
這種分層設(shè)計(jì)讓開發(fā)者只需修改rules.ts文件就能調(diào)整回合流程、機(jī)器人數(shù)量或武器設(shè)定,無(wú)需重新編譯整個(gè)3D引擎。
![]()
初代PSP配備32MB內(nèi)存,但實(shí)際留給用戶程序的可用空間約24MB,根據(jù)Yifeng Wang公開的內(nèi)存分析,Rust引擎、QuickJS、JavaScript程序和處理完成的地圖執(zhí)行文件約占6.2MB,QuickJS堆、引擎狀態(tài)和每幀頂點(diǎn)緩存區(qū)使用峰值約4.4MB,整體占用約12MB,剩余約13MB可用空間。
OpenStrike能在PSP上維持60幀的關(guān)鍵在于盡可能減少不必要的運(yùn)算,原版CS使用GoldSrc時(shí)代的BSP地圖格式,BSP全稱二元空間分割,會(huì)將整張地圖切分為多個(gè)區(qū)域,地圖文件中包含PVS(可能可見區(qū)域)數(shù)據(jù)。
引擎通過(guò)查表就能瞬間判斷畫面可視范圍,墻后看不到的房間和通道直接跳過(guò)檢測(cè)和繪制,不浪費(fèi)GPU性能。
現(xiàn)代顯卡有足夠算力處理更復(fù)雜的遮蔽剔除算法,但PSP最缺的就是運(yùn)算資源,直接沿用1990年代預(yù)計(jì)算好的結(jié)果反而更高效。
光影處理采用同樣思路,GoldSrc地圖原本附帶Lightmap記錄墻面和物件的陰影明暗變化,OpenStrike沒有讓PSP在運(yùn)行時(shí)重新計(jì)算光影,而是在電腦編譯階段將Lightmap結(jié)果烘焙進(jìn)模型頂點(diǎn)顏色。
PSP只需按頂點(diǎn)顏色繪制三角形,硬件自動(dòng)完成顏色漸變,無(wú)需疊加實(shí)時(shí)光影層。代價(jià)是畫面沒有動(dòng)態(tài)光源和華麗陰影,但對(duì)于4.3英寸、480×272分辨率的PSP屏幕來(lái)說(shuō),這個(gè)取舍完全合理。
目前OpenStrike為v0.1概念驗(yàn)證版本,已測(cè)試8張經(jīng)典CS地圖,包括de_dust、de_dust2、de_inferno和cs_office。玩家可在地圖中與AI機(jī)器人進(jìn)行殲滅戰(zhàn),消滅所有機(jī)器人即獲勝,玩家先死亡則判定失敗,游戲自動(dòng)開始下一回合并保留比分。
項(xiàng)目已以MIT授權(quán)在GitHub開源,支持桌面版和PSP的EBOOT執(zhí)行文件,也可通過(guò)PPSSPP模擬器運(yùn)行。
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.