Oniromancie: Tutoriels - Créer un détecteur "à la Aliens" grâce aux événements


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

News: Concours des Alex d'Or 2017-18: (...) / News: MegaMaker : créez votre propre (...) / News: Test de Tinker Quarry / Sorties: Leave the Room / Jeux: Leave the Room /

Chat  (26 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

52 connectés actuellement

9179877 visiteurs
depuis l'ouverture

951 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Le Palais Créatif

Making4Life

Alex d'Or

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs





Créer un détecteur "à la Aliens" grâce aux événements
Ecrit par Chuck Chan

But :
Créer un détecteur grâce aux événements.


Mon parti pris :
Le héros va demander à un totem de retrouver des PNJ dispersés sur la map. Il devra entrer le nom de la personne à retrouver, et le totem lancera un sortilège sur le héros lui donnant la direction où fouiller, à la manière du capteur de mouvement de Aliens.

image
Le sortilège m'indique avec ces ondulations que mon camarade est tombé dans le puits





Version courte (principe de base) :

En enlevant toutes les fioritures, voilà ce qu'il nous faudra :

1 - une animation ;
2 - un événement commun ;
3 - un interrupteur.


1 - On commence par créer l'animation du détecteur (j'ai opté pour des ondulations du genre "radar", à savoir l'apparence "Special 6") avec un son de pulsation pas trop agressif (j'ai choisi "Wind 1") puisqu'il va se répéter en boucle.

L'animation en détail

Spoiler (cliquez pour afficher)



On la duplique en 8 exemplaires et, avec l'option "Tout déplacer", on les place aux 8 points cardinaux par rapport au centre de l'animation, en les nommant en conséquence NORD, NORD-EST, EST, SUD-EST, etc. C'est tout pour l'animation.


2 - Ensuite, on crée un événement commun "Détecteur" en Processus parallèle avec un interrupteur "Détection". Dans cet événement, on crée une boucle avec en tête deux variables "X héros" et "Y héros" qui détermineront la position du héros en tout temps, et dans cette boucle, on crée les 8 conditions pour l'affichage de l'animation.

Comment déterminer les variable de la position du héros

Spoiler (cliquez pour afficher)



Ce qu'on veut, c'est qu'une fois les variables de la cible déterminées par l'interrupteur :
- l'animation NORD s'enclenche si le héros est à la fois sur le même axe X que la cible et plus bas sur l'axe Y de la cible ;
- l'animation NORD-EST s'enclenche si le héros est à la fois à gauche sur l'axe X de la cible et plus bas sur l'axe Y de la cible ;
- etc.

Une fois les 8 conditions posées, on ajoute une commande "attendre" de minimum 1 frame pour éviter que la boucle ne freeze le jeu (comme je ne veux pas que mon détecteur pulse trop vite, je mets 60 frames), et on ajoute aussi une commande de sortie pour laisser au joueur la possibilité de couper le détecteur s'il veut changer de quête, par exemple. Je choisis d'associer le bouton Z à l'interrupteur "Détection = désactivé" (attention, le bouton Z correspond par défaut à la touche clavier D).

L'événement commun en détail

Spoiler (cliquez pour afficher)




3 - Reste à créer l'interrupteur. Après un dialogue d'introduction du totem précisant que le bouton Z déclenche le détecteur, on définit les variables "X cible" et "Y cible" avec les coordonnées de notre cible sur la map (les coordonnées d'une case s'affichent tout en bas à droite quand on la sélectionne en mode éditeur), et on finit en activant l'interrupteur "Détection".

L'interrupteur du totem

Spoiler (cliquez pour afficher)




Et c'est parti, la chasse au trésor peut commencer ! Elle s'arrêtera avec la phase de dialogue de fin de quête qui désactivera l'interrupteur "Détection".

La fin de la quête

Spoiler (cliquez pour afficher)




Si vous voulez que le héros détecte un objet enterré dans le sol (ce n'est pas le cas dans mon exemple puisque le puits empêche le héros de marché sur la coordonnée exacte de la cible), il suffit d'ajouter une animation supplémentaire centrée sur le héros, et d'ajouter une condition dans l'événement commun pour le cas où "X héros = X cible" et "Y héros = Y cible".





Version complexe (parce que mon scénario l'exige) :

Nouvelles règles :
Tout ça, c'est très bien, mais je veux faire durer le plaisir pour le joueur en le faisant chercher TROIS personnages dispersés sur toute la map, ce qui implique dans mon cas de traverser minimum 3 lieux et la World Map. En plus, je veux que ce soit au joueur d'entrer le nom de sa prochaine cible, et une des trois cibles ne sera pas trouvable car elle se trouve sur un autre continent, loin au Nord. Challenge accepted ?


Ce serait trop compliqué de passer par les événements communs pour les variables de cible qui changeront à chaque map (possible mais compliqué). On va faire plus simple et ajouter un événement en processus parallèle sur chaque map nécessaire. Perso, j'ai choisi de le faire sur toute les maps de mon île (6 + world map), mais si c'est trop pour vous, il n'y a qu'à le faire sur les maps concernées et mettre un texte "vous êtes trop loin du totem" qui s'enclenche avec l'interrupteur "Détection" sur les maps hors zone.

Dans cet exemple, je ne vais me servir que d'un interrupteur, et le changement de cible se transmettra aux variables par une variable, comme dans ce tuto de Joke.

Tout cela implique de changer un peu l'événement commun pour éviter une latence qui risque de déboussoler le détecteur (ça m'est arrivé, probablement à cause des 60 frames de la commande "attendre"). On supprime donc les deux variables "X héros" et "Y héros" d'ici pour les rajouter dans chaque événement où elles se calculeront en même temps que les variables "X cible" et "Y Cible" (détails plus bas dans l'image "L'événement de la cabane de bûcheron ").

Commençons cette fois par l'interrupteur. Pour lui intégrer cette fonction de recherche par nom, on s'inspire de la méthode des portes codées de Vyslanté. Il faut tout d'abord créer un héros (par exemple le 007) sans nom, puis ajouter la commande "Entrer un nom..." après la phrase d'intro "Qui veux-tu retrouver ? (entrer un nom en majuscule)".

Si le joueur cherche Pierre et tape le nom sans erreur, il validera la condition "le héros 007 a Pierre pour nom". Suite à quoi on reset le nom du héros avec la commande "Modifier le nom...", on enclenche l'interrupteur "Détection", et on passe la variable "Cible" sur 1. On répète l'opération pour les deux suivants en incrémentant la variable "Cible", et on termine avec la condition "si Détection reste désactivé" qui affiche un message d'erreur et reset le nom du héros 007.

Le détail de l'interrupteur

Spoiler (cliquez pour afficher)




L'interrupteur est prêt, l'événement commun aussi, l'animation ne change pas ; il ne reste plus qu'à semer des événements en processus parallèle. Ils devront contenir la définition des variables "X héros" et "Y héros" (identiques à ce qui se trouvait dans l'événement commun), ainsi qu'une condition par cible avec des coordonnées spécifiques à la map où on collera l'événement.

image
La World Map

Débutons par la map de la cabane de bûcheron ; selon ma World map, la cible 1 et 3 se trouvent au Nord et la cible 2 au Nord-Est. Pour que le détecteur pointe toujours au Nord, je fixe la variable "X cible" sur "X héros" et "Y cible" sur 0. Pour simuler la diagonale Nord-Est, je place les coordonnées de la cible 2 en 017,000, c'est-à-dire juste à l'extérieur de la map.

L'événement de la cabane de bûcheron

Spoiler (cliquez pour afficher)




Même principe pour la World Map et la Map cible 1. Pour simuler que Jacques est plus au Nord que ce que montre la map, je cale "X cible" sur "X héros" et "Y cible" sur 0.

Pour varier, la cible 2 sera mobile. Il suffit de créer un événement Gontran (parcours aléatoire ou défini, au choix) qui s'enclenche dès que la variable "cible" vaut 2, et caler les variables "X cible" et "Y cible" sur "[Gontran] carte X" et "[Gontran] carte Y" (même principe que l'image "Comment déterminer les variable de la position du héros" du point 2).

image
Gontran, le gosse aux cheveux verts, se fait traquer.

Ne pas oublier de mettre un interrupteur qui désactivera "Détection" une fois la cible trouvée (le placer sur la cible elle-même est une bonne idée). Par contre, pas besoin de reset la variable "Cible".

Merci de m'avoir lu, en espérant que ça serve à quelqu'un. <IMG SRC="


Tata Monos - posté le 20/01/2014 à 06:43:47. (56278 messages postés) - admin

Vive le making libre

Le 2 c'est le meilleur ! (Voila nemau heureux xd)

Pixner|Offgame | Le comptoire des clikeurs


Chuck Chan - posté le 21/01/2014 à 01:18:38. (29 messages postés)

M. & Mme Chan

Hein ?!


Nemau - posté le 22/01/2014 à 03:31:09. (29691 messages postés) - admin

En toute amitié

xDD

Chuck Chan > c'est juste un petit HS, dsl. ^^

Trombinoscope ~ Calli ~ Polaris 03 ~ Le Famas ~ Level Up! ~ Les Forges


Joke - posté le 23/01/2014 à 17:37:04. (5029 messages postés)

Je n'ai fait que survoler, mais avec mon super coup d’œil expert je peux dire que l'idée est géniale et que la programmation semble simple et efficace.

Vite fait, je dirais que tu peux rendre le code un tout petit poil plus simple en regroupant des conditions :

Au lieu de faire :

image

Tu pouvais proposer une imbrication plus intéressante des conditions entre elles (pour éviter les doublons et les superflus)

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Si YH > YC
  Si XH > XC
    Animation : Nord-Ouest
  Sinon
    Si XH < XC
      Animation : Nord-Est
    Sinon
      Animation : Nord
    Fin
  Fin
Sinon
  Si YH < YC
    Si XH > XC
      Animation : Sud-Ouest
    Sinon
      Si XH < XC
        Animation : Sud-Est
      Sinon
        Animation : Sud
      Fin
    Fin
  Sinon
    Si XH > XC
      Animation : Ouest
    Sinon
      Si XH < XC
        Animation : Est
      Fin
    Fin
  Fin
Fin



Le problème c'est que c'est plus chiant à expliquer. :D


Pour optimiser ainsi j'ai fait deux simplifications, qui peuvent se schématiser comme ça :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dans ton code, on reconnaissait cette forme :
 
Si [Condition A]
  Si [Condition B]
    ...
  Fin
Fin
Si [Condition A]
  Si [Condition C]
    ...
  Fin
Fin
 
 
Mais de quatre conditions on peut passer à trois :
 
 
Si [Condition A]
  Si [Condition B]
    ...
  Fin
  Si [Condition C]
    ...
  Fin
Fin



Et

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dans ton code, on reconnaissait cette forme :
 
Si A > B
  ...
Fin
Si A < B
  ...
Fin
Si A = B
  ...
Fin
 
 
Mais de trois conditions on peut passer à deux :
 
 
Si A > B
  ...
Sinon
  Si A < B
    ...
  Sinon
    ...
  Fin
Fin



En combinant les deux optimisations... j'ai réduit tes 16 conditions à 8 conditions, c'est toujours ça de gagné ! ^^

http://rmex.github.io/ | Joke's Tuts | Joke's Gribs | SoundCloud | Terre cuite | BilouCorp | Genesis | Groupe Skype RPG Maker | DELIRIUM-II


Chuck Chan - posté le 23/01/2014 à 18:06:47. (29 messages postés)

M. & Mme Chan

Excellent, cette partie m'a beaucoup plu :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
Si A > B
  ...
Sinon
  Si A < B
    ...
  Sinon
    ...
  Fin
Fin
 


Optimization, you haz it !! Merci !

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis