F-Zero X портировали на Nintendo 3DS с помощью Claude и 147 субагентов
На сайте hypnotize.works опубликован разбор (post-mortem) порта G-Diffuser, декомпиляции F-Zero X, на консоль Nintendo 3DS. Проект дошёл до релиза v1.0.0 и прошёл в два этапа. Первый (с 11 августа по 3 сентября 2026 года, 24 дня) вывел игру из «чёрного экрана» на New 3DS с 60 кадрами в секунду в стереоскопическом 3D. Второй (с 7 сентября по 19 октября, 43 календарных дня) в исходный план не входил: за него добавили поддержку Old 3DS, собственный «нативный» рендерер и Expansion Kit для 64DD. По словам автора разбора, всё время работой руководил один человек, координировала её одна долгоживущая сессия Claude; первый этап построили 147 субагентов, второй, «ещё многие» (число на этой странице не указано).
Результат, три сборки из одного дерева исходников: базовая игра для Old 3DS / 2DS, базовая игра для New 3DS / New 2DS XL и сборка для New 3DS с 64DD Expansion Kit (редактор трасс и конструктор машин; работает с образом диска, который предоставляет пользователь). Все запускаются из меню HOME (.cia) или через homebrew-лаунчер (.3dsx). ROM или образ диска вместе с игрой не поставляются: сборки читают заранее подготовленные архивы ресурсов с SD-карты. Доступны Grand Prix, Time Trial, Practice, Death Race и экраны редактора машин, музыка и эффекты идут через реальный DSP, работает стереоскопический 3D по ползунку, на нижнем экране, панель (DASH) с тремя вариантами HUD. Корректно обрабатываются приостановка и возобновление из HOME, закрытие, сон при закрытой крышке и выключение.
Стек: декомпиляция F-Zero X (inspectredc/fzerox) без изменений плюс набор патчей; N64-рантайм libultraship (автор Kenix3) без изменений, кроме 13-строчного исправления newlib для сборки на devkitARM (он по-прежнему рисует все меню и нерасовые экраны); собственный слой port/3ds (на первом этапе 15 039 строк, затем вырос), бэкенд на citro3d, стерео, звук, ввод, меню, жизненный цикл, поток рендера, профайлеры, упаковка; и нативный рендерер второго этапа, собственный интерпретатор, который пропускает покадровый обход display list для гоночной геометрии. В v1.0.0 он включён по умолчанию на обеих консолях ([perf] preset = auto); путь первого этапа для New 3DS (поток рендера, стерео на каждый вызов отрисовки) остаётся в сборке и включается явным ini.
Первый этап по датам. 11-14 августа: от исследования к первой гонке (12-20 кадров/с в эмуляторе), пять параллельных потоков работ, шесть багов загрузки. 20-22 августа: исправлены туман, HUD, раскраска, тень и небо; находка с loadblock подняла меню с 27 до 60 кадров/с; первый запуск на железе 21 августа («wow it runs amazing», «вау, работает потрясающе»; кто это сказал, источник не уточняет), звук в тот же вечер. 27-28 августа: «продуктовый» уровень, флот из пяти агентов, стерео, сенсорное меню, README с юридической оговоркой, пакет релиза; идею GPU-преобразования вершин собрали и отложили. 1-2 сентября: исправлены падение и зависание при выходе из HOME; кэш вывода моста признан тупиком и заменён запоминанием классификации каждого под-display-list; запущена кампания LOCKED-60 с четырьмя параллельными рычагами. 2-3 сентября: многоядерность, поток рендера на ядре 2, режим «на кадр вперёд», автоматический LOD; медиана 59,6 кадра/с, 53% кадров упираются в потолок.
Второй этап. 7-29 сентября: проект Old 3DS, ранее списанный, перезапустили; параллельные агенты уместили сборку в 64 МБ области приложения (арена RDRAM уменьшена вдвое, звук стримится, а не хранится целиком, загрузка текстур ограничена). 29 сентября на первой сессии с реальной Old 3DS прежняя сборка (эпохи New 3DS, 16 MiB RDRAM) упала при загрузке, а профиль -DGDX_3DS_O3DS=ON, собранный под выделенную консолью память, загрузился и в ту же сессию гонялся примерно на 10 кадров/с. 29-30 сентября: суженная блокировка аудио сократила ожидание в гонке примерно на 20 мс на кадр; пропуск кадров прекратил случайное замедление игры; первый retained-mode рендерер сильно выиграл в эмуляторе, но почти не сдвинул результат на железе. 30 сентября, 1 октября: аппаратные счётчики производительности показали, что реальный предел, промахи кэша инструкций, а не число инструкций. Запасной вариант с воспроизведением поз был построен и работал, но по решению руководящего человека его отложили: «Надо идти за настоящими 60! Я по-прежнему верю, что это возможно». 1-2 октября: нативный рендерер, построенный вокруг кэша, по небольшому циклу на категорию гоночных объектов, с расчётом на 16 КБ кэша инструкций; медиана времени кадра в 2D-гонке Grand Prix, 16,5 мс. 3-8 октября: повторная отправка геометрии для каждого глаза с отдельным режимом синхронизации дала 59-60 кадров/с в 3D на большинстве трасс Grand Prix на Old 3DS; самые тяжёлые трассы (Silence, Sand Ocean) всё ещё могут сорваться на устойчивые 30 кадров/с из-за страховки с пропуском кадров. 8-19 октября: Expansion Kit проверен как идентичный тик в тик под нативным рендерером и запустился на Old 3DS, но консоль оказалась слишком медленной для его выпуска; выпущена панель DASH; перед релизом v1.0.0 результат проверило постоянное состязательное ревью.
В оглавлении проекта, отдельные страницы: заметки автора (единственная страница, написанная человеком), хронология, кампания производительности, нативный форк, Old 3DS, сравнение с другими портами, трудности, «Frontier», агентный процесс и стоимость (токены, доллары, субагенты). Доллары на странице стоимости, оценка: опубликованные цены API применены к точным числам токенов.
Ключевые факты
- G-Diffuser, порт декомпиляции F-Zero X на Nintendo 3DS: первый этап (11 августа, 3 сентября 2026, 24 дня) дал 60 кадров/с в стерео-3D на New 3DS, второй (7 сентября, 19 октября, 43 дня) добавил Old 3DS, нативный рендерер и 64DD Expansion Kit.
- Руководил один человек; работу координировала одна долгоживущая сессия Claude. Первый этап построили 147 субагентов, второй, «ещё многие» (число не названо).
- Выпущены три сборки из одного дерева исходников: Old 3DS / 2DS, New 3DS / New 2DS XL и New 3DS с Expansion Kit; ROM и образ диска не поставляются, ресурсы читаются с SD-карты.
- Счётчики производительности показали, что на Old 3DS предел, промахи кэша инструкций; нативный рендерер под 16 КБ кэша дал медиану 16,5 мс на кадр в 2D, а в 3D, 59-60 кадров/с на большинстве трасс Grand Prix.
- Самые тяжёлые трассы (Silence, Sand Ocean) на Old 3DS могут падать до 30 кадров/с; Expansion Kit на Old 3DS запустился, но слишком медленно для релиза.
Почему это важно
Это подробный отчёт о том, как одна долгоживущая сессия Claude с множеством субагентов довела до релиза нетривиальный низкоуровневый проект: порт игры на слабое железо с жёсткими ограничениями по памяти и кэшу. Показательно, что на втором этапе, которого изначально не планировали, агенты не только уместили сборку в 64 МБ, но и по итогам замеров аппаратных счётчиков сменили архитектуру рендерера. Решающими были человеческие решения: например, отказаться от запасного варианта и продолжить поиск настоящих 60 кадров/с.
Кому это важно
Тем, кто строит рабочие процессы с оркестратором и субагентами и хочет увидеть реальные масштабы (147 субагентов на первом этапе), хронологию и сбои на длинном проекте. Также интересно авторам портов и любителям homebrew на 3DS: описаны конкретные приёмы (нативный рендерер, подгонка под 16 КБ кэша инструкций, память Old 3DS).
Как это применить
Прямого руководства по запуску на этой странице нет: это обзор. Из него можно перенять подход: измерять на реальном железе (а не только в эмуляторе, первый retained-mode рендерер выиграл в эмуляторе, но почти не сдвинул результат на консоли), использовать аппаратные счётчики до выбора стратегии оптимизации, держать оркестратор долгоживущим, а решения о смене курса оставлять человеку. Подробности процесса вынесены на отдельные страницы «Agentic workflow» и «Cost».
Можно ли доверять
Это самоотчёт самой команды проекта, а не независимая проверка: все цифры (кадры в секунду, время кадра, сроки) приведены самими авторами. Имя руководителя на этой странице не названо. Долларовые суммы на странице стоимости, оценки по опубликованным ценам API и точному числу токенов. Результаты на Old 3DS описаны честно с оговорками: не на всех трассах 60 кадров/с в 3D.
Риски и подводные камни
На Old 3DS самые тяжёлые трассы (Silence, Sand Ocean) могут уходить на устойчивые 30 кадров/с. Expansion Kit на Old 3DS не выпущен, так как консоль оказалась слишком медленной. Игра не содержит ROM или образа диска, их нужно подготовить самостоятельно, Expansion Kit работает только с пользовательским образом диска. На этой странице нет ссылки на скачивание и лицензии v1.0.0.
«Надо идти за настоящими 60! Я по-прежнему верю, что это возможно.»
— пользователь, руководивший проектом (в источнике, «the user», имя не указано)