====== Règle « avant » ======
Une **règle avant** s’exécute juste avant qu’une action ne se déroule. Elle sert principalement à :
- **Conditionner** l’action (la laisser passer si tout va bien, la bloquer sinon).
- **Modifier le décor** juste avant l’action (déplacer un objet, changer un état, afficher un texte cinématique).
- **Réagir au démarrage** du jeu (''règle avant commencer le jeu'').
Voir [[reference:routines:regle:start|Règles (avant / après)]] pour les concepts généraux et la syntaxe des déclencheurs.
===== Bloquer une action =====
==== refuser "message" ====
Affiche le message et **arrête** l’action :
règle avant prendre la statue:
refuser "La statue est boulonnée au sol.".
fin règle
règle avant prendre la pomme:
si la pomme est pourrie:
refuser "Cette pomme est pourrie.".
fin si
fin règle
==== refuser l’action (sans message) ====
Pratique quand vous voulez d’abord afficher un texte contextuel avec ''dire'' :
règle avant prendre le vase Ming:
dire "Le gardien lève les yeux et vous regarde fixement.".
refuser l’action.
fin règle
règle avant aller vers la sortie:
si le badge de visiteur n’est pas possédé:
dire "L’agent de sécurité vous barre le passage.".
refuser l’action.
fin si
fin règle
Le musée est un lieu.
La statue est un objet ici.
Le souvenir est un objet ici.
règle avant prendre la statue:
refuser "La statue est boulonnée au sol.".
fin règle
règle avant prendre le souvenir:
dire "Le gardien lève les yeux et vous regarde fixement.".
refuser l'action.
fin règle
règle avant commencer le jeu:
dire "Essayez : {/prendre la statue/} et {/prendre le souvenir/}.".
fin règle
[[djnc>wiki_regles_refuser_prendre|tester cet exemple]]
==== arrêter l’action ====
Forme équivalente à ''refuser l’action'' utilisée historiquement dans plusieurs scénarios. Les deux instructions stoppent l’action courante sans afficher de message supplémentaire :
règle avant ouvrir la porte d’entrée ou ouvrir la porte du garage:
si le joueur ne porte pas la veste ou le pantalon ou le bonnet ou les bottes:
dire "Vous n’êtes pas suffisamment équipé pour le froid[si le joueur ne porte pas le pantalon] et de toute manière vous ne pouvez pas sortir dans cette tenue[fin si].".
arrêter l’action.
fin si
fin règle
===== Laisser passer l’action =====
Si la règle avant ne refuse rien, l’action standard se déroule normalement. Si vous avez du code conditionnel et qu’une branche doit explicitement laisser passer, utilisez ''continuer l’action'' :
règle avant prendre la pomme:
si la pomme est pourrie:
refuser "Cette pomme est pourrie.".
sinon
continuer l’action.
fin si
fin règle
===== Initialiser la partie =====
Le déclencheur spécial ''commencer le jeu'' permet d’exécuter des instructions au tout début, avant que le joueur ne saisisse sa première commande :
règle avant commencer le jeu:
changer le joueur possède la lampe.
changer la porte n’est plus verrouillée.
dire "Une voix vous murmure : << Bienvenue dans le labyrinthe… >>".
fin règle
C’est l’endroit idéal pour :
* Initialiser l’inventaire du joueur
* Modifier des états initiaux selon une condition
* Afficher un texte d’introduction
* Démarrer une musique (''jouer le son …'')
Le labyrinthe est un lieu.
La lampe est un objet.
La porte de sortie est une porte verrouillée ici.
règle avant commencer le jeu:
changer le joueur possède la lampe.
changer la porte de sortie n'est plus verrouillée.
dire "Une voix murmure : « Bienvenue dans le labyrinthe… ». Vous tenez une lampe et la porte est désormais ouverte.".
fin règle
[[djnc>wiki_regles_init_partie|tester cet exemple]]
===== Tester la fois où la règle se déclenche =====
règle avant manger un fruit:
si la règle se déclenche pour la première fois:
dire "J’ai toujours voulu essayer de manger un fruit !".
fin si
fin règle
===== Exemple complet =====
Voir le mini-scénario [[reference:routines:regle:apres#exemple_complet|Le journal intime]] qui combine règle avant (refuser de prendre le journal) et règle après (cinématique sur la 1ère lecture).
===== Voir aussi =====
* [[reference:routines:regle:start|Règles (avant / après) — index]]
* [[reference:routines:regle:apres|Règle après]]
* [[reference:instructions:arreter_action|Instruction « arrêter l’action »]]
* [[reference:routines:action:start|Actions personnalisées]] — pour créer un nouveau verbe (différent d’intercepter)
{{tag>règle regle règle_avant regle_avant avant refuser arrêter arreter refuser_l_action bloquer commencer_le_jeu initialiser déclencheur declencheur continuer routine routines}}