Nintendo 3DS로 옮긴 F-Zero X

F-Zero X on Nintendo 3DS

hypnotize.works ▲ 155 댓글 95 bpierre

요약

한 사람이 지휘하고 Claude 에이전트가 코드를 모두 써서 F-Zero X를 Nintendo 3DS로 옮겼습니다.

닌텐도 64 레이싱 게임 F-Zero X를 디컴파일(기계어를 사람이 읽는 소스 코드로 되돌리는 작업)해 만든 PC 포트 G-Diffuser를 3DS로 옮긴 과정의 회고입니다. 첫 조사부터 멀티플레이어까지 11주가 걸렸다고 밝혔습니다.

왜 중요한가

  • 사람은 방향만 정하고 18만 1천 줄의 포트 코드는 AI 에이전트가 모두 쓴 사례를 토큰과 비용 수치까지 공개했습니다.
  • 작성자는 같은 계열의 다른 포트에 없는 자체 렌더러 덕분에 성능이 낮은 Old 3DS도 속도를 따라잡았다고 주장합니다.

핵심 내용

  • 보통의 N64 PC 포트는 그리기 명령을 매 프레임 번역하지만, 이 포트는 3DS GPU 명령을 미리 준비한 데이터로 직접 만듭니다.
  • New 3DS는 레이스를 60fps(초당 60프레임)로 돌리고, Old 3DS는 3D 레이스도 대부분 60fps지만 무거운 코스는 30fps까지 떨어집니다.
  • Old 3DS 첫 실행은 10fps 안팎이었고, 병목은 16KB 명령어 캐시였기에 레이스 루프를 그 크기에 맞춰 줄였습니다.
  • 입체 3D, 64DD 확장 키트(코스와 기체를 직접 만드는 추가 콘텐츠), 2~4인 멀티플레이어를 지원하며 게임 데이터는 이용자가 직접 추출해야 합니다.
  • 사람의 프롬프트는 777번이었고, 쓴 토큰 225억 9천만 개를 API 정가로 따지면 1만 9,559달러어치라고 추산했습니다.

HN 반응

  • 비용 공개를 반기는 반응이 많았고, 작성자는 실제로는 월 200달러 구독으로 석 달간 600달러를 썼다고 밝혔습니다.
  • 첫 문장부터 AI가 쓴 글이라 읽을 마음이 사라진다는 비판과, 3DS에 이미 있는 디버거를 없다고 쓰는 등 검토가 부족하다는 지적이 나왔습니다.

댓글

30개 표시 · 전체 95개
  1. coffeesoda HN

    안녕하세요, 이 프로젝트 제작자입니다! 올려 주셔서 감사합니다! 정말 재미있게 작업했고, Claude를 어떻게 하면 더 효율적으로 쓸 수 있는지 배우기에도 아주 좋았습니다. 곧 몇 시간 안에 큰 업데이트를 올릴 예정인데, 내용은 이렇습니다.

    초기형 3DS에서 64dd 지원

    로컬 및 온라인 멀티플레이

    커스텀 코스를 QR 코드로 공유

    제작자 노트와 사후 분석(post-mortem)도 한번 읽어 보시고, 3DS로 직접 해 보시길 바랍니다.

  2. cynicalkane HN

    이미 여러 번 나온 얘기지만 그래도 다시 말씀드리겠습니다. 처음 읽는 두세 문장부터 AI가 쓴 티가 나는 글이 정신을 빼놓고, 숨 가쁘게 em 대시로 내가 관심도 없는 조각들을 이어 붙이고 있으면, 나머지 프로젝트를 들여다볼 가치가 있을지 의심스러워집니다. 도입부 정도는 사람이 사람에게 건네는 글로 쓸 성의도 없었다는 거잖아요.

  3. ryan_n HN

    맨 아래 "Read On" 섹션에 "Author's notes: 사람이 쓴 유일한 페이지"라고 적혀 있어요. 전부 Claude로 썼다는 걸 꽤 솔직하게 밝히고 있는 것 같은데요.

  4. coffeesoda HN

    고맙습니다. 다만 프로젝트를 기술적으로 알고 싶은 사람(또는 그 사람의 LLM)을 위해 그 정보를 둔 겁니다. 다른 분들이 친절하게 말씀해 주셨듯이, 제가 사람을 위해 직접 쓴 노트는 별도 섹션에 있습니다.

    기술 노트도 그 자체로 밀도 있고 흥미롭지만, N64를 3DS로 이식하는 씬에 이미 익숙한 분이 아니면 관심을 가지실 거라고는 기대하지 않습니다.

  5. TuxSH HN

    맞아요. 그리고 글 일부는 (본인이든 클랭커든) 교정을 거치지 않았고, 프로젝트도 기본적인 사전 조사가 빠져 있습니다.

    눈에 띄는 예가 "No debugger, no stdout"인데, 저는 10년쯤 전에 낸 Rosalina 첫 버전에 이미 GDB 스텁을 구현했기 때문에 어이가 없습니다.

    3DS에서는 3dslink와 GDB 쪽 모두 stdout 리디렉션도 지원하고요.

    초 치려는 건 아닙니다. 그리고 이 프로젝트가 순수 바이브 코딩으로 어디까지 갈 수 있는지 보여 주는 쇼케이스 역할은 충분히 합니다. 하지만 이런 점이 "AI는 절대 안 된다"는 쪽에 명분을 쥐여 주는 겁니다.

  6. aculver HN

    아직 프로젝트는 못 봤지만, 사람이 직접 쓴 생각을 담은 섹션을 따로 둔다는 발상이 정말 마음에 듭니다. 곳곳에 최대한 자세한 내용을 담으면서도 제작자분의 목소리를 직접 들을 수 있으니 두 마리 토끼를 다 잡은 셈이네요. 축하드립니다!

  7. coffeesoda HN

    고맙습니다! 프로젝트가 재미있긴 해도, 이게 얼마나 큰 일인지는 저도 잘 알고 있습니다. 최근 모델들이 얼마나 무서운 힘을 갖고 있는지 보여 주는 증거가 되길 바랐고, 그 점을 분명히 하고 싶었습니다.

  8. dpedu HN

    이 프로젝트를 시작하기 전에 N64와 3DS 개발·내부 구조를 얼마나 알고 계셨나요?

  9. rustyhancock HN

    비용을 공개해 주셔서 정말 고맙습니다. 그냥 섬뜩한 호기심에서 궁금했거든요. 5천 달러에서 조금 모자란 정도이고, 사람이 했다면 25만~40만 달러어치 일이었을 거라고 추산하네요.

    https://hypnotize.works/gdx-3ds/postmortem/cost.html

  10. grumbel HN

    숫자 보고 겁먹는 분이 있을까 봐 말씀드리면, 월 20달러짜리 Claude Pro 구독은 API 토큰으로 치면 대략 1,000달러어치입니다.

  11. refactor_master HN

    그러니까 헬스장 월 회원권이 20달러인데, 한 달 내내 24시간 붙어 있으면서 시간당 요금을 냈다면 1,000달러가 나왔을 거라는 얘기네요.

    그런데 그렇게 하는 사람은 없잖아요. 그러니 실제 숫자가 아니에요.

  12. jrmg HN

    네?

    다들 매주 Claude Pro 토큰을 전부 써 버리는데요. 그렇게 쓰는 건 꽤 쉬워요.

  13. coffeesoda HN

    저는 600달러를 썼습니다. 지난 3개월 동안 한 달에 200달러씩이요. 다른 프로젝트에도 썼지만 이 프로젝트가 토큰 사용량을 자주 터뜨렸습니다.

  14. daniel_rh HN

    정말 멋지네요! 저는 F-Zero 렌더 루프를 최소화해서 게임보이에 올리고, 링크 케이블로 멀티플레이까지 해 보려고 작업 중인데... 쉽지 않은 여정이에요. (이 기사 때문에 글을 서둘러 올렸고, 문장은 아직 다듬는 중입니다.) 어쨌든 브라우저 에뮬레이터에서 게임을 한번 해 보세요: https://fireflyk64.github.io/makingfsub/

  15. coffeesoda HN

    정말 훌륭하네요, 공유해 주셔서 고맙습니다. 나중에 Playdate 프로젝트에 이 기법을 빌려 쓸지도 모르겠습니다.

  16. daniel_rh HN

    좋은 생각이에요! 도움이 되는지 꼭 알려 주세요 :-)

    Playdate에는 당시 게임보이를 연산 면에선 힘이 달리고 그래픽 면에선 넘치게 만들었던 스프라이트 렌더링 하드웨어가 없으니, 일부 요령은 필요 없을 수도 있어요.

    프레임버퍼 한 행 전체를 memmove 같은 연산으로 한 번에 이동시키는 정도는 쉽게 할 수 있겠죠. 게임보이의 시프트 레지스터와 스프라이트별 그리기가, 그렇게 느린 CPU 클록에서 이 작업을 어렵게도, 또 가능하게도 만든 핵심이었거든요. Playdate CPU는 게임보이보다 40배쯤 빠르니, 이런 요령은 물론 그 이상도 아마 문제없이 통할 거예요.

  17. bpierre HN
  18. ndesaulniers HN

    멋지네요!

    저는 Claude에게 Super Metroid를 게임보이 어드밴스로 이식시키는 작업을 하고 있었어요. GBA가 풀 속도로 돌릴 수 있는지가 제일 궁금했는데, 되는 것 같네요!

    https://github.com/nickdesaulniers/sm/tree/gba-port

  19. cubefox HN

    멋져요. 저는 Claude에게 Zelda Link's Awakening DX를 GBC에서 NES로 이식시켜 보고 싶었어요. 당신 경우와는 반대 문제인데, Zelda는 목표 해상도가 원본보다 높아서 배경을 늘리거나 (썩 좋지는 않지만) 테두리를 붙여야 해요.

  20. neuroelectron HN

    대단하네요. 시간 내서 직접 해 보고 영상도 만들 수 있으면 좋겠어요.

  21. cdnutter HN

    사람들이 왜 Melee나 F-Zero X 같은 게임 이식의 관문으로 3DS를 쓰기 시작했는지 궁금합니다.

    오해는 마세요. 3DS는 보석 같은 콘솔이고, 닌텐도가 또 다른 마리오 스포츠 게임이 아니라 내놓는 물건에 더 공을 들이던 시절을 떠올리게 하죠. 하지만 Switch가 훨씬 강력하니 그쪽 이식이 더 우선순위일 거라고 생각했거든요.

  22. Gigachad HN

    다른 사람들이 왜 그러는지는 모르겠지만, 제 생각엔 Switch는 좀 재미없는 콘솔이에요. 같은 폼팩터의 PC 휴대용 기기가 수없이 많으니 그중 하나를 쓰면 되고, 영구적인 해킹은 하드웨어 개조가 필요하고요.

    3DS는 주머니에 넣을 수 있어 재미있는 폼팩터인 데다 이미 갖고 있는 사람도 많고, 어떤 펌웨어 버전이나 하드웨어 리비전이든 영구적으로 쉽게 개조할 수 있습니다.

  23. BoorishBears HN

    아무도 온라인 얘기를 안 해서 놀랍네요. 대부분은 콘솔이 밴당하는 위험을 감수하고 싶지 않고, 그래서 Switch 탈옥은 아예 선택지에서 빠집니다.

    지금 3DS를 사는 사람 대부분은 아마 탈옥하려고 일부러 사는 걸 겁니다.

  24. circuit10 HN

    제가 알기로는 불법 복제를 하지 않고, 홈 화면에 뭔가를 설치하지 않고, 멀티플레이 게임에서 치팅하지 않는 등 몇 가지 주의만 지키면 밴당하지 않고 온라인에서 홈브류를 쓸 수 있어요. 저는 가끔 써 봤는데 적어도 밴당한 적은 없습니다.

  25. sunaookami HN

    대부분은 밴을 피하려고 EmuMMC를 씁니다. 더 큰 문제는 대부분의 Switch 본체가 하드모드(하드웨어 개조)가 필요하다는 점이라고 생각해요.

  26. coffeesoda HN

    3DS에는 3D라는 신선함이 있습니다. 저는 이런 폼팩터로 F-Zero를 해 보고 싶었고, 이식하기에 적당한 게임처럼 보였습니다.

  27. cubefox HN

    제가 보기엔 입체 3D가 "신기함"인 정도는 컬러가 "신기함"인 정도와 같습니다. 우리는 현실 세계를 입체 3D로 인지하니, 객관적인 개선이에요. 물론 하드웨어 구현(New 3DS는 그렇지 않지만)에는 컬러와 달리 여러 단점이 있습니다.

  28. jamesrcole HN

    컬러도 그렇게 다르지 않다고 생각해요. 예를 들어 옛날 컴퓨터는 16색 EGA처럼 색상 팔레트가 제한돼 있었잖아요.

  29. cubefox HN

    제 말은 색이 많을수록 적은 것보다 무조건 낫다는 겁니다. 단순한 "눈속임"이 아니고요. 입체 3D도 마찬가지인데, (오토)스테레오스코픽 화면으로 하드웨어에 구현하는 문제만 빼면 그렇다는 거예요.

    예를 들어 VR 헬멧의 가상 스크린으로 게임을 한다면, 게임이 입체 3D를 쓰길 거의 언제나 바라게 됩니다. 입체 없이 하는 건 무조건 더 나쁘니까요. (물론 GPU 자원은 덜 쓰겠지만, 차이는 그것뿐이고 해상도나 프레임 레이트를 낮춰도 마찬가지입니다.)

  30. tempest_ HN

    3DS가 Switch보다 훨씬 더 "탈옥"돼 있을 것 같네요.

Hacker News에서 보기 ↗