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