Read the english version of this post.
Alors que la Mark I est sur le point de sortir, il est temps de parler de la suite du développement du jeu et les prochaines releases, et plus particulièrement des cockpits.
Ceci est mon premier vrai post technique et explicatif sur un élément du jeu, tout n’est peut être pas très clair. Nous allons vraiment essayer de faire de temps en temps un article sur les futures améliorations et ajouts de contenus. Comme nous vendons un jeu en accès anticipé, je pense qu’il est important que les acheteurs sachent ce qui va arriver ensuite.
Dans la Mark I, seul l’avion de Marcel Gaston, le “Rorqual” dispose d’un cockpit, ici en image:
Comme on peut le voir, il y a plusieurs instruments de modélisés, et lorsque j’ai conçu le système de cockpit initialement je me suis dit: “allez, c’est un jeu arcade, tous les cockpits des différents avions utiliseront les mêmes instruments, ça sera plus simple.”
Sauf qu’aujourd’hui je suis en train de faire un autre cockpit, pour un autre avion. Et je n’ai pas envie d’utiliser les mêmes instruments.
Pour expliquer un peu le système de cockpits comme il était initialement, cela se passait en plusieurs étapes.
- Les instruments sont modélisés dans un logiciel de 3D
- Idem pour le reste du cockpit
- Les instruments sont placés dans le cockpit, toujours dans le logiciel de 3D.
- Un script d’export permet de générer un fichier .gauge qui contient la liste des instruments et leur position.
Le fichier .gauge ressemblait alors à ceci:
Prenons comme exemple la ligne :
RPM 1 [0.366772,0.0351799,4.15318]
Cela signifie que l’on va placer dans le cockpit un compte tour (RPM) à la position spécifiée entre les crochets. Le numéro après le type d’instrument, ici “1”, signifie que le compte tour concerne le moteur “1”.
Tout ceci c’est pas mal, mais déjà une limitation apparaît: si je fais un nouveau cockpit et que je veux placer un instrument, mais orienté d’une certaine manière dans le cockpit, je ne peux pas: l’orientation n’est pas incluse dans le fichier .gauge.
J’ai donc modifié le script d’export pour inclure l’orientation sous la forme d’un quaternion.
L’exemple n’est pas très probant, vu que pour ce cockpit aucun instrument n’est orienté. Mais cela permet à terme de placer vraiment n’importe quel instrument, n’importe où, et orienté n’importe comment.
Mais au fait, et si on ne veut pas utiliser les mêmes instruments pour tous les cockpits, comment on fait? C’est bien beau d’avoir des cockpits, mais si ils se ressemblent tous, c’est tout de même moins intéressant.
C’est là qu’intervient la plus grosse modification que j’ai du faire. Initialement, chaque instrument était codé en C++, avec sa petite classe à lui. Par exemple, la classe pour l’altimètre:
C’est super le C++ mais cela veut dire que si je veux rajouter un type d’instrument ou juste utiliser un instrument avec un look particulier, je dois soit rajouter une classe ou alors exposer tout plein de paramètres sur une classe existante.
Un cas typique est la manette des gaz: sur certains avions elle tourne autour d’un axe, et sur d’autres elle peut coulisser. Comment faire? Ajouter un paramètre pour savoir si c’est une manette tournante ou coulissante? Et pour la course, on fait pareil? Rajouter des paramètres dans tous les sens, avoir un code c++ générique mais horriblement long et compliqué ? Et le modding ? Comment ça se passe pour le modding ?
Autre exemple: l’avion de Marcel Gaston a des instruments en unités internationales classiques, c’est à dire en mètres. Si jamais je veux faire un nouveau cockpit avec des instruments en pieds, je suis foutu.
Définitivement, cela n’est pas la bonne solution.
Notre moteur maison offre l’avantage de pouvoir scripter en lua. Nous n’avons jusqu’à maintenant pas développé énormément de choses en lua, privilégiant le c++. Utilisons le script pour coder les instruments ! Comme ça si un jour quelqu’un rajoute un cockpit dans le jeu, il pourra faire virtuellement tout ce qu’il veut.
En gros dorénavant une ligne du fichier .gauge exporté se présente de la sorte:
defaultAltitude 0 [-0.013462,-0.05001,4.15774] [0.0,0.0,0.0,1.0]
defaultAltitude signifie que l’instrument utilise le fichier de script defaultAltitude.lua pour définir son comportement.
Lequel fichier ressemble à ça:
Le code est sensiblement le même, mais les possibilités totalement différentes. Ainsi, pour chaque nouveau cockpit réalisé, il sera beaucoup plus simple de rajouter un instrument spécifique ou ayant juste un look différent.
Pour les éventuels futurs moddeurs, c’est un énorme plus, cela permet de ne pas être contraint par la liste des instruments que les développeurs ( nous ) ont fixé.
Pour conclure cet article, voici un rendu du nouveau cockpit en WIP. Vous remarquerez que les instruments sont pour le moment les mêmes que sur le “Rorqual”, mais vous vous doutez bien que tout ce dont je viens de parler n’a pas été fait pour rien 😉