Affichage des résultats 1 à 1 sur 1

Discussion: [TUTORIEL] Faire parler CHARNAME dans des moments décisifs

  1. #1
    Date d'inscription
    December 2007
    Localisation
    Dordogne
    Messages 
    1 141

    Flèche [TUTORIEL] Faire parler CHARNAME dans des moments décisifs

    Pour faire parler Charname.


    Note d'Armand : Ce tutoriel a été écrit il y a déjà quelques années par phoeunix, je le reproduis ici aujourd'hui avec son aimable autorisation. Merci à lui.



    Salutations ! J'inaugure ma contribution aux tutoriaux en espérant que ce sera le premier d'une longue liste.


    Aujourd'hui je veux vous parler de la méthode pour faire parler Charname.
    Alors vous me direz sans doute : "Oui mais Charname il parle déjà quand il donne des réponses."
    Et vous avez parfaitement raison ! Mais ce n'est pas de ça dont je veux parler, non non non.
    Je ne sais pas vous mais il y a des fois où l'on aimerait bien que Charname puisse débuter le dialogue ou insérer un didascalie narrative qui le concerne dans un dialogue avec les PNJ que vous créez.
    Attention, je ne parle pas non plus de dialogues initiés par Charname qui va parler volontairement au PNJ comme dans les flirt pack par exemple car dans ce cas, c'est le PNJ qui parle et non Charname.

    Pour vous donner un exemple de ce dont je parle, rappelez-vous quand vous atterrissez dans le labyrinthe de Spellhold après qu'Irenicus vous a volé votre âme. Quand vous approchez de la statue qui réclame la main du vampire, et bien boum ! Un dialogue se déclenche et c'est Charname qui parle et on a une description détaillée de ses états intérieurs.


    Pré-requis : Ce tutoriel nécessite d'avoir consulté et bien assimilé les Chapitre 3 et 4 (en particulier le 3) du KIT DE SURVIE DE MODDER d'armand.


    ATTENTION : Une chose très importante à retenir est qu'il faut IMPÉRATIVEMENT que le dialogue soit déclenché par Charname pour pouvoir ensuite intégrer d'autres interventions de Charname (APPEND) dans le dialogue.
    Dans le cas contraire, ça pose problème puisque le dialogue sera interrompu au milieu.


    Note d'Armand : Tout bloc faisant parler Charname nécessite en effet un APPEND, c'est le seul cas ou la mot clef CHAIN n'est pas utilisable.


    POUR FAIRE COMMENCER LE DIALOGUE PAR CHARNAME :


    Imaginons la situation suivante : Leila est sérieusement blessée, ses points de vie tombent en dessous de 10, un bloc du SFLeila.baf va déclencher un dialogue où Charname se rend compte de la situation et porte son attention sur Leila.
    Voici l'extrait du SFLeila.baf


    Code:
    IF 
      HPLT("SFLeila",10)
      Global("LeilaEstGravementBlessée","GLOBAL",0)
    THEN
      RESPONSE #100
        SetGlobal("LeilaEstGravementBlessée","GLOBAL",1)
        ActionOverride(Player1,StartDialog("player1",Player1))
    END

    Je vous laisse deviner, la ligne en rouge est TRÈS importante !


    Code:
    IF 
      HPLT("SFLeila",10)
    // HPLT signifie "HitPointsLowerThan" autrement dit "PointsDeVieInférieursà" donc ici :
    // Si les points de vie de Leila sont inférieurs à 10
    
    
      Global("LeilaEstGravementBlessée","GLOBAL",0)
    // Sécurité pour ne pas que le script tourne en boucle.
    
    
    THEN
      RESPONSE #100
        SetGlobal("LeilaEstGravementBlessée","GLOBAL",1)
    // ALORS on place la variable "LeilaEstGravementBlessée" à 1
    
    
        ActionOverride(Player1,StartDialog("player1",Player1))
    // et Leila ordonne à Charname grâce à l'ActionOverride de commencer le dialogue avec lui-même en quelque sorte. Pour cela il faut impérativement utiliser
    // l'action StartDialog() et non pas StartDialogNoSet() qu'on utilise habituellement ! Le "player1" désigne le fichier dialogue auquel le jeu va se référer.
    // Donc impérativement utiliser la commande StartDialog("player1",Player1) pour faire démarrer le dialogue par une phrase de Charname.
    
    
    END
    // Fin du bloc

    Voilà, donc pour faire commencer le dialogue par Charname, on retient donc la commande StartDialog() !!


    "C'est très bien tout ça mais comment ça se passe pour le .d ? On place le premier bloc où ? On fait comment pour que le jeu fasse débuter le dialogue à partir du bon endroit ?"


    Très bonne question, Valentin ! J'aime pas ton prénom mais tu mérites un bon point !
    Valentin a raison, ça ne coule peut-être pas de source.
    Mais tout d'abord, imaginons les lignes de notre dialogue qui figurent dans le SFLeila.tra :


    Code:
    @0 = ~(Le combat fut rude et touche enfin à sa fin. Vous regardez autour de vous pour évaluer l'étendue des dégâts et voir comment vont vos compagnons.)~
    @1 = ~(Vos yeux tombent sur Leila, agenouillée contre un roc, se tordant de douleur, les mains couvertes de sang. Elle semble lutter pour ne pas s'évanouir.)~
    @100 = ~Leila, tiens bon ! Un guérisseur, vite !~
    @2 = ~Ho arrête de brailler comme ça ! Je peux très bien me débrouiller seule !~
    @3 = ~(Elle lance un sort de soin sur ses blessures.) Tu vois ? Tout va bien, circulez, y a rien à voir !~

    Et on peut passer au SFLeilaJ.d (oui on code bien le dialogue dans le SFLeilaJ.d même si c'est pas elle qui démarre le dialogue !) :


    Code:
    BEGIN ~SFLeilaJ~
    
    
    IF ~~ THEN BEGIN SeDebrouilleSeule
      SAY @2 = @3
      IF ~~ THEN DO ~SetGlobal("LeilaEstGravementBlessée","GLOBAL",1)~ EXIT
    END
    
    
    APPEND ~Player1~
    
    IF ~Global("LeilaEstGravementBlessée","GLOBAL",1)~ THEN BEGIN AiderLeila
      SAY @0 = @1
      IF ~~ THEN REPLY @100 EXTERN ~SFLeila~ SeDebrouilleSeule
    END
    
    
    END

    Le seul bloc important est donc celui en rouge, il répond à toutes les questions qu'on peut se poser :

    Pour que Charname commence le dialogue, il faut donc que le premier bloc se trouve dans l'APPEND ~Player1~, ce premier bloc doit contenir la condition Global("LeilaEstGravementBlessée","GLOBAL",1) comme ça il sera reconnu comme étant le début du dialogue et ensuite tout s'enchaine comme sur des roulettes avec les EXTERN et le système d'APPEND.




    FAIRE INTERVENIR CHARNAME, UN CAS PARTICULIER D'APPEND :


    Voyons maintenant comment intégrer des interventions au milieu du dialogue dites par Charname.
    Petit rappel : il faut impérativement que le dialogue soit déclenché par Charname comme expliqué juste au-dessus.
    Imaginons un dialogue totalement imaginaire entre Charname et Leila dont le contenu du SFLeilaJ.tra serait le suivant (je ne me permettrais pas de faire parler Bella qui est sous le copyright de notre Cool Coyote bien aimée.) :


    @0 = ~(Vous cheminez en tête devant une gallerie de magasins de couturiers quand vous surprenez Leila qui attire votre attention.)~
    @1 = ~Dis donc <CHARNAME>, tu penses quoi de ma robe ? Tu la trouves jolie ? Holala, je devrais ptêtre en changer non ?~
    @2 = ~Ho mais à ce moment-là, il faut que je change aussi mes chaussures pour qu'elles soient assorties, quel casse-tête !~

    @3 = ~(OMG ! J'aurais jamais cru tomber sur une cruche superficielle comme elle... Avec Aerie, elles font vraiment la paire, celles-là !)~
    @4 = ~Du calme femelle ! Tu ne crois tout de même pas que je vais investir la moitié de nos économies pour financer tes désirs excentriques ? Il n'en est pas question ! Et puis, tu es déjà bien assez sexy comme ça avec cette robe, si tu vois ce que je veux dire.~
    @5 = ~Oh <CHARNAME>, quel séducteur tu fais !~



    Les phrases en violet sont bien entendu celles de Leila.
    Les phrases en rouge seront donc les phrases dites par Charname en tant que dialogue en son nom. En effet, on n'imagine pas charname utiliser ces phrases comme une réponse, il s'agit de pensées intérieures donc il sera logique qu'on veuille la faire dire par lui.
    La phrase en vert est une réponse sur laquelle on clique.


    Pour coder le bloc de la phrase @3 dans le SFLeilaJ.d, il suffira de créer un APPEND pour Player1 exactement de la même façon qu'on créerait un APPEND pour faire intervenir un autre PNJ du groupe.
    De fait ça va donner ceci dans le SFLeilaJ.d :


    Code:
    BEGIN ~SFLeilaJ~
    
    IF ~~ THEN BEGIN JolieRobe
      SAY @1 = @2
      IF ~~ THEN EXTERN ~Player1~ QuelleConne
    END
    
    
    IF ~~ THEN BEGIN QuelSeducteur
      SAY @5
      IF ~~ THEN DO ~SetGlobal("LeilaVeutUneNouvelleRobe,"GLOBAL",2)~ EXIT
    END
    
    
    // APPEND de Charname :
    
    APPEND ~Player1~
    
    IF ~Global("LeilaVeutUneNouvelleRobe","GLOBAL",1)~ THEN BEGIN GalerieMarchande
      SAY @0
      IF ~~ THEN EXTERN ~SFLeila~ JolieRobe
    END
    
    
    IF ~~ THEN BEGIN QuelleConne
      SAY @3
      IF ~~ THEN REPLY @4 EXTERN ~SFLeilaJ~ QuelSeducteur
    END
    END

    On va reprendre bloc par bloc dans un ordre chronologique.


    Le dialogue démarre donc dans l'APPEND de Player1 avec le premier bloc GalerieMarchande :


    Code:
    APPEND ~Player1~
    
    // Ligne qui marque le début de l'APPEND de Player1.
    
    
    IF ~Global("LeilaVeutUneNouvelleRobe","GLOBAL",1)~ THEN BEGIN GalerieMarchande
    // Voici la condition Global("LeilaVeutUneNouvelleRobe","GLOBAL",1) qui identifie le début du dialogue. Le script qui aura posé cette variable à la valeur 1 et qui aura
    // initié le dialogue se trouve dans le SFLeila.baf, on en reparlera plus loin.
    
    
      SAY @0
    // Charname dit la phrase @0
    
    
      IF ~~ THEN EXTERN ~SFLeila~ JolieRobe
    // Puis nous renvoie vers le bloc JolieRobe qui se trouve dans SFLeila
    
    
    END
    
    
    BEGIN ~SFLeilaJ~
    // Si vous avez bien suivi le tuto de Cool Coyote, vous vous souvenez que c'est la ligne qui démarre le .d
    
    
    IF ~~ THEN BEGIN JolieRobe
    //On commence donc le bloc ayant le label JolieRobe
    
    
      SAY @1 = @2
    // Leila dit la phrase @1 puis @2
    
    
      IF ~~ THEN EXTERN ~Player1~ QuelleConne
    // L'EXTERN renvoie donc au bloc QuelleConne qui se trouve dans l'APPEND de Player1. On va tout de suite voir comment rédiger cet APPEND (qui se rédige comme tout autre APPEND)
    
    
    END
    // Fin du bloc
    
    
    // On est donc redirigé vers un bloc contenu dans l'APPEND de Player1.
    
    
    IF ~~ THEN BEGIN QuelleConne
    // Voici le début du bloc labellisé QuelleConne dans l'APPEND de Charname
    
    
      SAY @3
    // Charname dit la ligne @3
    
    
      IF ~~ THEN REPLY @4 EXTERN ~SFLeilaJ~ QuelSeducteur
    // Puis il donne la réponse @4 qui renvoie au bloc QuelSeducteur qui appartient à Leila.
     
    END
    // Ce premier END ferme le bloc.
    
    
    END
    // Ce deuxième END ferme l'APPEND
    
    
    Le dialogue se poursuit donc par le bloc labellisé QuelSeducteur chez SFLeila :
    
    
    IF ~~ THEN BEGIN QuelSeducteur
    // On démarre le bloc QuelSeducteur
    
    
      SAY @5
    // Leila dit la ligne @5
    
    
      IF ~~ THEN DO ~SetGlobal("LeilaVeutUneNouvelleRobe,"GLOBAL",2)~ EXIT
    // On passe la variable à 2 à la fin du dialogue pour que celui-ci ne boucle pas et on met fin au dialogue grâce à l'EXIT
    
    
    END
    // Fin du bloc.


    Histoire de boucler la boucle, voyons un peu le SFLeila.baf pour voir comment ce dialogue sera déclenché :


    Code:
    IF
      See("VendeuseDeFringues")
    THEN
      RESPONSE #100
        SetGlobal("LeilaVeutUneNouvelleRobe","GLOBAL",1)
        ActionOverride(Player1,StartDialogue("player1",Player1)
    END

    Hmm hmmmmm intéressant !!


    Reprenons ligne par ligne :


    Code:
    IF
      See("VendeuseDeFringues")
    // Si la condition "Leila voit la créature "VendeuseDeFringues"" est vérifiée
    
    
    THEN
      RESPONSE #100
    // alors
    
    
        SetGlobal("LeilaVeutUneNouvelleRobe","GLOBAL",1)
    // On place la variable à 1, elle servira de référence pour le premier bloc du dialogue
    
    
        ActionOverride(Player1,StartDialogue("player1",Player1)
    // Leila demande à Charname d'initier le dialogue.
    
    
    END
    // Fin du bloc.

    Pour résumer, Leila vous casse les pieds pour acheter des fringues car elle a vu une vendeuse et une boutique sur sa route... Quelle emmerdeuse ! Mais au moins vous aurez pu exprimer correctement votre énervement en faisant parler Charname.


    Et voilà que s'achève ce tutoriel sur les interventions de Charname dans les dialogues.
    Je me rends compte qu'il est peut-être un peu long mais j'ai tenu à expliquer tous les .d et .baf, ça fait réviser et ça fait des rappels par rapport aux tutos d'armand. J'ai préféré bien tout expliquer plutôt que de m'accrocher sur le point méthode dont je parle et le noyer dans un amas de choses incompréhensibles.




    Si vous avez des questions, vous pouvez postez à la suite de ce topic.
    Dernière modification par Freddy_Gwendo ; 11/04/2016 à 16h47. Motif: Modification du titre de la discussion et mise en page

    http://toutlemondesontrolistes.blogs...nitiation.html
    Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/03/2016, 08h29
  2. Réponses: 3
    Dernier message: 23/03/2016, 22h16
  3. [TW2][AVIS] [SPOILER] Les moments les plus drôles
    Par Taliesin dans le forum The Witcher 2 : Assassins of Kings
    Réponses: 3
    Dernier message: 16/06/2011, 20h17
  4. Kim parle dans des moments inopportuns
    Par Xicloing dans le forum Kim
    Réponses: 5
    Dernier message: 21/12/2008, 19h26
  5. [TS] Une fois dans la grotte, que faire ?
    Par shalala dans le forum Méga-mods : Big Picture, The Darkest Day, Shadow Over Soubar, Tortured Souls, Check The Bodies, Nev
    Réponses: 3
    Dernier message: 11/11/2005, 14h47

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256