Jeu de courses (prototype)

From Watchiki
Jump to navigation Jump to search

Définition de Wikipédia[1][edit | edit source]

Un jeu vidéo de course est un genre de jeu vidéo dont le gameplay est basé sur le contrôle d'un véhicule, le plus souvent motorisé. Le but est généralement de progresser le plus rapidement possible d'un point à un autre pour gagner sur les autres ou sur le temps. Ce type de jeu met en exergue la notion de compétition et tire son intérêt des sensations de vitesse et de pilotage qu'il procure. Très populaire, le genre s'inspire souvent des sports mécaniques et notamment de la course automobile.

Inspirations[edit | edit source]

Les références en matière de jeux de course ne manquent pas et sont très diverses. En ce qui me concerne, mes références sont :

  • Mario Kart, pour les jeux de courses considérés comme familiaux et accessibles (et largement copiés par diverses licences concurrentes) ;
  • Need for Speed, pour l'alliance entre le jeu de courses classique mélangé à des courses poursuites avec la police (voire l'inverse, où il faut arrêter des chauffards) ;
  • Sled Storm, un jeu de courses de motoneiges avec une bande-son excellente ;
  • Micro Machines, des jeux de courses de petites voitures dans des environnements miniatures et originaux.

Ressources[edit | edit source]

Les ressources qui sont à ma disposition seront un facteur déterminant pour départager les différents sous-genres.

Graphiques[edit | edit source]

Le site de Kenney propose des packs de ressources pour réaliser des jeux de courses. Le pack 2D est en vue de dessus et rappelle les premiers jeux Micro Machines. Le second pack, en 3D, n'évoque pas de titre en particulier et semble plus classique. Mais il me rappelle beaucoup les circuits de voitures téléguidées.

Il y a sûrement moyen de faire deux jeux assez similaires, l'un en 2D et l'autre en 3D, à commencer par la version 2D.

Audio[edit | edit source]

Pour ce qui est de l'audio, il n'y a pas de pack dédié aux jeux de courses. Mais je constate que le pack Sci-Fi Sounds comporte des boucles sonores de moteurs. En couplant avec d'autres sons plus génériques, il y a moyen de réaliser quelque chose.

Tutoriels[edit | edit source]

Le site Kidscancode propose des tutos très intéressants pour Godot. En ce qui concerne notre prototype, un premier tutoriel explique comment faire une voiture en 2D. On peut également y trouver un autre tutoriel traitant à peu près le même sujet, mais en 3D cette fois.

Cahier des charges[edit | edit source]

2D ou 3D ?[edit | edit source]

Je me suis focalisé sur un jeu en 2D avec vue du dessus, pour utiliser le pack de Kenney qui est assez complet et faire une sorte de clone de Micro Machines. Je dispose ainsi de trois types de routes : asphalte, sable et terre. Côté véhicules, j'ai également du choix puisque j'ai des voitures, des camions et des motos.

Kenney dispose aussi d'un kit 3D pour des jeux de courses, mais qui est beaucoup plus classique dans son contenu.

Circuits[edit | edit source]

Je pense d'abord partir sur un jeu de courses avec trois circuits différents, un pour chaque type de terrain. Au départ, j'avais envisagé d'imposer des contraintes de vitesse en fonction du terrain mais cela risquerait de rendre le jeu frustrant pour pas grand chose, donc je vais laisser des routes identiques. Cependant, je peux toujours en modifier l'adhérence ce qui ferait que certaines routes seraient plus glissantes que d'autres.

Véhicules[edit | edit source]

Il existe 5 types de véhicules, sans compter les motos :

  • berline ;
  • compacte ;
  • sport ;
  • SUV ;
  • citadine.

Chacun de ces types de véhicules existe en taille normale et en petite taille, pour proposer des courses de petites voitures. Pour du Micro Machines, on pourrait se focaliser sur ces dernières mais il faudrait adapter la taille des décors qui sont plus pensés pour la taille normale des véhicules.

Chaque véhicule existe en 5 coloris : rouge, bleu, vert, jaune et noir. Ce qui permet des courses avec 5 concurrents maximum, si l'on empêche de prendre deux fois la même couleur. On pourrait diversifier les types de véhicules, mais cela risquerait de déséquilibrer le jeu si certains sont nettement plus avantageux que d'autres (et je ne pense pas avoir le bagage nécessaire pour arriver à équilibrer correctement un jeu). Je pense au contraire qu'il faut imposer un type de véhicules en fonction du circuit (genre le SUV pour les routes de sable).

Obstacles[edit | edit source]

Le set de tuiles comporte également divers objets qui peuvent servir d'obstacles, comme des barils, des cônes de signalisation ou des tâches d'huile. Je pense que ce serait intéressant de s'en servir pour ajouter du challenge dans les courses. Pas forcément des objets à récolter et utiliser comme dans un Mario Kart, mais juste des obstacles sur le circuit comme dans Micro Machines.

  • Les barils seraient des obstacles bloquants à contourner ;
  • Les flaques d'huile risqueraient de faire dévier le véhicule de sa trajectoire ;
  • Les cônes de signalisation seraient des obstacles non bloquants mais ralentissant.

Interface utilisateur[edit | edit source]

Je pense garder une interface très minimaliste. Un classement en temps réel qui s'affiche dans un coin de l'écran, et peut-être une mini-map avec la position des concurrents en temps réel.

Pour le départ et l'arrivée, juste mettre un décompte avec un texte en superposition (et un petit son de décompte).

Prévenir la triche[edit | edit source]

Ce qui m'embête le plus, c'est de déterminer comment faire en sorte que les voitures respectent le sens du circuit. Dans la plupart des jeux de course, il y a une sorte de message d'erreur qui avertit le joueur qu'il est à contresens. Mais j'ignore comment cela est détecté en temps réel.

Et surtout, il faut pouvoir éviter qu'un concurrent se contente juste de passer 3 fois la ligne d'arrivée d'avant en arrière pour finir la course. Il va falloir que je me renseigne comment éviter ça.

Intelligence artificielle[edit | edit source]

Il faudrait que les concurrents non joueurs soient pilotés par une IA, même assez sommaire. Je ne sais pas exactement comment coder ça, mais il doit bien exister des ressources sur internet. Je pense qu'il faudrait aussi que je recherche dans mon vieux bouquin Artificial intelligence for Games.

Développement[edit | edit source]

Tilesets[edit | edit source]

Cependant, les sets de tuiles sont assez mal agencés et il est difficile de s'y retrouver. J'ai donc pris le parti de le réagencer, en utilisant Gimp, pour recréer un set de tuiles plus clair pour les terrains. Je me suis d'ailleurs rendu compte qu'il manquait des tuiles pour pouvoir utiliser les atlas[2] et faciliter le dessin des circuits. J'ai donc dû bricoler quelque chose à partir des tuiles existantes. Les terrains classiques comme le sable, l'herbe et la terre sont pas forcément hyper bien travaillés, mais les terrains dédiés à la route ont clairement un bien meilleur rendu (pour un jeu de courses, c'est le principal).

Ce n'est qu'après coup que j'ai regardé du côté des fichiers vectoriels (SVG) qui sont seulement au nombre de trois et beaucoup mieux agencés que leurs équivalents en PNG. J'ai donc modifié mon TileSet et ma TileMap pour utiliser les fichiers vectoriels et cela rend tout aussi bien. Bien sûr il manque certaines tuiles pour que l'atlas soit complet, mais il s'avère que les tuiles qui sont présentes peuvent suffire pour faciliter le dessin des terrains de façon basique.

Dès que j'ai obtenu mon TileSet, j'ai pu dessiner un terrain de route assez minimaliste pour pouvoir tout y tester.

Modèle de véhicule[edit | edit source]

Je me suis basé sur le tutoriel de Kidscancode pour me créer un modèle de véhicule avec une physique convaincante. Cependant, il faudra probablement ajuster certains paramètres pour chaque véhicule. Pour cela, j'ai utilisé le mot-clé @export pour rendre modifiable une bonne partie des paramètres. Godot est fait de sorte que chaque nœud héritant du modèle puisse modifier ses paramètres sans que cela modifie ceux du modèle.

Comme pour le TileSet, j'ai finalement opté pour le fichiers SVG contenant tous les sprites d'objets, de véhicules et de personnages, beaucoup mieux agencé que les versions PNG (qui en plus séparent tous ces assets en trois fichiers alors que là j'ai tout en un).

Son de moteur[edit | edit source]

J'ai récupéré les quelques sons de moteur du pack Sci-Fi Sounds de Kenney. Ils sont pas extras mais ça devrait suffire pour le prototype. Pour un son propre au véhicule, j'ai ajouté un nœud AudioStreamPlayer2D au modèle. Pour que le son change en fonction de la vitesse, il faut modifier le paramètre pitch scale, qui permet de moduler la hauteur du son (et sa vitesse aussi je pense) en fonction d'un coefficient. S'il est à la valeur1.0, le son est à sa hauteur originale. Au-dessus de 1.0 et jusqu'à 4.0 , le son devient plus aigu. En-dessous de 1.0 et jusqu'à 0.01, le son devient plus grave.

En faisant quelques essais, je me suis rendu compte qu'il ne suffit pas de modifier de beaucoup la valeur de pitch scale pour obtenir un effet convaincant. En fin de compte, je me retrouve avec une équation du type pitch_scale = 1.0 + velocity * 0.0005.

L'effet est plutôt convaincant au niveau de l'accélération, mais à pleine vitesse j'ai un petit l'impression que l'on force sur le moteur. Pour le fun, j'ai voulu tester avec des sons de moteur issus de GTA 2[3] et ça rend plutôt pas mal et cela m'évoque sans problème le son du jeu. Seulement, il me semble qu'après l'accélération maximale, le son revient plus ou moins à un son plus doux, comme si le personnage embrayait pour passer à une vitesse supérieure. Il faudra que je fasse des tests pour obtenir le même effet (j'ai déjà une petite idée).

En attendant, je garde ça comme ça, avec les sons de Kenney.[4]

Notes et références[edit | edit source]

  1. https://fr.wikipedia.org/wiki/Jeu_vid%C3%A9o_de_course
  2. Les atlas permettent de définir un ensemble de tuiles avec leurs connexions entre elles, permettant ainsi de dessiner un terrain cohérent sans avoir à changer tout le temps de tuiles pour les coins, les bords, etc.
  3. Sons trouvables ici : https://www.sounds-resource.com/pc_computer/gta2/
  4. Autant que possible, je préfère garder une certaine cohérence dans les ressources utilisées pour éviter de me retrouver avec un patchwork dégueulasse. En outre, même si le projet n'a pas vocation à être publié, je préfère éviter d'utiliser des ressources provenant de jeux existants (surtout s'ils ne sont pas libres de droit).