1P by GN⁺ 3일전 | ★ favorite | 댓글 1개
  • 닌텐도 64용 슈퍼 마리오 64 디컴파일 프로젝트를 기반으로, PlayStation(PSX) 전용으로 이식된 버전
  • DualShock 진동 지원, 고정소수점 수학 변환, 렌더링 최적화 등 PS1 하드웨어에 맞춘 대규모 수정 포함
  • 그래픽 전처리기, 텍스처 압축, 애니메이션 메모리 최적화 등 성능 개선 기능 추가
  • 일부 카메라 제어 미완성, 충돌 및 크래시 문제, 음악 빌드 불가 등 다수의 알려진 버그 존재
  • 고전 게임의 플랫폼 간 이식 실험으로, 레거시 콘솔 개발과 리버스 엔지니어링 연구에 의미 있는 사례

프로젝트 개요

  • 이 코드는 Super Mario 64 (J/U/E/SH) 전체 디컴파일 버전의 포크로, PSX와 PC(디버깅용) 만을 대상으로 함
    • 닌텐도 64용 빌드는 더 이상 지원하지 않음
    • 현재는 미국판(US) ROM만 빌드 가능
  • 게임 빌드에는 원본 자산이 포함되지 않으며, 정품 ROM에서 자산 추출이 필요

주요 기능

  • DualShock™ 호환 그래픽 추가로, 원래의 “Rumble Pak Compatible” 표시를 모방
  • DualShock 대형 모터용 아날로그 진동 신호소형 모터용 디지털 신호 모두 지원
  • PSX용 저정밀 소프트 플로트 구현으로 부동소수점 연산 성능 저하 최소화
  • 고정소수점 수학으로 코드 대체, PSX 표준인 16비트 정수 벡터·행렬 사용
  • 렌더 그래프 워커 단순화 및 재작성
  • 다각형 분할(최대 2배) 로 대형 폴리곤 문제 완화
  • RSP 디스플레이 리스트JIT 방식으로 커스텀 포맷으로 변환, 처리 속도 향상
  • 디스플레이 리스트 전처리기로 불필요 명령 제거 및 메시 최적화
  • 마리오 애니메이션 압축(580,632 → 190,324바이트) 및 VRAM에 직접 배치
  • 커스텀 프로파일러4bpp 텍스처 인코더 추가
  • PSX의 투명도 한계를 고려해 육각형 그림자로 대체
  • (예정) 오른쪽 아날로그 스틱 카메라 회전Goddard 서브시스템 재작성

알려진 문제

  • 부유하는 나무, 일부 애니메이션 미작동 또는 크래시
  • 음악 빌드 불가, 효과음 누락 또는 이상음
  • 카메라 제어 미완성, 특정 레벨 진입 시 크래시
  • 엔딩 시퀀스 로드 실패, 라키투 등장 안 함, 폴 작동 불가
  • 텍스처 개별 로드로 인한 긴 로딩 시간, PSX 한계로 인한 텍스처 왜곡
  • 그래픽 전처리기 개선 필요, 일부 텍스처 렌더 오류, 타이틀 화면 미완성, 일시정지 메뉴 미작동

빌드 방법

Linux

  • mipsel-none-elf-gcc 툴체인 설치 후 저장소 클론
  • baserom.us.z64 파일을 루트 디렉터리에 배치
  • (선택) .local 폴더에 사운드트랙 .wav 파일(0~37) 추가
  • make 실행 시 ISO 이미지 생성 (build/us_psx/sm64.us.iso)
  • 벤치마크 버전(make BENCH=1)은 ISO 없이 ELF/EXE만 생성하며, 8MB RAM PSX 필요

Windows (미검증)

  • MSYS2 설치 후 mingw-w64 패키지 구성
  • mipsel-none-elf-gcc 설치 및 sm64-psx 저장소 클론
  • baserom.us.z64 파일 배치 후 make 실행
  • 빌드 결과물은 Linux와 동일한 경로에 생성

문제 해결

  • gcc 미인식 시 잘못된 MSYS2 환경 실행 여부 확인
  • baserom.us.z64 누락 시 파일 위치 점검
  • Makefile 미발견 시 디렉터리 경로 확인
  • 패키지 오류pacman -Syupacman -Su로 업데이트
  • mipsel gcc 작동 확인mipsel-none-elf-gcc -v 명령으로 검증
  • 플랫폼 전환 시 make -C tools clean으로 툴 재컴파일 필요

프로젝트 구조

  • actors: 오브젝트 동작, 지오 레이아웃, 디스플레이 리스트
  • assets: 애니메이션 및 데모 데이터
  • src: 게임 핵심 C 소스 (오디오, 엔진, 게임, 메뉴, 포트 등)
  • textures, text, levels: 그래픽 및 레벨 데이터
  • tools: 빌드 도구
  • lib: N64 SDK 코드 포함

기여

  • Pull Request 환영
  • 주요 변경 전에는 Issue 등록 후 논의 권장
Hacker News 의견들
  • 이 포트를 좋아한다면, GBA에서 SM64를 완전히 새로 구현한 프로젝트도 흥미로울 것 같음
    YouTube 영상 보기

    • 여기가 HN이니 꼭 언급해야 함. 이 GBA 포트는 Rust로 작성됨
      관련 기사: The Impossible Port – Super Mario 64 on the Game Boy Advance
    • 흥미로움. GBA가 Minecraft 스타일의 라이트 버전을 감당할 수 있을지 궁금함
      N64도 꽤 잘 어울릴 것 같고, 언젠가 SummerCart64를 구해서 실험해보고 싶음
    • 혹시 이 프로젝트의 소스 코드를 아는 사람 있음? 삭제된 것 같음
    • 멋지긴 하지만 개인적으로 보기엔 좀 힘듦
      그래도 완성까지 해낸 점은 정말 대단함
  • 정말 놀라운 성취임
    예전에 두 콘솔 모두를 가지고 있었는데, 이 포트를 보니 N64가 1996년 당시 ‘집 안의 SGI’ 감성을 얼마나 잘 구현했는지 다시 느껴짐
    일본 수입판 N64에서 Mario 64를 처음 봤을 때의 충격이 아직도 생생함
    PSX의 Wipeout 같은 게임이 또 다른 방향으로 발전했던 시절의 다채로운 게임 환경이 떠오름

  • “Tessellation (최대 2배)”로 큰 폴리곤 문제를 줄인다고 하지만, 영상에서 여전히 텍스처 왜곡이 심함
    아마 2배로는 부족하거나, 레벨 지오메트리를 다시 만들어야 할 듯함

    • 나도 텍스처 왜곡은 보이지만 PS1 게임 특유의 지오메트리 흔들림은 안 보임
      아마 부동소수점 연산을 소프트웨어로 처리하고 있어서 perspective-correct mapping은 프레임레이트에 부담이 될 것 같음
    • 현재는 레벨 폴리곤에 전처리 과정이 거의 없음
      추후 구현되면 큰 폴리곤을 분할해서 텍스처 좌표 제한 문제도 해결될 예정임
    • 알려진 이슈에도 “Tessellation이 충분하지 않다”고 명시되어 있음
      PS1 시절의 초기 3D의 거친 느낌이 여전히 남아 있음
  • 실행 영상이나 스크린샷이 있는지 궁금함. GitHub에는 없는 이유를 이해하긴 함

  • 텍스처 왜곡이 있다며 불평하는 사람들이 많지만, 그래도 이건 정말 놀라운 작업물

  • Kaze를 언급하지 않을 수 없음
    그는 수년간 Mario 64를 다양한 방식으로 최적화해온 사람으로, 레트로 게임과 프로그래밍의 교차점에 관심 있다면 꼭 볼 만함
    Kaze의 YouTube 채널

    • 8월에 올린 영상에서 Mario 64가 얼마나 RAM을 낭비하는지 분석했는데, 그때 PS1 포트 가능성을 처음 언급했음
      이렇게 빨리 현실화될 줄은 몰랐음
      관련 영상 보기
    • 그는 정말 대단함 (그리고 근육질임)
      PS1에 Kaze 수준의 지식을 가진 사람이 있다면, Mario 32 같은 프로젝트도 가능할 듯함
  • 최근 디컴파일 프로젝트가 폭발적으로 늘고 있는데, 그 배경이 궁금함

    • 주된 이유는 1:1 바이트 매칭 디컴파일을 지원하는 툴링의 발전 덕분임
      예를 들어 decomp.me 같은 도구가 대표적임
      이런 툴은 기존 바이너리와 정확히 일치하는 코드를 재구성할 수 있게 해주며, 새로운 프로젝트가 빠르게 시작될 수 있게 함
      또한 콘솔 SDK API를 모방하는 포팅 레이어의 등장도 한몫함
      다만 완벽 매칭을 위해 오래된 툴체인의 비정상적인 동작을 재현해야 하는 등, 엄청난 노력이 필요함
    • 아마 AI가 디컴파일을 더 쉽게 만든 것일 수도 있음
    • 그냥 AI 때문일 수도 있음
    • Ghidra를 사용하는 사람이 많아진 것도 영향이 있음
  • 최근에는 Dreamcast 포트도 나왔고, Star Fox 64와 Mario Kart 64도 여러 플랫폼으로 이식됨
    관련 목록: awesome-game-decompilations

    • Star Fox 64 포트도 막 완성되었음
  • 스크린샷이 없어서 아쉬움

  • “드디어, Super Mario 32