슈퍼 마리오 64의 PS1 포트 버전

1 month ago 14

  • 닌텐도 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 -Syu 및 pacman -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 등록 후 논의 권장

Read Entire Article