Hello ^^
Voici un didacticiel vous montrant comment programmer quelques énigmes avec des variables. Celles-ci sont tirées de jeux Zelda, mais vous pouvez vous en inspirer quel que soit le jeu que vous comptez faire !
Le but de ce didacticiel est :
- de conforter l’utilisation des variables
- d’utiliser des variables (ou des interrupteurs aussi ^^) dans la programmation d’énigmes ou de mini-jeux
- de montrer qu’on peut adapter certaines énigmes de jeux vidéo à des jeux amateurs.
Les images et le didacticiel ont été conçus pour rm2003 mais ils peuvent être adaptés à rmXP en effectuant quelques changements. Sans doute aussi à rmVX, car le tuto concerne plus les variables qu'autre chose, mais n'étant pas familier de ce log, je ne saurais pas vraiment l'affirmer...
1er exemple : les bois perdusSi vous avez joué à Zelda 1, vous avez eu à traverser une zone dans laquelle il fallait emprunter un chemin spécial pour sortir des bois perdus ou de la montagne.
Oui, je sais, c’est moche, mais c’est pour se mettre dans l’ambiance !Pour cet exemple, nous n’allons pas y aller par quatre chemins
euh, je voulais dire que nous allons prendre quatre chemins...
Nous allons dire qu’on peut arriver par en haut, en bas, à droite ; qu'on peut sortir de la map par en bas, et que le chemin gauche mène vers le donjon secret (ou ce que vous voulez, on s’en fout ^^)
D’abord il faut placer des points de téléportation sur d’autres maps pour accéder à celle-ci et concevoir la map du donjon secret évidemment.
Ensuite, nous allons créer la variable que nous souhaitons, que nous allons appeler
[Laby forêt] pour cet exemple.
Après, nous allons créer les points de téléportation.
Commençons par celui du bas, plus simple à programmer car il mène vers une map qui n’est pas intéressante pour le joueur (pas le donjon secret, quoi
).
Placez donc un event de téléportation vers cette map pour le chemin d’en bas (ou deux selon l’épaisseur du chemin), et éditez-le en ajoutant :
Variable : [Laby forêt] rendre égale à 0.
Maintenant, occupons-nous des autres chemins.
Prenons pour l’exemple le chemin : haut - droite – haut – gauche.
Il ne doit pas passer par le bas, et doit finir par la gauche.
Placer des events de téléportation pour chacune de ces directions, avec comme destination l’opposé de la map (par exemple, en allant en haut, on doit aller en bas. Bon, c’est pas clair, mais c’est ça quoi ^^).
Après il faut éditer ces events de téléportation. Pour les trois, copier la page, et ajouter simplement :
Variable : [Laby forêt] rendre égale à 0. Ceci pour avoir à tout recommencer si on se trompe de chemin ^^ Ça ressemblera à ça :
Après, pour emprunter les bons chemins en temps voulu, on impose des conditions.
Commençons par le haut. Créer une nouvelle page en copiant la première page. Editer la deuxième page en imposant une condition :
La variable [Laby forêt] a une valeur égale à 0 (car on doit passer par là en premier).
La page sera alors identique à la première page, sauf :
Variable : [Laby forêt] rendre égale à 1. Car on aura fait la première partie du chemin.
Après comme on doit passer par la droite, on va s’occuper de l’event à droite.
La manipulation est la même sauf que la condition est
La variable [Laby forêt] a une valeur égale à 1 et, dans les commandes,
Variable : [Laby forêt] rendre égale à 2 (car on doit passer par là en deuxième).
Vous avez compris le principe ? Nous pouvons employer ce procédé quel que soit le nombre de chemins possibles et quel que soit le nombre de fois qu’il faille traverser la map.
Si on prend une direction qu’on ne doit pas encore prendre, la variable est remise à zéro et on doit recommencer.
Si vous devez passer deux fois par la même direction... ça tombe bien car nous devons encore passer par le haut !
Copiez donc la deuxième page en modifiant la condition :
La variable [Laby forêt] a une valeur égale à 2 ainsi que la commande
Variable : [Laby forêt] rendre égale à 3.
Et pour finir, nous devons prendre à gauche...
Copier la page 1 de l’event de téléportation de gauche. Modifier la condition :
La variable [Laby forêt] a une valeur égale à 3, ainsi que les commandes
Téléporter : Donjon secret entrée (la map de destination quoi) et
Variable : [Laby forêt] rendre égale à 0 (attention, zéro et pas cinq... pour avoir tout à refaire si on voudra par la suite accéder au donjon secret).
Et voilà ! Il est possible d’adapter ces explications à des cas variés. Le principe est de mettre deux pages à chaque fois : l’une, par défaut, ramène à la case départ, l’autre permet de progresser (2e page : en condition
La variable [Laby forêt] a une valeur égale à N et, dans les commandes,
Variable : [Laby forêt] rendre égale à (N + 1) )
2e exemple : dédale des panneauxVous vous souvenez peut-être d’un mini-jeu dans Link’s awakening (repris dans Mystery of Solarus) dans lequel il faut suivre les panneaux dans un certain ordre ?
Oui, honte sur moi, celle-ci est directement tirée du jeu original ^^Ici, on utilise une variable comme dans le premier exemple, c’est-à-dire qu’on ne pourra pas activer un event n’importe quand. Il faudra suivre un chemin précis.
Nous appellerons cette variable
[Panneaux].
A chaque fois que vous créez un panneau, il faudra qu’il comporte une page d’annulation et une page de progression. Kézako ?
Comme pour le premier exemple, chaque event possède une première page dans laquelle la variable est remise à zéro si aucune condition n’est imposée. Il faut faire pareil avec
[Panneaux], sauf qu’il n’y a pas besoin de mettre de téléportation cette fois ^^. Éventuellement un effet sonore indiquant qu’on s’est planté...
La deuxième page possède comme condition :
La variable [Panneaux] a une valeur égale à N et comme commandes :
Variable [Panneaux] rendre égale à (N + 1) ainsi qu’un message indiquant la direction à prendre.
NB 1 : Pour indiquer les directions avec des flèches, vous pouvez utiliser des commandes spéciales dans vos messages si vous êtes sous 2000 / 2003, les voici :
$s: Haut
$t: Droite
$u: Bas
$v: Gauche
$w: Haut-Droite
$x: Bas-Droite
$z: Haut-Gauche
$y: Bas-Gauche
Par contre, ça ne marche pas pour XP...
NB 2 : Placez vos panneaux dans un ordre logique et cohérent... sinon le mini-jeu n’a aucun intérêt...
Et pour le dernier panneau, vous mettez ce que vous voulez en page 2 (mais sans modifier la condition !) : activation d’un interrupteur pour faire apparaître un coffre ou ouvrir une porte, etc.
Le principe... servez-vous en pour faire des chemins complexes ^^
3e exemple : L’interrupteur récalcitrantUn exemple tiré de A link to the past cette fois. Encore une map pour se mettre dans l’ambiance (elle est simplement là pour expliquer le mécanisme, on s’en fout si elle est moche !)
Nous voulons faire apparaître un coffre en appuyant sur le bouton. Sauf que le bouton doit rester enfoncé ! Il faut donc le bloquer avec... tiens, pourquoi pas ce bloc qui sert à rien ?
(note : s’il suffit juste que Link vienne sur le bouton sans avoir besoin de le bloquer, aucun intérêt pour le didacticiel car il n’y a pas besoin de variables)
Ça sera l’occasion de nous familiariser avec la position des évènements.
En fait, l’interrupteur n’est qu’un leurre, car ce sont les variables qui permettent de détecter la position que le bloc doit prendre. Sauf si vous tenez à faire une animation pour prouver à Link qu’il y a besoin du bloc... mais ce n’est pas le but car je tiens aaaaabsolument à parler de variables et osef des détails
.
Créons donc un premier évènement
0001 : Interrupteur. (position : sous le héros)
Et... on n’y touche pas :
: Par contre, on repère sa position, car on a besoin de ses coordonnées.
Créons ensuite un deuxième évènement
0002 : Bloc.
Condition de déclenchement : Presser une touche
Position : Même niveau que le héros
Commandes : Déplacer/Modifier : Cet évènement, Fuit le héros de un pas (ignorer si impossible).
Note : Evidemment, il est possible que le joueur s’y prenne comme un manche et qu’il pousse le bloc dans un coin sans pouvoir le récupérer... pour pouvoir recommencer, il faudra soit quitter la carte, soit programmer un event qui permettra de remettre le bloc à sa position d’origine.
Comme nous aurons besoin de variables, créer
[X bloc] et
[Y bloc] qui correspondront aux coordonnées de la position du bloc. Et tant qu’on y est, concevoir l'interrupteur
[Coffre]Maintenant, nous allons nous mettre dans un coin pour créer deux évènements en processus parallèle :
0003 : Coordonnées blocCommandes :
Variable [X bloc] rendre égale à "Bloc coord X"
Variable [Y bloc] rendre égale à "Bloc coord Y"0004 : Apparition coffreCommandes :
Conditions : Si variable [X bloc] a une valeur égale à [coordonnée X de Interrupteur]
Conditions : Si variable [Y bloc] a une valeur égale à [coordonnée Y de Interrupteur]
- Alors : [Coffre] activé
- Sinon : rien ^^Ici, les coordonnées de l’interrupteur sont (014 ; 008). On peut les repérer en bas de la fenêtre.
Et maintenant, nous allons créer le coffre... qui sera l’évènement
0005 : Coffre. Il aura pour condition :
L'interrupteur [Coffre] est activé, et pour apparence le chara du coffre. Après vous programmez comme vous voulez ^^
Ce principe peut permettre de faire apparaître un coffre, mais il peut aussi permettre l’ouverture d’une porte ou autre chose. Il peut être complété par des effets sonores, des animations du héros...
C’était un exemple d’utilisation des coordonnées... qui peut s’adapter, comme d’habitude.
4e exemple : jeu de hasardCe petit jeu de hasard repose sur le principe de l’aléatoire. Comme les variables peuvent prendre une valeur aléatoire, nous allons en profiter !
Créons d’abord deux interrupteurs :
[Jeu lancé] et
[Jeu terminé], ainsi que la variable
[Jeu hasard].
Ensuite nous allons créer les évènements :
Pour commencer : le monsieur.
Faire un évènement à trois pages : la deuxième aura pour condition de déclenchement
L’interrupteur [Jeu lancé] activé, la troisième,
L’interrupteur [Jeu terminé] activé.
En première page : un peu de blabla expliquant le principe du jeu, mais n’oubliez pas l’important :
- Proposer choix : Je veux jouer/ Pas intéressé (pour ne pas que le joueur joue s’il n’en a pas envie ^^)
- Retirer monnaie : le prix du mini-jeu (sinon on peut jouer gratuitement, dans ce cas aucun intérêt !)
- Interrupteur [Jeu lancé] activé.En deuxième et troisième page, mettez ce que vous voulez ^^ c’est que du blabla pour éviter de relancer le jeu une deuxième fois.
Ensuite, nous allons concevoir un coffre. En fait, il y en a trois, mais c’est pour faire style ^^ Vous aurez juste à copier ce coffre deux fois...
Faites trois pages encore une fois, avec les mêmes conditions de déclenchement que pour le monsieur.
En première et troisième page, mettez un truc pour dire "Pas touche ! Vous devez payer avant / Vous avez déjà joué" bref du blabla ^^ (en troisième page, mettez l’apparence d’un coffre ouvert)
C’est la deuxième page qui nous intéresse. Nous allons donc mettre
Variable [Jeu hasard] rendre égale entre : valeur aléatoire entre 1 et 5 (selon le nombre d’alternatives que vous désirez).
Après ce sont plusieurs fourchettes de conditions.
Conditions : Si variable [Jeu hasard] a une valeur égale à N (N un nombre entre 1 et le maximum d’options que vous désirez mettre)
- Alors : Modifier monnaie/objets/ce que vous voulez quoi ^^ avec un message ou une animation pour dire ce que le joueur vient de gagner.
Et en fin de page, ajoutez :
[Jeu terminé] activé.
Il est possible d’attribuer la même récompense pour plusieurs options, ou encore d’attribuer certaines récompenses seulement pour certains coffres.
Voilà, le mini-jeu est programmé.
Un problème cependant : impossible d’y jouer une nouvelle fois !
Pour régler ça, éditez l’event de téléportation qui permet de sortir de la maison en ajoutant dans les commandes :
[Jeu lancé] désactivé et
[Jeu terminé] désactivé.
Comme ça, il faudra ressortir de la maison pour pouvoir jouer de nouveau.
Fin du didacticiel.
Les exemples cités ici peuvent paraître un peu dérisoires pour des makers expérimentés, mais il est tout à fait possible de programmer des énigmes ou mini-jeux plus complexes inspirés de jeux pros.
Je connais d'ailleurs un jeu dans lequel le système de plateformes ensablées de Super Mario Bros 2 a été bien repris.