[PS4/PC/PSP/Switch] Super Mario 64, le portage progresse

1322 visiteurs sur le site | S'incrire

Accédez aux coordonnées de l’ensemble des techniciens professionnels recommandés par logic-sunrise 20 derniers dossiers et tutoriaux
Playstation 3 / 4
[PS4/PC/PSP/Switch] Super Mario 64, le portage progresse

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 D:\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.

 

 

 

 

 

 

Mercredi 20 Mai 2020, 07:51 par tikilou
Source : Moi même
20 mai 2020, 07:51
Approuver ce commentaire (+1)
merci .
Répondre à ce commentaire
20 mai 2020, 08:07
Approuver ce commentaire (+1)
Merci tikilou !
Après ca serait peut-etre mieux une news, puis un lien vers le forum ?
Répondre à ce commentaire
20 mai 2020, 08:20
Approuver ce commentaire (+1)
Merci pour la news très complète, digne d'un tuto :)
Répondre à ce commentaire
20 mai 2020, 09:14
Approuver ce commentaire (+1)
Merci pour la news, très complet tous sa :)
Répondre à ce commentaire
20 mai 2020, 09:45
Approuver ce commentaire (+1)
Excellent , merci
Répondre à ce commentaire
20 mai 2020, 10:27
Approuver ce commentaire (+1)
Très bonne news ! Elles sont rares maintenant :P
Répondre à ce commentaire
20 mai 2020, 12:52
Approuver ce commentaire (+1)
Excellent tou ca ,à quand le portage de Zelda Ocarina of Time :)
Répondre à ce commentaire
20 mai 2020, 14:13
Approuver ce commentaire (+1)
Toppissime !!! Merci
Répondre à ce commentaire
20 mai 2020, 17:00
Approuver ce commentaire (+1)
merciii pour ttes ces explications ^^
Répondre à ce commentaire
20 mai 2020, 18:15
Approuver ce commentaire (+1)
personne pour en faire un fpkg pour 5.05
Répondre à ce commentaire
Utilisateur en ligne
20 mai 2020, 21:07
Approuver ce commentaire (+1)

personne pour en faire un fpkg pour 5.05

Pour lancer Mario sur PS4, va voir par ici => https://t.me/ps4linux4homebrews

Répondre à ce commentaire
Utilisateur en ligne
20 mai 2020, 21:42
Approuver ce commentaire (+1)

Excellent tou ca ,à quand le portage de Zelda Ocarina of Time :)

La team qui a décompilé le jeu bosse dessus, ainsi que sur le suivant. Ils avancent mais c'est plus difficile que sm64.
Ocarina of Time est très proche de sm64, les deux utilisent le même moteur de jeu. Majora Mask lui, en est une version améliorée.

Répondre à ce commentaire
21 mai 2020, 15:10
Approuver ce commentaire (+1)
Super news, dans la forme et dans le fond,bien détaillée avec un tuto,top
Répondre à ce commentaire
Utilisateur en ligne
24 mai 2020, 16:17
Approuver ce commentaire (+1)

cool le support multilang et la prise en charge des cheats.

Répondre à ce commentaire
Cliquer ici pour continuer sur le forum
Envoyer