:: Accueil -> Starcraft -> Staredit -> Tout sur les horloges


Tout savoir sur les horloges


    Les horloges ? Pour quoi faire, direz vous. Nous avions déjà abordé le sujet quand nous avons parlé des interrupteurs, mais brievement. Dans cet article, nous allons voir quelle marche il faut suivre pour créer sa première horloge.

    1 - historique

    A ma connaissance, personne avant nous (IvaldaCreations) n'a eu l'idée de créer des horloges sur ses cartes... Cette idée est née durant le developpement du tome 1 de la campagne Dune. Nous avions sur une carte à gérer le developpement des ennemis par déclencheurs et en même temps gérer les apparitions des vers sur quelques champs. C'est la carte Dune 04, qui est un festival de déclenchements animés par interrupteurs :

    Le cahier des charges était le suivant :


  • Il fallait pour le joueur trouver des mercenaires qui récoltaient entre quatre champs d'épice, ils se déplacaient en fonction du temps d'un champ à l'autre et cela automatiquement (tout ca se déroule pendant que l'on joue, en déclencheur préservé)

  • Il y a un joueur harkonnen sur la carte, la restriction au niveau des unités nous empechait d'utiliser les Ia, toutes les attaques harkonnen sont faites par déclencheurs.

  • Les vers des sables de dune, qui apparaissent à certains endroits, effectuent leur trajet et disparaissent (je passe sur le fait que ces mêmes vers doivent détruire les unités qui les approchent, qu'une unité aérienne lance une alerte quand elle le voie...)
  • Sur ce type de programmation,

    il n'est pas conseillé d'utiliser les temps d'attente. Imaginez, s'il faut mettre "attendre 200000ms" pour pour ordonner le déplacement d'un camp de rammassage à un autre, le temps d'attente se répercutera sur les autres declencheurs préservés !
    S'il y a un dialogue, celui ci se deroulera après ce temps d'attente faramineux, les routines preservées ne fonctionnent plus et par consequent, la carte non plus. Il fallait trouver autre chose...

    Tous les honneurs de "l'invention" reviennent au Bashar, qui a eu cette idée géniale. Il fallait définir les 200000 ms autrement, et une commande du Staredit le permet. En faisant patrouiller une unité sur la carte, on obtient un temps d'attente égal à la distance qu'il faut à l'unité pour parcourir le chemin, et ce compteur n'étant pas intégré aux déclencheurs, on a aucun problème de décalage de routine.
    Ensuite, cette idée a été adaptée à la programmation faramineuse de Dune Multijoueur (mais je n'en parlerais pas la car on rentre dans une gigantesque usine à gaz !) et à toutes nos cartes de la campagne.

    2- Principe fondamental des horloges :

    Une unité patrouille dans la carte, vous définissez donc une zone de départ et une zone d'arrivée. Imaginons que vous avez besoin de 20000 ms pour régénerer votre déclencheur. Il vous suffit de mettre dans les conditions du déclencheur "Unité se trouve dans la zone de départ".
    Comme l'unité patrouille, elle ne reste pas dans la zone. Votre déclencheur préservé ne se déclenchera donc pas infiniment même sans temps d'attente, car il devra attendre que l'unité ait fini son tour pour se redéclencher. Vous voyez, le principe n'est quand même pas très difficile...

    3- Et les interrupteurs dans tout ca :

    C'est ici que nos chers interrupteurs interviennent. Novice sur les interrupteurs ? Pas de souci, la page d'aide sur les interrupteurs devraient aisement vous convertir à l'interrupteurisation de vos cartes.

    L'intéret des interrupteurs (je rappelle : 2 états 0-1) va nous permettre de résoudre le seul problème posé par la solution du paragraphe 2. En effet, si la zone choisie est trop grande, l'unité risque de rester trop longtemps dans la zone, ce qui a pour conséquense immédiate de réenclencher notre boucle. Les interrupteurs sont ici la seule solution, et nous devons cette horloge switchée à notre Bashar préféré.

    Pour l'instant, nous avons trois méthodes connues : Voici leur principe en substance :
    Deux déclencheurs suffisent pour configurer une attaque. C'est la méthode utilisée dans Dune.

    condition :
    arbitre dans zone de départ
    action : donner l'ordre d'aller vers zone de fin effacer "arbitre dans la zone" préserver

    Deuxième déclencheur :

    condition :
    arbitre dans zone de fin
    "arbitre dans la zone" est effacé
    action : activer "arbitre dans la zone" activer "déclencher l'attaque" donner l'ordre d'aller vers la zone de départ

    Méthode employée dans la campagne L'odysée de Nova. Inconvenient : il faut que le trajet soit deux fois plus long.

    condition :
    arbitre dans la zone de départ
    action : donner l'ordre d'aller vers la zone de fin

    Deuxième déclencheur :

    condition :
    arbitre dans la zone de fin
    action : supprimer arbitre activer "déclencher l'attaque" créer un arbitre invincible dans la zone de départ.

    La méthode made in Ivaldir

    Méthode développée sur Diablo II par moi-même. En 4 déclencheurs et 2 interrupteurs, nous allons pouvoir faire fonctionner notre horloge.

    1er déclencheur (le plus simple) :

    condition :
    Toujours
    action : Donner ordre unitéX appartenant à Joueur8 de patrouiller de départ vers arrivée

    Par ce déclencheur, notre unité va effectuer son trajet indéfiniment. Bien prendre soin de positionner les zones pour atteindre le temps d'attente voulu. L'observer est une unité très prisée pour les horloges, unité invisible, possibilité d'augmenter sa vitesse, elle est parfaite.
    Note : L'unité horloge doit être invincible si vous ne tenez pas à faire tomber en panne votre horloge ;)

    2eme déclencheur :

    condition :
    Joueur8 amène exactement 1 unitéX à à arrivée
    action : Configurer "Horloge est arrivée dans la zone" Configurer "L'horloge est prête" ou "Ding dong" Preserver déclencheur

    Ne pas oublier le préserver déclencheur !

    condition :
    Joueur8 amène exactement 0 unitéX à arrivée
    action : Effacer "Horloge est arrivée dans la zone" Preserver déclencheur

    ... Mais qu'est ce que... Patience, le dénouement est proche:

    condition :
    "Horloge est arrivée dans la zone" est effacé
    "L'horloge est prête" ou "Ding dong" est configuré
    action : Effacer "L'horloge est prête" ou "Ding dong" Preverser déclencheur

    Et voila...

    C'est dans ce déclencheur que vous notifiez les actions que vous allez accomplir. Revenons maintenant en arrière pour expliquer le pourquoi de chaque déclencheur. Vous remarquerez qu'il ne suffit pas que l'unité entre dans la zone pour qu'elle déclenche les actions, il faut aussi qu'elle en soit ressortie. Et c'est la toute l'astuce. C'est l'interrupteur "dingdong" qui sert les actions, mais son enclenchement est bloqué par l'interrupteur qui vérifie la présence de l'unité dans la location. Ingénieux n'est ce pas ?

    4- Un exemple pour le dessert...

    Je choisis pour exemple une UMS que j'ai programmé récement. Au début, ce ne devait être qu'une petite retouche, mais le créateur de la carte originale régénerait ses monstres dans ses arènes avec un déclencheur préservé et un "attendre 30000ms". Je vous laisser imaginer le désastre, chacun de ses déclencheurs était fait comme ca, ce qui nous donne un total de 60 déclencheurs préservés avec chacun un temps d'attente monstrueux. D'un autre coté (mais c'est un autre problème) pour ses dialogues il ne connaissait pas les transmissions...
    Au final, la carte ramait tellement il y avait de temps d'attente ! Je ne pouvais laisser les choses en l'état...

    Le cahier des charges pour cette horloge est plutot basique. Nous définissons une grande zone qui englobe la partie ou l'on veut faire apparaitre les monstres. Quand l'un des 5 joueurs (regroupés sous l'appelation "héros" pour simplifier la prog) est dans la zone, on veut une régénération des monstres. Quand il n'y a personne, plus de régénération. Les monstres créés vont bien-sur patrouiller afin de ne pas surcharger la zone d'arrivée. Pour mettre un peu de piment à l'affaire, nous allons programmer des apparitions aléatoires et à des endroits différents. Plutot simple, non ? (sisi c'est simple, je vous assure !)

    Nous avons bien sur notre horloge qui est pour l'occasion un observer appartenant à un joueur neutre, il est invincible et patrouille dans une zone qui ne contient pas de locations ni une énorme fréquentation.

    Nous avons les deux déclencheurs "Présence dans zone" et "Absence dans zone" qui vont faire la même chose que dans l'exemple précedent. Rien de nouveau jusque la.

    Le quatrième déclencheur va contenir trois nouveaux interrupteurs, qui vont simplement servir à definir les apparitions "ok" ou "non". L'interrupteur est aléatoire.

    Les trois derniers déclencheurs contiennent sensiblement la même chose, à savoir la création des monstres et leur patrouille. Les déclencheurs s'actionnent quand l'interrupteur d'apparition est "ok" et son actionnement l'efface, il ne sera reconfiguré que lorsque l'horloge aura fait son petit tour. Simplissime, n'est ce pas ?

    Conclusion :

    Nous avons remarqué que très vite, les choses deviennent simples quand on utilise les interrupteurs. Les horloges sont une application simple et efficace pour tous les déclencheurs préservés. Imaginez qu'avec seulement 4 déclencheurs, nous supprimons dans cette carte 65 fois le "attendre 30000ms".

    Une utilisation soutenue des interrupteurs est la clé pour la réalisation de toutes les programmations. C'est pourquoi nous vous invitons à utiliser ces ressources. Je ne suis pas rentré dans ces exemples dans des programmations complexes, mais n'hésitez pas à nous demander des renseignements supplémentaires si votre cas dépasse en difficulté cette programmation.