- Phiên bản được port riêng cho PlayStation (PSX) dựa trên dự án decompile Super Mario 64 dành cho Nintendo 64
- Bao gồm nhiều chỉnh sửa quy mô lớn để phù hợp với phần cứng PS1 như hỗ trợ rung DualShock, chuyển đổi sang toán học fixed-point, và tối ưu hóa render
- Bổ sung các tính năng cải thiện hiệu năng như trình tiền xử lý đồ họa, nén texture, và tối ưu bộ nhớ animation
- Tồn tại nhiều lỗi đã biết như điều khiển camera chưa hoàn thiện, vấn đề va chạm và crash, không thể build nhạc
- Là một thử nghiệm port game cổ điển giữa các nền tảng, mang ý nghĩa như một trường hợp nghiên cứu đáng chú ý cho phát triển console legacy và nghiên cứu reverse engineering
Tổng quan dự án
- Mã nguồn này là một nhánh fork của bản decompile đầy đủ của Super Mario 64 (J/U/E/SH), chỉ nhắm tới PSX và PC (để debug)
- Không còn hỗ trợ build cho Nintendo 64
- Hiện tại chỉ có thể build ROM phiên bản Mỹ (US)
- Bản build game không bao gồm tài nguyên gốc; cần trích xuất tài nguyên từ ROM chính hãng
Tính năng chính
- Thêm đồ họa tương thích DualShock™, mô phỏng dòng hiển thị “Rumble Pak Compatible” gốc
- Hỗ trợ cả tín hiệu rung analog cho motor lớn của DualShock và tín hiệu số cho motor nhỏ
- Triển khai soft-float độ chính xác thấp cho PSX để giảm thiểu suy giảm hiệu năng khi tính toán số thực dấu chấm động
- Thay thế mã bằng toán học fixed-point, dùng vector và ma trận số nguyên 16-bit vốn là chuẩn trên PSX
- Đơn giản hóa và viết lại render graph walker
- Chia nhỏ đa giác (tối đa 2 lần) để giảm vấn đề với polygon lớn
- Chuyển đổi RSP display list sang định dạng tùy biến bằng JIT, giúp tăng tốc độ xử lý
- Trình tiền xử lý display list để loại bỏ lệnh không cần thiết và tối ưu mesh
- Nén animation của Mario (580,632 → 190,324 byte) và đặt trực tiếp vào VRAM
- Bổ sung profiler tùy biến và bộ mã hóa texture 4bpp
- Thay bằng bóng đổ hình lục giác để phù hợp với giới hạn độ trong suốt của PSX
- (Dự kiến) xoay camera bằng cần analog phải và viết lại subsystem Goddard
Các vấn đề đã biết
- Cây lơ lửng, một số animation không hoạt động hoặc gây crash
- Không thể build nhạc, thiếu hiệu ứng âm thanh hoặc phát âm bất thường
- Điều khiển camera chưa hoàn thiện, crash khi vào một số màn nhất định
- Không tải được chuỗi ending, Lakitu không xuất hiện, cột không hoạt động
- Thời gian tải dài do nạp texture riêng lẻ, texture bị méo do giới hạn của PSX
- Cần cải thiện trình tiền xử lý đồ họa, lỗi render ở một số texture, màn hình tiêu đề chưa hoàn thiện, menu tạm dừng không hoạt động
Cách build
Linux
- Cài toolchain
mipsel-none-elf-gcc rồi clone kho lưu trữ
- Đặt file
baserom.us.z64 vào thư mục gốc
- (Tùy chọn) thêm các file soundtrack
.wav (0~37) vào thư mục .local
- Chạy
make để tạo ảnh ISO (build/us_psx/sm64.us.iso)
- Phiên bản benchmark (
make BENCH=1) chỉ tạo ELF/EXE, không tạo ISO, và cần PSX RAM 8MB
Windows (chưa kiểm chứng)
- Cài MSYS2 rồi cấu hình gói
mingw-w64
- Cài
mipsel-none-elf-gcc và clone kho sm64-psx
- Đặt file
baserom.us.z64 rồi chạy make
- Kết quả build được tạo ở cùng đường dẫn như trên Linux
Khắc phục sự cố
- Nếu gcc không được nhận diện, hãy kiểm tra có đang chạy sai môi trường MSYS2 hay không
- Nếu thiếu
baserom.us.z64, hãy kiểm tra vị trí file
- Nếu không tìm thấy Makefile, hãy kiểm tra đường dẫn thư mục
- Nếu gặp lỗi gói, hãy cập nhật bằng
pacman -Syu và pacman -Su
- Có thể kiểm tra mipsel gcc hoạt động hay không bằng lệnh
mipsel-none-elf-gcc -v
- Khi chuyển nền tảng, cần biên dịch lại tool bằng
make -C tools clean
Cấu trúc dự án
actors: hành vi object, geo layout, display list
assets: animation và dữ liệu demo
src: mã nguồn C cốt lõi của game (audio, engine, game, menu, port, v.v.)
textures, text, levels: dữ liệu đồ họa và màn chơi
tools: công cụ build
lib: bao gồm mã từ N64 SDK
Đóng góp
- Hoan nghênh Pull Request
- Khuyến nghị tạo Issue để thảo luận trước với các thay đổi lớn
1 bình luận
Ý kiến trên Hacker News
Nếu thích bản port này, có lẽ bạn cũng sẽ thấy thú vị với dự án tái triển khai hoàn toàn SM64 trên GBA
Xem video trên YouTube
Bài viết liên quan: The Impossible Port – Super Mario 64 on the Game Boy Advance
N64 có vẻ cũng khá hợp, và tôi muốn kiếm được một chiếc SummerCart64 vào lúc nào đó để thử nghiệm
Dù vậy, hoàn thành được đến mức này thật sự rất đáng nể
Đây thực sự là một thành tựu đáng kinh ngạc
Tôi từng sở hữu cả hai hệ máy, và khi nhìn bản port này lại càng cảm nhận rõ N64 vào năm 1996 đã tái hiện tốt đến mức nào cảm giác ‘SGI trong phòng khách’
Cú sốc khi lần đầu nhìn thấy Mario 64 trên chiếc N64 hàng nhập khẩu từ Nhật vẫn còn rất rõ trong ký ức
Nó cũng gợi nhớ tới bối cảnh game đầy đa dạng của thời kỳ mà những trò như Wipeout trên PSX phát triển theo một hướng hoàn toàn khác
Họ nói “Tessellation (tối đa gấp 2)” sẽ giảm vấn đề polygon lớn, nhưng trong video biến dạng texture vẫn rất rõ
Có lẽ mức gấp 2 là chưa đủ, hoặc phải làm lại level geometry
Có lẽ vì đang xử lý phép toán dấu phẩy động bằng phần mềm nên perspective-correct mapping sẽ gây gánh nặng lên framerate
Khi được triển khai sau này, các polygon lớn sẽ được chia nhỏ để giải quyết cả vấn đề giới hạn tọa độ texture
Cảm giác thô ráp của 3D đời đầu thời PS1 vẫn còn đó
Tôi tò mò không biết có video chạy thực tế hay ảnh chụp màn hình nào không. Tôi cũng hiểu vì sao GitHub không có
Liên kết YouTube
Liên kết YouTube
Nhiều người phàn nàn về biến dạng texture, nhưng dù sao đây vẫn là một tác phẩm cực kỳ ấn tượng
Không thể không nhắc đến Kaze
Anh ấy là người đã tối ưu Mario 64 theo đủ cách trong nhiều năm, và nếu bạn quan tâm tới giao điểm giữa game retro và lập trình thì rất đáng xem
Kênh YouTube của Kaze
Tôi không ngờ điều này lại thành hiện thực nhanh đến vậy
Xem video liên quan
Nếu có ai đó hiểu PS1 ở trình độ như Kaze, thì có lẽ những dự án như Mario 32 cũng khả thi
Gần đây các dự án decompile bùng nổ mạnh, nên tôi tò mò về nguyên nhân phía sau
Ví dụ tiêu biểu là các công cụ như decomp.me
Những công cụ này cho phép tái dựng mã khớp chính xác với binary gốc, giúp các dự án mới có thể khởi động nhanh hơn
Ngoài ra, sự xuất hiện của lớp porting mô phỏng API SDK của console cũng góp phần quan trọng
Tuy vậy, để đạt được mức khớp hoàn hảo, vẫn cần nỗ lực khổng lồ như phải tái hiện lại hành vi bất thường của các toolchain cũ
Gần đây còn có bản port Dreamcast, và Star Fox 64 cùng Mario Kart 64 cũng đã được port sang nhiều nền tảng
Danh sách liên quan: awesome-game-decompilations
Tiếc là không có ảnh chụp màn hình
“Cuối cùng thì, Super Mario 32”