❤ 2Nemau Picot Le patch Maniacs ne mord pas !
Partie 2 : Le nouveau Control Variables
Note : Ce tutoriel est une traduction libre, c'est-à-dire que certains éléments ont pu être volontairement omis, et d'autres ajoutés maintenant ou par le futur selon les nouveautés du patch.
Bonne lecture !
La dernière fois, j'ai oublié de décrire une fenêtre, mais ça tombe bien car maintenant je peux lui dédier bien plus de temps. C'est l'occasion d'apprendre quelque chose qui sera utile pour n'importe quel créateur ambitieux sur RM2003, donc ouvrez grands vos oreilles (ou vos yeux, en l'occurence) !
Comment activer le nouveau Control Variables ?
L'aspect le plus important de cette nouvelle fenêtre à part l'arrangement de l'UI, est l'addition de l'option "Expression". Elle vous autorise à écrire des opérations mathématiques et logiques de façon claire et élégante. Avec les plus gros systèmes créés sur RPG Maker 2003, on doit souvent cliquer des douzaines de fois sur Control Variable, ce qui s'avère fatiguant à la longue. Mais c'est du passé maintenant, maintenant vous avez juste à vérifier que cette option en haut du menu est bien tiquée :
Dans le vif du sujet
Les deux exemples ci-dessus montrent deux manières de faire exactement la même chose. Ils mettent la variable numéro 1 à la valeur 2+3.
La boîte V[expr] signifie que le résultat des calculs sera utilisé pour déterminer l'id de la variable où on souhaite le résultat. Les calculs de cette zone sont réalisés avant.
A mon sens c'est un peu confus car dans la zone expr, on peut calculer sur plusieurs variables d'un coup. Cependant, si on quitte la zone V[expr] vide, on doit se rappeler que la commande dans la fenêtre de l'événement ressemblera à ça :
Ce n'est pas non plus très lisible. Dans ce cas, peu importe ce qu'on choisit dans Operations, que ce soit Set, Add, Sub, etc, car l'opération est définis en dessous dans tous les cas, et la variable à l'id 0 n'existe pas.
Plus loin dans le tutoriel, toutes les opérations seront réalisées avec seulement la zone expr. C'est plus lisible dans le cadre de ce tutoriel, mais dans l'éditeur c'est plutôt l'opposé.
Le cas suivant vaut aussi le coup d'être mentionné :
Ici la variable numéro 1 vaudra 5, et l'opération v[2] -= v[1] sera réalisée sur la variable numéro 2. Donc 5 sera soustrait de la variable 2 (qui vaut la valeur qu'on met pour v[1]).
Plus tôt c'était noté comme ceci : v[1] = 2 + 3. v[] signifie qu'on se réfère à une variable. Dans ce cas il s'agit de la variable 1. Nous faisons qu'elle vale le résultat 2 + 3 (5).
Autre chose importante, le bouton Test : dans le cas où on ferait une erreur de syntax en tapant l'expression, on obtiendrait un message (en anglais) sur l'erreur.
On peut aussi utiliser les interrupteurs dans expr. Ici, on fait que l'interrupteur numéro 2 soit activé (ON = 1, OFF = 0).
Il existe aussi une formule pour effectuer le calcul sur une sélection de variables/interrupteurs. Dans cette exemple, je modifie les variables 1, 2 et 3 pour qu'elles valent 8.
On peut aussi assigner différentes valeurs à une sélection. On réalise cela avec une sorte d'array temporaire qui stoke plusieurs valeurs, en l'occurence [2,4,6].
Pratique
Et maintenant à vous !
Que vaut v[1] ?
Spoiler (cliquez pour afficher) v[1] = [v[2] = 3, v[3] = 6, 3][2] + v[2] + v[3]
v[1] vaut 12. C'est dû aux index de l'array temporaire qui débutent à 0. A l'index 0 se trouve v[2], au 1 v[3], et au 2 le nombre 3. Le [2] signifie que l'élément à l'index 2 est sélectionné de l'array.
Vous pensez "Okay, mais pourquoi j'utiliserais ça" ? Dans Expression, on ne peut entrer qu'une expression. La méthode ci-dessus permet de contourner cette limitation. De cette manière, on peut immédiatement mettre les valeurs de la variable v[2] à 3 et v[3] à 6, et en plus on exécute l'opération et on met le résultat dans v[1].
Une autre chose qu'il est bon de savoir est qu'on peut librement insérer v[].
Ce qui a le même effet qu'utiliser Variable ID : on ne réfère pas directement à la valeur de la variable mais on l'utilise pour récupérer la valeur d'une variable désignée par son index (principe d'un pointeur).
L'opérateur && (and)
Dans cet exemple, on utilise une nouvelle fois notre pseudo array temporaire pour arranger les variables. L'opérateur && fonctionne de telle manière que si la valeur à gauche est différente de 0, le résultat sera celui de droite, et si celui-ci vaut 0 le résultat sera 0. Pour l'ensemble de cette expression, le résultat de cette expression sera donc 0 car v[2] + v[2] = 0.
L'opérateur || (or)
L'opérateur || fonctionne différemment. Si la valeur à gauche n'est pas 0, il retourne la valeur à gauche, sinon il retourne la valeur à droite. Dans ce cas, le résultat vaut 1.
Autres extras
Maintenant, des fonctions moins logiques et mathématiques, mais toujours utiles :
- change le signe d'un nombre ou soustrait, si utilisé entre deux nombres/variables.
! change n'importe quelle variable ne valant pas 0 en 1, et toute variable qui vaut 0 vaut 1. Fonctionne de la même manière pour les interrupteurs.
~ négation pour les bit
+ additionne
* multiplie
/ division entière
% reste de la division
| "or" bit
& "and" bit
^ "XOR" bit
<< échange à gauche bit
>> échange à droit bit
== égal à
!= différent de
< plus petit que
> plus grand que
<= plus petit que ou égal à
>= plus grand que ou égal à
Enemy (id, type). Retourne une information donnée selon l'id de l'ennemi :
00 : HP
01 : MP
02 : Max HP
03 : Max MP
04 : Attack
05 : Defense
06 : Magic
07 : Agility
08 : ID (dans la database)
09 : ATB Gauge
Misc (type) :
00 : Monnaie
01 : Temps restant sur le Timer 1
02: Nombre de membres dans l'équipe
03: Nombre de sauvegardes
04: Nombre de combats
05: Nombre de victoires
06: Nombre de défaites
07: Nombre de fuites
08: emplacement du tick sur un fichier MIDI
09: Temps restant sur le Timer 2
10: Date
11: Heure
12: Temps de jeu total écoulé (en frames)
13: Version du patch
Math :
Pow (a, b) – élève a à la puissance b
Min (a, b) – renvoie à la valeur la plus petite
Max (a, b) – renvoie à la valeur la plus grande
Abs (a) – renvoie une valeur absolue
Sqrt (a, b) – racine carrée de a multiplié par b
Sin (a, b, c) – sinus de a et b multiplié par c
Cos (a, b, c) – cosinus de a et b multiplié par c
Atan2 (a, b, c) – l'arc tangente de a et b multipliée par c
Clamp (a, b, c) – oblige la valeur a à ne pas être inférieure à b et pas supérieure à c
Condition? Value if True:Value if False – retourne l'une des deux valeurs selon la condition
Rnd (a, b) – retourne une valeur aléatoire entre a et b (inclus).
Item (id, type) :
00: Est possédé ?
01: Quantité
Actor (id, type) :
00: Niveau
01: Expérience
02: HP
03: MP
04: Max HP
05: Max MP
06: Attack
07: Defense
08: Magic
09: Agility
10: Weapon ID
11: Shield ID
12: Helmet ID
13: Armor ID
14: Accessories ID
15: ID dans la database
16: niveau de la gauge ATB
Event (id, type) :
00: Map ID
01: Tile X Coordinate
02: Tile Y Coordinate
03: Direction
04: X on screen
05: Y on screen
06: Event ID
Conclusion
Ce tutoriel a été écrit à partir du fichier vexpr.txt, inclus avec le patch, et ma propre expérience. Dans le prochain article, nous aborderons les choses que nous avons apprises pour construire quelques mécaniques. Grâce à quelques astuces, nous sommes capables d'inclure toutes les opérations nécessaires sur les variables dans une Expression. Est-ce pratique ? Non, pas vraiment. Cependant, pour ceux à l'aise en maths et logique, cela va assurément accéler la construction de nouveaux systèmes. Mais c'est aussi utile pour des utilisateurs moins habitués, car parfois une ligne bien écrite vaut bien dix Control Variable.
Cet article a été traduit et publié avec l'autorisation de Michu, qui a traduit l'article du polonais en anglais.
Source : Soul, "Maniacs Patch Won't Bite You # 2 - New Control Variables", in RMteka, 3 juin 2022 [consulté le 10 mai 2023], https://www.rmteka.pl/maniacs-patch-wont-bite-you-2-new-control-variables/.
|