Le blog d’un développeur de jeu indépendant
Démos, dessins, tutos et galères du quotidien…

Suivez l’actu par mail !

Pour ne rien rater.

Voyage en tortue

Salut tout le monde,

Ces derniers temps, j’ai travaillé sur 2 nouveautés pour le jeu:

  • Les voyages à dos de tortue
  • Un monde cyclique (enfin techniquement, c’est plutôt torique)

En fait ces 2 points sont étroitement liés.

I – La tortue

A un certain moment dans le jeu, le joueur peut traverser l’univers entier sans restriction. Bien sûr, ça signifie qu’il lui faut une autre aptitude que la nage, sans quoi ce serait bien trop long. J’ai donc réfléchi à un moyen sympa de voyager, et en accord avec mon crédo « liberté, humour, onirisme », j’ai décidé de lui faire chevaucher une tortue. J’ai commencé par créer le modèle dans Blender et la texture dans GIMP, comme d’habitude:

Encore une texture bien mal optimisée…
Mais rajouter une nouveauté au jeu n’est jamais facile. De nombreuses questions se posent à propos de cette tortue:
  • Comment est-elle contrôlée?
  • A quelle vitesse se déplace-t-elle? Combien de temps le joueur peut-il se balader entre les îles avant d’en avoir marre? Comment concilier ça avec la distance minimum que je dois respecter entre les îles pour être sûr de ne pas saturer la mémoire et ralentir le jeu si trop d’îles sont visibles en même temps?
  • Est-ce que le joueur peut utiliser les items habituels sur le dos de la tortue? Si oui, lesquels?
  • Est-ce que le joueur peut sauter? Ou s’accroupir? Est-ce que ça a un réel intérêt?
  • Comment le joueur passe du mode « tortue » au mode « nage »?
Je n’ai pas répondu à toutes ces questions, mais j’ai du faire un certain nombre de choix. J’ai implémenté les mêmes contrôles pour la tortue et pour le joueur. Utiliser le Bo (l’arme de mêlée) semblait inutile sur la tortue. Les armes de jets, en revanche, semblent intéressantes pour les combats maritimes. Le problème est que les projectiles tirés depuis la tortue paraissent très lents en comparaison. Il est même possible que la tortue soit plus rapide qu’une flèche.
J’ai donc mis en place 2 vitesses différentes:
  • A faible vitesse, le joueur peut utiliser les armes de jet.
  • A vitesse plus rapide, impossible de tirer, mais la tortue peut traverser très vite la distance qui sépare les îles.
La tortue dans le jeu.
Afin que le joueur ait une meilleur sensation (feedback) pendant les voyages en tortue, j’ai mis en place différents petits trucs:
  • De l’écume et des ondes/trainées derrière la tortue
  • De petites éclaboussures d’eau
  • De grosses éclaboussures aléatoires
  • Une trainée derrière les nageaoires
Et à grande vitesse:
  • Des trainées de vent autour de la tortue
  • Une focale de camera plus courte
  • Un effet « Fish Eye » (distortion en coussinet) pour accentuer l’effet de vitesse
Dass les 2 cas, d’autres tortues surgissent spontanément autour de nous pour nous accompagner quelques secondes. Ca donne un peu plus de vie au voyage!
Le voyage en tortue!

 

II – Monde cyclique

Si le joueur peut aller n’importe où en tortue, ça soulève la question des limites du monde. Je peux juste mettre une montagne, un mur ou un obstacle sur tout le tour de la carte, mais je n’aime pas cette idée. Elle va totalement à l’encontre de la liberté que je veux laisser au joueur.
J’ai donc décidé de faire un monde cyclique. Le principe est le suivant: si le joueur sort d’un côté de la carte, il re-rentre de l’autre côté. On peut voir ça comme une « simple » téléportation du joueur. Mais en réalité, il y a beaucoup d’autres objets à téléporter de l’autre côté de la carte: les effets de particules autour de la tortue, les autres tortues qui nous entourent, les projectiles éventuellement tirés par le joueur, et, bien sûr, la caméra, ce qui est problématique car elle a un mouvement lissé basé sur la position et la vitesse précédente que je dois donc recalculer au moment de la téléportation.
Un autre problème est qu’il y un type d’objet que je ne PEUX PAS téléporter: les trainées (trails en anglais)… car elles sont calculées de manière dynamique dans le repère monde et je n’ai aucun accès à la position des sommets (j’imagine que c’est une limite de Unity, surement parce que les données sont stockées dans un buffer particulier de la carte graphique, ou un truc du genre). Donc je ne peux pas les bouger, ni les recréer de l’autre côté de la carte en copiant et déplaçant les sommets.
Si je ne téléporte pas les trainées, ça crée une disparition soudaine TRES visible et très moche. J’ai donc choisis de les faire disparaître progressivement lorsqu’on s’approche des bords de la carte, ce qui est à peine visible.

 

Si je joueur navigue exactement sur la frontière de la carte, un nouveau problème apparaît: je ne veux pas le téléporter à chaque image (cette opération peut être assez lourde en fonction du nombre d’objet à téléporter). Donc j’attends que le joueur ait dépassé la frontière de X mètres pour le téléporté à X mètre à l’intérieur de l’autre côté de la carte. Cela crée un effet d’ »Hysteresis » qui évite les téléportation multiple et améliore énormément la fluidité du jeu en bordure de carte.
En outre, la téléportation instantanée du joueur et de la caméra peut créer une cassure dans l’animation de l’océan. Pour éviter ça, j’ai du configurer précisément les échelles de textures de l’océan pour qu’elles soient en phase avec la taille du monde. Encore un compromis à faire en jouant avec des nombres premiers.
J’ai aussi du rajouter d’autres petits trucs: le son de l’eau/des vagues quand la tortue se déplace, un son de conque qu’on utilise pour appeler la tortue (c’est expliqué dans l’histoire), des tests de collision avec les îles environnantes, … Je ne détaille pas tout ici!
Et voilà à quoi ça ressemble à l’heure actuelle:

 On peut remarquer que le monde est cyclique à l’aide de l’île carrée recouverte d’herbe. Bien sûr dans le jeu, il y aura de vraies îles, ceci est juste un test technique.
Finalement, diriger la tortue est plutôt cool! Bien sûr, il faudra rajouter d’autres éléments dans l’océan pour lui donner un peu plus de vie (tonneaux flottants, plantes, barges, bateaux, poissons et autres animaux marins), mais, à chaque fois, j’aurai à prendre en compte le souci de téléportation. Il faut aussi que je fasse très attention à ne pas positionner les îles trop près du bord de la carte pour éviter qu’elles apparaissent d’un seul coup quand le joueur est téléporté.
Allez, à la prochaine!
Paix!

Publié

dans

par

Étiquettes :

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *