Il nous reste moins d'un mois pour finir la démo donc pas de temps à perdre : voici la troisième semaine de notre compte-rendu sur le développement de la démo Seasons pour le Festival du Jeu Vidéo !

Côté programmation

Vibrations

Comme nous n'aurons pas de partie sonore dans la démo présentée à Paris en Septembre (c'était prévu comme ça, mais oui ça craint), on s'est dit qu'il fallait trouver un autre moyen de donner des feedbacks au joueur.
J'ai donc pensé qu'intégrer le support des vibrations de la manette (XBox) ne serait pas un mal.

Nous avons 2 types de vibrations possible :

- Les vibrations générées grâce à du code moteur. Le tout relié à la machine à états du renard pour savoir quand les déclencher. Par exemple, si le renard fait une chute plus ou moins haute, on déclenche une vibration plus ou moins longue de la manette.

On trouve ci-dessous un schéma partiel de la machine à états finie (FMS/Finite State Machine) qui gère les mouvements et animations du renard. Le point noir indique l'état initial du renard (en l'occurrence ici "Standing", soit immobile). Les divers états sont représentés par des rectangles aux coins arrondis. Les flèches entre les états sont des transitions et elles ne sont valides que si la condition textuelle attachée est valide.
Le commentaire en forme de post-it indique l'endroit où nous intercallons la gestion des vibrations dans le cas d'une chute.


Machine à états finie partielle

- Les vibrations animées

Quand nous animons des objets, on aimerait parfois associer des vibrations à certains moments de l'animation. Au lieu de gérer ces vibrations avec du code côté moteur, j'ai décidé de réutiliser les bons vieux Path intégrés la semaine dernière pour y raccorder les vibrations.
Un exemple valant mieux qu'un long discours, on trouve ci-dessous une scène mettant en avant l'animation d'un objet rouge qui tombe sur le côté (oui, j'aime bien faire des scènes abstraites de programmeur), illustrant l'utilisation des "vibrations animées" :


Vibration et animation

Les vibrations ne sont cependant pas jouées automatiquement avec l'animation. C'est un script qui autorise ou non les vibrations de se jouer. Car si d'autres vibrations plus importantes sont en cours de diffusion par d'autres objets (objets qui peuvent être plus proches du renard, par exemple), alors on doit annuler ou atténuer les potentielles nouvelles vibrations.

Secousses caméra

Pour accompagner les vibrations, j'ai implémenté un système de secousses très simple se résumant à secouer la caméra en X et Y selon une amplitude, une atténuation et une durée. Ces secousses sont accessibles depuis les scripts et peuvent être déclenchées, par exemple, lorsque la manette se met à vibrer au delà d'une limite, ou lors d'un évènement tout autre.
Pour l'instant, je n'ai pas relié les fameux Paths aux secousses caméra, mais peut-être en aurons nous besoin plus tard.

Script gameplay

J'ai passé la majeure partie de la semaine à implémenter des scripts pour donner vie aux objets (animés pour la plupart) conçus par William. J'ai aussi fait quelques scripts génériques pour d'autres objets qui seront créés sous peu (j'ai donc pu exprimer ma créativité en terme de conception de niveau à base d'objets carrés et rouges).

Je ne voudrais pas spoiler trop le contenu de la démo, alors je vais me contenter de 4 captures d'écrans non commentées issues de quelques scripts implémentés cette semaine. A vous de deviner de quoi il s'agit.


Divers scripts gameplay

Côté LD/GD/ART

Cette semaine a été dédié au travail d'animation.
Je me répète, mais comme je ne suis pas très bon dessinateur il est parfois frustrant pour moi de ne dessiner que ce que je peux et non ce que je veux. En animation, pourtant, j'ai l'impression de pouvoir créer ce qui me plait (avec du temps) et du coup j'aime beaucoup animer des trucs et des machins. L'avantage de notre "direction artistique" à base d'aplats de couleur, c'est qu'en cas de difficultés je peux un peu m'arranger comme je veux et tricher sur les formes que j'anime.

J'ai principalement travaillé sur 4 éléments de décors intéractifs : un arbre qui tombe, un arbre penché, un arbre qui pousse et une structure plus humaine dont je ne peux vous expliquer le fonctionnement exact sans vous spoiler une partie de la démo. Ceci dit, ce n'est pas trop difficile de deviner quelle est cet élément de décor, n'est-ce pas ?


Que de mystère !

L'arbre qui pousse étant le plus intéressant des 3 arbres cités plus haut, c'est de lui que je vais vous parler plus en détails.

Peut-être avez-vous déjà vu un arbre qui pousse dans une de nos vidéos précédemment postées : le bac à sable du programmeur.
A l'origine, cet arbre a été conçu pour notre renard précédent qui était plus grand et surtout qui sauter plus haut que le petit renard actuel. La branche de cet arbre était à 3 mètres du sol, et notre petit renard ne saute qu'àune hauteur d'1,5 mètre.

Ma pemière idée était de prendre l'arbre déjà existant, avec une seule branche, et de placer un rocher en dessous de sorte que le renard puisse sauter sur le rocher et atteindre ensuite la branche. Le soucis, c'est que le joueur peut planter et faire pousser ce type d'arbre, et placer un rocher près de chaque zone où le joueur peut faire pousser un arbre ne serait franchement pas subtil...

La deuxième idée aurait pu être, toujours avec le même arbre, de deplacer la branche vers le bas, mais alors le résultat esthétique ne serait pas naturel. De plus, je commence à détester de plus en plus l'aspect de cet arbre, bien trop simple et trop carré.

Au final, donc, la meilleur chose à faire était de créer un nouvel arbre, avec deux branches et des lignes plus organiques. La démo ne possédera qu'un type d'arbre à faire pousser mais il y en aura plusieurs dans le jeu final, bien entendu.


Tailles d'arbres et hauteurs de branches

Nous n'avons pas le temps de vous faire une vidéo des éléments animés, désolé.
Il reste encore plein de travail donc on s'arrête là pour l'instant et on retourne à Blender.
A la semaine prochaine !