슈퍼 마리오 64의 PS1 포트 버전
(github.com/malucard)- 닌텐도 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 등록 후 논의 권장
Hacker News 의견들
-
이 포트를 좋아한다면, GBA에서 SM64를 완전히 새로 구현한 프로젝트도 흥미로울 것 같음
YouTube 영상 보기- 여기가 HN이니 꼭 언급해야 함. 이 GBA 포트는 Rust로 작성됨
관련 기사: The Impossible Port – Super Mario 64 on the Game Boy Advance - 흥미로움. GBA가 Minecraft 스타일의 라이트 버전을 감당할 수 있을지 궁금함
N64도 꽤 잘 어울릴 것 같고, 언젠가 SummerCart64를 구해서 실험해보고 싶음 - 혹시 이 프로젝트의 소스 코드를 아는 사람 있음? 삭제된 것 같음
- 멋지긴 하지만 개인적으로 보기엔 좀 힘듦
그래도 완성까지 해낸 점은 정말 대단함
- 여기가 HN이니 꼭 언급해야 함. 이 GBA 포트는 Rust로 작성됨
-
정말 놀라운 성취임
예전에 두 콘솔 모두를 가지고 있었는데, 이 포트를 보니 N64가 1996년 당시 ‘집 안의 SGI’ 감성을 얼마나 잘 구현했는지 다시 느껴짐
일본 수입판 N64에서 Mario 64를 처음 봤을 때의 충격이 아직도 생생함
PSX의 Wipeout 같은 게임이 또 다른 방향으로 발전했던 시절의 다채로운 게임 환경이 떠오름 -
“Tessellation (최대 2배)”로 큰 폴리곤 문제를 줄인다고 하지만, 영상에서 여전히 텍스처 왜곡이 심함
아마 2배로는 부족하거나, 레벨 지오메트리를 다시 만들어야 할 듯함- 나도 텍스처 왜곡은 보이지만 PS1 게임 특유의 지오메트리 흔들림은 안 보임
아마 부동소수점 연산을 소프트웨어로 처리하고 있어서 perspective-correct mapping은 프레임레이트에 부담이 될 것 같음 - 현재는 레벨 폴리곤에 전처리 과정이 거의 없음
추후 구현되면 큰 폴리곤을 분할해서 텍스처 좌표 제한 문제도 해결될 예정임 - 알려진 이슈에도 “Tessellation이 충분하지 않다”고 명시되어 있음
PS1 시절의 초기 3D의 거친 느낌이 여전히 남아 있음
- 나도 텍스처 왜곡은 보이지만 PS1 게임 특유의 지오메트리 흔들림은 안 보임
-
실행 영상이나 스크린샷이 있는지 궁금함. GitHub에는 없는 이유를 이해하긴 함
- 어젯밤에 본 괜찮은 게임플레이 영상이 있음
YouTube 링크 - 또 다른 영상도 있음
YouTube 링크
- 어젯밤에 본 괜찮은 게임플레이 영상이 있음
-
텍스처 왜곡이 있다며 불평하는 사람들이 많지만, 그래도 이건 정말 놀라운 작업물임
-
Kaze를 언급하지 않을 수 없음
그는 수년간 Mario 64를 다양한 방식으로 최적화해온 사람으로, 레트로 게임과 프로그래밍의 교차점에 관심 있다면 꼭 볼 만함
Kaze의 YouTube 채널- 8월에 올린 영상에서 Mario 64가 얼마나 RAM을 낭비하는지 분석했는데, 그때 PS1 포트 가능성을 처음 언급했음
이렇게 빨리 현실화될 줄은 몰랐음
관련 영상 보기 - 그는 정말 대단함 (그리고 근육질임)
PS1에 Kaze 수준의 지식을 가진 사람이 있다면, Mario 32 같은 프로젝트도 가능할 듯함
- 8월에 올린 영상에서 Mario 64가 얼마나 RAM을 낭비하는지 분석했는데, 그때 PS1 포트 가능성을 처음 언급했음
-
최근 디컴파일 프로젝트가 폭발적으로 늘고 있는데, 그 배경이 궁금함
- 주된 이유는 1:1 바이트 매칭 디컴파일을 지원하는 툴링의 발전 덕분임
예를 들어 decomp.me 같은 도구가 대표적임
이런 툴은 기존 바이너리와 정확히 일치하는 코드를 재구성할 수 있게 해주며, 새로운 프로젝트가 빠르게 시작될 수 있게 함
또한 콘솔 SDK API를 모방하는 포팅 레이어의 등장도 한몫함
다만 완벽 매칭을 위해 오래된 툴체인의 비정상적인 동작을 재현해야 하는 등, 엄청난 노력이 필요함 - 아마 AI가 디컴파일을 더 쉽게 만든 것일 수도 있음
- 그냥 AI 때문일 수도 있음
- Ghidra를 사용하는 사람이 많아진 것도 영향이 있음
- 주된 이유는 1:1 바이트 매칭 디컴파일을 지원하는 툴링의 발전 덕분임
-
최근에는 Dreamcast 포트도 나왔고, Star Fox 64와 Mario Kart 64도 여러 플랫폼으로 이식됨
관련 목록: awesome-game-decompilations- Star Fox 64 포트도 막 완성되었음
-
스크린샷이 없어서 아쉬움
-
“드디어, Super Mario 32”