Affichage des résultats 1 à 4 sur 4

Discussion: [TUTORIEL] Ecriture d'une Romance

  1. #1
    Mathrim Cauthon Invités

    Flèche [TUTORIEL] Ecriture d'une Romance

    Ce tutorial a été écrit par Rastor, administrateur de RPG Dungeon. Il est destiné aux personnes ayant déjà une certaine connaissance de la conception de PNJ. Connaître les différents fichiers de dialogue des PNJ, le fonctionnement des fichiers D et l'écriture de dialogue avec WeiDU est nécessaire pour assimiler ce qui suit.
    Merci à Isaya pour sa relecture attentive.

    Tutorial de Romance
    Par Rastor
    Traduction de Mathrim Cauthon

    On m'a récemment fait remarquer que beaucoup de gens avaient des idées de PNJ romançable mais qu'ils ne savaient pas par où commencer. Ils essaient de regarder les mods existants et sont submergés par le nombre de variables et de fichiers de dialogue, et ne parviennent pas à se faire une bonne idée de leur fonctionnement. La nécessité d'ajouter des flirts dans les mods d'aujourd'hui ne fait que rendre ceci encore plus complexe. Si vous vous sentez concerné(e), lisez-donc ceci !

    Variables globales

    Les romances de Bioware sont régies par un certain nombre de variables globales. Voici les plus basiques :

    "XXXXXXMatch", "GLOBAL" : Cette variable vaut 1 si le PNJ peut romancer le joueur et 0 si ce n'est pas le cas (pour des raisons de race, de sexe, ou autre)

    "XXXXXXRomanceActive", "GLOBAL" : Cette variable vaut 0 si la romance n'a pas commencé, 1 si le PNJ parle avec le joueur mais n'est pas encore amoureux(se) de lui ou d'elle, 2 si le PNJ et le joueur sont en phase de romance, et 3 si la romance s'est interrompue pour une raison ou pour une autre.

    "XXXXXXRomance", "GLOBAL" : C'est un compteur de temps qui contrôle le moment où le PNJ parlera la prochaine fois au joueur. Quand il atteint 0, le jeu cherche les prérequis pour un dialogue et le PNJ commence à parler si cela lui est possible.

    "Lovetalk", "LOCALS" : Ceci contrôle simplement le dialogue que le PNJ entamera la prochaine fois qu'il parlera au PJ

    Il y a également un certain nombre de variables spécifiques au PNJ dans chaque romance, mais elles contrôlent plutôt des choses telles que la progression des quêtes, le fait de savoir si le PJ et le PNJ auront ou non des relations sexuelles, etc... Elles ne sont pas couvertes explicitement par ce tutorial. Si vous écrivez vos propres scripts pour vos PNJ, vous pourrez implémenter ces choses si vous le désirez.

    Les Flirt Packs utilisent en général des variables similaires mais nommées différemment. Ce n'est cependant pas obligatoire.

    Ecrire les dialogues

    WeiDU est de loin le meilleur outil pour écrire des dialogues. Il permet entre autre d'assurer la compatibilité avec les autres mods. Maintenant, vous pouvez vous demander comment coder vos dialogues de romance. Et bien, tout d'abord, je vous recommande fortement d'écrire sur le papier votre arbre de dialogue entier (les phrases du PNJ et les répliques du PJ correspondantes). Ceci vous facilitera la vie.

    Faire commencer un dialogue de romance à votre PNJ est assez semblable à n'importe quel autre dialogue. Vous devez introduire un bloc dans le script override de votre PNJ qui ressemblera à ceci :

    Code:
    IF
    
     Global("MonPNJMatch","GLOBAL",1)
    
     Global("MonPNJRomanceActive","GLOBAL",1)
    
     Global("Lovetalk","LOCALS",1)
    
     GlobalTimerExpired("MonPNJRomance","GLOBAL")
    
     !AreaType(DUNGEON) *// Aucun des PNJ de Bioware ne commence à parler dans des donjons, et je suggère que les moddeurs perpétuent cette tradition
     
     !StateCheck(Player1,STATE_SLEEPING) *// Comment le PJ pourrait-il parler s'il ne peut rien faire ?
    
     InParty(Myself) *// Jaheira commence certains de ses dialogues de romance quand elle est hors du groupe. Vous ne voudriez pas que votre PNJ fasse ça, n'est-ce pas ?
     
     See(Player1)
    
    THEN
    
     RESPONSE #100
    
       IncrementGlobal("Lovetalk","LOCALS",1)
    
       Interact(Player1)
    
    END
    Puis, dans le fichier B de votre PNJ (vous pouvez aussi utiliser le J, mais c'est peu conventionnel), vous rajouterez le dialogue du PNJ:

    Code:
    IF ~Global("MonPNJRomanceActive","GLOBAL",1) Global("Lovetalk","LOCALS",2) Global("MonPNJMatch","GLOBAL",1) GlobalTimerExpired("MonPNJRomance","GLOBAL")~ THEN BEGIN RomanceTalk1
    
      SAY ~blah blah blah~ // Vous écrirez ici les premiers mots du PNJ dans le dialogue
    
      IF ~~ THEN REPLY ~blah~ DO ~RealSetGlobalTimer("MonPNJRomance","GLOBAL",30)~ /* Vous pouvez donner la valeur que vous voulez au compteur. */ THEN GOTO LigneSuivante
    
      IF ~~ THEN REPLY ~blah2~ DO ~RealSetGlobalTimer("MonPNJRomance","GLOBAL",30)~ THEN GOTO LigneSuivante2
    
    END
    C'est le schéma basique pour les dialogues de romance. Tout ce qui n'appartient pas au texte de haut-niveau (c'est à dire tout ce qui ne correspond pas au début d'un dialogue) est fait en utilisant les techniques de base de WeiDU. Changez simplement le nom des variables pour votre propre romance.

    Flirtpacks

    Bien que les flirtpacks ne soient absolument pas nécessaires pour un PNJ romançable, beaucoup de moddeurs décident d'en inclure car la plupart des PNJ récents en possèdent. Donc, comment pouvez-vous les coder ? En fait, ce n'est pas très différent des romances.

    Dans le script override du PNJ:

    Code:
    IF
    
     Global("MonPNJRomanceActive","GLOBAL",1)
    
     GlobalTimerExpired("Flirt","LOCALS") // Cette variable peut être locale ou globale. Cela ne change pas grand chose.
    
     See(Player1)
    
     InParty(Myself)
    
     !StateCheck(Player1,STATE_SLEEPING)
    
    THEN
    
     RESPONSE #100
    
      StartDialogue(Player1)
    
    END
    Beaucoup de moddeurs utilisent un compteur pour mesurer le nombre de fois où un joueur flirte avec le PNJ. Même si vous êtes certainement capable de faire ça, ce n'est pas particulièrement nécessaire. Vous pouvez cependant en avoir envie pour mesurer à quel point le PJ se montre affectueux avec le PNJ. Ce peut être utile si vous désirez d'inclure des dialogues spéciaux pour les joueurs les plus affectueux.

    Vous utiliserez la même technique pour coder les lignes du PNJ que dans le dialogue de romance, mais vous les placerez cette fois-ci dans le fichier J. Les dialogues de romance et de flirt doivent aller dans des fichiers différents.

    Pour les flirts initiés par le PJ, tout ce que vous avez à mettre dans le fichier J du PNJ est un bloc de dialogue qui commence par:

    Code:
    IF ~IsGabber(Player1)~ THEN BEGIN FlirtSelection.
    Possibilités Avancées

    Vous avez pu vous rendre compte que vous ne savez faire qu'une partie de ce qui peut être (et est souvent) créé dans une romance de PNJ. Les flirts peuvent avoir des options aléatoires, certains dialogues peuvent n'avoir lieu qu'au moment où le PJ se repose, des rencontres ou des combats peuvent se déclencher à un certain stade de la romance, etc... Ceci implique des scripts plus complexes, et je vous déconseille ce genre de chose si vous n'avez aucune connaissance sur les scripts.

    Scripts de Repos

    Tous les PNJ ont des scripts que le jeu vérifie lorsque le groupe se repose. Leur nom est indiqué dans le fichier pdialog.2da, mais ils sont généralement de la forme XXXXXD.BCS, où XXXXX est le nom abrégé du PNJ. Afin de déclencher un script au moment du repos, il vous suffit d'écrire dans ce fichier le code nécessaire au lancement d'un dialogue de romance. Utilisez le script que j'ai fourni plus tôt comme exemple, en changeant les variables si nécessaire.

    Pour des dialogues ayant lieu le matin suivant, ajoutez " PartyRested() " dans le bloc approprié du script override.

    Par exemple:

    (matin suivant)

    Code:
    IF
    
     Global("MonPNJRomanceActive","GLOBAL",2)
    
     Global("Lovetalk","LOCALS",19)
    
     GlobalTimerExpired("MonPNJRomance","GLOBAL)
    
     PartyRested()
    
     InParty(Myself)
    
     See(Player1)
    
    THEN
    
     RESPONSE #100
    
      IncrementGlobal("Lovetalk","LOCALS",1)
    
      Interact(Player1)
    
    END
    Avant de s'endormir, à ajouter dans XXXXXD.BCS :

    Code:
    IF
    
     Global("MonPNJRomanceActive","GLOBAL",2)
    
     Global("Lovetalk","LOCALS",17)
    
     InParty(Myself)
    
     See(Player1)
    
    THEN
    
     RESPONSE #100
    
      IncrementGlobal("Lovetalk","LOCALS",1)
    
      Interact(Player1)
    
    END
    Flirts Aléatoires

    Pour faire ceci, vous aurez besoin d'utiliser le déclencheur de script RandomNum(x,y). Reportez-vous à l'<a href=\'http://iesdp.gibberlings3.net/\' target=\'_blank\'>IESDP</a> pour plus d'information sur ce déclencheur. Vous l'ajouterez dans les lignes REPLY des flirts initiés par le joueur, ou dans les sections GOTO des flirts initiés par le PNJ.

    Un exemple provenant de Cailean, gracieusement fourni par Kismet:

    Code:
    APPEND FWCailej
     
     // Cailean commence le flirt
     IF ~Global("FWCaiDisableFlirts","GLOBAL",0)
     See(Player1)
     !StateCheck(Player1,STATE_SLEEPING)
     CombatCounter(0)
     Global("FWCaileanRomanceActive","GLOBAL",1)
     Global("FWCaileanStartFlirt","GLOBAL",1)~ THEN BEGIN CaileanInitFlirts
     SAY ~Maintenant je vais commencer un nouveau flirt.~
     IF ~~ THEN DO ~IncrementGlobal("FWCaileanRandFlirt","LOCALS",1)~ GOTO CaileanInitHand
     IF ~RandomNum(2,1)~ THEN DO ~IncrementGlobal("FWCaileanRandFlirt","LOCALS",1)~ GOTO CaileanInitKiss
     IF ~RandomNum(2,2)~ THEN DO ~IncrementGlobal("FWCaileanRandFlirt","LOCALS",1)~ GOTO CaileanInitTickle
     END
     
     IF ~~ THEN BEGIN CaileanInitHand
     SAY ~(Cailean prend une de vos mains entre les siennes.)~ 
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN CaileanInitKiss
     SAY ~(Cailean vous donne un bisou sur la joue.)~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN CaileanInitTickle
     SAY ~(Cailean vous chatouille les hanches.)~
     IF ~~ THEN EXIT
     END
     
     // Flirts initiés par le PJ
     IF ~IsGabber(Player1)
     CombatCounter(0)
     GlobalGT("FWCaiInitLoveTalk","GLOBAL",6)
     Global("FWCaileanQuestCompleted","GLOBAL",1)
     Global("FWCaileanRomanceActive","GLOBAL",1)~ THEN BEGIN CaiFlirtBaseEarly
     SAY ~(Cailean se rend compte de votre approche.)~
     + ~RandomNum(4,1)~ + ~(Tenir la main de Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + HandHold1
     + ~RandomNum(4,2)~ + ~(Tenir la main de Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + HandHold2
     + ~RandomNum(4,3)~ + ~(Tenir la main de Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + HandHold3
     + ~RandomNum(4,4)~ + ~(Tenir la main de Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + HandHold1
     
     + ~RandomNum(4,1)~ + ~(Embrasser Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + Kiss1
     + ~RandomNum(4,2)~ + ~(Embrasser Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + Kiss2
     + ~RandomNum(4,3)~ + ~(Embrasser Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + Kiss3
     + ~RandomNum(4,4)~ + ~(Embrasser Cailean.)~ DO ~IncrementGlobal("FWCaileanFlirtCount","LOCALS",1)~ + Kiss4
     ++ ~Cailean, je t'aime beaucoup, mais cesse de flirter avec moi s'il te plaît.~ DO ~SetGlobal("FWCaiDisableFlirts","GLOBAL",1)~ EXIT
     ++ ~(Ne rien dire.)~ EXIT
     END
     
     IF ~~ THEN BEGIN HandHold1
     SAY ~Cailean prend votre main 1.~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN HandHold2
     SAY ~Cailean prend votre main 2.~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN HandHold3
     SAY ~Cailean prend votre main 3.~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN Kiss1
     SAY ~Cailean vous embrasse 1.~
     = ~C'est vraiment un long baiser.~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN Kiss2
     SAY ~Cailean vous embrasse 2.~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN Kiss3
     SAY ~Cailean vous demande pourquoi vous l'embrassez.~
     ++ ~Réponse 1.~ + Kiss3_1
     ++ ~Réponse 2.~ + Kiss3_2
     ++ ~Réponse 3.~ + Kiss3_3
     END
     
     IF ~~ THEN BEGIN Kiss3_1
     SAY ~Cailean vous embrasse 3_1~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN Kiss3_2
     SAY ~Cailean vous embrasse 3_2~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN Kiss3_3
     SAY ~Cailean vous embrasse 3_3.~
     IF ~~ THEN EXIT
     END
     
     IF ~~ THEN BEGIN Kiss4
     SAY ~(Cailean vous embrasse 4.)~
     IF ~~ THEN EXIT
     END
     END
    Quêtes, Combats et Autres

    Ce guide ne parle que de l'écriture de romance. Pour les quêtes et les combats, écrivez-les dans le script override de votre PNJ, mais ce sera pour une autre fois.
    Dernière modification par Isaya ; 22/04/2012 à 00h18. Motif: Suppression des * parasites

  2. #2
    Prince Arthas Invités
    *Une larme d'émerveillement coule sur la joue décharnée du chevalier de la mort* :snif: :snif:

    Eh ben là ! Je ne sais pas quoi dire ! Pile ce qu'il me fallait et en français en plus !!!
    Ahh cher Mathrim mon cher Mathrim !!!

    Je demanderais à mes goules et abominations de chanter une louange en ton honneur !!! :happy:


  3. #3
    Mathrim Cauthon Invités
    Attention, il va quand même falloir mettre ça en pratique

  4. #4
    Prince Arthas Invités
    Hum ! Sympa de casser ma joie et mon allégresse bon enfant !!!

    Je me vengerai !!! Sois maudit jusqu'à la 12ème génération !

Discussions similaires

  1. L'Atelier d'Ecriture
    Par Ailyn dans le forum Actualités et News
    Réponses: 0
    Dernier message: 16/01/2011, 10h20
  2. [TECH] Écriture manquante
    Par Sylvain13 dans le forum L'Académie de Padhiver (NWN 1)
    Réponses: 1
    Dernier message: 14/09/2009, 22h00
  3. [Ecriture] Avancement
    Par Althéa dans le forum Les damnées des quatre vents
    Réponses: 4
    Dernier message: 19/11/2008, 10h10
  4. Réponses: 6
    Dernier message: 22/03/2008, 23h42

Les tags pour cette discussion

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