![]() |
| Merci de prendre connaissance des conditions d'utilisation des forums, des blogs et du chat |
| | |||||||
Les Outils ![]() Besoin d'outils pour concevoir vos mods ? Ne cherchez plus, vous êtes à la bonne adresse. Trouvez ici une description des différents outils disponibles. |
![]() |
| | Outils de la discussion | Noter la discussion |
| | #1 |
| Araignée Géante ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Dans la leçon 6, nous abordions les fichiers .tra et même si ce tutorial pouvait vous sembler long et laborieux (ce qui n’est en fait pas du tout le cas), nous abordions la partie la plus soft de la programmation d’un mod. Soyez particulièrement concentré pour ce tutorial-ci : il n’y a plus de texte, rien que du code, et en plus, il est long. Leçon 7 : LES FICHIERS .D (PARTIE 1) à Cette leçon fait suite à la Leçon 6 ([TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 6) LOGICIELS NECESSAIRES : Blocnote ou ConText (ou les deux) MOD BELLA JANSEN FORTEMENT RECOMMANDE 1/ Le fichier Dialogue : fonctions Le fichier .d (pour Dialogue) est un fichier crée avec Blocnote ou ConText (voir Leçon 1), de la même façon que le fichier .tra, sauf qu’ici vous changerez l’extension : .tra à .d Ainsi, en reprenant l’exemple Bella Jansen fortement recommandé pour cette leçon, nous aurons : - Un fichier #TBella.tra, qui contient le texte - Un fichier #TBella.d qui contient des codes Ce qui m’amène donc à expliquer qu’un fichier .d contient toute la programmation du fichier .tra qui lui est associé (même nom, mais l’extension change). Sans ce fichier .d, impossible à WeiDU de savoir comment vous avez voulu agencer votre texte, n’est-ce pas ? Il n’existe qu’un seul type de fichier .d (hourrah !) mais attention, autant écrire du texte est à la portée de (presque) tout le monde car cela ne nécessite aucun apprentissage particulier, autant ici, il s’agit d’apprendre un langage nouveau, celui de WeiDU. 2/ Une syntaxe précise Le langage de WeiDU est simple, mais il importe de l’écrire correctement. La moindre erreur peut être fatale et mettre en échec l’installation de votre mod. C’est ce qui s’appelle une « parse error », qui survient à l’installation de votre mod : WeiDU va lire votre fichier .d mais s’il est mal écrit, alors il va bloquer et signaler une « Parse error ». La Parse error sera abordée dans la leçon sur les bugs, avec les tuyaux pour la corriger facilement ; toutefois j’insiste dès à présent sur l’utilisation de ConText, seul ou en complément avec Blocnote, ConText qui vous permettra de débusquer votre Parse error plus facilement. 3/ Variables, triggers… Un fichier .d contient nécessairement des variables et des triggers. Une variable est une condition, que l’on peut poser de deux façons. Un trigger, qui signifie en anglais « déclenchement, bascule », provoque une action (le PNJ quitte la party, quitte la zone, ect). Ces deux indispensables seront abordés plus loin dans la leçon. 4/ Ecriture d’un fichier .d Il y a de nombreux cas de figure selon les dialogues que vous aurez bâtis dans votre fichier .tra correspondant. Dès à présent, associons le fichier .d au fichier .tra : Exemple : #TBella.tra correspond au #TBella.d (même nom, seule l’extension change). Une fois votre fichier .d nommé correctement, vous le rangerez dans le sous-répertoire Dialogues de votre mod. A présent, étudions la syntaxe, l’organisation et les différends cas de figure, selon les dialogues écrits. RAPPEL : tout ce qui figure après // est une annotation qui n’a pas lieu d’être mise dans votre fichier .d. Il ne s’agit que d’explications de ma part. En bref, tout ce qui figure en bleu participe de la syntaxe proprement dite. A/ ORGANISATION BEGIN ~[nomdufichier.dsansextension]~ -> Tout fichier .d commence obligatoirement par cette ligne, que ce soit celui de votre PNJ ou celui d’une autre créature (contrairement au .tra). Une fois cette introduction posée, vous avez ce que l’on appelle toute une série de blocs de discussion. Qu’est-ce qu’un bloc ? -> Un bloc équivaut dans le jeu à une fenêtre de discussion, pourvu d’un bouton sur lequel le joueur est invité à cliquer, soit : - FIN DE LA DISCUSSION - CONTINUER Exemple d’un bloc : IF ~~ THEN BEGIN Label SAY @0 IF ~~ THEN EXIT END -> Règle d’or: un bloc commence toujours par un IF et se termine toujours par un END. Traduction en français du bloc : IF ~~ THEN BEGIN à SI ~~ ALORS COMMENCE Label à le nom de votre bloc, c’est vous-même qui le déterminez SAY @0 à DIT réplique @0 (contenue dans le fichier .tra associé) IF ~~ THEN EXIT à SI ~~ ALORS SORTIE END à FIN (DU BLOC) ~~ à entre ces deux signes, vous placez variable ou trigger, selon le cas. S’il n’y en a pas, il faut laisser vide tout en conservant les ~~ Traduction concrète du bloc : @0 = ~Salut ! ça te dirait qu’on mange une pizza ensemble ?~ // Votre PNJ -> Fin de la discussion Mais vous aimeriez n’est-ce pas, pouvoir répondre à cette proposition ? C’est ce que nous allons voir dans les CAS DE FIGURE. B/ CAS DE FIGURE Votre dialogue dans le fichier .tra n’est naturellement pas figé selon le schéma présenté ci-dessus. Plusieurs cas de figure se présentent donc à vous selon que Charname a droit de réponse, ect. / !\ ATTENTION : cette série de cas de figure n’est valable qu’en cas de conversation à deux voix, pas plus. Le cas de conversation à 3 protagonistes, puis à 4 et plus seront abordés plus loin. / !\ Note: les labels employés ici sont à titre d'exemple, vous les remplacez naturellement par les vôtres. a) 1er cas de figure : le monologue IF ~~ THEN BEGIN Pizza SAY @0 IF ~~ THEN EXIT END -> Comme nous l'avons vu plus haut, Charname ici n'a aucun droit de réponse. Le PNJ sort la réplique @0 contenue dans son fichier .tra et c'est tout, fin de la discussion. -> Le label Pizza se réfère à un mot-clé contenu dans la réplique @0, en l'occurence ici la Pizza, ce qui permet de se retrouver facilement dans sa programmation. -> Tout bloc doit obligatoirement avoir un label. Une variante du monologue : IF ~~ THEN BEGIN Pizza SAY @0 = @1 = @2 IF ~~ THEN EXIT END -> Admettons que vous ayez écrit @0, @1 et @2 au sujet de la pizza, et que ces répliques appartiennent à votre PNJ, mais que le texte soit trop long. Vous écrirez donc @0 = @1 = @2, ce qui équivaut au bouton CONTINUER ingame. Pratique pour alléger et rendre votre texte plus esthétique. Vous retrouvez ce procédé dans le mod Bella Jansen. En tout cas, Charname n’a toujours pas la parole dans cette variante, logique. b) 2ème cas de figure : le dialogue à deux voix IF ~~ THEN BEGIN Pizza SAY @0 IF ~~ THEN REPLY @100 EXIT // Traduction : SI ~~ ALORS REPOND @100 SORTIE END Traduction concrète du bloc : @0 = ~Salut ! ça te dirait qu’on mange une pizza ensemble ?~ // Votre PNJ @100 = ~Et pourquoi pas un petit Mac Do’, plutôt ?~ // Charname -> Charname a eu droit à la parole, en l’occurrence la réplique @100 du fichier .tra du PNJ (puisque je rappelle la règle d’or : - Est considérée comme appartenant à un personnage toute discussion débutée par lui. -> Le bloc se terminant sur un EXIT, ceci signifie la fin de la discussion. -> Le END ferme le bloc (il n’a strictement rien à voir avec un EXIT). Tout ça, c’est bien beau, mais vous aimeriez sans doute avoir une conversation bien plus longue que cela. Après tout, la réponse de Charname implique une réaction du PNJ. c) Troisième cas de figure : Enchaînement de blocs de discussion Le label ici prend tout son sens, car il n’y en a plus un (Pizza) mais plusieurs, comme vous pouvez le voir dans cette suite de blocs : IF ~~ THEN BEGIN Pizza SAY @0 IF ~~ THEN REPLY @100 GOTO Pouah // Traduction : SI ~~ ALORS REPOND @100 ALLER A Pouah END IF ~~ THEN BEGIN Pouah SAY @2 IF ~~ THEN REPLY @200 GOTO PasQuestion END IF ~~ THEN BEGIN PasQuestion SAY @3 IF ~~ THEN EXIT END -> Vous voici en présence de trois blocs, ce qui donne concrètement ceci: @0 = ~Salut ! ça te dirait qu’on mange une pizza ensemble ?~ // Votre PNJ @100 = ~Et pourquoi pas un petit Mac Do’, plutôt ?~ // Charname @2 = ~Pouah ! Vive la malbouffe…~ // Votre PNJ @200 = ~N’importe quoi ! C’est gras, c’est industriel, c’est bon !~ // Charname @3 = ~Pas question que je mette les pieds là-dedans. Bye bye !~ // Votre PNJ -> Les labels relient les blocs entre eux. Sans les labels, impossible de savoir quel bloc est relié à tel autre bloc. A présent, vous aimeriez que Charname ait plusieurs choix de réponses ? / !\ ATTENTION : je rappelle ici que la numérotation employée est toute personnelle. / !\ IF ~~ THEN BEGIN Pizza SAY @0 IF ~~ THEN REPLY @100 GOTO Pouah IF ~~ THEN REPLY @101 GOTO Youpee END IF ~~ THEN BEGIN Youpee SAY @4 IF ~~ THEN EXIT END IF ~~ THEN BEGIN Pouah SAY @2 IF ~~ THEN REPLY @200 GOTO PasQuestion END IF ~~ THEN BEGIN PasQuestion SAY @3 IF ~~ THEN EXIT END Traduction concrète : @0 = ~Salut ! ça te dirait qu’on mange une pizza ensemble ?~ // Votre PNJ @100 = ~Et pourquoi pas un petit Mac Do’, plutôt ?~ // Charname @101 = ~D’accord, je te suis.~ // Charname - @4 @2 = ~Pouah ! Vive la malbouffe…~ // Votre PNJ @200 = ~N’importe quoi ! C’est gras, c’est industriel, c’est bon !~ // Charname @3 = ~Pas question que je mette les pieds là-dedans. Bye bye !~ // Votre PNJ @4 = ~Youpee !~ // Votre PNJ Vous venez de découvrir la Syntaxe de base de WeiDU, c’est-à-dire sans Variables ni Triggers. Cependant, sans ces derniers, vous n’irez pas bien loin. C / LE TRIGGER Découvrons sans attendre le TRIGGER. Comme expliqué plus haut, il s’agit d’un déclencheur, qui se place entre ~~, mais JAMAIS après un IF, qui est réservé à la VARIABLE. Si vous avez lu le petit dialogue concocté pour l’exemple, vous avez remarqué la réplique @3 et le « Bye bye » qui la conclut. Vous vous doutez bien qu’à ce moment-là, le PNJ n’est pas content et quitte la party (eh oui, il en faut peu !). Et voici comment cela se présente : IF ~~ THEN BEGIN Pizza SAY @0 IF ~~ THEN REPLY @100 GOTO Pouah IF ~~ THEN REPLY @101 GOTO Youpee END IF ~~ THEN BEGIN Youpee SAY @4 IF ~~ THEN EXIT END IF ~~ THEN BEGIN Pouah SAY @2 IF ~~ THEN REPLY @200 GOTO PasQuestion END IF ~~ THEN BEGIN PasQuestion SAY @3 IF ~~ THEN DO ~ LeaveParty() EscapeArea()~ EXIT // Traduction : SI ~~ ALORS FAIRE ~Quitte la party, Quitte la zone~ SORTIE END -> La partie surlignée en orange est donc composée de deux triggers : l'un déclenche le départ du PNJ du groupe et l'autre, de la zone. -> La syntaxe utilisée est THEN DO ~~ 1ère variante : Charname refuse que le PNJ s’en aille (je reprends juste ici le bloc concerné) : IF ~~ THEN BEGIN PasQuestion SAY @3 IF ~~ THEN REPLY @300 DO ~ LeaveParty() EscapeArea()~ EXIT END Traduction concrète : @3 = ~Pas question que je mette les pieds là-dedans. Bye bye !~ // Votre PNJ @300 = ~Eh, attends, je plaisantais !~ // Charname -> PNJ quitte partie et zone. --------------------------------------------- -> Dans cette variante, le THEN DO devient seulement DO car nous avons déjà un THEN avec THEN REPLY. -> Il est capital de respecter à la lettre cette syntaxe sous peine de "Parse error" (voir "Une syntaxe précise" dans la même leçon). D/ LA VARIABLE La Variable tient une place capitale dans un mod. Sans elle, rien ne peut se déclencher car elle sert de déterminant pour lancer les dialogues, les cutscenes, ect. S'il n'y en a pas, comment WeiDU peut-il savoir qu'à tel moment du jeu, il faudra déclencher tel dialogue? La variable fonctionne moitié de la même façon que le Label : c’est à vous de la nommer, cependant il y a des syntaxes à respecter, là encore. Il existe trois types de variables : - La variable GLOBAL - La variable LOCALS - La variable AREA GLOBAL : Ce type de variable peut être vue par tout autre script dans le jeu mais il faut savoir qu’elle ralentira la lecture de WeiDU, il faut donc tâcher autant que faire se peut d’utiliser la variable LOCALS. Ce type de variable GLOBAL doit surtout être utilisé si l’enjeu est important (Quête, par exemple). LOCALS : ce type de variable est spécifique à une créature, et ne sera pas lu par l’ensemble du programme. AREA : Ce type de variable est lu au même titre que GLOBAL, à ceci près qu’elle n’est posée que si une action est effectuée un nombre limité de fois dans une zone précise. Tout ceci peut paraître vague, consultez ce lien pour plus d’informations (attention, c’est en anglais) : http://iesdp.gibberlings3.net/appendices/variables.htm a) Syntaxe de la Variable Il y a deux façons d'utiliser la Variable: - Vous souhaitez installer une variable: àSetGlobal("XXXXXX", "GLOBAL", 1) (si de type GLOBAL) à SetGlobal("XXXXXX", "LOCALS", 1) (si de type LOCALS) à SetGlobal("XXXXXX", "ARXXXX", 1) (si de type AREA) - Vous souhaitez la poser comme condition de déclenchement d’un trigger/bloc/réplique: à Global("XXXXXX", "GLOBAL", X) (si de type GLOBAL) à Global("XXXXXX", "LOCALS", X) (si de type LOCALS) à Global("XXXXXX", "ARXXXX", X) (si de type AREA) NOTE 1 : « XXXXXX » doit être remplacé par le nom de votre variable. NOTE 2 : « X » remplaçant le 1 dans le second paragraphe doit être remplacé une valeur que vous aurez déterminé dans un précédent SetGlobal. L’exemple ci-dessous vous aidera à y voir plus clair : Prenons #TBella.d dans le sous-répertoire Dialogues (téléchargement du mod ici). Vue d’ensemble ---------------------------------------- BEGIN ~#TBella~ IF ~Global("#TBellaJansen","GLOBAL",2)~ THEN BEGIN Rencontre SAY @0 IF ~~ THEN REPLY @100 GOTO Amende END IF ~~ THEN BEGIN Amende SAY @2 = @3 IF ~~ THEN REPLY @300 GOTO Chouette IF ~~ THEN REPLY @301 GOTO Ensemble IF ~~ THEN REPLY @302 GOTO Vexee END IF ~~ THEN BEGIN Vexee SAY @4 IF ~~ THEN DO ~EscapeArea()~ EXIT // Quitte la zone END IF ~~ THEN BEGIN Ensemble SAY @7 IF ~~ THEN REPLY @700 GOTO PoilGratter END IF ~~ THEN BEGIN PoilGratter SAY @8 IF ~~ THEN REPLY @800 GOTO Presentation END IF ~~ THEN BEGIN Presentation SAY @9 IF ~~ THEN DO ~ SetGlobal("#TBellaJansen","GLOBAL",3) JoinParty()~ EXIT // Rentre dans party END IF ~~ THEN BEGIN Chouette SAY @5 IF ~~ THEN REPLY @500 GOTO NouvellesAventures END IF ~~ THEN BEGIN NouvellesAventures SAY @6 = @9 IF ~~ THEN DO ~ SetGlobal("#TBellaJansen","GLOBAL",3) JoinParty()~ EXIT // Rentre dans party END -> Le code surligné en orange est une modification de variable (de 2, elle passe à 3 -> Le code surligné en vert est une condition : c’est la condition de déclenchement de ce dialogue. -> "#TBellaJansen" est le nom de la variable, c’est ce qui permet à WeiDU de les lier entre elles. Le nom est à customiser comme pour un label, même principe. -> Notez en passant le trigger, JoinParty(), qui permet d’introduire Bella dans la party. NOTE : vous ne trouverez pas le code surligné en orange dans le mod Bella Jansen, je me suis aperçue de cet oubli après. Interprétation de la première ligne du bloc Rencontre : IF ~Global("#TBellaJansen","GLOBAL",2)~ THEN BEGIN Rencontre -> SI ~Variable #TBellaJansen, GLOBAL, est à 2 ~ALORS COMMENCE RENCONTRE Interprétation des lignes dans blocs NouvellesAventures & Présentation : IF ~~ THEN DO ~ SetGlobal("#TBellaJansen","GLOBAL",3) JoinParty()~ EXIT END -> SI ~~ ALORS FAIRE ~Installer/modifier variable #TBellaJansen, GLOBAL, à 3)~ SORTIE FIN DU BLOC A ce stade de votre apprentissage, peut-être avez-vous remarqué (si c’est le cas, vous êtes en bonne voie) que la variable IF ~Global("#TBellaJansen","GLOBAL",2)~ THEN BEGIN Rencontre qui débute le dialogue de Bella n’a été posée nulle part. Logiquement, nous devrions trouver un SetGlobal(«#TBellaJansen », « GLOBAL »,1) quelque part, non ? Et en effet, la variable "#TBellaJansen" a bien été posée quelque part et ceci fera l’objet d’une prochaine leçon sur les SCRIPTS, car votre dialogue, en l'état, ne peut encore exister ingame, n'ayant aucune variable qui permette son déclenchement. 5/ CONCLUSION Et voilà, vous êtes désormais capable de programmer votre fichier .tra…Mais peut-être ai-je oublié un cas de figure ou bien avez-vous mal saisi certains points. Comme d’habitude, par ici les questions. Il existe moultes triggers, dans cette optique je dresserai une liste des triggers les plus utiles dans un avenir proche, dans une prochaine leçon. Avant d'attaquer les scripts, il convient d'abord de s’intéresser à la Leçon 7 : Partie 2 où nous irons encore plus profondément dans la programmation d’un fichier .d, avec la programmation de dialogues à trois voix, et à quatre et plus. LECON 7 : PARTIE 2 ([TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 7, Partie 2)
__________________ STATUT : Toujours sur la brèche pour votre plaisir, m'ssieurs dames Lefou hurle sa démence en RP sur La Couronne de Zinc Le Trailer des Chroniques de Severian, un mod PNJ pour La Couronne de Cuivre Dernière modification par Jack The Ripper ; 30/04/2008 à 09h24. |
| | |
![]() |
| Liens sociaux |
| Tags |
| Aucune |
| Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
| Outils de la discussion | |
| Noter la discussion | |
| |
Discussions similaires | ||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| [TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 5 | Jack The Ripper | Les Outils | 1 | 03/05/2008 16h24 |
| [TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 2 | Jack The Ripper | Les Outils | 1 | 29/04/2008 13h57 |
| [TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 6 | Jack The Ripper | Les Outils | 0 | 29/04/2008 12h22 |
| [TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 4 | Jack The Ripper | Les Outils | 4 | 28/04/2008 15h06 |
| [TUTORIAL] Le Mod Pnj pour les Nuls : Leçon 3 | Jack The Ripper | Les Outils | 0 | 27/04/2008 20h09 |