Pang Pang Club

Final Fantasy VII Makou Reactor : Les entrailles d’une usine à rêver

le 14 avril, 2020
  • Ca y est ! Final Fantasy VII remake est sorti ! Ou plutôt le premier épisode de FFVII remake... Mais comme au PangPang on ne fait rien comme tout le monde, aujourd'hui on va se plonger tout entiers dans les entrailles du FFVII original, sorti en 1997 sur Playstation, grâce à MakouReactor.

    Makou Réaquoi ?

    Makou Reactor, (en référence à l’énergie Mako, une forme de source énergétique et spirituelle omnisciente) est un logiciel qui permet de visualiser de l’intérieur et de modifier FF7 : Ses maps, ses dialogues, ses scripts… Le projet est open source, dispose d’une interface graphique sobre et élégante (basée sur le framework QT) et le tout pèse moins de 10 MB : Téléchargement et sources ici.

    Pourquoi c’est cool ?

    Cela permet de modifier, voire d’améliorer le jeu d’origine : Proposer une vraie traduction en français, comme cela a été fait avec le projet Neo-Midgar, qui a d’ailleurs dressé une liste des plus belles perles de la traduction d'origine ici, ou encore améliorer les graphismes (décors, modèles 3D...), soit en les redessinant depuis la feuille blanche, soit en améliorant la définition d’origine grâce à des techniques d’intelligence artificielle ( cf le très bon article de canard PC sur l’ESRGAN ).
    On pourrait aussi modifier totalement le jeu pour faire des « mods » qui racontent d’autres histoires avec d’autres personnages et d’autres décors… Attention toutefois, Makou Reactor n’est pas un environnement de développement ni un moteur de jeu.
    Pour moi l’intérêt principal reste l’aspect pédagogique et la satisfaction de la curiosité : Cela n’est pas si courant de pouvoir examiner les ficelles d’un jeu « triple A », aussi ancien soit-il, avec autant de détails !

    Comment ça marche ?

    Il suffit de lancer l’exécutable et de lui donner à analyser l’un des fichiers du jeu (dont vous avez légalement acheté un exemplaire)  :

    Sur le volet de gauche, la liste des fichiers. Chaque fichier est associé à un décor ou arrière-plan (plus de 700 dans le premier des trois CD que comporte le jeu), et à des « groupes » qui correspondent à des personnages ou objets. Chaque groupe est associé à un modèle 3D et un ou plusieurs scripts (jusqu’à 32). Hiérarchiquement, cela donne ceci :

    On a accès à une mine d’informations sur la manière dont a été conçu ce jeu, que l’on peut visualiser et éventuellement modifier.

Coulisses des décors : Animations et calques

Chaque fichier est associé à un arrière-plan : Par exemple, le fichier « zz3 » est associé à un décor d’étable, avec un foyer qui crépite :

Dans le menu "Background", on peut visualiser ce décor et les différentes images qui composent l’animation (sprite) du foyer en cliquant sur les différents "states" :

Un saut dans l’onglet « sections » permet de visualiser ce que l’on pourrait comparer à des calques qui composent l’image de fond. Chaque section est associée à une altitude, notée « Z » qui permet de déterminer leur ordre d’empilement.

Coulisses du code : Scripts et variables

Autre exemple, le fichier « mds5_1 » est associé au taudis du secteur 5.
Makou reactor nous montre que ce fichier est associé à un arrière-plan et à 16 « groupes » numérotés de 0 à 15 :

  • Les groupes 0 à 3 sont de type « animation » et régissent le comportement du téléviseur qui est dans la rue, et les animations des portes…
  • Le groupe 4 , de type « main » permet notamment d’indiquer dans le menu le nom de l’endroit ou l’on se trouve.
  • Les groupes 5 à 8 régissent le comportement des personnages joueurs.
  • Les groupes 10 à 17 régissent le comportement des personnages non joueurs.

Prenons l’exemple du groupe 10, qui correspond à « Slumer A », un habitant des taudis du secteur 5 :
Les comportements de « Slumer A » sont régis par plusieurs scripts :

  • Un script init, qui définit sa position de départ.
  • Un script main, qui définit son activité dans les taudis (déplacements, mouvements…)
  • Un script « talk » qui définit les conversations que l’on va avoir avec lui.

Si l’on observe le contenu de ce script « talk », on constate que son déroulement est conditionné par une variable « GameMoment » :

« GameMoment » est un compteur global (exploitable partout dans le code) qui sert de chronologie au jeu : Ce compteur va croitre à mesure que des éléments du jeu se produiront, ce qui permet par exemple aux personnages d’avoir une réaction en lien avec les évènements marquants du jeu.
Au début du jeu, « Slumer A » qui correspond à un marchand du taudis, nous incite à venir acheter quelque chose dans son magasin… Plus tard, il se plaindra de la chute d’ « un gros morceau de ferraille », en rapport direct avec l’intrigue vécue par le joueur à ce moment précis… Cela n’a l’air de rien, mais le jeu est très riche de ces petits détails, et cela a sans doute contribué à rendre son univers plus crédible et plus immersif, au sortir d'une époque ou les jeux d’aventure étaient encore peuplés de personnages qui répétaient inlassablement « Bienvenue dans le village de Truc ! » en toutes circonstances.

Le monde en 3D : Maillages, portes, passerelles (Walkmesh, doors, gateways)

On a vu les coulisses des décors, avec leurs calques et leurs animations en 2D. Mais FF7 intègre des personnages et objets calculés en 3D temps réel sur ces arrière-plans pré-rendus.
Pour que cela soit possible, il y a dans chaque fichier, en association avec le décor, un « walkmesh », c’est à dire un maillage 3D (invisible en jeu) qui définit le support sur lequel les personnages se déplacent. Ce maillage permet :

  • La gestion des collisions : Le personnage ne peut pas traverser les murs, plantes vertes ou autres éléments de l’arrière-plan.
  • La gestion de la perspective et du relief : Si le personnage s’éloigne de la caméra, il devient plus petit. S’il marche sur une zone inclinée, il en suit la trajectoire.
  • La gestion des transitions : Si le personnage franchit une porte, ou s’approche du bord de l’écran, un nouveau fichier est chargé (et donc un nouveau décor/walkmesh, de nouveaux groupes et scripts…)

Exemple avec le fichier blin2, qui correspond au rez-de-chaussée d’un bâtiment :

On voit bien le maillage 3D qui correspond à l’arrière-plan. Ce maillage intègre la position de « Gateways », en haut des escaliers par exemple, qui sont associés à l’identifiant du fichier à charger lorsque le personnage atteint le haut des escaliers.

Coulisses du texte

Dans le menu Tools->Texts on peut voir et modifier tous les dialogues. Ces dialogues peuvent contenir des macros pour, par exemple : proposer un choix au joueur, changer la couleur du texte, sauter une page, faire une pause dans le déroulement du texte ou afficher la valeur d’une variable…

Final Final

Cet article est déjà bien trop long… mais sachez que Makou Reactor permet aussi la visualisation des modèles 3D (personnages, créatures, objets…) et l’exploration des règles qui régissent les fameuses rencontres aléatoires (probabilités). On peut aussi découvrir le nom des artistes qui ont travaillé sur chaque décor et certains fichiers/salles accessibles uniquement à l’équipe de programmeurs, comme la fameuse « debug room » qui permet de faciliter le test/debug de segments ou fonctions du jeu, et 1000 autres petites choses inspirantes que l’on a fait qu’apercevoir !

Clément.

Clément