C’est durant le week-end du 23 au 25 Mars 2012 que c’est déroulée à l’atelier des médias de Lyon la Game Dev Party #2, un événement où le but était de créer un jeu vidéo en 48h ! En fait 26h pour être précis, car de minuit à 8h du matin les locaux étaient fermés et nous avons arrêté de travailler à 16h le dimanche. Il n’y avait pas de thème précis, la seule contrainte à été de créer un jeu avec les technologies web, cela pouvait donc être du Flash, Unity3D ou le duo très plébiscité actuellement, HTML5 JavaScript. Le top départ a été donné le vendredi à 19h où ceux qui avaient des idées les ont présentées aux participants. Après une phase de vote les équipes se sont faites et les gens sont partis pour commencer cette fantastique aventure. J’ai moi-même présenté un projet, un peu à l’arrache en fait mais j’y croyais dur comme fer ! Un mélange entre Tamagoshi et RPG où le but aurait été de dresser un petit monstre comme on le fait avec un Tamagoshi (en fait je pensais surtout à Pokémon) puis de le faire combattre façon RPG contre l’ordinateur et pourquoi pas contre d’autres joueurs ! 12 projets (avec le mien) ont été présentés et il y avait des projets vraiment cool, du coup je n’ai pas trop été vendre mon idée et j’ai plutôt été chercher une équipe. Côté équipe ça tombait bien, un développeur que j’avais rencontré sur Google+, Alex, présentait un projet qui allait être sélectionné, je lui ai donc proposé mon aide et nous sommes alors partis sur un jeu de type shooter dans l’univers de la cuisine ! Alex a réussi à trouver 2 graphistes très talentueux ainsi qu’une autre personne, une fille (oui il n’y a pas que des mecs dans ce domaine et heureusement), qui portait la double casquette programmeuse/graphiste !
Le vendredi soir
La première chose que nous avons faite a été de manger, ça n’a l’air de rien comme ça mais il faut être bien prêt avant de s’attaquer à un projet comme celui-ci ! Nous avons trouvé un nom grâce à des bruits de bouche, ainsi est né « Ram Neum Neum« . Ensuite on a tous parlé ensemble pour savoir quoi faire et comment le faire, suite à ça les questions suivantes sont apparues :
- Quel est notre vrai niveau ?
- Que peut-on réaliser avec notre niveau ?
- En 2 jours qu’est ce qui est faisable ?
Après cette phase de réflexion nous avons commencé d’écrire quelques petites notes, des idées en réalité, puis vers 21h tout le monde s’est mis au travail, Kevin l’illustrateur a commencé de faire des dessins de ce qui serait le lendemain des Sprites, Thomas lui de son côté a commencé à penser à l’interface graphique, Agnès a aussi commencé à se pencher sur le côté graphique enfin Alex et moi avons commencé à programmer comme des barbares ! En fait nous voulions absolument partir avec un squelette de base et quelque chose à l’écran ! Un dépôt SVN a été mis en place sur Google Code très rapidement afin de stocker le code et travailler correctement en équipe.
Côté technologies nous sommes partis sur du JavaScript avec la bibliothèque JawsJS (que nous n’arrivions pas à prononcer mais juste à épeler x] ) et un rendu via la balise canvas introduite par HTML5. Vu que je connaissais déjà un peu JawsJS et que j’avais déjà réalisé quelques trucs avec, la conception a été très rapide ; j’avais d’ailleurs parlé à Alex de cette lib et il l’avait essayée peu de temps avant, il était donc lui aussi d’attaque. En 2 heures nous avions déjà 2 écrans visibles : le menu et le plateau de jeu. Alors oui bien entendu le plateau de jeu c’était un écran noir avec un carré et un png qui se déplaçait au clavier mais c’était déjà ça 😉 Nous avons mis en place dès le début une structure assez propre (j’en suis très fier) découpée en plusieurs classes permettant d’accéder à de nombreux helpers et autres objets/variables statiques. Cette souplesse nous a permis de pouvoir régler le jeu assez facilement à la fin du développement car vous imaginez bien que des valeurs entrées en dur dans le code ce n’est pas très cool pour faire des affinages par la suite.
Le samedi : SVN ne nous aime pas !
Premier arrivé le samedi je commence à coder (il était 8h10) et puis Alex et les autres sont arrivés, nous nous sommes tous mis au boulot et nous avons bien avancé le matin. A midi j’étais bloqué sur un problème de collision tandis que Alex se cassait la tête sur de la trigonométrie. Heureusement, nous étions une équipe équilibrée et Agnès qui portait la double casquette Dev/Graphiste est venue à la rescousse dans nos problèmes mathématiques 😛 Thomas et Kevin ont commencé de nous donner quelques ressources graphiques et le jeu passait d’un stade d’écran noir avec des carrés rouges à un écran jaune avec des personnages et… des carrés rouges !
Après une longue pause de 1h15 pour manger, nous nous sommes remis à travailler et c’est là que les problèmes ont commencé… Alex avait fait beaucoup de modifications sur le code et moi aussi, il fallait absolument qu’un de nous fasse un svn update puis un merge de code pour ensuite recommiter le tout pour que le code soit synchronisé mais là… le serveur SVN sur Google Code lâche ! D’ailleurs c’est assez marrant car le bug tracker sur google code était blindé de gens qui avaient le même problème, il suffisait limite de faire F5 pour voir un nouveau poste.. Du coup nous avons tenté Codeplex, que je connais bien mais là pas de chance non plus car SVN n’est pas recommandé et nous n’avons pas pu créer de dépôt. Je pensais que SourceForge serait l’ultime solution et là aussi pas moyen de créer un projet ! Mais qu’est ce qui se passe ?? On nous en veut ? Alors nous sommes passés sur Github. Le problème est qu’Alex ne connaissait pas trop Git et il faut le dire, passer de Git à SVN ça ne se fait pas comme ça et c’est potentiellement une perte de temps surtout quand on est sous Windows. Mais nous y sommes passés, puis après un pause clope et l’interview d’un organisateur de l’événement pour connaître nos avancés, nous sommes passé sur Assembla.
Inutile de vous dire à quel point nous étions frustrés d’avoir perdu toute notre avance sur un problème aussi merdique. Après une petite balade dans Lyon pour trouver de quoi manger et presque 30 minutes d’attente à la caisse d’un Monoprix, nous nous sommes remis à coder et à tenter de rattraper notre retard. De mon côté j’avais réglé mes soucis de collisions et j’avais par la même occasion implémenté une fabrique de monstres ainsi qu’un spawneur pour le plateau principal, du coup nous avions plein de monstres à l’écran. Le temps est passé très vite, trop vite et nous sommes tous rentrés chez nous vers minuit. Ah oui c’est aussi samedi soir que nous avons commencé d’enregistrer les sons du jeu, à la bouche 😀 Je n’ai pas participé à cet exercice, trop absorbé par mon code 😛
Le dimanche : Animation je t’aurais !
J’ai bossé tout le matin sur du refactoring afin d’avoir des animations de Sprite potables mais j’ai eu beaucoup de problèmes avec JawsJS et les planches de Sprites. Après avoir réécrit totalement ma classe Enemy et ma fabrique je laisse tomber avec un rollback complet.. J’avais le moral pété et il fallait que je prenne l’air. Du coup je suis parti faire les courses et après manger je me suis remis à coder et là, magie j’avais mes animations qui fonctionnaient bien ! Alors on nous n’avons pas eu le temps de tout mettre en place mais on avait à 14h un jeu qui ressemblait vraiment à un jeu, avec des menus, un but à réaliser pour changer de niveau, des niveaux ! En fait nous avions tellement d’avance qu’un des organisateurs nous a demandé un coup de main pour monter des affaires.
On avait de l’avance certes… mais nous avions un gros problème de performance sur Mac OsX et sur les navigateurs web autres que Firefox. En fait le jeu était injouable sur Mac, alors notre chère Agnès s’est mise à faire du profiling pour voir ce qui pouvait clocher. Il s’avère que les SpriteList de JawsJS sont lentes, très lentes, et qu’utiliser la méthode update() de la liste (qui appelle les méthodes update() de tous les éléments de la collection) est plus lent que de faire une boucle sur chaque élément de la collection pour faire une appel à udpate(), idem pour la méthode draw() (c’est d’ailleurs là que ça coince…). Hélas nous n’avons pas eu le temps d’optimiser le jeu et nous l’avons présenté comme ça… sur mon PC of course 8D
Le jeu a été présenté par Alex où il a pu faire une démo en live et se payer le luxe de finir les 7 niveaux (car le jeu est dur des fois, en fait c’est aléatoire, comme le spawn, comme un peu tout ^_^). Il était tellement emballé qu’il n’a pas montré le partage Facebook et Twitter à la fin, mais en même temps cette fonctionnalité a été ajoutée à la toute fin (genre vers 15h30 !).
Les autres participants ont montré leurs productions et franchement il y avait vraiment du level comme on dit 😀 Je suis vraiment épaté par toutes les réalisations.
Et pour finir
Ça m’a vraiment fait du bien de pouvoir écrire ce petit article sur ce fantastique évènement qui s’est offert à moi. Si vous avez l’occasion de participer à un challenge de ce type n’hésitez pas, car c’est vraiment très bon, on rencontre des passionnés, on apprend beaucoup sur le métier mais aussi sur soi et comment travailler dans une équipe totalement hétérogène (dans le sens où il n’y a pas que des développeurs, mais des graphistes, des musiciens, des gamedesigner, etc..). Alors par contre c’est dur de revenir à la réalité après car on passe 2 jours de folie et on a qu’une envie : recommencer !
Vous savez la Team Boccuz n’est pas morte, nous continuons de faire évoluer le jeu, Alex par exemple a commencé un port en Java avec Slick, Agnès veut forker JawsJS pour corriger les problèmes de vitesse, Kevin va nous envoyer de nouveaux fonds pour les prochains niveaux et Thomas nous a déjà envoyé de nouveau éléments d’interface et des modifications CSS ! Pour ma part j’ai commencé un port vers Flash avec Flixel, et j’ai déjà fait quelques petites retouches sur le code.
Mais au fait je ne vous ai même pas donné le lien pour essayer le jeu ! Ni même l’adresse du dépôt Github !
- Jouer à Ram Neum Neum *
- Le dépôt sur Github du projet (LGPLv2)
- Mes photos & vidéos
- Le blog officiel de la Game Dev Party
- L’album photo Flickr
Je vais aller me reposer un peu maintenant et tenter de prendre un peu de recule sur cet événement afin de revenir en forme avec toujours plus de fougue. Encore bravo à tous pour ce fantastique Weekend #GameDev.
* Navigateur récent requis : si vous êtes sous Mac utilisez Opera-Next, Firefox Nightly ou Chrome Canary.