L'adaptation d'Outer Wonders sur diverses plates-formes

L'adaptation d'Outer Wonders sur diverses plates-formes

Bonjour ! Dans notre dernier billet de blog, nous avons précisé les tâches sur lesquelles nous voulions encore nous pencher pour publier la démo d'Outer Wonders sur itch.io le 2 Avril. Nous y avons notamment évoqué notre objectif de prendre en charge deux plates-formes pour cette démo : Windows et Linux. Notre billet de blog de la semaine vous propose de découvrir comment nous allons rendre ceci possible !

Quels défis pose le développement sur plusieurs plates-formes ?

Développer un jeu vidéo pour de multiples plates-formes nécessite d'avoir des mécaniques de jeu et une technologie à l'épreuve de cas très variés, notamment :

  • au niveau matériel : des tailles et des définitions d'écran diverses, des méthodes d'interactions variées (manette, clavier, souris, écran tactile), des configurations matérielles variées (processeur, RAM, carte graphique, etc.) ;
  • au niveau logiciel : cet aspect, probablement moins connu, concerne des paramètres qui peuvent paraître plus abstraits, comme la version du système d'exploitation (Windows 10 ? Windows 8 ? Windows 7 ? Ubuntu 20.04 ? Ubuntu 18.04 ? etc.) et la version de composants logiciels essentiels (DirectX, OpenGL, Vulkan, etc.), qui est très souvent liée à la configuration matérielle.

Concernant les aspects matériels, il s'agit à la fois d'adapter les mécaniques de jeu mais aussi de fournir un bon travail d'optimisation et de test sur les plates-formes concernées. Ceci dit, le principe d'Outer Wonders est suffisamment simple pour être naturellement adapté à cette diversité.

Les aspects logiciels, en revanche relèvent du défi purement technologique. En effet, pour qu'un jeu fonctionne sur une plate-forme, il doit utiliser les fonctionnalités de cette plate-forme. Or, la diversité des plates-formes crée une diversité des fonctionnalités.

Par exemple, un jeu publié sur Steam utilisera probablement les fonctionnalités de sauvegarde et de succès propres à Steam. Pour ce qui est d'un jeu publié sur console, il utilisera les fonctionnalités de sauvegarde propres à la console concernée.

De manière générale, nous pouvons dire que chaque plate-forme parle sa propre langue. Or, nous visons à produire un unique jeu adapté à toutes ces plates-formes ! D'une façon ou d'une autre, il est donc nécessaire de parler chacune de ces langues, ce qui demande beaucoup de temps à mettre en œuvre.

Courte bande dessinée illustrant la problématique de communication avec des plates-formes variées. Le jeu, représenté sous les traits de Bibi, y demande à un ordinateur Windows de créer une fenêtre mais celui-ci reste sans réaction. Bibi réfléchit, et finit par invoquer une formule CreateWindowA, ce qui fait correctement réagir l'ordinateur Windows, qui crée la fenêtre demandée. Ensuite, Bibi essaie d'invoquer cette même formule auprès d'un ordinateur fonctionnant sous Linux, qui ne comprend pas sa demande.

Comment rendre un jeu adapté à de multiples plates-formes ?

Pour qu'un jeu soit adapté à de multiples plates-formes, il est largement préférable d'y songer très tôt. En effet, il existe des outils tels que SDL2, qui permettent aux développeurs d'utiliser une même langue pour toutes les plates-formes, mais pour ce faire, il faut adopter cette langue commune très tôt, pour éviter d'avoir à en changer en cours de production. De tels outils, qu'on appelle des couches d'abstraction, servent alors d'intermédiaires pour traduire les demandes formulées dans cette langue commune vers la langue spécifique à chaque plate-forme.

Fonctionnement de la communication avec la plate-forme grâce à une couche d'abstraction. On y voit le jeu, toujours représenté sous les traits de Bibi, demandant à nouveau à créer une fenêtre, cette fois-ci à une couche d'abstraction. Cette dernière est alors capable de demander à chaque plate-forme de créer une fenêtre dans la langue de la plate-forme, avec la formule CreateWindowA pour Windows, et la formule wl_egl_window_create pour Linux.

Cela n'est cependant pas toujours suffisant. Bien que les fonctionnalités essentielles à un jeu (graphisme, son, etc.) soient presque toujours proposées par les couches d'abstractions, d'autres fonctionnalités ne sont pas encore proposées ; et dans ces situations, il est souvent nécessaire de mettre la main à la pâte soi-même, c'est-à-dire de créer une nouvelle couche d'abstraction pour la fonctionnalité manquante, en parlant explicitement la langue de chaque plate-forme.

Cela a été notre cas pour certaines fonctionnalités mineures d'Outer Wonders, parmi lesquelles la détection des langues parlées par l'utilisateur, qui est nécessaire pour afficher le jeu automatiquement dans une langue adaptée (ce grâce à quoi, si votre système est en français, le jeu s'affichera automatiquement en français sans aucune action manuelle de votre part !).

Résultat

Nous sommes aujourd'hui en mesure de faire fonctionner Outer Wonders sur de nombreux ordinateurs Windows, y compris ceux sous… Vista. Oui, vous avez bien lu. Voici une capture d'écran du jeu fonctionnant sur un ordinateur de 2007 sous Windows Vista.

Capture d'écran d'un système Windows Vista Service Pack 2 faisant fonctionner Outer Wonders.

Il se trouve en effet que, sur Windows, Outer Wonders parle une langue qui était déjà comprise par Windows Vista (par exemple, le jeu peut utiliser Direct3D 11 pour l'affichage), ce qui le rend compatible avec ce dernier.

Nous avons également œuvré à la prise en charge de Linux. Le travail est toujours en cours, mais nos tests réalisés sur Ubuntu montrent que nous sommes déjà en mesure d'en fournir une prise en charge basique.

Capture d'écran d'un système Ubuntu 20.04 faisant fonctionner Outer Wonders.

Ceci conclut ce billet de blog ! Suivez-nous sur Twitter, Facebook et Instagram pour suivre nos actualités et avoir une nouvelle énigme tous les mercredis ! Suivez aussi notre flux RSS pour être tenus au courant de la publication de nouveaux billets de blog. Un serveur communautaire Discord est également en cours de préparation.

À bientôt !