mercredi 26 août 2009

Ma "traversée du désert"

Voilà les raisons pour lesquelles j'ai semblé ne pas avoir l'air actif depuis quelques années dans le monde du développement amateur. A la base je voulais expliquer pourquoi j'ai commencé le développement de Easy Animation Editor, mais c'est tellement long que j'en ai fait un billet à part. Ca prend la forme d'une sorte d'autobiographie tellement j'ai des choses à dire, et c'est pour ca que j'ai mis ce titre xD

Si je programme c'est par passion pour les jeux vidéos. J'ai déjà créé quelques jeux (qu'on peut voir sur http://jackamikaz.free.fr/) avec Game Maker. J'ai adoré ce logiciel, je l'ai tourné dans tout les sens pour en extraire chacune de ses fonctionnalités. Il vint un temps où mes ambitions grandissaient de plus en plus, de faire des projets de plus en plus faramineux. C'est là que je me suis rendu compte de plusieurs problèmes :


Je suis une grosse merde en graphismes (cf TCA sur mon site). J'ai un projet que je trimbale dans la tête depuis plusieurs années. J'ai voulu faire quelque chose d'agréable à jouer, avec un gameplay qui me semblerait totalement original. Mon but est là : le gameplay. Mais c'est une idée de jeu de combat. Le personnage a donc beaucoup de mouvements, ce qui implique beaucoup de sprites, étant chacun visuellement compréhensibles. Alors j'ai réfléchi à quelque chose de simpliste vu mon niveau : un personnage tout rond sans bras ni jambes (à la Rayman). Je me suis vite aperçu que ce n'était pas du tout suffisant pour différencier les mouvements du personnage. Alors je me suis tourné vers la modification de sprites. J'ai pris des sprites de Megaman X, et j'ai transformé le robot en une sorte de ninja tout noir, en affinant les jambes et en ajoutant des cheveux. Mais (je suis une grosse merde en graphismes) j'utilisais paint. Cela m'a pris un temps inconsidérable, juste pour faire des actions de mouvements et de sauts. Je me suis mis à programmer un moteur en me servant de ces graphisme. J'étais assez satisfait, mais je devais continuer à perdre mon temps sur des graphismes plus que moyens. De plus, ayant des idées de grandeur, je pensait faire ce jeu online avec possibilité de customization de son personnage. Autant dire qu'avec des sprites de cette qualité, c'était peine perdue.

Alors j'ai décidé de faire quelque chose de plus "vectoriel". En restant en 2D, j'ai programmé un éditeur de personnage squeletique constitués de plusieurs points qui sont les articulations. En déplacant les points, cela formait plusieurs positions, qui donnait des animations. Ensuite, entre chaque points, j'affichait un membre : une jambe, un bras, la tête ... Ca donnait quelque chose d'un peu carré, mais l'image était unique et les animations faciles à réaliser. Ca m'a fait un gain de temps considérable dans l'édition des graphismes. J'étais sur la bonne voie.

Seulement, dans la foulée, Game Maker avait sortit la possibilité d'utiliser la 3D. Je me suis dit que j'allait faire un Gameplay 2D, avec le personnage en 2D, tout en gardant des décors en 3D, c'était pas le plus joli, mais pour moi c'était un résultat extraordinaire compte tenu de mes capacités à faire des graphismes en 2D. Mais c'est là que tout se complique. Pour avoir ce résultat, je me retrouve dans les méandres de Game Maker et je bidouille énormément pour obtenir mes résultat. Du coup mon code est pas franchement clair et c'est dur de s'y retrouver. En plus, quand je fais tester le jeu à d'autres gens, des problèmes de compatibilité apparaissent. Rien de plus décourageant, sachant que ce logiciel est sensé marcher de façon égale sur toutes les machines. Alors j'ai recherché à taton des subtilités d'une machine à l'autre sans avoir une seule idée d'où cela peut venir. De plus quand l'autre machine est celle d'un correspondant internet qui n'a pas la version enregistrée de Game Maker (qui ne peut donc pas compiler le projet) ca fait que je dois renvoyer le projet à chaque fois ... Au bout de deux essais c'est l'abandon et l'espoir que ce problème ne soit que particulier.

Il a aussi le fait que l'animation des personnages, bien que beaucoup plus rapide, réduisait énormément l'intérêt de Game Maker, qui est de concentrer le développement d'un jeu vidéo en un seul logiciel, avec sprites et niveaux intégres etc; parce que mon système d'animation utilisait des fichiers textes externes. Game Maker permet l'utilisation de tels fichiers, mais n'est totalement pas adapté pour. Tout doit se faire par code, et le code c'est deux endroits possible seulement : les objets ou les scripts. Les animations étant spécifiques aux personnages, et n'ayant pas encore totalement l'intérêt des scripts à l'époque, j'ai choisi de le metre dans les objets. La lisiblité était donc beaucoup diminuée, à nouveau. Suite à tout ces problèmes, j'ai fini par abandonner ce jeu ...

La raison ultime qui me fit décrocher de Game Maker est le C++ !
En effet, j'étais en train de le découvrir et de l'aprendre par moi-même, et j'avais un autre projet original en tête sur Game Maker : Bactérie (cf mon site à nouveau). Dans la description, j'explique que j'ai abandonné ce jeu à cause d'un bug de Game Maker. En réalité j'ai dit ca pour faire simple, ce n'est pas vraiment un bug, mais un problème de performances. Au bout d'un certain de jeu, il y a plus d'une centaine de bactéries sur le terrain, et toutes doivent éviter d'avoir une colision avec une autre. Cela fait donc 100 x 100 = 1000 colisions à gérer à raison de 30 fois par secondes. Le tout en GML qui est un langage script interprété à partir de fichiers, donc non compilé. Le résultat est là : ca rame. Et C++, est plus proche du langage machine, donc plus performant. Ceci me décida à me concentrer davantage sur ce langage, entrainant un abandon progressif de Game Maker.

Me voilà donc à utiliser C++. Mais forcément, c'est beaucoup moins intuitif que Game Maker, et cela demande une réflexion plus intense pour la création de jeux. Au fur et à mesure que je progressais dans ce langage, je me suis rendu compte de plus en plus de la complexité de création d'un jeu. Mes idées de projet sont les mêmes, mais à chaque fois je me dis que je ne suis pas encore prêt. Deux ou trois fois, j'essaie quand même. Et bien croyez moi, c'est ce qu'il faut faire! Essayer! De cette façon j'ai entamé deux gros projets personnels. Le premier c'est Bactérie 2, avec un gameplay mieux pensé. Mais c'est la première chose sur laquelle je me suis lancé, et je n'était pas encore tout à fait prêt pour le réussir. Ca a donné quelque chose de peu exploitable, mais j'ai appris plus en quelques jours seul là dessus qu'en deux ans d'IUT informatique (je savais tout avant tout le monde là bas d'ailleurs, j'ai même tendance à m'en vanter et j'ai certainement du vexer beaucoup de gens). Le deuxième gros projet, c'était il y a 5 mois, lors de mon stage en Nouvelle Zélande ( huhuh =D ). Evidemment le stage lui même m'a beaucoup appris, mais j'étais arrivé tout seul là bas. En bon geek, je me suis peu socialisé, et j'ai passé beaucoup de mon temps libre à tenter la création d'un moteur 3D. Le résultat, une maîtrise accrue du C++, et un moteur ... plus un moteur de jeu tout cour que de 3D.

Avec cette expérience, maintenant je me sens prêt pour me remettre à des projets de jeux. Seul blocage, comme je l'ai expliqué : les graphismes. Ce qui nous amène à la note suivante : Easy Animation Editor.

2 commentaires:

  1. Courage, a force de tentatives on arrive bien à sortir un jeu :)
    Je suis curieux de voir tes sprites retouchés et quelques screen de tes soft.

    Pour bactérie, je savais pas que le pb venait des collisions, t'as essayé de partitionner l'espace ? (avec une simple grille ou un quadtree, tu passe de n^n tests à un truc du genre log(n).

    (t'as vu juste, vacances -> plus de résaux sociaux ou msn =D et mon blog est en galère d'hébergeur pour le moment, pause forcée :/)

    RépondreSupprimer
  2. Merci cher Noopyks :) pour les sprites retouches, a la base j'aurai bien aime les montrer aussi mais ils se trouvent sur un disque dur un peu oublie donc sur le moment je n'ai rien mis. J'essaierai de retrouver tout ça et je mettrais la note a jour.

    Sinon, le partitionnement de l'espace oui c'est une tres bonne idée, mais en C++ :P . Alors que sur Game Maker, ça implique de devoir bidouiller pour contourner le système de colisions déjà existant, en GML et tout donc ça donnerais quelque chose de pas propre et dur a maintenir... Alors qu'en C++ tu gère le truc directement.

    RépondreSupprimer