Claude 多智能体协作完成 F-Zero X 3DS 移植复盘

原标题:F-Zero X on Nintendo 3DS
78AI 研判分
核心综述

开发者发布 G-Diffuser(F-Zero X 反编译版)移植至 Nintendo 3DS 的详细复盘。该项目由单一长会话 Claude 编排,指挥 147 个子智能体在 24 天内实现 New 3DS 60fps 运行,随后扩展支持 Old 3DS 及原生渲染器。全程消耗约 31.7 亿 Token,API 成本近 5000 美元,展示了大规模自主编码代理在复杂遗留系统迁移中的可行性与成本结构。

报道正文

本文目录8 个章节

G-Diffuser(《F-Zero X》的反编译版本)移植至 Nintendo 3DS 的事后复盘 —— v1.0.0,涵盖最初为期 24 天的冲刺阶段(2026-08-11 至 09-03),该阶段实现了在 New 3DS 上以 60 fps 的 3D 效果运行;以及随后为期 43 天的第二阶段(2026-09-07 至 10-19),新增了 Old 3DS 支持、原生渲染器以及 Expansion Kit。整个项目由一人主导,通过一个长期运行的 Claude 会话进行统筹编排;第一阶段构建了 147 个子代理(subagents),第二阶段则动用了更多子代理。

主机从黑屏状态变为一款原生 60 fps 的立体视觉赛车游戏,随后又从仅支持 New 3DS 的版本扩展为覆盖两款主机(含与不含 64DD 扩展包)的四向发布版本。

第一阶段关键数据:

  • 15 个活跃工作日(在 24 个日历日内),期间因每周计划额度耗尽暂停了三次。
  • 3.17 B tokens(所有会话和代理累计,仅限第一阶段;详见成本部分)。
  • **4,974∗∗(按公开API列表价格计算:Fable4,974**(按公开 API 列表价格计算:Fable 10/$50 per MTok,1 小时缓存写入;仅限第一阶段;详见成本部分)。
  • 250 次涉及 3DS 移植的提交(commit)(第一阶段,自 v0.9.0 文档冻结于 2026-10-08 — 未针对最终历史重新验证)。
  • 15,039 行代码位于 port/3ds 目录下,外加 48 个纯增量补丁(pure-delta patches)(第一阶段计数)。

v1.0.0 新增内容

  • 199 条内部进度笔记(撰写于第二阶段)。
  • 43 天(第二阶段的日历跨度,2026-09-07 至 10-19,含首尾日期)。

上述数据均带有时间戳。第一阶段的硬件性能指标及 token/成本数据测量截止至 2026-09-03,并未针对 v1.0.0 重新运行;Agentic workflow 页面描述了第二阶段的执行方式,而 Cost 页面明确说明了其定价范围及未包含的内容。

关于硬件

v1.0 on a New 3DS: Select Mode with the Expansion Kit entries, the G-DIFFUSER idle view on the bottom screenv1.0,New 3DS:Expansion Kit 的选择模式(COURSE EDIT,CREATE MACHINE);下屏显示 DASH 的空闲视图。

v1.0 on a New 3DS: a race on the top screen, the DASH race dashboard on the bottomv1.0,New 3DS,比赛中途:下屏显示 DASH 比赛仪表盘,包含能量、位置、圈速和赛道地图。

下方的视频片段和照片来自 v0.9(2026-09),当时 DASH 尚未取代下屏上的调试控制台。

打开视频v0.9:在 New 3DS 上运行大奖赛。下屏显示的是移植版的调试菜单:59.8 fps、堆内存、构建 ID。打开视频v0.9:掌机模式,比赛中途。原生 60 Hz 帧率同步;无插值处理。New 3DS 上的 F-Zero X 标题画面标题画面,通过 Homebrew Launcher (.3dsx) 启动。选择模式界面选择模式。选择赛车界面选择赛车。Blue Falcon 属性Blue Falcon。

已实现的功能

基于同一套源代码树发布了三个主机版本,均可从 HOME 菜单(.cia)或自制软件启动器(.3dsx)引导启动:适用于 Old 3DS / 2DS 和 New 3DS / New 2DS XL 的基础游戏版本,以及包含 64DD 扩展套件(赛道编辑器和赛车创建器,需用户自备磁盘镜像方可游玩)的 New 3DS 版本。所有版本均从 SD 卡读取预烘焙的资源包——游戏本身绝不捆绑任何 ROM 或磁盘镜像。

这些版本可完整游玩整个游戏:包括大奖赛、计时赛、练习模式、死亡竞赛以及赛车编辑器界面,音乐和音效由真实 DSP 处理,滑杆控制立体 3D 效果,下屏仪表盘支持三种 HUD 布局及非比赛时的待机视图,并实现了干净的 HOME 键挂起、恢复、关闭、合盖休眠及关机功能。New 3DS 版本保持了第一阶段达成的原生 60 帧率同步;Old 3DS 版本则通过另一条路径达到了类似的效果。在 v1.0.0 版本中,若未指定 ini 配置文件,两个版本默认均采用该路径:即原生渲染器([perf] preset = auto)。New 3DS 第一阶段的渲染线程/逐绘制立体路径仍内置其中,可通过显式 ini 配置启用,但已不再是默认选项——请参阅 Frontier 和 Pushing the boundaries 以对比这两个版本。

技术栈

  • decomp:F-Zero X 的反编译项目(inspectredc/fzerox),保持上游原样,外加一套补丁堆栈。
  • libultraship:N64 运行时库(Kenix3),保持上游原样,包含一个 13 行的 newlib 修复,使其能在 devkitARM 上构建;它仍然负责绘制所有菜单和非比赛画面。
  • port/3ds:第一阶段时为 15,039 行代码,此后持续增长:包括 citro3d 渲染后端、立体声、音频、输入、菜单、生命周期管理、渲染线程、性能分析器以及打包工具。
  • 原生渲染器(在第二阶段添加):一个自主开发的解释器,针对赛道几何体跳过了逐帧的显示列表遍历,并在两台主机上均作为 v1.0.0 版本的默认选项——关于其实现方式以及为何能让旧款 3DS 跟上节奏,请参阅 Frontier。

硬件上的关键数据,第一阶段(New 3DS)

时间中位数p10达到上限比例
08-14 首次比赛(模拟器)12–20––
08-21 首次硬件运行48–50––
08-28 发布级构建版本~51~40(人群场景,MINIMAL 画质)–
09-02 第 1 轮:主线任务(战役开始前)51.339.29%
09-02 第 2 轮:桥接备忘录(brfast)57.246.629%
09-02 第 3 轮:HUD 图集 · 三角形备忘录 · TMEM · 音频56.048.032%
09-02 第 4 轮:渲染线程移至核心 2(pipe)57.644.614%
09-03 第 5 轮:超前模式 · 桥接在主线程 · 自动调整对手细节59.651.453%

用五行概括第一阶段

  1. 08-11 → 08-14:从研究到竞速。 可行性报告、智能体团队规划、五条并行的基础工作流、六个启动 Bug,以及在模拟器中实现 12–20 fps 的首次竞速。
  2. 08-20 → 08-22:从“粉色”画面到可玩状态,再到真实主机。 修复了雾效、HUD、涂装、阴影和天空;loadblock 的发现使菜单帧率从 27 fps 提升至 60 fps;08-21 首次硬件运行(“哇,运行效果太棒了”);当晚完成音频集成。
  3. 08-27 → 08-28:产品级质量。 五智能体集群部署、立体声启用、触控菜单、对手细节优化、GPU 顶点变换的激进尝试(构建后搁置)、包含法律声明的 README 文件以及发布包。
  4. 09-01 → 09-02:生命周期与最后的重大杠杆。 修复了 HOME 崩溃及从 HOME 关闭时的挂起问题;桥接输出缓存被证明不可行(NO-GO),改为对每个子显示列表的分类结果进行记忆化,而非每帧重新扫描;启动 LOCKED-60 战役,采用四个并行杠杆。
  5. 09-02 → 09-03:多核架构。 渲染线程置于核心 2,启用提前一帧模式,桥接层位于主线程,自动 LOD;中位帧率为 59.6,53% 的帧达到上限;修复崩溃问题;修正视口位置;锚定立体标记。

六行概括第二阶段

原计划之外;该阶段持续时间为 09-07 至 10-19,共计 43 个日历日。

  1. 09-07 → 09-29:界定范围,随后适配硬件。 此前被搁置的 Old 3DS 里程碑重新启动;并行代理(parallel agents)将构建版本适配至其 64 MB 的应用程序区域(RDRAM 竞技场减半,音频改为流式传输而非常驻内存,纹理上传受限);在 2026-09-29,首次在真实的 Old 3DS 硬件上进行会话时,已发布的(New-3DS 时代,16 MiB RDRAM)构建版本在启动时崩溃,而 -DGDX_3DS_O3DS=ON 配置文件——专为适配主机内存配额而构建——成功启动并在同一会话中以约 10 fps 的速度运行。
  2. 09-29 → 09-30:找出真实开销。 收窄后的音频锁使 Old 3DS 上的每帧竞速等待时间减少了约 20 ms;跳帧机制消除了游戏意外的慢动作效果;首个保留模式渲染器(retained-mode renderer)在模拟器中表现优异,但在硬件上几乎未改善数值。
  3. 09-30 → 10-01:改变计划的探针测试。 硬件性能计数器显示真正的瓶颈是指令缓存未命中,而非指令数量。构建并验证了姿态回放回退方案(pose-replay fallback),但根据用户决定将其搁置:“我们应该追求真正的 60!我仍然相信这是可能的。”
  4. 10-01 → 10-02:原生渲染器。 围绕缓存而非指令数量重新构建,每个竞速类别使用一个小型循环,大小适配 16 KB 指令缓存。在 2D 大奖赛竞速中,中位帧时间达到 16.5 ms。
  5. 10-03 → 10-08:Old 3DS 上也实现了 3D 60 fps。 采用具有独立交换节奏模式的逐眼重提交(per-eye resubmit),在大多数大奖赛赛道上实现了 59–60 fps 的 3D 帧率;最重的赛道(寂静、沙海)仍可能在比赛中途触发跳帧安全网,稳定降至 30 fps。
  6. 10-08 → 10-19:扩展包、仪表盘与发布。 64DD 扩展包在原生渲染器下验证为逐 tick 完全一致,并能在 Old 3DS 上启动,但后者速度太慢无法用于发布;下屏 DASH 界面已上线;在 v1.0.0 发布前,通过持续的对抗性审查对合并结果进行了审计。

有关第二阶段如何执行,请参阅 Agentic workflow;有关完整战役详情(逐卡记录),请参阅 Old 3DS。

继续阅读

这些页面中的每一个数字都有据可查:Git 历史记录、docs/research/ 下的研究文档、硬件日志,或 Cost 页面所统计的会话记录。若某数值为估算值(例如美元金额,系将公开的 API 标价应用于精确的 Token 计数得出),则会在旁边注明假设条件。作者手记 →