- Basé sur le projet de décompilation Super Mario 64 pour Nintendo 64, une version a été portée exclusivement pour PlayStation (PSX)
- Il inclut des modifications importantes adaptées au matériel PS1, notamment le support de la vibration DualShock, la conversion vers des calculs à virgule fixe et l’optimisation du rendu
- Ajout de fonctionnalités d’optimisation des performances comme le préprocesseur graphique, la compression de textures et l’optimisation mémoire des animations
- Plusieurs bogues connus subsistent, dont un contrôle de la caméra incomplet, des problèmes de collision et de crash et une impossibilité de générer la musique
- Un expérimental de portage multi-plateforme de jeu classique, intéressant pour le développement de consoles legacy et la recherche en reverse engineering
Aperçu du projet
- Ce code est un fork de la version entièrement décompilée de Super Mario 64 (J/U/E/SH), ciblant uniquement le PSX et le PC (débogage)
- Le build Nintendo 64 n’est plus pris en charge
- Actuellement, seul le ROM US peut être compilé
- La compilation du jeu n’inclut pas les assets originaux, et l’extraction des assets depuis une ROM d’origine est nécessaire
Fonctionnalités principales
- Ajout d’un graphique compatible avec la DualShock™, imitant l’affichage d’origine “Rumble Pak Compatible”
- Prise en charge du signal de vibration analogique pour le gros moteur et du signal numérique pour le petit moteur de la DualShock
- Mise en place d’un soft float basse précision pour PSX afin de minimiser la baisse de performance des calculs flottants
- Remplacement du code par de la mathématique à virgule fixe, avec utilisation de vecteurs et matrices d’entiers 16 bits, norme PSX
- Simplification et réécriture du render graph worker
- Subdivision de polygones (jusqu’à 2x) pour atténuer les problèmes de gros polygones
- Conversion des RSP Display Lists en format personnalisé en mode JIT, pour améliorer la vitesse de traitement
- Préprocesseur de display list pour supprimer les instructions inutiles et optimiser les meshes
- Compression des animations Mario (580,632 → 190,324 octets) avec placement direct en VRAM
- Ajout d’un profiler personnalisé et d’un encodeur de texture 4bpp
- Remplacement par des ombres hexagonales en tenant compte des limites de transparence de la PSX
- (Prévu) Réécriture de la rotation de caméra via le stick analogique droit et du système de sous-composants Goddard
Problèmes connus
- Arbres flottants, certaines animations qui ne fonctionnent pas ou provoquent un crash
- Impossible de générer la musique, effets sonores manquants ou déformés
- Contrôle de caméra incomplet, crash en entrant dans certains niveaux
- Échec du chargement de la séquence de fin, Lakitu n’apparaît pas, Pol ne fonctionne pas
- Temps de chargement élevé à cause du chargement individuel des textures, distorsion des textures due aux limites de la PSX
- Préprocesseur graphique à améliorer, erreurs de rendu sur certaines textures, écran titre incomplet, menu pause ne répond pas
Méthode de compilation
Linux
- Installez la chaîne d’outils
mipsel-none-elf-gcc, puis clonez le dépôt
- Placez le fichier
baserom.us.z64 à la racine du dépôt
- (Optionnel) Ajoutez les fichiers de bande-son
.wav (0~37) dans le dossier .local
- Exécutez
make pour générer l’image ISO (build/us_psx/sm64.us.iso)
- La version benchmark (
make BENCH=1) génère uniquement des ELF/EXE sans ISO et nécessite une PSX 8 Mo de RAM
Windows (non vérifié)
- Installez MSYS2 puis configurez le paquet
mingw-w64
- Installez
mipsel-none-elf-gcc et clonez le dépôt sm64-psx
- Déposez le fichier
baserom.us.z64 puis exécutez make
- Les résultats de build sont générés aux mêmes emplacements que sous Linux
Dépannage
- Si
gcc n’est pas reconnu, vérifiez que vous n’avez pas lancé un environnement MSYS2 incorrect
- Si
baserom.us.z64 est manquant, vérifiez l’emplacement du fichier
- Si le
Makefile n’est pas trouvé, vérifiez le chemin du répertoire
- En cas d’erreur de paquets, exécutez
pacman -Syu puis pacman -Su pour mettre à jour
- Vérifiez le fonctionnement de
mipsel gcc via la commande mipsel-none-elf-gcc -v
- Lors d’un changement de plateforme,
make -C tools clean est nécessaire pour recompiler les outils
Structure du projet
actors : comportement des objets, géolayout, display lists
assets : animations et données de démo
src : sources C du cœur du jeu (audio, moteur, jeu, menus, portage, etc.)
textures, text, levels : données graphiques et niveaux
tools : outils de build
lib : contient le code SDK N64
Contributions
- Pull Request les bienvenues
- Avant les changements majeurs, il est recommandé de créer une Issue puis d’en discuter
Aucun commentaire pour le moment.