Codex 幫《時之笛》跑上 iPhone:真正功夫係執好成套舊 C 工程
3C 產品

Codex 幫《時之笛》跑上 iPhone:真正功夫係執好成套舊 C 工程

圖片:via Tom's Hardware — https://www.tomshardware.com/video-games/retro-gaming/developer-uses-ai-to-bring-a-native-version-of-the-legend-of-zelda-ocarina-of-time-to-ios-no-emulation-required-to-play-one-of-gamings-all-time-greats-on-an-iphone-or-ipad
TechLab 編輯部(譯)·

HarkinianPad 補齊 Metal、觸控、簽署同 iOS app 生命週期

AI 接手嘅係一艘砌好大半嘅船

HarkinianPad 令《薩爾達傳說:時之笛》以原生 app 形式喺 iPhone 同 iPad 運行。開發者 Chris「Kahris」Sotraidis 話,移植過程主要用 OpenAI Codex 配合 GPT-5.6 Sol。不過講到 AI「將 N64 遊戲重建成 iOS app」就太誇張:遊戲早已由 Zelda Reverse Engineering Team 反編譯成 C,Harbour Masters 再用呢批程式碼整出 Ship of Harkinian。Codex 接手嗰刻,遊戲邏輯、現代圖像引擎同大部分跨平台架構其實已經存在。

HarkinianPad 做得最多嘅,其實係執好呢套龐大舊工程,令佢可以當成正常 iOS app 運行。項目先固定 Shipwright、libultraship、ZAPDTR 等上游版本,再用一批可重複套用嘅 patch 處理 iOS 差異。公開檔案顯示,相關 patch 合計超過 2,300 行,涵蓋數十個原始檔,旁邊仲有 build、打包、ROM 排除檢查同 CI script。呢種跨 repository、跨語言又要不斷編譯驗證嘅工作,先最能反映 coding agent 而家做到咩程度。

Arm64 同 Metal 本身只係起點

libultraship 原先已有部分 iOS 骨架,包括 Arm64 toolchain、SDL2、Metal backend 同少量流動裝置判斷,所以今次冇由零寫 renderer。麻煩在於好多桌面假設仲藏喺入面:程式入口唔符合 SDL 喺 iOS 用嘅 UIKit 啟動方式、遊戲資源路徑錯指向 Documents、macOS 全屏 API 會混入 iOS build,部分依賴亦用咗 GNU linker 參數。Codex 相關工作係逐層追依賴、改 CMake/Xcode 設定,再產出真正嘅 Arm64 Mach-O app。

Metal 都唔係「成功出畫面」就完事。項目記錄顯示,app 切去背景時曾經繼續讀取失效嘅 Metal texture,結果觸發 crash。修正後,SDL 收到背景、前景、低記憶體同終止事件時會暫停畫面、聲音同遊戲迴圈,返入 app 先恢復。呢啲問題同《時之笛》點玩冇直接關係,但處理得好唔好,會直接影響個 port 係咪真係用得,而唔係得個 demo。

觸控唔可以照搬 N64 手掣

N64 手掣有搖桿、十字掣、A/B、四粒 C 掣、L/R、Z 同 Start,全部鋪上手機畫面好容易遮住遊戲。HarkinianPad 加咗 UIKit 觸控層,按鈕集中喺橫向畫面兩邊,選單打開時會暫時收起。iPhone 首個版面仲直接沿用 iPad 尺寸,按鈕撞埋一堆;後續 commit 先按較矮畫布縮細比例同重新排位。

現階段個虛擬搖桿只提供八方向輸入,項目亦直認實體手掣先有完整模擬精度。鍵盤、滑鼠同 iOS controller 路徑已經編入 app,但手掣重新連線、震動、動作感應同不同型號配搭仍未完整驗證。所以 Tom's Hardware 所講嘅 60 FPS、全解像度同順滑體驗,暫時主要建基於開發者展示同 Ship of Harkinian 本身功能,未見獨立裝置測試矩陣支持。

原生 port 同模擬器差喺邊

模擬器會重現 N64 硬件環境,再即時執行原本 ROM 指令;HarkinianPad 就直接編譯反編譯後嘅遊戲程式,針對 Arm64 運行,畫面經 Metal 輸出。咁做較容易加入寬屏、高幀率、現代輸入同 mod 功能,亦毋須 JIT。不過佢只認《時之笛》,放另一隻 N64 遊戲 ROM 入去完全冇用,通用性遠低過 Delta 呢類模擬器。

遊戲美術、音樂同聲效亦冇收錄喺 IPA。首次開啟時,用戶要放入項目支援、合法取得嘅《時之笛》ROM,app 再喺裝置內生成 oot.o2r 資源檔。換句話講,原生 port 冇令 ROM 同版權問題消失,只係將遊戲引擎同受版權保護素材分開處理;項目亦明確拒絕提供 ROM 或下載來源。

香港 Apple ID 理論上裝到,但門檻唔低

HarkinianPad 已提供未簽署 developer-preview IPA,冇 App Store 上架,亦冇公開 TestFlight。項目建議用 AltStore Classic 配合自己嘅 Apple ID 重新簽署,或者用 Mac、Xcode 同 Apple development team 自行編譯。AltStore Classic 文件寫明,普通 Apple ID 簽署嘅 app 七日後會失效,要定期重新整理,裝置同時亦只可保留三個呢類 sideload app。

項目文件冇列出香港地區限制,所以香港 Apple ID 理論上可跟普通個人簽署流程安裝,但暫時未見開發者提供香港帳戶實裝紀錄。用戶仲要開 Developer Mode、準備電腦、自己處理 IPA 同合法 ROM,離 App Store 撳一下下載差好遠。現階段比較適合本身玩開 sideload、識處理 ROM dump 嘅玩家,普通 iPhone 用戶可以等發行方式同硬件測試再成熟少少。

「首次 iOS 版」講唔通

今年較早前已有人發佈 Sunset-Dawn 嘅 Shipwright iOS fork,備份 repository 仲保留 IPA、觸控、controller 同 SideStore 資料,所以 HarkinianPad 唔係首個《時之笛》原生 iOS port。佢較完整嘅地方係公開可重現 build、固定上游版本、ROM 排除檢查、裝置內匯入流程同詳細故障紀錄,工程交代清楚得多。

至於 Codex 實際寫咗幾多、開發者改過幾多,repository 冇公開完整 agent session、prompt 或逐行歸因,現時只可視作開發者自述。今次最有意思嘅證據係產物本身:coding agent 已經可以讀懂大型舊 codebase、追跨平台依賴,再靠反覆 build 同裝置故障逐步修正;但底層反編譯、跨平台引擎同社群多年累積,仍然係成件事行得通嘅基礎。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook