-
Notifications
You must be signed in to change notification settings - Fork 10
Variables et interrupteurs
Les variables et les interrupteurs sont très utilisés dans la création de jeu RPG Maker. En général, les fenêtres du logiciel permettent d'affecter des variables à certaines valeurs (par exemple la position x et y d'une image ou encore les coordonnées de téléportation du héros), cependant, leur utilisation dans un appel de script est long. Pour appeler une variable et un interrupteur, la syntaxe est comme ceci :
-
$game_variables[id désiré]
pour accéder à une variable -
$game_switches[id désiré]
pour accéder à un interrupteur
Le premier objectif de ce script aura été de simplifier l'accès aux variables et aux interrupteurs. Maintenant il suffit d'utiliser les lettres V
(pour les variables) et S
(pour les interrupteurs).
Leur syntaxe est donc comme ceci :
-
V[id désiré]
pour accéder à une variable -
S[id désiré]
pour accéder à un interrupteur
L'attribution de valeur à une variable devient donc très facile. Par exemple, pour donner la valeur 134 à la variable 98, il suffira de faire, dans un appel de script (ou dans un script complet) :
V[98] = 134
Étant donné qu'il est possible d'utiliser cette syntaxe partout, il serait tout à fait envisageable de faire :
V[V[12]] = V[1]+V[2]*V[3]
Ce qui correspond à dire que la valeur de la variable 12 sera l'ID de la variable que l'on modifie, et qu'on lui donnera la valeur de la variable 1 plus le produit de la variable 2 et de la variable 3.
Il existe une série d'opérateur en plus de +
et *
, voici une liste rapide (et potentiellement non exhaustive) des opérateurs possibles :
-
+
Addition, par exempleV[1] = V[2] + V[3]
-
-
Soustraction, par exempleV[5] = V[3] - 3
-
*
Multavaitiplication, par exempleV[10] = 7 * V[9]
-
/
Division entière (5/2 = 2), par exempleV[8] = 2/4 + (V[11] / 3)
-
**
Puissance (3 ** 2 = 9), par exempleV[6] = V[1] ** V[2]
-
%
Modulo, le reste de la division entière, par exempleV[1] = V[2] % 4
Il existe un petit raccourcis syntaxique pour compresser certaines expressions :
-
x += y
:x = x + y
-
x -= y
:x = x - y
-
x /= y
:x = x / y
-
x *= y
:x = x * y
-
x %= y
:x = x % y
Cette notation peut être évidemment plus complexe. Par exemple : V[1] += (10 * (V[2] ** 2))
.
Comme pour les opérations arithmétiques classiques, les parenthèses permettent de changer les priorités des opérations.
Même si cette extension peut sembler superflue, elle permet de gagner un temps incroyable. Je vous invite à essayer de faire l'expression précédente (V[1] += (10 * (V[2] ** 2))
) en Event Making classique, vous verrez que ça prendra beaucoup plus de lignes et de temps.
Comme pour les variables, les interrupteurs sont accessibles via un raccourci, S[ID]
. On ne peut donner que deux valeurs à des interrupteurs, true
, signifiant que l'interrupteur est activé ou false
, indiquant que l'interrupteur est désactivé. Voici quelques expressions :
-
S[1] = true
: active l'interrupteur 1 -
S[2] = false
: désactive l'interrupteur 2 -
S[3] = S[1]
: donne à l'interrupteur 3, la valeur de l'interrupteur 1
Alors que les variables étaient munies d'opérations arithmétiques, les interrupteurs sont liés d'opérations logiques. On peut donc combiner des interrupteurs:
-
S[1] or S[2]
, pouvant s'écrire aussiS[1] || S[2]
renverra une expression vraie si l'un des deux est vrai -
S[1] and S[2]
, pouvant s'écrire aussiS[1] && S[2]
renverra une expression vraie si les deux sont vrais -
!S[1]
, pouvant s'écrire aussinot S[1]
renverra l'inverse de l'expression.
Comme pour les opérations arithmétiques, les opérations logiques peuvent être composées. Par exemple une expression telle que : (S[1] and S[2]) or (not S[3])
(strictement équivalente à (S[1] && S[2]) || (!S[3])
) est parfaitement valide.
Dans RPGMaker, on a tendance à ne faire que "activer" ou "désactiver" des interrupteurs. Pour activer (ou désactiver) un interrupteur on utilise en général une condition. Par exemple : Si ma variable 5 est plus grande que 6, alors j'active l'interrupteur 3, sinon je le désactive". C'est assez verbeux et long, alors que concrètement, l'expression
ma variable 5 est plus grande que 6est déjà une expression qui vaut
trueou
false. Donc on pourrait simplifier ce genre de comportement par :
S[3] = ma variable 5 est plus grande que 6?`.
Nous allons survoler, dans cette section, comment produire des valeurs valides pour un interrupteur. Combinés avec des opérateurs logiques, vous verrez qu'il sera possible de représenter énormément de cas de figure et donc d'économiser des conditions !
Il existe, dans Ruby, des opérateurs permettant la comparaison de valeurs. Nous allons en survoler quelques uns.
-
x == y
: renvoietrue
si est x égal à y,false
sinon -
x != y
: renvoietrue
si est x différent de y,false
sinon. (Doncx != y
est identique à !(x == y)` -
x > y
: renvoietrue
si est x est strictement superieur à y,false
sinon -
x < y
: renvoietrue
si est x est strictement inférieur à y,false
sinon -
x >= y
: renvoietrue
si est x est superieur ou égal à y,false
sinon -
x <= y
: renvoietrue
si est x est inférieur ou égal à y,false
sinon.
Au travers de ces opérateurs il est possible de composer des expressions plus complexes. Par exemple, si je veux activer un interrupteur si ma variable 13 est plus grande que ma variable 12, et que la somme de ma variable 7 et de ma variable 8 donne un multiple de deux ou simplement que l'interrupteur est déjà activé, je pourrais simplement écrire ça : S[1] = S[1] or ((V[13] > V[12]) and (V[7] + V[8])%2 == 0)
.
Comme vous pouvez le voir, le parenthèsage me permet de m'en sortir lors de la rédaction d'expressions complexes.
Une condition (en Ruby ou dans un évènement) n'est exécutée que si son entrée vaut true
. Sinon, elle rentre dans le Sinon
, le else
. Donc comme un interrupteur est, en amont, toujours égal à true
ou false
, la condition ne s'exécutant que si un interrupteur est activé peut se limiter à :
Si Script : S[1] alors
code si l'interrupteur est acitvé
Sinon
code si l'interrupteur n'est pas activé
fin condition
Tout ce qui a été survolé précédemment est donc toujours d'actualité dans les conditions. Par exemple, je peux tout à fait formuler une question de cette forme :
Si Script > V[1] == 10 and (V[3] + 4 > V[10]) and (not S[5])
Qui en français, correspondrait à "Si la variable 1 est égal à 10 et que la somme de la valeur de la variable 3 et 4 est plus grand que la valeur de la variable 10 et que l'interrupteur 5 est désactivé".
On peut spécifier n'importe quelle expression Ruby valide qui retourne un entier comme index de variable ou d'interrupteur. Par exemple S[1+2+3]
désigne l'interrupteur 6. Ou encore S[V[10]]
qui désigne l'interrupteur dont l'index est défini par la valeur de la variable 10 ou encore V[(V[10]+V[11])*3]
qui désignera la variable dont le numéro est la somme de la variable 10 et de la variable 11 multiplié par trois.
Quand nous verrons les commandes, dans une section suivante, vous verrez que certaines des commandes renvoient des entiers, il serait donc très original, mais possible, en utilisant, par exemple, la commande mouse_x
, qui renvoie la position X de la souris sur l'écran, de faire une expression de cette sorte : V[mouse_x], mais je ne connais pas de cas de figure où ce serait utile !
Nous allons voir quelques petites techniques particulières, capables de faire gagner du temps dans des cas précis. Ces techniques ne sont pas primordiales, mais permettent de comprendre quelques petits points servant l'expressivité de RME (les exemples sont donnés pour les variables et les interrupteurs mais fonctionnent toujours que ce soit pour les variables ou pour les interrupteurs).
-
V[1], V[2] = V[2], V[1]
intervertit les valeurs de la variable 1 et 2 -
S[7..29] = true
active du 7ème interrupteur au 29ème interrupteur
Introduction
Syntaxe revisitée
- Variables et interrupteurs
- Interrupteurs locaux et variables locales
- Labels et labels locaux
- Affichage dans les messages
Commandes
Valeurs constantes
Evènements enrichis
- Evènements relatifs aux cartes
- Déclencheurs personnalisés
- Déclencheurs en combat
- Sélecteurs
- Boucles évènementielles
- Micro Evènements
Outillage avancé
- Bases de données extensibles
- Définitions de profils et couleurs pour l'afficheur de textes à l'écran
Tutoriels
- Créer des jauges simples
- Créer un QuickTime Event facilement
- Un système d'infiltration
- Un mini système multi-agent
- Un système de saisie de nom custom
- Le passeur d'écran titre
- Créer des jauges en combat
Pour les scripteurs