:: Accueil -> Starcraft -> Staredit -> Les interrupteurs


Les interrupteurs


    Les interrupteurs, c'est la clé pour réussir facilement des déclenchements et des suites de déclenchements. Ca sert également lorsque l'on veut signaler l'état d'une action et enfin pour simplifier la programmation.

    Les interrupteurs sont souvent sous utilisés :

    une utilisation qui semble de prime abord peu intuitive, des possibilités qui semblent complexes. Beaucoup de programmeurs pensent qu'on peut très bien s'en passer sans souci. C'est partiellement vrai. On peut s'en sortir sans mais pour des cas particuliers seulement. Dans tous les autres cas, il y aura des repercutions sur les autres déclencheurs.

    Comme c'est très simple de s'en servir, pourquoi s'en priver ? Ci-contre, la carte Dune 07 qui est une mission un peu particulière. J'ai utilisé les interrupteurs "Zone X" pour subdiviser la scénarisation de la carte. C'est une mission linéaire donc chaque "zone" est un barreau d'une echelle. Chaque fin de zone enclenche la zone suivante jusqu'à la fin de la mission. Si vous jouez cette mission, vous vous rendrez compte qu'elle est très complexe de programmation, il était necessaire de noter dans les conditions des déclencheurs à quelle zone il appartient.

    De plus, en terme de débuggage, c'est très pratique car il suffit de désactiver l'interrupteur 0 et activer le 6 par exemple pour commencer la mission à la zone 6, ce qui évite de rejouer toute la mission à chaque fois.

      a) Interrupteur, c'est quoi ?

      La commande interrupteur (switch en anglais) se trouve à la fois dans la rubrique condition et la rubrique action. Mais les boites de dialogues sont différentes. La commande dans Action sert à définir un interrupteur, la commande dans Condition sert à l'utilisation.

      La commande Action (REGLER INTERRUPTEUR - SET SWITCH) nous emmene dans la boite de dialogue située plus haut. Tout d'abord, il faut choisir parmi les interrupteurs qui par défaut sont marqués Interrupteur 1, 2...

      Il est conseillé des renommer, par exemple, l'interrupteur qui donnera le départ d'une frégate pour une patrouille ou un déplacement se nommera Fregate en route, c'est ensuite plus facile de se retrouver.

      On dispose ensuite de plusieurs choix d'actions pour l'interrupteur :

      c'est la définition de son état :


    • Configurer : C'est le définir actif, opérationnel.
    • Effacer : C'est le définir inactif
    • Alterner : Son état va varier, alterner.
    • Alterner : Son état va varier, alterner.

      La commande Condition (INTERRUPTEUR - SWITCH) va quant à elle servir à utiliser ce qui a été défini plus haut. A savoir si la condition "frégate en route" est ok (configuré), alors, les actions de cette condition vont pouvoir se dérouler.

      La boite de dialogue est sensiblement pareille, une ou l'on choisit son interrupteur et l'autre ou l'on définit son état.

      Ca donne dans la condition la phrase suivante : "Interrupteur 1" est effacé ou configuré.
      A partir de la, tout est possible. Voyons avec un exemple simple quel est l'intéret de cette commande.

      b) Exemple 1 : la porte - Outil necessaire : Staredit

      Dans notre exemple, nous dirigeons l'homme en bleu, le but de notre démarche est qu'il ouvre la porte définie par la location "porte thufir". Jusque la pas de problème. Il suffit d'ouvrir la porte quand Paul se trouve dans la location.
      Imaginons alors qu'il doive parler à gurney avant de pouvoir ouvrir la porte. Il faut que la porte reste fermée tant qu'il n'a pas été voir gurney. Ensuite, elle s'ouvrira normalement.
      L'interrupteur est ici utile car il rapelle une donnée définie dans un autre déclencheur.

      Nous avons un système simple de deux petits déclencheurs. Dans celui-ci, nous spécifions l'autorisation d'ouverture de porte avec l'interrupteur "configurer levier"

      Dans le deuxième déclencheur nous spécifions la condition pour laquelle la porte s'ouvrira, et on voit qu'il faut avoir parlé à Gurney pour pouvoir passer.

      Note : Par défaut, un interrupteur est "effacé", il est donc inutile de faire un déclencheur de debut de partie pour spécifier cette condition.

      c) Des objectifs de mission dynamiques

      De la même manière, on peut utiliser les interrupteurs pour faire le point rapidement. Imaginons que notre carte comporte 2 objectifs de mission bien précis. On peut à chaque fois qu'une quête est résolue l'enlever des objectifs. Oui mais comment deviner ou le joueur en est dans la partie ? S'il a deja reussi des quêtes ou pas ?

      Dans notre exemple, Paul devra rencontrer Thufir et Jessica avant de pouvoir commencer la mission (rencontrer gurney qui le rejoindra et continuer). Il faut que dans au objectifs de mission, on puisse faire le point à n'importe quel moment, càd si on rencontre Jessica, l'enlever des objectifs, si on rencontre Thufir, l'enlever des objectifs, etc.

      Comme on peut s'en douter, c'est avec les interrupteurs que l'on resoud ce problème. Il suffit de spécifier pour chaque rencontre un interrupteur, et varier les objectifs au fur et à mesure...


    • 1- Paul n'a vu personne
    • 2- Paul a vu Thufir
    • 3- Paul a vu Jessica
    • 4- Paul a vu Jessica ET Thufir
    • 4 objectifs de mission différents donc 4 déclencheurs : Chaque déclencheur contient les mêmes données. Les interrupteurs sont effacés au commencement de la mission et sont activés après chaque rencontre.

      Donc, comme chaque objectif de mission est défini par les interrupteurs "rencontre avec untel". quand il a vu ces personnes les objectifs changent.

      Créer une attaque ennemie

      Quelquefois, quand l'ennemi n'a pas de base, ou simplement quand on rechigne à mettre une ia qui fera n'importe quoi, on peut définir les attaques ennemies ainsi que sa défense. On va créer des unités ennemies et les faire attaquer la base. Utiliser l'interrupteur aléatoire est ici fort interressant, car finalement il restera une grande part d'imprevu dans ces attaques.

      Note : Vous ne l'avez peu être pas remarqué, mais la campagne Dune n'utilise pas les scripts d'ia du jeu. Toutes les attaques et la défence sont simulées par des déclencheurs d'attaque et de défense.

      De même, les apparitions devastatrices des vers sont configurées (même si la programmation est beaucoup plus ardue) par des interrupteurs, déclencheurs séparés. Nous en expliquerons la programmation à la fin de cette partie...On utilise pour cela la commande alterner ou aléatoire, selon l'effet voulu. La commande Alterner fera en somme une boucle d'attaques et la commande aléatoire executera l'une des 4 attaques au hazard.

      On pourrait également utiliser un seul déclencheur pour toutes ces attaques, en mettant un temps d'attente. C'est d'ailleurs ce que beaucoup font. Seulement, lorsque dans un déclencheur l'action est "Attendre 45000 ms", cette pause empeche d'executer les autres déclencheurs qui se déroulent pendant le même temps. Vous avez peu être déjà eu ce bug, et la seul manière de le corriger est d'enlever la pause.

      Seulement, lorsqu'il n'y a pas de pause, les attaques s'enchainent. Il faut donc simuler un temps d'attente sans le faire dans un déclencheur. On a recours dans ce cas à des "unités spéciales", qui vont tourner autour de la carte pour simuler l'attente.

      Exemple : dans cette mission, un engin aerien lent patrouille sur la carte. Il est neutre et invincible. Mais à chaque fois qu'il arrive à un point donné, une attaque se déclenche.

      (Déclencheur 1)
      Condition 
      TOUJOURS
      Action
      Donner ordre à "Arbitre" appartenant à Joueur 8 (neutre) 
      de "patrouiller" de DépartArbitre vers ArrivéeArbitre     
                       
      (Déclencheur 2)
      Condition 
      Joueur 8 amène exactement 1 Arbitre à ArrivéeArbitre
      Action
      Configurer AttaqueHarko1
                 
      (Déclencheur 2Bis)
      Condition 
      Joueur 8 amène exactement 1 Arbitre à DépartArbitre
      Action
      Configurer AttaqueHarko2
                 
      (Déclencheur 3)
      Condition 
      AttaqueHarko est configuré
      Action
      Créer des troupes
      Donner ordre attaquer telle zone
      Alterner Attaque Harko
                 
                 ... 

      Les attaques sont donc espacées par la rotation de l'unité spéciale et les déclencheurs fonctionnent parfaitement

      Fonctionnement des attaques de ver

      Le ver des sables est attiré par l'Epice. Un des principes de rammassage est donc de laisser une unité aérienne à la surveillance des champs d'épice.

      Celui-ci est défini aléatoirement. càd qu'il apparait à un moment précis défini par le système de déclencheurs expliqué plus haut.
      Mais il peut apparaitre à des locations différentes, choisies aléatoirement.
      A un moment précis, il apparait dans l'un des champs et progresse en éliminant toutes les unités terrestres qui sont dans le sable.

      Ici, ce sont les unités spéciales qui à la fin de leur trajet vont définir des actions. Les cielagos sont des observers et les satellites des arbitres protoss. Ils vont patrouiller dans la carte en activant les interrupteurs et en les désactivant sur leurs trajet.

      Ces actions définissent aléatoirement les interrupteurs "Ver7A" et "Ver7B" qui correspondent au champ d'Epice n°7. En plus, Il y a une chance pour que les Harkonnens attaquent le champ d'Epice.

      Chaque déclencheur fait fonctionner l'apparition d'un ver sur un champ différent.

      Nous avons utilisé pour la programmation de cette mission 53 interrupteurs différents :) (cf dune06.scx)
      Nous rentrons dans le détail de la programmation complète des Vers de sables dans cette partie, fort instructive.