La Release !
Et ça y est ! Avec la fin de la jam, la dernière version est enfin sortie ! C'est l'occasion de revenir sur ces deux semaines de développement, et de faire un premier bilan.
Et commençons par enfoncer les portes ouvertes : Il est loin d'être terminé... Comprendre qu'il y a tant de choses que j'aurais aimé voir dans ce jeu avant la fin de la jam...
J'aurais aimé avoir plus d'armes, j'aurais aimé améliorer le comportement des IA quand elles se croisent, j'aurais aimé corriger les quelques bugs qui resent encore... Mais c'est ainsi, il y a une date limite (et c'est très bien finalement, car sinon ça s'éterniserait !). La gestion du temps est d'ailleurs essentielle, et c'est là ma principale réussite: avoir pu créer un planning, et m'y tenir tout du long !
On avait à disposition 2 semaines et demie. Voilà comment je les ai réparties :
1) 4 jours pour poser les prémisses du prototype du prototype. Histoire de vérifier que tout est faisable
2) 1 semaine pour développer le prototype complet, et les premiers assets (sous forme de place holder)
3) 1 semaine pour le polish: Créer les assets finales, équilibrer le jeu, corriger les bugs, etc...
Le concept
Mais revenons au tout début de la jam, à l'annonce du thème: Rebonds & Collisions. En fait, ce n'est pas du tout évident, car les collisions sont présents dans absolument tous les jeux. Il reste donc à trouve un gameplay mettant en avant des rebonds. Et c'est finalement le plus difficile ! Avoir une bonne idée...
Je voulais un jeu avec un peu d'action, ma première idée était une sorte d'arène, avec des sphères représentant les joueurs (ou IA) et le but serait de faire tomber les autres de l'arène. Mais ça semblait impraticable en réalité . Après un rapide test, si toutes les sphères ont la même "force", elle vont juste s'immobiliser... Donc j'ai imaginé des armes que l'ont pourait utiliser pour se donner un avantage, et des obstacle à éviter, le tout interagissant dans des rebonds.
Encore faut il savoir comment obtenir les armes... Est-ce qu'elle sont déjà existantes sur la map ? Si oui, on va surtout avoir une ruée dès le départ sur les armes. Doivent elles êtres lachées au hasard ? Le résultat de la partie pourait être du à l'alétaoire...
Non, il falait quelque chose de prédictibe, mais qui dépende du choix du joueur : la construction ! Trouver des ressources, construire, s'armer, et se battre ! Et là, ce concept m'a fait pensé à un similaire sorti sur PS1 : Team Buddies ( j'ai fais exactement les même caisses de ressources, pour le clin d'oeil ;)
Voilà les 4 premières jours de passés, et un bon concept en poche !
Première semaine : Développement du coeur du jeu
Pour le développement, il est important d'aller à l'essentiel. Certes, j'avais en tête plein d'armes ! Revolver, mitrailleuse, grenade, etc... Mais le plus important, est d'avoir le mimum jouable dans chaque partie : déplacement, construction, combat et IA.
Rapidement, je pose les bases du déplacement avec: un sol, quelques murs, et les scripts de déplacement. Je rajoute le code servant à orienter le joueur dans la direction vers laquelle il veut aller ( une simple interpolation de rotation).
Ensuite je travail les bases des caisses de construction. Je tweak rapidement la physique, et code ses interactions. Il s'agit de pouvoir activer / désactiver collision et physique à partir du moment où un personnage prend la caisse dans ses main, ou bien qu'elle soit au sol. Avec un peu de code pour la détection de positionnement, je peux aligner 4 caisses sur ma plateforme de construction.
Pour l'arme c'est à peu prêt la même chose, sauf que je lui rajoute du code pour pouvoir tirer, avec un compteur de munition. j'en profite pour faire le code des balles et des collisions et rebonds dans la foulée.
Enfin, je réalise les animations des personages en fonction des actions possible : marche, porter une caisse, tirer, ne rien faire.
A ce stade, je peux dans ma scène de test : prendre des caisses, les poser sur la plateforme de construction, prendre des armes, tirer, blésser un autre personnage et le tuer. Mais sans adversaire, c'est plutôt limités... Pour l'IA, ça tombe bien, je travaillais depuis 2 semaine sur un système de planification d'action avec un algorithme A* ( oui ! le même que pour le pathfinding !). C'est l'occasion de voir ce qu'il a dans le ventre ! C'est le seul code que j'ai réutilisé d'un autre de mes projets, alors forcément, ça m'a fait gagner beaucoup de temps.
En quelques minutes, mon IA est capable de prendre une arme au sol et de me tirer dessus.
Il reste alors la partie construction. J'ai codé ça par un système de pattern : des tableaux ne contenant que des 0 ou de 1 permettant de définir un "plan de construction". Puis je dévelope une fonction qui permet de trouver le pattern actuelement formé par les caisses. Il me suffit alors de chercher dans ma liste de pattern prédéfinie, lequel correspond au pattern actuel. Dès que c'est fait, je sais quel objet construire ! Je rajoute donc ainsi la possibilité de créer un autre bot, ou une arme.
Puis je rajoute les actions adéquates à mon IA pour qu'elle puisse aussi construire.
Après une semaine de développement, j'ai sur la map de test des IA qui construisent d'autres IA, et qui se battent quand elle le peuvent. Mon petit monde prend vie, et c'est fantastique !
Deuxième semaine : Game Design, Debug & premiers retours
Première chose à faire : le level design.
Il s'agit de placer les différentes mécaniques développés la semaine précédente de façon à créer un tout équilibré. J'agrandis la map, et je rajoute des obstacles, à peu près symétrique, pour ne pas donner d'avantage à l'une ou l'autre équipe.
La source des matérieux de construction est unique, et au centre de la map, de façon à forcer l'interaction entre les équipes. Pour casser la monotonie, je crée un deuxième accès, à la distance similaire, à l'aide d'un pont. Le placement doit être minutieux, car l'IA prenant toujours le chemin le plus cours à tendance à toujours privilégier le même choix. Et il donc important qu'un simple changement (un combat, une caisse déplacée...) crée suffisament d'aléatoire pour rendre un autre chemin plus intéréssant.
L'équilibrage est bon, et je rajoute une troisième équipe !
Je commence rapidement par faire de nouvaux assets : un vrai pont, des arbres, des montages. A ce stade, les polygones ne sont pas texturés, et sont simplement colorés, mais le rendu prend forme.
Je compose une première ébauche de la musique, et réalise les bruitages avec le micro de mon smartphone et ce que j'ai sous la main ( dont un sachet de bonbon !)
L'ensemble est correct, et je publie une première version ! Les retours sont bon, mais confus... Difficile de comprendre comment agir. Ce n'était pas prévu, mais j'ai besoin de faire un tutoriel.
Le découpage des différentes parties durant le développement me permet de créer facilement une nouvelle scène, avec uniquement certains éléments, tweaké spécifiquement. Je crée ensuite une petite machine à état pour passer d'une étape à l'autre, et code les différentes actions pour passer d'une étape à l'autre. Enfin, je rajoute du texte, et un petit système de notification.
On me signale aussi qu'on ne voit pas quand on touche un ennemis, et qu'ils sont trop long à tuer. Je rajoute donc une animation signalant visuelement qu'il prend des dégats. Je rajoute aussi un émeteur de particule à usage unique quand une pillule meurt pour la voir exploser. Mais rajouter des dégats crée trop de déséquilibre : on arrive à tuer les ennemis avant qu'ils ne s'équipent. Je reviens donc aux valeurs initiales, mais rajoute une barre de vie qui permet de supprimer la frustration de ne pas voir une pillule éclater après lui avoir tiré plusieurs fois dessus.
Le contrôle à la manette est beaucoup trop difficile. En particulier pour la visée. Je passe donc quelques heures en plus à créer un aimbot : encore un peu de math en perspective... Mais cette nouvelle feature n'est pas perdue pour tous le monde : j'en fait profiter toutes les IA, qui tirent maintenant avec plus de précision ;)
Dernier week end : Polish et encore du Debug
Cette fois, c'est la dernière ligne droite ! On sort la tablette graphique, et on fait les textures : le sol, l'herbe, le pont, les rocher, les arbres. Je dessine également les particules : les morceaux de pillule lors de l'explosion, le coeur pour la vie, une balle de pistolet pour les munitions. Et évidement, je dessine une petite barre de vie.
Je modifie la musique, dont la ligne de basse ne me plait franchement pas. Je ne suis pas un grand compositeur... mais l'ensemble me satisfait un peu plus.
Et on joue, on test, on rejoue, on retest, encore et encore... Jusqu'à ce qu'il ne reste plus aucun bug de facheux.
Malheureusement, il en reste... Comme le fait que parfois les pilullent restent bloqués, car elles ne savent pas contourner un objet (comme une autre pillule). Il y a aussi un bug d'IA qui fait qu'un bot peut se retrouver sans rien faire.... Ou encore ce bug où l'IA tire sur un ennemi qu'il ne peut atteindre (derrière un obstacle).
C'est rageant, mais la fin de la jam est là, et je n'ai plus le temps de tout corriger. Les bug principaux (les crash, les actions inopérantes) ont toutes été corrigées, et c'est le principal. Pour le reste, et bien ça reste une jam après tout, rien n'est parfait...
Alea jacta est Kill Pill est publié !
Ma conclusion
Kill Pill est mon deuxième jeu (après TankMania 2). Mais c'est un plus rand défi que je termine : celui de tout réaliser moi même ! Aucun asset externe, quel qu'il soit, n'a été utilisé !
Il y a tant de choses que j'aimerais pour un tel jeu (dont le multijoueur !), mais il faut savoir se limiter pour une jam. Le contenu est déjà conséquent !
Ca a été pour moi une superbe occasion de mettre à profit l'ensemble de mes compétences, et de pouvoir réelement faire du Game Design. C'est un domaine essentiel, et qui est trop souvent occulté derrière la technique. En arrivant à développer les fonctionnalités principales dans la moitiée du temps imparti, j'ai pu consacré un temps conséquent au Game Design !
Il est également très important de publier très tôt une première version, pour avoir des retours sur le Game Design. C'est la partie la plus importante d'un jeu ! S'il n'est pas amusant, et bien ce n'est tout simplement pas un jeu...
Au final, j'espère que ce petit jeu saura retenir une petite dizaine de minutes de votre temps.
En vous remerciant de m'avoir lu,
Bon Code
Salut !
Leave a comment
Log in with itch.io to leave a comment.