- Basierend auf dem Super Mario 64 Decompilation Project für Nintendo 64, eine auf PlayStation (PSX) portierte Version
- Enthält umfangreiche Anpassungen für PS1-Hardware wie DualShock-Vibrationsunterstützung, Umstellung auf Festkomma-Mathematik und Rendering-Optimierungen
- Leistungsverbesserungen durch Grafikpräprozessor, Texturkompression und Optimierung des Animationsspeichers wurden ergänzt
- Mehrere bekannte Fehler sind vorhanden, darunter eine unvollständige Kamerasteuerung, Kollision- und Absturzfehler sowie ein nicht mögliches Musik-Build
- Ein plattformübergreifendes Portierungsexperiment eines Klassikers, das als relevantes Beispiel für die Entwicklung auf Legacy-Konsolen und Reverse-Engineering-Forschung gilt
Projektübersicht
- Dieser Code ist ein Fork der vollständigen dekompilierten Super Mario 64 (J/U/E/SH)-Version und ist nur für PSX und PC (Debugging) gedacht.
- Der Nintendo-64-Build wird nicht mehr unterstützt.
- Derzeit kann nur ein US-ROM gebaut werden.
- Der Spiel-Build enthält keine Original-Assets, daher ist ein Extrahieren der Assets aus einem gültigen ROM erforderlich.
Hauptfunktionen
- DualShock™-Kompatibilitätsgrafik wurde hinzugefügt und imitiert die originale Anzeige „Rumble Pak Compatible“.
- Unterstützt sowohl analoge Vibrationssignale für den großen DualShock-Motor als auch digitale Signale für den kleinen Motor.
- PSX-Implementierung für Low-Precision-Soft-Float senkt den Performance-Verlust bei Fließkomma-Berechnungen.
- Festkomma-Mathematik ersetzt Teile des Codes; 16-Bit-Integer-Vektoren und -Matrizen nach PSX-Standard.
- Render-Graph-Worker vereinfacht und neu geschrieben.
- Polygon-Splitting (bis zum 2-fachen) reduziert Probleme bei großen Polygonen.
- RSP-Displaylisten werden in ein JIT-basiertes eigenes Format konvertiert, um die Verarbeitungsrate zu steigern.
- Ein Displaylisten-Präprozessor entfernt unnötige Befehle und optimiert Meshes.
- Mario-Animationskompression (580,632 → 190,324 Bytes) und direkte Platzierung im VRAM.
- Eigenen Profiler und 4bpp-Textur-Encoder hinzugefügt.
- Aufgrund der Transparenzgrenzen der PSX wurden hexagonale Schatten eingesetzt.
- (Geplant) Kameradrehung mit dem rechten Analogstick und eine Überarbeitung des Goddard-Subsystems.
Bekannte Probleme
- Schwebende Bäume, manche Animationen funktionieren nicht oder stürzen ab
- Musik-Build nicht möglich, Soundeffekte fehlen oder klingen fehlerhaft
- unvollständige Kamerasteuerung, Abstürze beim Betreten bestimmter Levels
- Laden der Endsequenz schlägt fehl, Lakitu taucht nicht auf, Pol funktioniert nicht
- lange Ladezeiten durch einzelnes Laden von Texturen, Texturverzerrungen aufgrund von PSX-Limits
- Verbesserung des Grafikpräprozessors erforderlich, einige Textur-Rendering-Fehler, nicht vollständiger Titelbildschirm, Pause-Menü funktioniert nicht
Build-Methode
Linux
- Toolchain
mipsel-none-elf-gcc installieren und das Repository klonen
- Datei
baserom.us.z64 im Stammverzeichnis ablegen
- (Optional) Soundtrack-
.wav-Dateien (0~37) im .local-Ordner hinzufügen
make ausführen, um ein ISO-Image zu erzeugen (build/us_psx/sm64.us.iso)
- Die Benchmark-Version (
make BENCH=1) erzeugt ohne ISO nur ELF/EXE und benötigt eine 8 MB RAM PSX
Windows (nicht verifiziert)
- Nach Installation von MSYS2 die
mingw-w64-Pakete einrichten
mipsel-none-elf-gcc installieren und das sm64-psx-Repository klonen
baserom.us.z64 ablegen und make ausführen
- Das Build-Ergebnis wird im selben Pfad wie unter Linux erzeugt
Fehlerbehebung
- Bei nicht erkanntem
gcc prüfen, ob die falsche MSYS2-Umgebung ausgeführt wird
- Bei fehlendem
baserom.us.z64 den Dateistandort überprüfen
- Bei nicht gefundenem Makefile den Verzeichnispfad prüfen
- Bei Paketfehlern mit
pacman -Syu und pacman -Su aktualisieren
- Die Funktionsfähigkeit von
mipsel-gcc prüfen mit mipsel-none-elf-gcc -v
- Beim Plattformwechsel
make -C tools clean ausführen, um Tools neu zu kompilieren
Projektstruktur
actors: Objektverhalten, Geo-Layout, Displaylisten
assets: Animations- und Demodaten
src: Kern-C-Quelle des Spiels (Audio, Engine, Spielablauf, Menü, Portierung usw.)
textures, text, levels: Grafik- und Level-Daten
tools: Build-Tools
lib: enthält N64-SDK-Code
Beiträge
- Pull Requests sind willkommen.
- Vor größeren Änderungen empfiehlt sich die Erstellung und Diskussion eines Issues.
Noch keine Kommentare.