Je suis l'unique auteur de ce tutorial, et il n'est inspiré d'aucun autre.
Oyez, oyez, chers fusionnards
IntroductionCe système va servir certainement à plusieurs personnes, surtout les propriétaires de A-RPG. Mais aussi pour les RPG classiques. J'explique un peu de quoi il s'agit : Si le héros s'approche trop près d'un ennemi (ou n'importe quoi, d'ailleurs, ...) l'ennemi en question le poursuit. (Mais vous n'êtes pas obligé d'appliquer ce système de détection avancé pour des ennemis. Vous pouvez par exemple faire un très grand feu, et si le héros s'approche trop, il commence à griller^^ =D)
Système de base (champ de vision rectangulaire)L'ennemi voit aussi loin devant lui que derrière lui. (Plus simple, tu meurs^^)Eh bien, dans ce système, qui n'est pas bien compliqué, l'ennemi peut voir à
x carreaux. Si le héros va dans cette zone (proche de
x), et bien l'ennemi le poursuivra.
Pour cela, on prend une variable, et on lui assigne la valeur de
x.
Ensuite, on prendra 4 autres variables, qui seront respectivement égalent au coordonnée en
x de l'ennemi, au coordonnée en
y de l'ennemi, au coordonnée en
x du héros, au coordonnée en
y du héros.
On calculera la distance en case du héros par rapport à l'ennemi.
Allez, hop, on passe au code^^Ce qui donne : (toutes les explications sont dans les commentaires)
- Code:
-
Map ID: 1, Nom: Intro
Evènement ID: 003, Nom: Ennemi
------ PAGE 1 ------
Conditions de l'évènement :
Apparence:
- Character : 005-Fighter05, Ton : 0, Regarde en Bas, Modèle n°0, Opacité : 255, Transparence : Normal
Mode de déplacement:
- Type de déplacement : Aléatoire
- Vitesse de déplacement: Lent
- Fréquence de déplacement: Basse
Options:
- Animé lorsqu'il se déplace
Conditions de déclenchement:
- Processus Parallèle
Commandes d'évènement:
Commentaire : On va faire en sorte que l'ennemi puisse voir à 5 cases.
Variable(s) [0003: Cases] rendre égale à 5
Commentaire : Variables de l'ennemi
Variable(s) [0004: Axe x ennemi] rendre égale à Cet évènement --> Coordonnée X
Variable(s) [0005: Axe y ennemi] rendre égale à Cet évènement --> Coordonnée Y
Commentaire : Variables du héros
Variable(s) [0006: Axe x Héros] rendre égale à Héros --> Coordonnée X
Variable(s) [0007: Axe y Héros] rendre égale à Héros --> Coordonnée Y
Commentaire : Calcul des distances
Commentaire : Les distances doivent être positives (supérieures à 0)
Condition : si la variable [0004: Axe x ennemi] est strictement supérieur à Variable [0006: Axe x Héros]
Variable(s) [0008: Distance x] rendre égale à (valeur de la variable [0004: Axe x ennemi])
Variable(s) [0008: Distance x] retirer (valeur de la variable [0006: Axe x Héros])
: Sinon
Variable(s) [0008: Distance x] rendre égale à (valeur de la variable [0006: Axe x Héros])
Variable(s) [0008: Distance x] retirer (valeur de la variable [0004: Axe x ennemi])
: Fin
Condition : si la variable [0005: Axe y ennemi] est strictement supérieur à Variable [0007: Axe y Héros]
Variable(s) [0009: Distance y] rendre égale à (valeur de la variable [0005: Axe y ennemi])
Variable(s) [0009: Distance y] retirer (valeur de la variable [0007: Axe y Héros])
: Sinon
Variable(s) [0009: Distance y] rendre égale à (valeur de la variable [0007: Axe y Héros])
Variable(s) [0009: Distance y] retirer (valeur de la variable [0005: Axe y ennemi])
: Fin
Condition : si la variable [0008: Distance x] est inférieur ou égale à Variable [0003: Cases]
Condition : si la variable [0009: Distance y] est inférieur ou égale à Variable [0003: Cases]
Afficher une animation sur Cet évènement, [Emotion-!]
Interrupteur local A activé
: Fin
: Fin
Et voilà, c'est fini. A la fin, j'ai été un peu radin sur les explications, alors^^. On vérifie tout simplement si le héros est à l'intérieur du champ de vision de l'ennemi, en regardant les distances x et y. C'est un peu compliqué, mais bon... Peut-être qu'après quelques relectures pour les plus jeunes ou débutants, il ne devrait pas y avoir de problèmes.
Système à la Laugilus (champ de vision circulaire)Pour moi, c'est une première. Disons, que c'est la première fois que je trouve une idée aussi innovant, alors qu'il s'agit d'un truc simple.
Disons aussi que je ne pense pas que cela à déjà été exploité dans tout l'univers du making (en event, du moins), et retranscrit en tutorial. (Quelle modestie =D) Aussi, j'ai longtemps hésité à le montrer, car ce système sera présent dans mon projet, et ça gachera un peu la surprise, mais bon... Le but de cette section, c'est de faire partager des connaissances, et dans ce cas, mieux vaut ne pas être égoïste^^.
Vous trouvez pas bizarre que l'ennemi voit en rectangle ? Je trouverai plus logique, pour ma part, qu'il puisse voir en cercle. Et bien nous y voilà^^
O_o, trêve de bavardage !Ok, on y arrive. Avant de commencer (...), il faut que vous sachiez que c'est compliqué. Car là, il va falloir faire intervenir mes maths adorés (
) ainsi que notre méconnu théorème de Pythagore^^. Pour comprendre, un minimum de niveau de 4° est requis. Mais on comprend tout de même mieux cela après avoir fini le programme de seconde (et l'avoir compris
).
Ainsi pour ceux qui ne comprendrons pas, ils peuvent tout de même prendre les commandes d'évènement. Je me suis débrouillé pour que la distance du champ de vision (le rayon) soit à inscrire dans une variable.
O_o, trêve de bavardage !!!Attention, c'est parti. Avec l'aide de notre Pythagore, on peut calculer la distance dans un plan orthonormé entre 2 points, avec cette formule :
- Code:
-
racine carré ((y du point 1 - y du point 2)au carré + (x du point 1 - x du point 2)au carré)
Je vous avez dit que c'était pas facile^^.
Erf, c'est pas facile, envoie les commandes que je les recopie^^Un peu d'explication sur les commandes d'abord. Là, c'est simple (...), Il n'y aura qu'une seule variable de distance, et elle sera calculé avec la formule ci-dessus. Le point 1 étant l'emplacement de l'ennemi, et le point 2 du héros. Les x et y correspondent évidemment aux coordonnées.
Mais ici, on ne va pas appliquer la racine carré, car il est impossible de la faire sous RPG Maker (sans script). Nous laissons donc toutes les unités au carré.
Bon, tu passes vraiment au code, cette fois ?Euh... oui bon... =D
- Code:
-
Map ID: 1, Nom: Intro
Evènement ID: 005, Nom: Ennemi
------ PAGE 1 ------
Conditions de l'évènement :
Apparence:
- Character : 005-Fighter05, Ton : 0, Regarde en Bas, Modèle n°0, Opacité : 255, Transparence : Normal
Mode de déplacement:
- Type de déplacement : Aléatoire
- Vitesse de déplacement: Lent
- Fréquence de déplacement: Basse
Options:
- Animé lorsqu'il se déplace
Conditions de déclenchement:
- Processus Parallèle
Commandes d'évènement:
Commentaire : Le champ de vision est le rayon (toujours en cases)
Variable(s) [0003: Cases] rendre égale à 5
Variable(s) [0003: Cases] multiplier par (valeur de la variable [0003: Cases])
Commentaire : Variables de l'ennemi
Variable(s) [0004: Axe x ennemi] rendre égale à Cet évènement --> Coordonnée X
Variable(s) [0005: Axe y ennemi] rendre égale à Cet évènement --> Coordonnée Y
Commentaire : Variables du héros
Variable(s) [0006: Axe x Héros] rendre égale à Héros --> Coordonnée X
Variable(s) [0007: Axe y Héros] rendre égale à Héros --> Coordonnée Y
Commentaire : Calcul de la distance
Variable(s) [0008: Distance x] rendre égale à (valeur de la variable [0004: Axe x ennemi])
Variable(s) [0008: Distance x] retirer (valeur de la variable [0006: Axe x Héros])
Variable(s) [0008: Distance x] multiplier par (valeur de la variable [0008: Distance x])
Variable(s) [0009: Distance y] rendre égale à (valeur de la variable [0005: Axe y ennemi])
Variable(s) [0009: Distance y] retirer (valeur de la variable [0007: Axe y Héros])
Variable(s) [0009: Distance y] multiplier par (valeur de la variable [0009: Distance y])
Variable(s) [0010: Distance totale] rendre égale à (valeur de la variable [0008: Distance x])
Variable(s) [0010: Distance totale] ajouter (valeur de la variable [0009: Distance y])
Condition : si la variable [0010: Distance totale] est inférieur ou égale à Variable [0003: Cases]
Afficher une animation sur Cet évènement, [Emotion-!]
Interrupteur local A activé
: Fin
Vous remarquerez que c'est plus court^^. Mais c'est également plus compliqué^^.
Ensuite...Pour terminer le tout, vous devez faire une seconde page d'évènement, où vous mettez : Condition de déclenchement : Si l'interrupteur local A est activé.
Et là, vous faites tout ce que vous voulez.
Ouf, et bien voilà, j'aurais révisé mes maths avant la rentré au CE1 =D^^.
En espérant que cela aura servi à quelqu'un...
Laugilus.