Tout, tout, tout sur les variables ! [Partie 2/2]
{Tutoriel pour tout RM}
[Partie 2/2 : Les commandes qui utilisent les variables !]

Les variables ? C'est inutile ? Mais non, c'est super hyper utile ! = D

Après une première partie qui permet de tout savoir sur la commande "Modifier une variable", vous allez maintenant VRAIMENT tout savoir sur les variables !
- Joke, 02/11/2013 à 15h49.


Tout, tout, tout sur les variables ! [Partie 2/2] - Joke

Tout, tout, tout sur les variables!
[Partie 1/2 : Les commandes qui utilisent les variables !]


{Tutoriel pour tout RM}


icone Dans la partie précédente...



(Cliquez sur l'image pour voir la première partie de ce tutoriel !)


Nous avons vu dans la première partie de ce tutoriel, que la connaissance des variables et de leur utilisation nous évite une mort atroce et douloureuse.

Maintenant que vous savez ce qu'est une variable, et qu'on peut écrire un gros tutoriel juste pour la fonction "Modifier variables" que vous connaissez maintenant à 100% avec toute ses différences entre RM, on va s'attaquer aux autres commandes impliquant les variables !

Mais dans un premier lieu, tout de même parler des incontournables conditions d'enclenchement des pages des événements

icone Utiliser une variable en condition d'enclenchement...



(Exemple sous RMVXACE, mais c'est pareil dans toute les versions.)


J'imagine que vous connaissez déjà les conditions d'enclenchement des pages, c'est assez simple :
Si vous dites que la page est enclenchée quand l'interrupteur "Bilou" est activé... Ben quand l'interrupteur "Bilou" est activé... LA PAGE EST ACTIVÉE !! Smiley

Il n'est pourtant pas toujours facile de comprendre exactement comment fonctionnent ces pages, en particulier quand on débute, et on peut tout aussi bien faire quatre mois de making en continuant de faire des choses insensées !

Donc voici quelques explications :

- Une page qui n'a aucune condition d'enclenchement est tout simplement active tout le temps.

- Quand il y a plusieurs pages, 1, 2, 3, 4... Il faut savoir que la page 4 est prioritaire sur la page 3, la page 3 est prioritaire sur la page 2, etc. Donc si les conditions d'enclenchement de la page 3 et de la page 4 sont remplies, et bien c'est simplement la page 4 qui sera active, et la page 3 sera ignorée.

- L'exemple typique de la manipulation des conditions d'enclenchement, c'est le coffre : Il suffit de deux pages, la première page n'a pas de condition d'enclenchement, et à l'intérieur on code de sorte à ce que lorsque le joueur vient "parler" au coffre, le coffre s'ouvre et nous dit qu'on a gagné une chaussette. Pour ne pas répéter cette acquisition glorieuse, il faut activer une deuxième page qui dira au joueur que le coffre est vide. Pour passer de la page 1 à la page 2, c'est justement les conditions d'enclenchement qui entrent en jeu : Dans la page 1, on va activer un interrupteur "Coffre", ou un interrupteur local "A" (Interrupteur propre à l'événement seul), dans la page 2, on met cet interrupteur en condition d'enclenchement. Ce qui veut dire que lorsque le joueur aura ouvert le coffre, l'interrupteur va déclencher la deuxième page, la deuxième page sera active et donc prioritaire sur la première. C'est comme si l'événement était remplacé par un nouvel événement : La première page de l'événement se voit remplacée par la seconde, grâce aux conditions d'enclenchement.


Je vous avoue que moi-même, je me mélangeais les pinceaux à mes débuts, et je faisais l'erreur bête suivante :

- En page 1, je ne mettais rien, c'est normal
- En page 2, je mettais l'interrupteur "Quête1" en enclenchement
- En page 3, je mettais l'interrupteur "Quête1" ET "Quête finie" en enclenchement !

Alors qu'en page 3, il n'est pas utile de remettre "Quête1" ! Si "Quête finie" est activé, de toute façon, c'est prioritaire et on s'en moque que "Quête1" soit activé ou non.

Un autre erreur bête que je faisais, sur le même principe : Avant d'activer "Quête finie", je désactivais "Quête1" encore en craignant un conflit. Alors qu'une fois encore, c'est inutile.
Smiley


Bref, ce qui nous intéresse ici, c'est de savoir qu'on peut utiliser une variable en condition d'enclenchement, au lieu d'un interrupteur !

Vous comprenez déjà comment ça fonctionne... Si je met en condition d'enclenchement de la page 2 "Condition : Variable [005:Bilou] = 5 ou plus", et bien, quand la variable "Bilou" est supérieure ou égale à 5... Je vous le donne en mille : La page 2 est activée !!! Smiley

L'utilisation d'une variable en condition d'enclenchement peut s'avérer être très utile !

Par exemple :

- Vous pouvez faire un mini-jeu où il faut ramasser 30 poules, et bien vous pouvez faire un événement en mode automatique qui s'enclenche si la variable "Poules" est égale à 30 ou plus.

- Vous pouvez surtout utiliser une variable pour dérouler une quête ou le jeu entier, en considérant qu'à chaque fois que le joueur achève une étape, la variable "scénario" ou "quête de la poule" va augmenter de 1 en 1. Et grâce aux conditions d'enclenchement, les dialogues de PNJ et les scènes cinématiques vont s'enclencher au bon moment.
C'est exactement le sujet du tutoriel "Déroulez votre scénario avec une seule variable" [URL]



icone Les commandes qui utilisent les variables ?



Qu'est ce que ça raconte Smiley

Smiley

Vous savez ce qu'est une commande, et d'ailleurs toute la première partie de ce tutoriel s'est concentrée sur la commande la plus importante : "Modifier variables".

Cette seconde partie va donc faire le tour des autres commandes dans lesquelles on peut utiliser des variables, afin d'être complet dans la démonstration du "Les variables, c'est super utile". Smiley

Alors je peux déjà vous généraliser l'intérêt d'utiliser des variables dans des commandes :

Smiley Une commande, ça se paramètre (ou s'argumente) : Par exemple, quand on affiche une image, on entre divers paramètres du genre... quelle image?, ses coordonnées?, sa couleur?, le point d'origine?, son ID?.
Eh bien certaines commandes nous donnent le choix entre mettre des paramètres fixes (par exemple, dire que l'image sera affichée aux coordonnées X=160, Y=120) ou bien mettre des paramètres variables... en utilisant des variables ! (par exemple, dire que l'image sera affichée aux coordonnées X=Variable[05], Y=Variable[06]).

Smiley Certaines commandes, en plus de pouvoir prendre des variables en arguments/paramètres, permettent aussi de changer la valeur d'une troisième variable. C'est ce qu'on va voir avec les commandes "Stocker l'ID de"/"Récupérer une information".
Smiley



icone La commande "Condition"


Dans les commandes d'événements :
RM2003.... : Page 3, colonne 2, ligne 5
RMXP......... : Page 1, colonne 1, ligne 8
RMVX/ACE : Page 1, colonne 1, Programmation > Ligne 1

Vous connaissez déjà la commande "Condition", et vous savez déjà que vous pouvez faire une condition sur des variables, j'ai même donné plusieurs exemples de conditions dans la partie précédente !

Ce que vous ne savez pas, c'est que... euh... rien du tout, ce tutoriel doit être complet, c'est tout !

Alors la commande condition, c'est simple, ça permet de faire "Si [condition], alors [résultat1], sinon [résultat2]"

La dite "condition" peut être beaucoup de chose, par exemple, "l'interrupteur local A est activé", c'est une condition. Là ce qui nous intéresse, c'est les conditions sur les variables :


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions)


Smiley
Variable à contrôler :
On choisit une variable, et sa valeur sera contrôlée...

Smiley
Le contrôle :
On choisit la nature du contrôle :
- Si la valeur de la variable est égale à... (si a == b)
- Si la valeur de la variable est supérieure ou égale à... (si a >= b)
- Si la valeur de la variable est inférieure ou égale à... (si a <= b)
- Si la valeur de la variable est supérieure à... (si a > b)
- Si la valeur de la variable est inférieure à... (si a < b)
- Si la valeur de la variable est différente de... (si a != b)

Je pourrais vous expliquer bêtement la différence entre "égal", "supérieur", "différent"... Mais, si vous lisez ce tutoriel, c'est que vous comprenez le français, et donc vous savez ce que ça veut dire. Smiley

Ensuite, vous avez le choix entre 3 et 4 :

Smiley
Constante :
Vous mettez une valeur entre -999999 et 999999... Ce qui permet de faire une condition du genre "Si la valeur de la variable [Bilou] est [supérieure ou égale à] la valeur [253]"

Smiley
Autre variable :
Au lieu d'une valeur, vous contrôlez par exemple "Si la valeur de la
variable [Bilou] est [égale à] [Secret de la vie]"

Mais l'option pour laquelle j'ai vraiment quelque chose à dire, en qualité d'élitiste nauséabond, c'est...

Smiley
Exécuter autre chose si la condition n'est pas respectée :
Cette case, selon si vous la cochez ou non, permet de déterminer si oui ou non vous êtes un porc crasseux [humour] qui rajoute plein de lignes vides et inutiles à son code événementiel.

Si elle est cochée :


Cela rajoute un "Sinon" à la condition, et je ne ferais que répéter l'intitulé de l'option si je vous expliquait l'utilité du "Sinon".

Exemple :
Code (Autre):
  1. Si la valeur de la variable [Nombre de prout] est [supérieure à] la valeur [0] :
  2. <> Message : "Eh, tu te la pète trop !"
  3. Sinon :
  4. <> Message : "Voilà quelqu'un de propre !"
  5. Fin de condition

Si vous n'avez pas besoin de ce "Sinon" :


Eh bien, DÉCOCHEZ CETTE CASE ! Smiley
VOTRE CODE SERA PLUS PROPRE, ON POURRA DIRE QUE VOUS ÊTES SOIGNEUX !
Smiley
Les gens qui retirent le "Sinon" lorsqu'ils n'ont rien à mettre dedans sont des gens cool ! Ceux qui ne le font pas sont des cochons pas propres. CQFD.

Ne pas imbriquer inutilement :


Le fait d'utiliser les "Sinon" permet d'imbriquer les conditions entre elles, du genre, une nouvelle condition se trouvera dans le "Sinon" de la précédente... C'est souvent utile de le faire, mais il y a un cas où c'est complétement inutile, et pourtant on voit beaucoup de gens faire cette erreur !

Exemple typique d'erreur à ne pas suivre :
Code (Autre):
  1. Si la valeur de la variable "A" = "1" :
  2. <> Youpi !
  3. Sinon :
  4. Si la valeur de la variable "A" = "2" :
  5. <> Youpla !
  6. Sinon :
  7. Si la valeur de la variable "A" = "3" :
  8. <> Boum !
  9. Sinon
  10. <>
  11. Fin de condition
  12. Fin de condition
  13. Fin de condition


Correction :
Code (Autre):
  1. Si la valeur de la variable "A" = "1" :
  2. <> Youpi !
  3. Fin de condition
  4. Si la valeur de la variable "A" = "2" :
  5. <> Youpla !
  6. Fin de condition
  7. Si la valeur de la variable "A" = "3" :
  8. <> Boum !
  9. Fin de condition


Les deux codes produisent exactement le même effet, seulement le deuxième est beaucoup plus simple et plus clair, peut-être un nano-micro-poil*10^(-99) moins rapide à interpréter pour RPG Maker, mais tout de même moins ridicule.

En effet, dans la première version, on peut dire que l'action "Boum !" (qui peut être n'importe quelle action, genre un message, le saut d'un personnage, etc.) est exécuté "si la valeur de la variable "A" n'est pas égale à 1 ET si la valeur de la variable "A" n'est pas égale à 2 ET si la valeur de la variable "A" est égale à 3"... Je pense qu'il n'est pas nécessaire de faire une démonstration plus avancée pour voir que la première solution est effectivement ridicule. Si les deux solutions fonctionnent très bien, s'il vous plait, faites quand-même la seconde lorsque c'est possible !

La clarté de ce que vous faites ne regarde que vous, vous pouvez penser que c'est du chipotage... Mais si vous prenez ce genre de réflexe très simple, vous aurez une manière plus claire de penser, voir et faire les choses. Vous vous perdrez moins dans votre code, et vous deviendrez le meilleur maker du monde.


Utiliser une ligne de script comme condition




(Exemple sous RM VX Ace, avec la syntaxe de l'EventExtender [URL])


Depuis RPG Maker XP, on peut utiliser la commande "condition" en entrant directement une ligne de script, comme vous pouvez le voir sur le screenshot.

Alors oui, vous n'êtes pas scripteur, moi non plus, et même si nous l'étions je ne vais pas vous faire un cours de script juste pour cette option que même les scripteurs n'utilisent certainement que très rarement.

Seulement pour manipuler des variables ou interrupteurs, c'est très simple :

- $game_variables[ID de la variable] pour les variables

- $game_switches[ID de l'interrupteur] pour les interrupteurs

- $game_variables[ID] devient simplement V[ID] chez les utilisateurs de l'Event Extender

- $game_variables[ID] devient simplement S[ID] chez les utilisateurs de l'Event Extender

- Les utilisateurs de l'Event Extender* peuvent utiliser SV[ID] et SS[ID], qui sont des variables et des interrupteurs locaux. C'est à dire que la variable SV[1] ou l'interrupteur SS[A]/SS[1] (c'est la même chose) ont une portée limitée à l'événement seul dans lequel on l'utilise. C'est à dire que SV[1] peut être égal à 5 dans un événement, mais être égal à 125 dans un autre événement, ce sont des variables et interrupteurs qui sont vraiment propres à l'événement que l'on utilise. Vous connaissez déjà les interrupteurs locaux A, B, C, D, et bien on peut écrire SS[A], SS[B], SS[C], SS[D] ou SS[1], SS[2], SS[3], SS[4] pour les manipuler dans une ligne de script. Les variables locales fonctionnent de la même manière, mais au lieu de contenir "true" ou "false" (ON ou OFF), elles contiennent une valeur numérique, comme une variable normale.


Toujours avec l'Event Extender*, on peut manipuler des variables locales et interrupteurs locaux qui se trouvent dans d'autres événements, d'autres maps

- Pour manipuler la variable locale d'ID 3 de l'événement d'ID 2 de la map courante, il faut écrire SV[2,3]. Donc le premier chiffre correspond à l'événement de la map, le second correspond à l'ID de la variable locale.

- Pour manipuler la variable locale d'ID 3 de l'événement d'ID 2... de la map d'ID 12, il faut écrire SV[12,2,3] !
. Cette fois ci, le premier chiffre correspond à l'ID de la map, le second à l'événement, le dernier à l'ID de la variable.

Donc :

- La syntaxe d'une variable locale avec l'EventExtender est...
* soit "SV[ID de la variable locale]"
* soit "SV[ID de l'événement, ID de la variable locale]"
* soit "SV[ID de la map, ID de l'événement, ID de la variable locale]".

- La syntaxe d'un interrupteur local est la même, on peut écrire "SS[12,3,A]" ou "SS[3,A]"


Du coup on peut concocter une condition spéciale, avec des choses que l'on connait : les opérations mathématiques et logiques :

+ = additionner
- = soustraire
* = multiplier
/ = diviser
% = modulo
** = exposant

== = est égal à
!= = n'est pas égal à
>= = est supérieur ou égal à
<= = est inférieur ou égal à
> = est supérieur à
< = est inférieur à

&& ou and = ET
|| ou or = OU

! inverse la condition, par exemple "a == b" c'est la condition "si a = b", mais si on fait "!(a == b)" ça correspond à la condition "si a n'est pas égal à b", dans cet exemple on peut directement écrire "a != b" qui veut dire la même chose, mais dans d'autres cas c'est très utile.


A partir de ça, on peut par exemple faire plusieurs conditions en une seule, du genre :
Code (Ruby):
  1. Condition : Script : V[1] > 5 && V[2] > 3 && V[3] < 8 && V[4] < 9
  2. <> Youpi, youpla, boum !
  3. Fin de condition

Ça évite de faire :
Code (Autre):
  1. Condition : Si la valeur de la variable V[001] > 5
  2. Condition : Si la valeur de la variable V[002] > 3
  3. Condition : Si la valeur de la variable V[003] < 8
  4. Condition : Si la valeur de la variable V[004] < 9
  5. <> Youpi, youpla, boum !
  6. Fin de condition
  7. Fin de condition
  8. Fin de condition
  9. Fin de condition


Aussi, le fait de faire :
Code (Autre):
  1. Condition : Script : V[1] > 5 || V[2] > 3
  2. <> Youpi, youpla, boum !
  3. Fin de condition

Nous évite de faire :
Code (Autre):
  1. Condition : Si la valeur de la variable V[001] > 5
  2. <> Youpi, youpla, boum !
  3. Fin de condition
  4. Condition : Si la valeur de la variable V[002] > 3
  5. <> Youpi, youpla, boum !
  6. Fin de condition


Mais encore, le fait de faire :
Code (Autre):
  1. Condition : Script : V[1] + V[2] - 5 >= 3
  2. <> Youpi, youpla, boum !
  3. Fin de condition

Nous évite de faire :
Code (Autre):
  1. Modifier variable : V[003] rendre égal à V[001]
  2. Modifier variable : V[003] additionner V[002]
  3. Modifier variable : V[003] soustraire 5
  4. Condition : Si la valeur de la variable [003] >= 3
  5. <> Youpi, youpla, boum !
  6. Fin de condition


Et je vous invite à faire des recherches dans l'aide de RPG Maker ou sur google, pour savoir faire certaines choses plus rapidement, par exemple :
- On veut contrôler si la valeur d'une variable se trouve entre 5 et 10. Du genre "Si la valeur de la variable [005 : Xmonstre] se trouve entre 5 et 10".

Et bien en événement, on ferait :
Code (Autre):
  1. Condition : Si la valeur de la variable V[005:Xmonstre] >= 5
  2. Condition : Si la valeur de la variable V[005:Xmonstre] <= 10
  3. <> Youpi, youpla, boum !
  4. Fin de condition
  5. Fin de condition


Sans connaître les scripts, on peut quand même faire :
Code (Ruby):
  1. Condition : Script : V[5] >= 5 && V[5] <= 10
  2. <> Youpi, youpla, boum !
  3. Fin de condition


Mais en connaissant les scripts, on peut faire :
Code (Autre):
  1. Condition : Script : V[5].between?(5, 10)
  2. <> Youpi, youpla, boum !
  3. Fin de condition


Et voilà, même sans rien comprendre aux scripts, on peut facilement manipuler la base du RGSS en utilisant simplement les choses qu'on connait maintenant très bien : Les variables, les conditions, les mathématiques de l'école primaire.

icone La commande "Afficher un message"


Dans les commandes d'événements :
RM2003, XP, VX, ACE : Page 1, colonne 1, ligne 1

Il est possible d'afficher la valeur d'une variable dans un message.
Il suffit d'écrire "\V[ID de la variable]"

Par exemple si on a une variable "poule" qui est la 6 ème variable de la liste des variables, on peut écrire un message comme ça :


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions)


"\V[6]" sera donc remplacé par la valeur de la 6 ème variable.


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions)



icone La commande "Entrer un nombre"


Dans les commandes d'événements :
RM2003.... : Page 1, colonne 1, ligne 5
RMXP......... : Page 1, colonne 1, ligne 3
RMVX/ACE : Page 1, colonne 1, Dialogues > Ligne 3


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions)

C'est tout simple, cette commande permet dans le jeu de demander au joueur d'entrer un nombre pendant un dialogue. On choisit la variable qui stockera le nombre, ainsi que le nombre de chiffres du nombre à entrer.

Par exemple :

Code (Autre):
  1. <> Message : "Entrez le code du coffre."
  2. <> Entrer un nombre : 6 chiffres, variable "Bilou"
  3. Condition : Si la valeur de la variable "Bilou" = 123456
  4. <> Message : "C'est le bon code !"
  5. Sinon
  6. <> Message : "C'est le mauvais code !"
  7. Fin de condition


Dans cet exemple, le joueur va devoir entrer un code de trois chiffres, avec les touches directionnelles, le nombre qu'il aura tapé sera enregistré dans la variable "code", et une condition vérifie alors tout de suite après si la valeur qu'il a entré est bien la bonne.


(Exemple Ingame sous RM VX Ace)


icone La commande "Téléporter l'équipe"


Dans les commandes d'événements :
RM2003.... : Page 2, colonne 1, ligne 7 (Nommé "Retour à la position mémorisée")
RMXP......... : Page 2, colonne 1, ligne 1
RMVX/ACE : Page 2, colonne 1, Déplacements > Ligne 1


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions, excepté RM2003 pour lequel l'équivalent (usage de variables) est une commande détachée de "Téléportation", nommée "Retour à la position mémorisée")


Vous connaissez déjà la commande "Téléporter"... ben oui, c'est celle là ! Mais avez-vous déjà utilisé des variables pour téléporter le joueur ?

Ça se fait assez facilement, dans l'explication de la commande "Modifier variables", j'ai expliqué comment on pouvait récupérer l'ID d'une map, soit dans une variable, soit manuellement en regardant dans RPG Maker. Eh bien voilà qui peut donner des idées...
Avant d'utiliser cette commande, un peu comme toute les autres commandes, il faut modifier les trois variables qu'on va utiliser afin d'avoir les valeurs qu'on veut.

Exemples d'utilisation :
- On peut mémoriser où se trouve le héros, en faisant :
Code (Autre):
  1. <> modifier variable : "ID" rendre égal à "ID de la carte"
  2. <> modifier variable : "X" rendre égal à "Héros: X carte"
  3. <> modifier variable : "Y" rendre égal à "Héros: Y carte"


Et revenir plus tard à cette même position en faisant :
Code (Autre):
  1. <> Téléporter : Par variables : "ID", "X", "Y"


C'est par exemple très utile si on fait un système de combat ou de menu en événement, pour téléporter vers la carte où est fait le système, et ensuite retourner sur la carte.

- On peut aussi faire des concepts sympathiques, du genre, faire un labyrinthe sur deux cartes de même dimension, et lorsque le joueur appuie sur une touche, il va d'une map à l'autre tout en gardant la même position. Pour cela, il suffit non pas de modifier la variable "ID" pour la rendre égale à l'ID de la carte actuelle, mais pour la rendre égale à l'ID de la carte de destination. (Donc, rendre égal à la valeur que vous connaissez, directement.)
Sur le même principe, vous pouvez faire un étage avec des trous dans le plancher, quand le héros tombe dans un trou, il se trouve à l'étage du dessous à la même position.

- Vous pouvez imaginer d'autre concepts, du genre, l'ID de la carte ne change pas mais on se téléporte à une destination aléatoire... Dark Soul.Ace2 est basé sur ce principe... ma foi... douteux...

L'équivalent de "Téléporter l'équipe" dans RM2003 !

Pour RPG Maker 2003, si vous faites la commande "Téléportation", vous verrez que vous ne pouvez pas définir une destination en fonction de variables.

Ce n'est pas grave, il existe la commande "Retour à la position mémorisée" (Page 2, colonne 1, ligne 7).
Pas besoin d'expliquer d'avantage cette commande, elle fait exactement la même chose que la commande "Téléporter" des versions ultérieures.
Cette commande a disparu pour cette raison, elle a simplement été fusionnée avec "Téléporter".

Toujours dans RM2003, il y a la commande "Mémoriser la position" qui fait en une fois ce que j'ai expliqué plus haut pour mémoriser la position du héros avec trois "Modifier variables".
Cette commande a disparu pour cette raison, on peut s'en passer, même dans RM2003.


icone La commande "Placer un véhicule"


Dans les commandes d'événements :
RM2003.... : Page 2, colonne 1, ligne 9 (Nommé "Définir la position d'un véhicule")
RMXP......... : LES VÉHICULES N'EXISTENT PAS ! :'(
RMVX/ACE : Page 2, colonne 1, Déplacements > Ligne 2


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions, excepté RMXP où les véhicules n'existent pas.)

Cette commande fonctionne exactement de la même manière que "Téléporter l'équipe". Sauf que ce n'est pas l'équipe qui est téléportée à la position définie manuellement, ou par les trois variables ID, X, Y, mais le véhicule de notre choix.
Rien de bien compliqué, par exemple, si on veut téléporter le radeau à droite du héros, il suffit de récupérer l'ID de la carte du héros (vous savez faire), récupérer les coordonnées X carte et Y carte du héros (vous savez faire), additionner 1 à la variable contenant la coordonnée X (vous savez faire), et finalement utiliser cette commande magique pour faire apparaître le radeau avec les trois variables que vous venez de définir.


icone La commande "Modifier la position d'un événement"


Dans les commandes d'événements :
RM2003.... : Page 2, colonne 1, ligne 10
RMXP......... : Page 2, colonne 1, ligne 2 (Nommé "Téléporter un événement")
RMVX/ACE : Page 2, colonne 1, Déplacements > Ligne 3 (Nommé "Placer un événement")


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions, excepté les options "Échanger la position avec un autre événement" et "Direction" qui n'existent pas dans RM2003)

Cette commande sert à modifier la position d'un événement sur la carte courante, il sera téléporté aux coordonnées X, Y indiqués. Le fait d'utiliser deux variables pour la position cible peut s'avérer être très utile. Par exemple, rendre égale la variable "X Bilou" à la coordonnée X carte du héros, et "Y Bilou" à la coordonnée Y carte du héros avant de faire cette commande, ça permettra de téléporter "Cet événement" sur le héros.

En manipulant un peu les variables, par exemple, soustraire ou additionner 1 à la variable "X Bilou", dans l'exemple précédent, permettrait de téléporter l'événement à gauche du héros, ou à droite, etc.

Par exemple, si vous voulez faire en sorte que votre héros jette des missiles, eh bien vous pouvez utiliser un événement en guise de missile, et lorsque le joueur appuie sur la touche d'action, téléporter cet événement sur le héros (Avec l'exemple donné plus haut), et déplacer l'événement "missile" dans la direction voulue...


icone La commande "Afficher image"/"Déplacer image"


Dans les commandes d'événements :
RM2003.... : Page 2, colonne 2, ligne 6 et 7
RMXP......... : Page 2, colonne 2, ligne 1 et 2
RMVX/ACE : Page 2, colonne 2, Images et climat > Ligne 1 et 2


(Exemple sous RM VX Ace, mais c'est strictement pareil dans toute les versions)

Le fait d'afficher ou déplacer une image selon des coordonnées X et Y définies par deux variables, c'est très utile !

Il faut bien comprendre en revanche que les coordonnées de l'image se font au pixel près, et ont pour origine le coin en haut à gauche de la fenêtre de jeu.

Eh bien c'est pratique, on a déjà entendu cette définition... C'est aussi celle des coordonnées écrans du héros et des événements ! Elles sont définies exactement de la même manière. Ce qui veut dire qu'on peut par exemple récupérer les coordonnées X écran, Y écran du héros dans deux variables, et afficher ou déplacer une image en prenant pour coordonnées cible ces deux variables. Cela aura pour effet d'afficher ou déplacer une image directement sur le héros ou sur un événement !

Il est possible également de calculer soi-même les coordonnées des images, vous pouvez par exemple lire le making of de mon BilouConcept : Vaisseau3D (Ou y jouer, plus directement !) afin de voir la puissance de l'utilisation des variables dans l'affichage et le déplacement des images !

Par exemple, si vous voulez faire une image de curseur que le joueur va déplacer avec les touches directionnelles, il suffit de donner une première valeur X, Y aux deux variables, qui sera la position initiale du curseur, et additionner ou soustraire ensuite la valeur de déplacement si le joueur appuie sur les touches directionnelles. Par exemple, si le joueur appuie sur "droite", il faut déplacer l'image vers la droite, donc sa coordonnée X doit augmenter. (Ce qui se traduit simplement par une addition, quoi.)

Dans le cas d'un menu entièrement créé en événement, on peut calculer la position X et Y de l'image du rectangle de sélection du menu en fonction de l'index du bouton sélectionné en question. Il suffit simplement de mesurer dans un logiciel de dessin ou de griffonner sur un bout de papier pour savoir quelle formule permettra de déterminer la position X, Y de l'image en fonction de l'index survolé.
Par exemple : Pour une liste de boutons alignés verticalement, le premier bouton ayant pour index "0" => La coordonnée X du rectangle de sélection ne change pas, mais Y = Position de l'index 0 + Index actuel * décalage vertical entre les boutons


icone La commande "Stocker l'ID d'un terrain" [RM2003 ONLY!]


Page 2, colonne 1, ligne 12


(Comment stocker l'ID du terrain sous RM2003)

Dans RM2003, on stocke l'ID du terrain dans la variable qu'on veut, à partir d'une position donnée manuellement ou par l'intermédiaire de deux autres variables. C'est à dire que si on veut stocker l'ID du terrain en dessous du héros, il faut d'abord modifier les deux premières variables pour les rendre égales à la position du héros.

L'outil de RM2003 n'est pas mal pensé, car il permet de contrôler l'ID du terrain à quelle position sur la carte.

Qu'est ce qu'un terrain ? Pourquoi le récupérer ?

Je l'ai déjà évoqué dans la première partie de ce tutoriel :
"L'excellent Joke" a dit :

C'est le genre d'outil très utile pour faire des bruits de pas, des ronds dans l'eau, des trous qui font chuter le héros dedans, etc. Il suffit de vérifier si le héros ou l'événement se trouve positionné sur tel ID de terrain.

C'est d'ailleurs il me semble la seule utilité de l'option "Terrain" dans l'édition des chipset sous RMXP :


(Comment modifier les terrains sous RMXP)


En mode "Terrain", on peut assigner à chaque carreau du chipset un numéro, pour programmer ensuite des actions si on est sur tel terrain. (compris entre 0 et 7 sous RMXP et VX ACE, ce qui permet 8 type de sols différent, sous RM2003, on peut avoir jusqu'à 5000 types de terrains différents)

Par exemple, si je veux que le héros tombe s'il marche dans un trou, il suffit que je mette l'ID "1" par exemple aux carreaux de trous d'un chipset, et dans un événement en processus parallèle, sur la map en question, il n'y a qu'à faire "modifier variable "ID terrain" = Héros : ID du terrain", suivi de la condition "Si "ID terrain" = 1" pour coder simplement à l'intérieur la chute du héros !


Seulement mon explication a été brève, car il s'agissait d'expliquer la commande "Modifier variables", et seul RPG Maker XP propose d'enregistrer l'ID du terrain à travers cette commande.

Équivalent dans RPG Maker XP : La commande "Gestion des variables"

Page 1, colonne 2, Ligne 2

Je l'ai déjà expliqué, voilà, il suffit de faire "Modifier variables : L'événement : Celui que tu veux : Terrain".

Contrairement à RM2003, on récupère l'ID du terrain foulé par le héros ou un événement, mais pas celui à n'importe quelle position. Qu'à-cela-ne-tienne, si on veut vraiment récupérer l'ID d'un terrain aux coordonnées X et Y que l'on veut, il suffit d'utiliser un événement invisible qu'on va déplacer où on veut grâce à la commande "Modifier la position d'un événement", expliqué plus haut, et ensuite récupérer l'ID du terrain foulé par ce dernier.

N'existe pas dans RPG Maker VX !

RMVX a perdu toute notion de terrain, c'est nul.

Équivalent dans RMVXAce : La commande "Récupérer des informations"

Page 3, colonne 2, Carte > Ligne 5

Cette commande exclusive à RMVXACE en regroupe plusieurs autres, et apporte de nouvelles choses que je vous expliquerais un peu plus loin dans ce tutoriel.
Pour récupérer l'ID du terrain avec cette commande, il suffit de mettre "Numéro de terrain" en "Type d'information"... Et ça fonctionne ensuite exactement de la même manière que la commande "Stocker l'ID d'un terrain" de RPG Maker 2003.


icone La commande "Stocker l'ID d'un événement" [RM2003 ONLY!]


Page 2, colonne 1, ligne 13


(Stocker l'ID d'un événement sous RPG Maker 2003)

Cette commande se configure exactement de la même manière que "Stocker l'ID d'un terrain", on donne la position, soit directement sur la carte, soit avec deux variables, sauf que ça ne va pas stocker l'ID du terrain, mais l'ID de l'événement se trouvant à la position définie.

Cette commande est très utile, par exemple, associée avec la commande "Appeler événement" qui a des options elles-aussi exclusives à RM2003. En effet, on peut appeler un événement de la carte où se trouve le joueur, depuis deux variables : Une variable qui renseigne l'ID de l'événement, une seconde qui renseigne le numéro de la page à appeler.
Par exemple, dans un menu d'objet fait en événement, où chaque objet serait un événement, on pourrait non seulement savoir sur quel objet se trouve le curseur de sélection directement à partir de ses coordonnées X, Y, (Car on récupère l'ID de l'événement correspondant à l'objet), mais on peut également appeler une page de cet événement "objet" dans laquelle on pourrait programmer son usage, ou plus complexe, un déplacement de lui-même vers des coordonnées définies par deux variables, ce qui permettrait au joueur de réorganiser manuellement l'emplacement des objets du menu.

La combinaison de ces deux commandes est très utilisée parmi les utilisateurs du patch de cherry permettant de faire un point&click sous RM2003. En effet, à chaque fois qu'on clique sur un carreau, on peut exécuter l'événement placé sur le carreau correspondant, directement à partir des coordonnées X/Y du curseur, avec cette méthode.

Il n'y a pas malheureusement pas d'équivalent dans RM XP et VX !

Équivalent dans RMVXAce : La commande "Récupérer des informations"

Page 3, colonne 2, Carte > Ligne 5
Une fois encore, cette nouvelle commande permet entre d'autres options de récupérer l'ID de l'événement correspondant aux coordonnées X et Y que l'on donne. Cela fonctionne exactement pareil que RPG Maker 2003, une fois de plus.


icone La commande "Récupérer des informations" [RMVXACE ONLY!]


Page 3, colonne 2, Carte > ligne 5


(Commande exclusive à RM VX Ace)


Nous avons déjà parlé deux fois de cette commande, on sait donc comment l'utiliser pour récupérer l'ID d'un terrain, et l'ID d'un événement. Mais on peut observer qu'on peut récupérer quatre autres informations exclusives à Ace.

ID du tile (couche 1, 2, 3) :
Je vous dis d'entrée, la seule chose que j'ai compris, c'est que c'est incompréhensible !

Il faut déjà savoir qu'un tile, c'est le petit carreau de graphisme qu'on pose sur la map pour... mapper. Petit carreau qui vient justement du Tileset. Donc ces trois informations possible permettent d'étudier directement quels éléments graphiques ont été posés à tel endroit.

Nous connaissons les tilesets A1..5, B, C, D, E... C'est sans rapport avec les couches 1, 2, 3; si ce n'est qu'on peut retenir que les tilesets "A1, A2, A3, A4, A5" appartiennent à la couche 1, les tilesets "A1, A2" contiennent des éléments de couche 2, et que les tilesets "B, C, D, E" appartiennent à la couche 3...

En gros, la couche 1, c'est la couche la plus basse, et donc, le sol, les murs... La couche 2, c'est encore le sol, mais ce qui vient se superposer avec la couche 1 : Les herbes hautes, les nénuphars, les trous, les craquelures, les marais. Si on prend par exemple le cas des herbes hautes, elles sont affichées au-dessus de l'herbe normale, donc elles appartiennent à la couche 2. Pour la couche 3, c'est tout le reste qui vient habiller la map encore par-dessus, c'est à dire, ce que vous pouvez voir à partir du tileset B.

Et comment RPG Maker arrive à nous chier une ID avec tout ça... Ce monsieur nous donne la réponse !

Bref, par exemple, l'ID d'un autotile est une valeur entre 2048 et 8191, ce nombre vient de la formule "2048 + (48 * autotile) + index", l'index varie selon la combinaison des petits carrés de coins, du genre un bord dessiné à droite et à gauche ça correspond à l'index 32... Il y a 47 index différents. Ce pourrait être intéressant de récupérer cet index, mais on ne peut même pas, comme

icone Des commandes courantes...



(Exemple BATEAU.)


On utilise encore des variables à droite à gauche, dans certaines commandes d'événements...

- Dans la commande "Modifier les objets", on peut utiliser une variable pour dire combien d'objets on ajoute ou retire. (Dans RM2003 même on peut utiliser une variable pour définir l'ID de l'objet en question)

- Idem pour "Modifier argent, arme, armure, PV, expérience, niveau"...

- Dans RM2003, avec la commande "Modifier l'équipe", on peut ajouter ou retirer un membre selon une ID définie par une variable... Très pratique pour faire un système de réorganisation d'équipe !

- Dans RM2003, on peut même pointer un interrupteur avec une variable...
(En savoir plus...)

icone La commande "Modifier interrupteur" RM2003 ONLY!


Page 1, colonne 1, ligne 6

Bien sûr, cette commande existe dans tous les RM, mais seul RPG Maker 2003 propose de modifier un interrupteur défini par une variable.


(Modifier un interrupteur défini par une variable, uniquement sous RM2003)


Depuis XP, il est possible de le faire en script :
Code (Ruby):
  1. $game_switches[$game_variables[5]] = true


Et on comprends facilement pourquoi on ne peut plus le faire directement en événement... Simplement car c'est très peu utile... Ça peut s'avérer utile si on associe par exemple une plage d'interrupteurs (interrupteurs qui se suivent, par exemple, ceux de 005 à 012) à quelque chose, comme par exemple, les événements de la carte... En récupérant l'ID d'un événement quelconque, on pourrait activer ou désactiver l'interrupteur correspondant à l'événement en faisant par exemple :
Code (Autre):
  1. <> Modifier variable : "X" = ce qu'on veut
  2. <> Modifier variable : "Y" = ce qu'on veut
  3. <> Stocker l'ID d'un événement : Par variables : "X", "Y" dans "ID interrupteur"
  4. <> Modifier variable : "ID interrupteur" additionner 50
  5. <> Modifier interrupteur : Par variable "ID interrupteur" : actionner

Avec ce code, si par exemple l'événement 3 vient se trouver aux coordonnées "X, Y qu'on veut", l'interrupteur d'ID "50+3 = 53" sera actionné...

Ce type de code est tellement saugrenu que cette information est plus anecdotique qu'autre chose... C'est à vous d'être le génie de RM2003 qui trouvera une utilité certaine à cette utilisation ! *_*




BILOU !



Et voilà ! Que vous me croyez ou non, j'ai souvent rencontré des gens qui disaient "Les variables, j'y comprends rien, je ne vois pas l'utilité"

Et pourtant ce long tutoriel n'est qu'un petit start-up, qui sert juste à montrer vous faire comprendre les différentes options disponibles autour des variables. Vous pouvez déjà voir Vaisseau3D qui fonctionne uniquement avec des manipulations de variables. Vous pourrez voir un bon nombre de tutoriels qui vous apprennent comment manipuler concrètement des variables. Bref, les variables sont très utiles et très simples à utiliser, si vous voyez quelqu'un se dire le contraire, j'espère que mon tutoriel lui changera les idées !

Si vous avez des questions, ou souhaitez simplement me remercier Smiley Eh bien vous savez déjà que les commentaires sont libres ici !

N'hésitez surtout pas à partager les tutoriels et articles BilouCorp partout autour de vous, pour un monde meilleur !

Bilou à tous et à toutes !

Joke Smiley

Index

Tags

Annonces
Bilou Concept
BilouCorp
Découvertes
Event Extender
Jeux
RPG Maker
Script
Tutoriel

Auteurs

2cri
Grim
Hiino
Joke
Nuki
PypeBros
Raho
S4suk3

Suivez nous
Rss

Poster un commentaire



Commentaires

Jadel15
Bonjour j'ai pas trop compris comment stocker des coordonnées (je suis vx ace) Parce que je sais pas où je dois écrire les commandes et je ne sais pas si je dois stocker les coordonnées dans différentes variables
Merci si quelqu'un pouvait m'aider Posté le : 25/03/2017 à 20h38
Jadel15
Bonjour j'ai pas trop compris comment stocker des coordonnées (je suis vx ace) Parce que je sais pas où je dois écrire les commandes et je ne sais pas si je dois stocker les coordonnées dans différentes variables
Merci si quelqu'un pouvait m'aider Posté le : 25/03/2017 à 20h38
NesMuse
Très bon Tutoriel, je viens de retirer l'un des voiles de mon ignorance.
Posté le : 22/01/2017 à 23h00
LeM
Juste pour dire... en début d'article, tu as écrit "[Partie 1/2 : Les commandes qui utilisent les variables !]" ; il s'agit de la Partie 2.

Bisous ! Posté le : 22/04/2016 à 20h36
Drimms
Merci beaucoup j'ai appris beacoup de choses !
Posté le : 21/10/2015 à 20h18
???
Bonjour,
Comment se traduit en script
variable = tag du terrain de l'event
j'ai essayé un
$game_variables[1] = $game_map.events[@event_id].terrain_tag
ou
$game_variables[1] = $game_map.terrain_tag($game_map.events[@event_id].x,$game_map.events[@event_id].y)
mais ça ne marche pas
help ^^ Posté le : 22/04/2015 à 17h09
blackmaester
merci Posté le : 03/04/2015 à 06h55