C’est avec une petite larme à l’œil que j’officialise aujourd’hui l’arrêt du projet YnaEngine après un an de développement presque intensif. Le moins que l’on puisse dire, c’est que ce projet a été très actif. En effet j’ai passé des heures, des jours, des mois à travailler sur ce moteur durant mes pauses de midi, mes weekends et mes vacances. Tout ce travail m’a permis d’avoir un tas de retours positifs. C’est l’heure de tirer un petit bilan constructif et de faire le point sur les prochains projets qui animerons mon temps libre.
Un peu d’histoire
Historiquement j’ai créer mon premier vrai jeu avec XNA lorsque j’ai passé mon BTS (jeu qui n’a pas été présenté au profit d’une application de gestion…) et j’ai eu la chance, encore grâce à XNA de toucher un peu à la Xbox 360. Après une petite période creuse je me suis mis à faire du Flash avec Flixel et j’ai trouvé ça tellement bien que je voulais la même chose en C#, c’est là que Yna est née.
En un an j’ai eu l’occasion de créer un tas de prototypes plus ou moins fun et jouables, ainsi que The Lost Maze, un jeu complet, sortie sur le Windows Store de Windows 8. Mais ça a aussi été l’occasion pour moi de tenter de nouvelles choses en me fixant des petits défis, tel que réécrire un portion de XNA dans un autre langage en un weekend ! Ces petits projets d’un weekend ont ensuite prit plus de place et un nouveau gros projet est née : Atlantis Engine dont j’ai déjà eu l’occasion de parler un peu ici.
Le cas XNA et MonoGame
Malheureusement en 2013 XNA est mort et Microsoft ne fait rien pour arranger les choses. Par exemple sous Windows 8, il est impossible d’exécuter un programme XNA à cause d’un bug dans le système de gestion du stockage, il en résulte un non lancement de l’application. C’est vraiment gênant car on trouve pas mal de jeux reposant sur XNA. A côté de ça le projet MonoGame prend de l’ampleur et devient meilleur de jour en jour, mais il y a toujours des problèmes lorsqu’on l’utilise pleinement. C’est un vrai casse tête, peut être pire que faire du développement web ! L’API publique est bien, c’est celle de XNA, mais le fond est parfois tellement prise de tête qu’il me vient à penser qu’il n’est pas possible de créer un jeu de zéro avec ce Framework. L’équipe du projet met en avant le fait que vous pouvez porter vos jeux existants.. Ok, mais si je veux créer un jeu complet avec pleins d’asset sexy je fais comment ? Si je veux le faire sous Linux je fais comment ? Oui les choses changent et le « sain » générateur de contenu va arriver, mais même quand il sera là, les bugs bas niveau du Framework seront toujours là.. et la lourdeur des fonctionnalités qui ne servent absolument à rien aussi.
La diversité favorise l’apprentissage
Mais ce qui a surtout motivé mon envie d’arrêter ce projet est l’expérience que j’ai acquise en un an sur d’autres projets. Par exemple grâce à de nombreuses ressources et l’étude de nombreuses documentations, j’ai réalisé un petit moteur 3D software, qui m’a permis d’apprendre mais surtout de comprendre vraiment comment devait fonctionner un moteur de rendu. Ça m’a permis de voir que j’ai fais trop d’erreurs dans la partie 3D de Yna dû à une inexpérience dans ce domaine, et pour que tout soit bien il faudrait absolument tout refaire ! Soyons d’accord, la partie 3D fonctionne bien pour faire des choses simples, la preuve avec mon jeu The Lost Maze. Mais si on veux créer un jeu complet avec des fonctionnalités avancés et ne pas se prendre la tête alors Yna est clairement la solution à ne pas utiliser.
Dans le domaine de la 2D j’ai aussi fais de grands progrès avec mon travail sur AtlantisEngine, que ce soit la version JavaScript, C++, C# ou Java (qui est la plus avancée à l’heure actuelle), le fait d’avoir réécris un Framework pseudo bas niveau qui correspondait à mes besoins, m’a fait vraiment progresser. J’ai une très bonne vision bas niveau du « Comment ça fonctionne » et je suis maintenant plus efficace dans certains domaines car je les aient recréé (Le SpriteBatch par exemple).
Il est impossible d’être partout à la fois quand on est seul
J’ai eu l’occasion de travailler avec d’autres personnes sur le projet Yna et ça a été extrêmement enrichissant de coordonner et d’organiser tout ça. Il a fallu apprendre à mettre son ego de côté car il est arrivé que des morceaux de code que j’avais fais aient été simplifiés ou modifiés. Mais il a fallu aussi apprendre à bien communiquer et je pense que nous avons été bon sur ce point. Mais ce projet était ma vision à un moment donné et j’étais seul pour le faire avancer à la différence d’un projet pleinement communautaire. De plus le fait qu’il y ai un rapport direct avec mon prénom (je m’appelle Yannick en vrai) donnait à mon sens un aspect mégalo qui n’était pas bon.
Programmer ne veux pas dire créer un jeu
Passer des soirées à coder des composants en s’imaginant que l’on va les réutiliser plus tard c’est bien et c’est prenant. On commence par exemple avec un contrôleur de caméra tactile, on lui met plein d’options, etc.. mais au final le jeu, cette choses, cette envie qui nous anime, n’avance clairement pas ! Penser dés le début d’une séance de code en se disant « Il faut que tout soit réutilisable dans tout type de jeu et de préférence avec une autre lib que Yna » est une très mauvaise idée (une connerie monumentale en faite). Beaucoup de développeurs utilisent un moteur ou un Framework dans une version donnée et c’est tout, ils ne le mettent pas forcement à jour tout le temps car ça peut être dangereux pour le jeu et ils l’a modifie à leur sauce pour qu’elle réponde au besoin du jeu. Combien de fois mes changements ont cassé mes prototypes et mes jeux en développement ? Combien de temps ai-je passé à repasser sur tous mes fichiers sources pour les mettre à jour ? Oui on ne peux pas coder un moteur pour tout faire et créer un jeu spécifique à côté, enfin si on peut mais c’est très dur.
Mais qu’est ce que c’est créer un jeu finalement ?
Quand on commence à demander sur un forum ou ailleurs ce qu’il faut faire pour créer un jeu, beaucoup vous répondes qu’il faut programmer, programmer et encore programmer et qu’avec l’expérience on arrive à faire des trucs cool. C’est à relativiser car comme je l’ai démontré au dessus, à trop s’enfermer sur ses développements, on fini par ne pas en sortir.
Un jeu c’est avant tout une ambiance, un Gameplay et en général du Level Design et du Sound Design. On ne peux pas partir la tête dans le guidon et coder dans le noir sans rien avoir préparé. Il faut réfléchir à un concept de Gameplay et s’imaginer quelques niveaux afin de ressentir l’ambiance que pourrait dégager le jeu. Au final c’est un exercice très difficile que trop de personne négligent, que j’ai totalement négligé.
Pleine puissance monsieur Sulu !
Ces derniers mois j’ai tenté de participer à deux Jams, la #7dRTS où j’ai réalisé un prototype RTS avec Atlantis.net (le version C# utilisant SDL2) et la 7DFPS (oui la casse est différente et il n’y a pas le hashtag) où j’ai réalisé un prototype jouable de FPS avec Unity3D. Ces petites expériences m’ont clairement montré que je voulais créer des jeux. J’ai beaucoup d’idées, je crois vraiment aux interactions que peuvent avoir le joueur avec le jeu et j’ai vraiment envie de les concrétiser, et ce n’est pas en restant dans les tréfonds d’un code obscure permettant d’afficher de manière optimal une série de sprite que je vais réussir. Ça ne veux pas dire que j’arrête tout ! Bien au contraire ! J’aime le bas niveau, j’aime utiliser des langages différents et ne pas être étiqueté à une techno en particulier (bien que certains pensent que j’ai des actions chez Microsoft) mais je veux créer des jeux avec des ambiances, du Gameplay innovent, du Level Design et pas seulement des prototypes dont je spoil quelques images ou vidéos sur mon Tumblr.
Ainsi je me suis orienté vers Unity 3D que j’ai pu éprouvé en créant un petit FPS pour le 7DFPS. Je dois avouer que ça me plait et j’ai déjà un nouveau projet de jeu dont je ne parlais que si il peut aboutir. A côté de ça je continue le développement du moteur Atlantis car je trouve ça cool et ça me permet d’apprendre beaucoup. A terme je veux créer une version de XNA light en Java, C#, C++ et JavaScript (et peut être python..) avec le moins de dépendances possible, mon travail en cours est partiellement disponible sur Github (partiellement car les version C# et C++ sont privées pour le moment).
Le projet maintenant
Le projet et sa page sont toujours hébergés sur codeplex et le resterons pour toujours, à moins que codeplex mette la clé sous la porte ! Dans ce cas vous pourrez toujours me contacter pour recevoir les sources. Je ne veux en aucun cas détruire et enterrer ce projet car c’est quelque part une partie de moi. Je sais qu’il y a des gens qui l’utilise pour leurs projets et il est impensable de ne pas le laisser publique. Il pourra éventuellement m’arriver de commiter quelques trucs de temps en temps mais ça s’arrêtera là.