Silicon Labs(芯科科技)熱衷于突破嵌入式系統(tǒng)的極限和創(chuàng)新。在先前成功將一款經(jīng)典游戲-雷神之錘(Quake)移植到基于EFR32MG24無(wú)線SoC的Arduino Nano Matter開(kāi)發(fā)板之后,我們迎來(lái)了新的挑戰(zhàn):將另一款經(jīng)典第一人稱射擊游戲-毀滅公爵3D(Duke Nukem 3D)的完整體驗(yàn)帶到我們的超低功耗平臺(tái)MG24的開(kāi)發(fā)板上,以實(shí)現(xiàn)包括游戲音樂(lè)、多人連線模式等完整的游戲玩法。
為什么選擇毀滅公爵3D
毀滅公爵3D于1996年在Quake之前發(fā)布,是互動(dòng)玩法的里程碑。雖然在圖形上不如Quake先進(jìn),但它提供了:
可移動(dòng)的墻壁和區(qū)域
與物體交互以及可破壞的環(huán)境
高級(jí)功能:鏡子、安全攝像頭、腳本控制和混響效果
這些特性使它成為一個(gè)完美的參考設(shè)計(jì),用來(lái)展示嵌入式性能和游戲體驗(yàn)的完整性。
硬件限制與游戲特性
我們希望代碼能運(yùn)行在去年為Quake移植開(kāi)發(fā)的同一款開(kāi)源硬件上,也就是“The Gamepad”,它基于Arduino Nano Matter板,搭載基于芯科科技MG24 SoC的MGM240S無(wú)線模塊。

The Gamepad硬件規(guī)格:
無(wú)外部RAM(僅使用MGM240S內(nèi)部的25kB)
外部閃存用于數(shù)據(jù)存儲(chǔ)(最高 64 MB)
320 × 240 像素RGB IPS LCD,帶SD卡讀卡器
立體聲音效
模擬搖桿和16個(gè)按鍵
代碼庫(kù)
我們選擇了Chocolate Duke Nukem 3D,它是Fabien Sanglard的xDuke移植版本的精簡(jiǎn)和注釋版,并支持SDL。SDL支持讓我們可以在Windows上開(kāi)發(fā)和優(yōu)化,然后再移植到真實(shí)硬件。
我們針對(duì)內(nèi)存和速度進(jìn)行了大量?jī)?yōu)化,以適應(yīng)256 kB RAM的限制。
內(nèi)存優(yōu)化
原始?xì)绻?D需要8 MB RAM,遠(yuǎn)超我們的硬件條件,因此必須進(jìn)行深入優(yōu)化。主要措施包括:
根據(jù)性能分析和代碼檢查,優(yōu)化結(jié)構(gòu)體字段大小
將關(guān)卡常量數(shù)據(jù)存儲(chǔ)到閃存,減少RAM 占用
創(chuàng)建分配器,僅存儲(chǔ)修改過(guò)的對(duì)象,未修改的對(duì)象直接從閃存讀取
將部分靜態(tài)全局?jǐn)?shù)組移到棧上
重用大型全局緩沖區(qū)(例如在關(guān)卡加載時(shí)重用幀緩沖)
優(yōu)化插值算法
游戲動(dòng)畫(huà)渲染時(shí),從外部閃存分塊復(fù)制到RAM,再進(jìn)行渲染
腳本文件預(yù)編譯并作為常量數(shù)組存儲(chǔ)在代碼中
攝像機(jī)精靈(顯示安全攝像頭畫(huà)面)臨時(shí)渲染到幀緩沖的狀態(tài)欄區(qū)域,因此每次渲染后必須重新繪制狀態(tài)欄
優(yōu)化聲音引擎,減少冗余RAM 使用
將xDuke 的高級(jí)混響效果替換為原版Duke Nukem 3D 的簡(jiǎn)單混響
速度優(yōu)化
為了提升性能,我們采取了以下策略:
重寫(xiě)部分繪圖例程。原始代碼是高度優(yōu)化的x86 匯編,后來(lái)在xDuke 中通過(guò)自動(dòng)工具轉(zhuǎn)換為C,導(dǎo)致代碼難以理解且性能下降。
由于墻體和精靈是逐列繪制的,我們利用DMA在當(dāng)前列繪制時(shí)從外部閃存加載下一列,實(shí)現(xiàn)加載與渲染并行,減少等待時(shí)間。
基于802.15.4無(wú)線連接的多人模式
我們采用芯科科技的RAIL庫(kù)構(gòu)建了一個(gè)輕量級(jí)協(xié)議:
異步節(jié)點(diǎn)發(fā)現(xiàn):在初始階段,所有節(jié)點(diǎn)選擇一個(gè)隨機(jī)地址,并通過(guò)“問(wèn)候”數(shù)據(jù)包進(jìn)行廣播。一旦其他節(jié)點(diǎn)接收到這些數(shù)據(jù)包,網(wǎng)絡(luò)就形成了。
同步的類(lèi)令牌環(huán)通信:當(dāng)所有玩家都確認(rèn)準(zhǔn)備好比賽后,協(xié)議切換到同步模式。在此模式下,地址最小的節(jié)點(diǎn)被選為主節(jié)點(diǎn)。主節(jié)點(diǎn)每隔25毫秒啟動(dòng)通信,第二個(gè)節(jié)點(diǎn)(地址次小)廣播其數(shù)據(jù),然后第三個(gè)節(jié)點(diǎn)發(fā)送,最后第四個(gè)節(jié)點(diǎn)廣播自己的數(shù)據(jù)。協(xié)議支持自動(dòng)重發(fā)丟失的數(shù)據(jù)包,以確??煽啃浴?/p>

工具與腳本
我們使用了一個(gè)Python腳本來(lái)轉(zhuǎn)換GRP文件,使其滿足以下要求:
所有MIDI文件轉(zhuǎn)換為T(mén)ype 0格式
VOC文件轉(zhuǎn)換為更易處理的 WAV 格式
GRP文件必須存儲(chǔ)在SD卡中。通過(guò)在開(kāi)機(jī)時(shí)按下特定按鍵組合,文件會(huì)被復(fù)制到外部閃存。Atomic Edition需要2×32MB閃存芯片,而原始版本只需2×16MB芯片。
性能亮點(diǎn)
超頻情況下:30–50 fps
未超頻情況下:18–30 fps
由于引擎更簡(jiǎn)單,DN3D 比Quake更快
結(jié)論
此移植展示了芯科科技MG24無(wú)線SoC的強(qiáng)大性能與靈活性:
在受限硬件上運(yùn)行完整功能的經(jīng)典復(fù)古第一人稱射擊游戲
支持多人模式、音樂(lè)、存檔/讀取以及控制臺(tái)功能
高效的內(nèi)存管理與性能調(diào)優(yōu)
我們希望這能激發(fā)開(kāi)發(fā)者探索嵌入式平臺(tái)的更多可能性——無(wú)論是游戲、可穿戴設(shè)備,還是下一代物聯(lián)網(wǎng)。
-
開(kāi)發(fā)板
+關(guān)注
關(guān)注
26文章
6293瀏覽量
118235 -
芯科科技
+關(guān)注
關(guān)注
1文章
499瀏覽量
17701 -
Matter
+關(guān)注
關(guān)注
1文章
334瀏覽量
7154
原文標(biāo)題:上手開(kāi)發(fā)-將經(jīng)典射擊游戲移植到MG24 Matter開(kāi)發(fā)板
文章出處:【微信號(hào):SiliconLabs,微信公眾號(hào):Silicon Labs】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
芯科科技攜手Waites公司打造基于傳感器的狀態(tài)監(jiān)測(cè)解決方案
迅為驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):iTOP-RK3568開(kāi)發(fā)板eDP屏幕移植全攻略
RL78/G24 快速原型開(kāi)發(fā)板使用指南
采用XIAO MG24開(kāi)發(fā)板的手套動(dòng)作控制電動(dòng)滑板設(shè)計(jì)
Hubble Network采用芯科科技MG24無(wú)線SoC構(gòu)建全球低功耗藍(lán)牙網(wǎng)絡(luò)
請(qǐng)問(wèn)如何將蜂鳥(niǎo)E203移植到Xilinx NEXYS A7 FPGA 開(kāi)發(fā)板上?
基于芯科科技信道探測(cè)開(kāi)發(fā)板的PC桌面鎖定示例
芯科科技2025年Works With開(kāi)發(fā)者大會(huì)深圳站Matter技術(shù)專(zhuān)場(chǎng)前瞻
如何移植rt-thread到野火imx6ull開(kāi)發(fā)板上?
如何移植EtherCAT Igh--基于米爾RK3576開(kāi)發(fā)板
基于DE1-SOC開(kāi)發(fā)板的太空射擊游戲
如何選擇合適的芯科科技Wi-Fi開(kāi)發(fā)板
使用MG24開(kāi)發(fā)板測(cè)試天線分集
芯科科技亮相2025 Matter開(kāi)放日和開(kāi)發(fā)者大會(huì)
下一代物聯(lián)網(wǎng):芯科科技和Arduino借助邊緣AI和ML簡(jiǎn)化Matter設(shè)計(jì)和應(yīng)用
將經(jīng)典射擊游戲移植到芯科科技MG24 Matter開(kāi)發(fā)板
評(píng)論