Die PS1-Portversion von Super Mario 64
(github.com/malucard)- 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-gccinstallieren und das Repository klonen - Datei
baserom.us.z64im Stammverzeichnis ablegen - (Optional) Soundtrack-
.wav-Dateien (0~37) im.local-Ordner hinzufügen makeausfü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-gccinstallieren und dassm64-psx-Repository klonenbaserom.us.z64ablegen undmakeausführen- Das Build-Ergebnis wird im selben Pfad wie unter Linux erzeugt
Fehlerbehebung
- Bei nicht erkanntem
gccprüfen, ob die falsche MSYS2-Umgebung ausgeführt wird - Bei fehlendem
baserom.us.z64den Dateistandort überprüfen - Bei nicht gefundenem Makefile den Verzeichnispfad prüfen
- Bei Paketfehlern mit
pacman -Syuundpacman -Suaktualisieren - Die Funktionsfähigkeit von
mipsel-gcc prüfen mitmipsel-none-elf-gcc -v - Beim Plattformwechsel
make -C tools cleanausführen, um Tools neu zu kompilieren
Projektstruktur
actors: Objektverhalten, Geo-Layout, Displaylistenassets: Animations- und Demodatensrc: Kern-C-Quelle des Spiels (Audio, Engine, Spielablauf, Menü, Portierung usw.)textures,text,levels: Grafik- und Level-Datentools: Build-Toolslib: enthält N64-SDK-Code
Beiträge
- Pull Requests sind willkommen.
- Vor größeren Änderungen empfiehlt sich die Erstellung und Diskussion eines Issues.
1 Kommentare
Hacker-News-Kommentare
Wenn dir dieser Port gefällt, dürfte auch das vollständig neu implementierte SM64-Projekt für den GBA interessant sein
YouTube-Video ansehen
Zugehöriger Artikel: The Impossible Port – Super Mario 64 on the Game Boy Advance
Das würde auch gut zum N64 passen, und ich würde mir irgendwann gern ein SummerCart64 besorgen und damit experimentieren
Trotzdem ist es wirklich beeindruckend, dass es bis zur Fertigstellung gebracht wurde
Wirklich eine erstaunliche Leistung
Ich hatte früher beide Konsolen, und dieser Port zeigt mir nochmal, wie gut das N64 1996 dieses „SGI-im-Wohnzimmer“-Gefühl eingefangen hat
Der Eindruck, als ich Mario 64 zum ersten Mal auf einem japanischen Import-N64 gesehen habe, ist mir noch immer lebhaft in Erinnerung
Das ruft auch die vielfältige Spielelandschaft jener Zeit in Erinnerung, in der sich Spiele wie Wipeout auf der PSX in eine andere Richtung entwickelten
Es heißt, mit „Tessellation (max. 2x)“ werde das Problem großer Polygone reduziert, aber im Video ist die Texturverzerrung immer noch stark sichtbar
Vielleicht reichen 2x nicht aus, oder man müsste die Level-Geometrie neu bauen
Vermutlich werden Gleitkommaoperationen per Software verarbeitet, daher wäre perspective-correct mapping wahrscheinlich zu belastend für die Framerate
Wenn das später implementiert wird, sollen große Polygone aufgeteilt werden, um auch die Beschränkungen bei den Texturkoordinaten zu lösen
Das raue Gefühl früher 3D-Grafik ist aus der PS1-Ära also weiterhin vorhanden
Ich frage mich, ob es irgendwo ein Laufvideo oder Screenshots gibt. Ich verstehe allerdings, warum auf GitHub nichts davon ist
YouTube-Link
YouTube-Link
Viele beschweren sich über die Texturverzerrung, aber trotzdem ist das hier wirklich eine erstaunliche Arbeit
Kaze darf man hier nicht unerwähnt lassen
Er optimiert Mario 64 seit Jahren auf verschiedenste Weise, und wenn man sich für die Schnittstelle zwischen Retro-Gaming und Programmierung interessiert, ist das absolut sehenswert
Kazes YouTube-Kanal
Ich hätte nicht gedacht, dass das so schnell Realität wird
Zugehöriges Video ansehen
Wenn es auf der PS1 jemanden mit Kazes Wissensstand gäbe, wäre vielleicht sogar ein Projekt wie Mario 32 möglich
In letzter Zeit explodiert die Zahl der Decompilation-Projekte regelrecht, und ich frage mich, warum
Ein typisches Beispiel ist decomp.me
Solche Tools ermöglichen es, Code zu rekonstruieren, der exakt mit dem bestehenden Binärformat übereinstimmt, wodurch neue Projekte schnell anlaufen können
Auch das Aufkommen von Porting-Layern, die Konsolen-SDK-APIs nachbilden, hat dazu beigetragen
Für perfekte Übereinstimmung muss man allerdings enorme Arbeit investieren, etwa um das unnormale Verhalten alter Toolchains nachzubilden
Kürzlich ist auch ein Dreamcast-Port erschienen, und Star Fox 64 sowie Mario Kart 64 wurden ebenfalls auf verschiedene Plattformen portiert
Zugehörige Liste: awesome-game-decompilations
Schade, dass es keine Screenshots gibt
„Endlich, Super Mario 32“