Dungeon est un jeu vidéo 2D réalisé avec le moteur Godot Engine.
Godot
Godot est un moteur de jeu open source qui permet de créer des jeux 2D et 3D.
Un jeu Godot est organisé autour de nœuds et de scènes. Un nœud est un élément qui représente une fonction précise. Une scène est un ensemble de nœuds qui peut représenter un personnage ou encore un objet. C'est cet ensemble qui forme le jeu.
Godot utilise son propre langage pour fonctionner : GDScript. Il permet de programmer toutes les fonctionnalités du jeu, comme les déplacements du personnage, les interactions et la physique. Il est possible de créer des variables et constantes afin de gérer des évènements et de rendre le jeu interactif.
Mouvements
La première chose que le personnage doit faire est bouger : aller à gauche, à droite et sauter. Pour bouger, le joueur appuie sur des touches. C'est ensuite le script qui définit les mouvements du personnage.
Ici, une variable appelée
direction est créée afin de savoir si le joueur appuie sur la touche pour aller à gauche (avec
move_left) ou à droite (avec
move_right). Cette variable peut renvoyer -1 (touche gauche), 0 (pas de touche) ou 1 (touche droite).
On peut ensuite établir une condition : Si une touche est pressée, le personnage se déplace. Sinon, il s'arrête.
Pour que le personnage s'oriente dans la direction où il va, une nouvelle condition peut être créée. Sachant que le sprite du personnage est orienté de base vers la droite, si la variable
direction renvoie une valeur supérieure à 0, le sprite ne bouge pas. Si la valeur renvoyée est inférieure à 0, le sprite est retourné horizontalement.
La même méthode est appliquée pour les sauts. Dans le jeu, le personnage peut sauter et double sauter.
La condition est telle que si la touche de saut est pressée, et si le joueur est sur le sol, une vitesse verticale est appliquée pour que le personnage aille vers le haut. Pour le double saut, une variable
can_doublejump est utilisée en plus. Elle est définie comme vraie si le personnage est au sol. Si la touche de saut est pressée alors qu'il n'est pas au sol, le script vérifie si
can_doublejump est vraie. Si c'est le cas, le personnage effectue un deuxième saut et la variable
can_doublejump est mise à fausse pour empêcher un double jump infini.
Animations
Chaque mouvement a sa propre animation. Par exemple, le personnage possède en tout 6 animations, définies avec des trames.
Ici, l'animation
idle possède 8 trames pour faire bouger la queue du chat, qui sont jouées en boucle et de manière automatique au chargement.
Les animations sont contrôlées par le script. La plupart des animations du personnage sont gérées ici :
Mort
Dans
Dungeon, il est possible de mourir si le personnage tombe dans des piques ou s'il s'aventure un peu trop près d'un ennemi. Dans ces deux cas, le personnage meurt car il est entré dans une zone qui le fait recommencer au début du jeu. Cette zone est ici appelée killzone. Elle est physiquement représentée par un Area2D : un type de nœud qui détecte quand d'autres corps entrent ou sortent de sa zone.
Dans le script de la killzone, une fonction se déclenche quand un nœud appelé Node2D y entre, comme l'est le personnage. Si le corps a la fonction
die() (pour s'assurer que le corps en question peut mourir) alors on attend que le personnage meurt, puis 1 seconde avant que le jeu ne soit relancé.
La fonction
die() est définie dans le script du personnage.
Dans cette fonction, la variable
is_dead est activée pour bloquer les actions du joueur et lancer l'animation et le bruitage de la mort. Le script attend que l'animation de mort soit terminée grâce à
await, puis c'est le script de la killzone qui reprend le relais en attendant 1 seconde avant la relance du jeu.
Interactions
Le but du jeu est de trouver une clé pour pouvoir dévérouiller un coffre.
La clé est représentée par un Area2D et utilise le même principe que la mort : si un corps entre dans la zone de la clé, une variable appelée
got_the_key est définie comme vraie, un bruitage est joué, et la clé disparait.
Le coffre est également un Area2D. Si le joueur est dans sa zone et appuie sur la touche E, la fonction
interact(player) est appelée.
Dans cette fonction, si la variable
got_the_key est définie comme vraie, donc si le joueur a la clé, alors la fonction
open_chest() se lance. Elle permet de changer la trame du coffre, de jouer un bruitage et un message de fin apparait, avant de relancer le jeu. Si le joueur n'a pas la clé, c'est la fonction
show_need_key_message() qui se lance : un message disant qu'une clé est nécessaire apparaitra.
Interface
L'arborescence des scènes du jeu est divisée en deux : une partie jeu et une partie interface. Cette dernière est visible en haut de l'écran de jeu.
A gauche, deux chronomètres sont présents : un qui démarre à chaque lancement du jeu, et l'autre qui enregistre le meilleur temps (Personal Best) sur la session de jeu.
A droite de l'écran se trouve un bouton redémarrer et un bouton pour fermer le jeu.
Quand le bouton redémarrer est pressé, la scène du jeu et le timer appelent la fonction
reset(). C'est une fonction définie dans le script global, qui va relancer la scène du jeu, sans relancer l'interface. Cela permet de garder le meilleur temps enregistré dans le deuxième chronomètre.
Le bouton quitter, lui, renvoie à une fonction qui ferme la fenêtre de jeu.
Shiny... Ou chat noir ?
Lorsque vous lancez ou redémarrez le jeu, il existe 1 chance sur 8192 pour que le chat ne soit pas blanc, mais noir.
Au lancement du jeu, un chiffre aléatoire est tiré entre 1 et 8192 et est stocké dans une variable
chance. Si ce chiffre est 1, les trames chargées seront celles du chat noir, sinon, ce seront celles du chat blanc.
Synopsis
Vous incarnez un petit aventurier à la recherche d'une clé pour dévérouiller un coffre... Mais serez-vous le plus rapide ?