Depuis le leak du code source, non pas depuis le récent Hack ayant abouti aux fuites de codes sources de jeux et consoles de Nintendo, mais d'une équipe sur Discord ayant longuement travaillé à la décompilation du jeu pour un portage en C, une autre équipe a repris ce dernier pour faire un portage sur PC.
Les binaires (exécutables précompilés) ne peuvent pas être légalement distribué, mais le code source du jeu l'est, lui le peut.
Le portage du jeu a grandement avancé, on retrouve enfin un support stable de WebGL pour lancer le jeu depuis un navigateur Web, il est également possible de compiler le jeu pour Raspberry Pi, Switch ( bientôt public) et ce dernier pourra également être lancé sur PS4 sous Linux. (Il se murmure qu'une version PSP, serait dans les clous, et que potentiellement, il serait aussi possible de faire un portage PSvita avec un wrapper OpenGL.)
Le support de DirectX 12 est en passe d'être abandonné visiblement, au profit d'OpenGL uniquement, pouvant être utilisé et porté partout, sachant que le jeu n'est vraiment pas gourmand. Vulkan n'est pas prévu pour le moment, le support de cette API dépendant essentiellement d'un projet tiers.
Progressivement, des options ont été rajoutées, pour augmenter la visibilité de la distance des objets (plus de clipping), sauter l'introduction du jeu lors du lancement d'une nouvelle partie, ainsi que le réglage du volume, quitter le jeu, et le support des cheats !
Bonne nouvelle et pas des moindre de récents apports ont permis aux moddeurs de pouvoir enfin utiliser nativement des textures hautes-résolution, ou, au contraire de désactiver les filtres natifs du jeu afin d'en profiter avec un côté pixel arts. Certains bugs de l'époque ont même été corrigé, comme la texture de la fumée qui n'était pas programmée correctement à l'origine, et afficher une texture corrompue, alors que ladite texture était bien présente dans le jeu.
D'autres se sont carrément lancés dans des tâches plus complexes, un contributeur a réussi à reprendre un modèle de Mario de Super Mario Galaxy et l'intégrer dans Super Mario 64 avec succès, les outils pour pouvoir appliquer ça manuellement à tous les modèles du jeu est en cours, mais il a annoncé que pour sa part, il aura besoin de toutes les contributions possibles pour améliorer chaque objet/personnage du jeu.
Le support des gamepads est le même que SDL, dans la pratique, il accepte et configure de base tous les pads respectant le standard "Xinput", la Dualshock 4 de Sony fonctionne par exemple à merveille en USB et Bluetooth sous Linux.
Le support du multilingue avance lui aussi grandement, bien que la version européenne du jeu ne soit pas encore fonctionnelle (des problèmes d'affichage des polices et l'absence de son), il devrait être possible de bénéficier de la traduction française sur les versions US et JP. D'autres traductions, comme l'Espagnol, sont également en cours.
Dans tous les cas, vous devrez récupérer par vos propres moyens la bonne version us de la rom Super Mario 64 pour émulateurs Nintendo 64, au format Z64, sachez que vous n'avez légalement le droit d'en disposer qui si vous avez le jeu original en votre possession.
Le code source dépend des textures, des fichiers d'animation et modèles 3D, ainsi que les banques de sons et fichiers de séquençages du jeu original et quelques parties en assembleur, c'est pourquoi l'exécutable prêt à l'emploi ne peut pas être distribué. Et c'est également pourquoi Nintendo ne peut rien faire contre le code source, obtenu par rétro-ingénierie, pratique légale dans la plupart des pays du monde. (Mais pas au Japon)
Dans la pratique, ce code source donne le même résultat (et même mieux, avec toutes les corrections et apports) que celui en possession de Nintendo, mais il est différent du leur dans sa forme et composition ce qui fait qu'il ne tombe pas sous le coup d'un copyright.
Tout ça c'est bien beau, me direz vous, mais comme le jeu ne peut pas être distribué tel quel, comment compiler le jeu pour obtenir quelque chose qu'on peut exécuter/lancer et jouer avec ?
En réalité, c'est beaucoup plus simple qu'il n'y paraît, il va falloir compiler le jeu, c'est à dire, avec quelques outils, convertir le code source du jeu programmé avec le langage "C", en un exécutable binaire écrit en langage machine (vous savez, cette suite de 1 et de 0, seules choses qu'un processeur comprend concrètement ?...) voici les instruction plateforme par plateforme, c'est faisable tant que vous disposez d'une machine ayant un processeur du 64 bits. Le 32 bits est théoriquement possible, mais du fait de limitations technique et sa progressive disparition, les développeurs ne se concentrent pas sur son support et des bugs ne concernant que ces versions, peuvent parfois apparaître.
Suivez simplement les commandes qui suivent, selon votre situation, et n'oubliez pas de renommer la rom en "baserom.us.z64" (pour vérifier que la rom que vous avez soit bien la bonne, vérifiez avec "md5sum" que la somme md5 du fichier soit bien 20b854b239203baf6c961b850a4a51a2) et de l'intégrer à la racine du dossier du code source du jeu.
Préparer pour Linux, sous Linux sur PC et PS4 (Distributions Ubuntu et Debian) :
-64 bits :
sudo apt install build-essential git python3 libaudiofile-dev libglew-dev libsdl2-dev
-32 bits :
sudo apt install build-essential git python3 libaudiofile-dev libglew-dev:i386 libsdl2-dev:i386
Préparer pour Linux, sous Linux sur PC et PS4 (Distributions Manjaro et ArchLinux) :
-64 bits uniquement :
sudo pacman -S base-devel python audiofile sdl2 glew
Commande commune à toutes les distributions et systèmes :
-Pour récupérer le code source
git clone https://github.com/sm64pc/sm64pc.git --branch master
Ici, "master" peut être remplacé par "nightly" pour bénéficier des dernières nouveautés/contributions de la communauté sur le jeu.
Gardez à l'esprit toutefois que la compilation peut parfois échouer, tout n'ayant pas encore été passé en revue afin d'assurer la cohérence du tout.
-Déplacez vous dans le terminal/invite de commande dans le dossier contenant le code source avec la commande "cd" (ici ça peut être sm64pc, sm64pc-master, ou sm64pc-nightly, selon que vous utilisiez git ou téléchargiez directement l'archive zip contenant toute le code source, et l'extrayez manuellement.
Par exemple "cd /home/Romain/sm64pc" sous Linux ou "cd \sm64pc" sous Windows.
Sachez qu'une simple commande peut mettre à jour le code source avec les dernières nouveautés de la branche choisie, sans tout devoir re-télécharger.
git pull
Compiler Super Mario 64 pour Linux :
make clean && make -j$(nproc) VERSION=us BETTERCAMERA=1 EXT_OPTIONS_MENU=1 NODRAWINGDISTANCE=1
-Pour compiler une version 32 bits, vous devez également rajouter aux arguments de make :
MARCH=i686 TARGET_BITS=32
Ici "make" est l'outil permettant de compiler le code source avec GCC, un compilateur très connu, ayant lui même été utilisé par Nintendo en 1996 pour compiler le jeu original. (Avec des oublis, ayant entraîné une chute des performances et facilité la décompilation du jeu...
La fonction "clean" permettra de s'assurer à coup sûr que le dossier des binaires du jeu soit bien nettoyer pour recompiler proprement depuis le début.
"&&" permet de passer plusieurs commandes à la suite sur une seule ligne.
"-j" est un argument permettant d'indiquer le nombre de coeurs de votre processeur pour compiler un binaire. Habituellement, ou peut indiquer directement -j4 si l'on dispose d'un core i5 avec quatre coeurs par exemple. Mais ici, remplacer un chiffre par $(nproc) permet à chacun de ne plus s'en soucier et d'utiliser le nombre maximum de cœurs disponibles. On compile donc le jeu plus rapidement par défaut.
Évidemment, si vous avez besoin d'une bonne partie des ressources de votre PC durant la compilation, vous pouvez remplacer par -j1 ou -j2 , selon votre désir.
VERSION=us permet d'indiquer que vous allez extraire la rom US . (Pour la rom EU [PAL], utiliser l'argument "eu", et pour la rom japonaise, utiliser l'argument "jp".
BETTERCAMERA=0 permet de définir si vous voulez activez la gestion de la caméra comme dans le jeu d'origine, ou amélioré (à savoir, un vrai support fin de la caméra avec le joystick droit, comme la majorité des jeux récents), la valeur 0 permet de conserver le mécanisme d'origine, tandis que la valeur 1 compile le jeu avec le système moderne.
EXT_OPTIONS_MENU=1 permet d'activer le menu d'options supplémentaire permettant de désactiver le filtre graphique, activer ou désactiver la synchronisation verticale, régler le volume sonore, accéder aux cheats...
NODRAWINGDISTANCE=1 permet de désactiver la limitation d'origine du jeu pour l'affichage d'objets distants. Ce phénomène se nomme habituellement clipping, en relation avec la distance d'affichage configurée dans les jeux, selon les capacités du matériel sur lequel on joue.
-L’exécutable du jeu sera compilé dans le dossier build/us_pc et sera nommé sm64.us.f3dex2e, il ne vous restera plus qu'à l’exécuter.
Lors du lancement du jeu, un fichier sm64config.txt sera créé à côté, qui contiendra toutes les options de configurations (association des boutons de jeu, filtres, vsync, etc...).
Le fichier de sauvegarde sm64_save_file.bin sera créé dès votre première sauvegarde et respecte les spécifications d'origine de la nintendo 64. Il est théoriquement possible de l'utiliser avec un émulateur, ou même, avec la nintendo 64 si on a le matériel pour, et vice versa. (À terme, ce support sera remplacé par un fichier texte avec des valeurs claires).
Compiler Super Mario 64 pour Raspberry PI et autres matériels avec processeur ARM :
-Ajoutez simplement aux arguments de l'outil de compilation "make" :
TARGET_RPI=1
Globalement, le binaire obtenu devrait fonctionner sur tout processeur ARM, y compris sous Linux sur Nintendo Switch.
Le binaire sera disponible dans le même dossier que la version PC, et sera nommé sm64.us.f3dex2e.arm
Optionnellement, il est possible d'optimiser la compilation pour chaque version du RaspberryPi avec ce script prêt à l'emploi.
Compiler Super Mario 64 pour Windows (Sous Linux Manjaro ou ArchLinux) :
La première étape sera d'installer MSYS2 tel qu'indiqué dans ce guide.
Pui l'on installe les dépendances liées à la compilation de programmes pour Windows.
pacman -S mingw-w64-i686-glew mingw-w64-x86_64-glew mingw-w64-i686-SDL2 mingw-w64-x86_64-SDL2 python3
-Dans le dossier du code source du jeu, avec la commande cd, rendez vous dans le dossier ./tools/audiofile-0.3.6/ puis lancez la commande suivante :
autoreconf -i
-Puis on lance la configuration du script de compilation :
PATH=/mingw64/bin:/mingw32/bin:$PATH LIBS=-lstdc++ ./configure --disable-docs
-Puis on lance la compilation de la librairie audiofile configurée pour windows :
PATH=/mingw64/bin:/mingw32/bin:$PATH make
-On créer un dossier "lib" dans le dossier "tools" :
mkdir ../lib
-Puis on y copie les fichiers de la librairie configurée pour windows, fraichement compilés
cp libaudiofile/.libs/libaudiofile.a ../lib/ && cp libaudiofile/.libs/libaudiofile.la ../lib/
-On retourne dans le dossier tools avec la commande cd , puis éditez le fichier Makefile et recherchez la ligne tabledesign_CFLAGS := -Wno-uninitialized -laudiofile puis ajoutez y -lstdc++
La ligne en question devrait alors ressembler à ça désormais :
tabledesign_CFLAGS := -Wno-uninitialized -laudiofile -lstdc++
-On démarre désormais la compilation binaire de ces librairies configurées pour windows :
PATH=/mingw64/bin:/mingw32/bin:$PATH make
On retourne avec la commande cd dans le dossier sm64pc (à la racine du dossier du code source de Super Mario 64) et ENFIN on peut compiler le jeu pour windows :
PATH=/mingw32/bin:/mingw64/bin:$PATH make
-L’exécutable du jeu sera compilé dans le dossier build/us_pc et sera nommé sm64.us.f3dex2e.exe, il ne vous restera plus qu'à l’exécuter, sous Windows, ou avec Wine, ou Proton, ou même ReactOS, pour le tester.
Compiler Super Mario 64 pour navigateurs web (WebGL) sous Manjaro/ArchLinux :
-Il faudra tout d'abord installer emscripten pour pouvoir compiler la version WebGL de Super Mario 64, On aura d'abord besoin d'installer son paquet :
sudo pacman -S emscripten
-Puis il faudra créer un lien symbolique des binaires vers le dossier qui contient des executables locaux copiés par l'utilisateur.
sudo ln -s /usr/lib/emscripten/emcc /usr/local/bin/ && sudo ln -s /usr/lib/emscripten/emcc.py /usr/local/bin/
-On tente de lancer une première fois emscripten (qui échouera à cause d'une erreur de configuration), ce qui aura pour effet de créer son fichier de configuration, puis on l'édite. (remplacez nano par gedit ou tout autre éditeur graphique ou non, de votre choix)
nano ~/.emscripten
-Puis l'on remplace :
BINARYEN_ROOT = os.path.expanduser(os.getenv('BINARYEN', '')) # directory
-par
BINARYEN_ROOT = os.path.expanduser(os.getenv('BINARYEN', '/usr/lib/emscripten/')) # directory
Ici, on indique en fait au fichier de configuration, ou se situent les fichiers d'emscripten. (/usr/lib/emscripten/)
-Enfin, on peut compiler comme sur PC, à une différence près qu'on rajoute cet argument à make :
TARGET_WEB=1
Par exemple ça peut donner ceci :
make clean && make -j$(nproc) VERSION=us TARGET_WEB=1 BETTERCAMERA=1 EXT_OPTIONS_MENU=1 NODRAWINGDISTANCE=1
-L’exécutable du jeu sera compilé dans le dossier build/us_web et sera composés de trois fichiers, respectivement nommés sm64.us.f3dex2e.html, sm64.us.f3dex2e.js, et sm64.us.f3dex2e.wasm, il ne vous restera plus qu'à l’uploader sur votre serveur web et à tester avec n'importe quel navigateur supportant WebGL. La compilation est un peu plus longue que la version PC, et l'internaute devra patienter le temps du téléchargement des fichiers dans le cache du navigateur.
La version web intègre un support des sauvegardes, également. Attention à ne pas effacer les coockies et le cache de la page web du jeu pour ne pas les perdre.
À noter que le support des gamepads est aussi fonctionnel avec les navigateurs webs !
Il existe deux serveurs discord, l'un du projet de décompilation, l'autre du port PC et des moddeurs.
Malheureusement ces derniers ont été fermés aux invitations suite à une avalanche de spammeurs et haters, et pour pouvoir continuer à oeuvrer dans la paix à l'abris des regards indiscrets.
Il peut arriver que parfois de nouveaux liens d'invitation soient créé, si c'est le cas, ils devraient apparaître sur la page github du projet de portage PC.
Vous pouvez par ailleurs reporter vos bugs et demandes de nouvelles fonctionnalités, en anglais, sur cette page, mais veillez à vérifier que votre demande n'existe pas déjà dans la liste déjà présente.