Page 1 sur 1

[TUTORIEL] LE KIT DE SURVIE - CHAPITRE 3 : Comprendre un fichier d

Posté : lun. 01 oct. 2012, 14:32
par Armand
LE KIT DE SURVIE DU MODDER DEBUTANT
Ou comment survivre dans la jungle quand on est un puceau du tp2



Chapitre 3 : Comprendre un fichier d



Avant propos


Un fichier .d (un fichier dialogue) est un fichier qui va vous permettre de faire parler votre personnage. Comment ? Eh bien en organisant les répliques des personnages : qui parle, à qui, dans quel ordre. Ce fichier .d qui peut être conçu avec un simple éditeur de texte sera compilé par la suite par WeiDU pour le transformer en un fichier .dlg compatible avec le moteur du jeu.



Préparation


Tout d'abord il vous faudra un éditeur de texte c'est à peu prés la seule chose dont vous aurez l'utilité d'ailleurs. De manière générale je suggère plutôt pspad qui est un logiciel que j'ai en affection mais les logiciels qui feront l'affaire se compte par dizaines tout ce qu'il faut c'est qu'il sache compter les lignes de codes et ai si possible la fonction rechercher remplacer qui est très pratique. Pour vous faciliter le travail par la suite je vous recommande d’installer des fichiers de colorisation de votre code qui vous aideront dans votre périple. On appelle ça des highlighters et vous pourrez en trouver ici pour le commun des éditeurs et ici pour Pspad.


Ensuite vous pouvez toujours ouvrir IESDP à coté ça pourra vous être utile plus tard. Sachant qu'il y a deux onglets qui pourraient vous intéresser : l'onglet trigger (conditions) et actions (les actions). Jusque là, rien d'extraordinairement compliqué.



Étape 1 : Savoir lire les différents types de fichier d


Comme je l'ai déjà dit, j'ai voulu dans ce tutoriel rester le plus concret possible et vous montrer étape par étape la marche à suivre. Néanmoins pour être suffisamment complet et pour que vous ne soyez pas trop paumé lorsque vous consulterez éventuellement d'autres mods, un petit briefing sur les différentes façon de coder ne serait pas de trop.


Mais rien ne vaut un exemple comme dirait ma grand mère. Commençons par le cas le plus simple un bloc de dialogue avec la création du dlg :


Les éléments de bases


Image
Image


Voici votre premier bout de code à décortiquer, le premier d'une longue liste j'ose espérer. Décortiquons tout ça :


Begin ~nomdudlg~
Très important ici, la commande BEGIN c'est ce qui va permettre plus tard au fichier de compilation de créer un dlg (le fichier dialogue utilisable par le jeu). Sachant que comme j'ai déjà pu le dire ce sera votre fichier dlg qui fera parler votre personnage. Donc vous devrez obligatoirement collez autant de BEGIN que de personnages qui parlent, la référence se trouvant entre les ~~ étant le nom du fichier dlg sans l'extension.


// Premier...
Ce double slash en début de ligne permet de mettre des commentaires dans votre code, n’hésitez pas à en abuser, ça vous sera très utile par la suite surtout quand vous serez resté un moment sans y toucher. Pensez bien au double slash par contre en début ligne pour que WeiDU ne la prenne pas en compte dans le code.

IF ~~
Traduit littéralement ça donne « SI ». Si quoi ? Si telle condition est remplie alors le dialogue commence.

BEGIN WESLEY
Le nom du dit bloc « Wesley » choisi arbitrairement par le modder.

Global("#VOhMyGod","AR1000",1)
Je parlais de conditions à l'instant, en voilà une. C’est la plus connue : avec la commande GLOBAL on vérifie une variable préalablement implantée en spécifiant de quel type il s'agit (ici il s'agit d'une variable de zone). En gros ça permet d’éviter que le dialogue se déclenche n'importe quand, n'importe comment.

SAY @1
Le NPC parle, ici on est dans le DLG de #vchat c'est donc lui qui parle. Son texte symbolisé par un @1 sera placé plus tard dans un fichier externe : le fameux fichier tra ou translation qu'on a pu évoqué au début.

IF ~~ THEN REPLY @2 EXIT
On retrouve sensiblement le même fonctionnement qu'au début « SI telle condition est rempli ALORS... Alors quoi ? Eh bien Charname répond @2 et la conversation se termine grâce au mot clef « EXIT ».


Ici, on a vu un cas simple mais vous avez le concept. Si vous avez compris ça, vous avez compris la base car un bloc de dialogue s'articulera toujours sensiblement autour de la même mécanique.


Déclencher des événements avec DO


Image
Image

On passe au cran au dessus là. On va passer d'un bloc à un autre tout en en profitant pour voir deux trois petites choses.


GOTO
Un des éléments nouveaux : « GOTO » littéralement « allez à ». Allez ou ? Allez à la référence d'un nouveau bloc pour connaître la réponse du PNJ. Ici on va à « INTROQUESTONE11 » le bloc juste en dessous.

SAY @1735=@17343
Petit truc sympathique, on a la possibilité de couper la réplique de notre personnage en une suite de plusieurs répliques. C'est ce qui se passe parfois dans le jeu pour épurer une réplique assez longue ou pour donner un effet de style le même personnage parle plusieurs fois d'affilée.

DO ~~
A l'instant on a vu le mot clef REPLY voici le mot clef DO qui permet de déclencher des actions, c'est à dire des événements dans le jeu visible ou non par l'utilisateur. Cela peut aller de la perte de réputation à un déclenchement de combat, la progression d'une romance, un item qui nous est donné ou l'entrée journal d'une quête qui est implantée. Comme vous pouvez le voir sur ce screen, le mot clé DO peut être couplé avec un REPLY par exemple, il n'y a pas de restrictions à ce niveau.


Là, vous avez vu la logique d'un fichier d. C'est la manière de coder que vous pourrez voir le plus souvent, pas forcément la plus efficace mais la plus courante. Avant de passer à la pratique nous allons voir un cas particulier qui est l'APPEND.




Mettre en place un APPEND


Image
Image

EXTERN ~nomdudlg~ NOMDUBLOC
Quoi encore un nouveau mot clef ? Eh oui, mais promis c'est le dernier cette fois ! Jusqu'à présent nous avons vu un système où le PNJ parle et Charname lui répond. Mais que se passe-t-il quand un autre personnage intervient entre temps ? On utilise un renvoi vers un autre fichier dlg, ce renvoi est permis grâce à la commande EXTERN et la référence du fichier est précisé entre les ~~ comme on a pu le voir pour d'autres commandes. Enfin le nom du bloc (LOUCHE17 ici) qui suivra à l'intérieur de l'APPEND.

APPEND ~nomdudlg~
Voilà le fameux APPEND qui est la fonction permettant d’éditer en fait un fichier dialogue existant, toutes les modifications que l'on fait dans l'APPEND se répercuteront dans le fichier dlg dédié. C'est exactement comme si vous écriviez directement sous le Begin ~~ qui permet de déclencher le fichier dlg.


Question du noob : l'APPEND permet donc de faire des dialogues à plusieurs voix ?

Techniquement oui mais c'est pas le plus pratique. Je vous ai montré ici juste la manière basique de coder tel que vous pourrez la rencontrer dans le jeu original ainsi que dans pas mal de mods. Mais dans la pratique vous ne coderez pas comme ça, je vais vous apprendre une manière beaucoup plus souple et surtout au final beaucoup plus efficace. En définitive vous n'utiliserez l'APPEND que pour éditer des fichiers dialogue de personnages existant déjà dans le jeu. A titre personnel, avec la méthode que j'utilise, je n'utilise l'APPEND que pour faire parler Charname comme indiqué dans ce tuto. Pour tout le reste il y a mieux et beaucoup plus pratique.




Étape 2 : Savoir écrire dans un fichier d sans se fouler


Nous y voilà. Voici venu l'heure de votre dépucelage, vous allez écrire vos premières lignes de codes !
Et pour que vous ne soyez pas paumé au milieu de toute ces informations j'ai crée un one-day mod ou plutôt un one-hour mod avec un code extrêmement basique que vous pourrez vous amusez à décortiquer, rapiécer, modifier et j'en passe... Vous pourrez suivre dans les fichiers en même temps que vous suivrez les screens que je commenterai et détaillerai ici. On commence par le premier d'entre eux :



Coder en CHAIN : un cas simple


Image
Image

Le fichier d du mod que l'on peut trouver dans le dossier dialogues. Comme vous pouvez le voir tout y est codé en CHAIN. C'est un mot clef qui à la base sert à enchaîner les répliques entre plusieurs personnages non joueurs. Nombre de moddeurs ne l'utilise que pour ça d'ailleurs mais je pars de l'idée que si cette commande peut tout faire pourquoi ne pas s'en servir systématiquement ? On retrouve ici une structure un peu différente de ce qu'on a vu précédemment, je vais donc la détailler pour que vous puissiez comprendre son fonctionnement :


CHAIN IF ~~ THEN
Ce qui remplace le « IF THEN ~~ BEGIN » tout simplement. On annonce qu'on est dans un bloc de type CHAIN avec sa mise en forme spécifique.

« #VMonk83 »
On annonce qui initie la dialogue en précisant son dlg. Dans le format CHAIN c'est le gros avantage : vous pouvez faire parler n'importe qui n'importe où. Pas besoin comme on a vu précédemment d'être en dessous d'un Begin ~machin~ pour savoir qui parle : on le précise à chaque début de bloc.

@1=@2=@3=@4
Nouveauté encore ici pas besoin de SAY on met les @ directement (n’hésitez pas d'ailleurs à allez farfouiller dans le dossier translation pour suivre les répliques en même temps).

END
Dans un CHAIN on place le END juste avant que Charname parle, ça fonctionne toujours comme ça.

EXTERN ~nomdudlg~ NOMDUBLOC
Pour la partie réponse de Charname cela reste, inchangé mais vu qu'on code en CHAIN, maintenant la fonction GOTO sera insuffisante vu que en fonction de qui initiera les blocs suivants on devra faire référence à un autre dlg.




Coder en CHAIN : on bascule d'un bloc à un autre


Image
Image

Vous avez ici la suite logique du précèdent bloc : on précise qui initie le dialogue en indiquant la référence du dlg avec le nom du bloc précisé dans l'EXTERN qui a précédé. Pour le reste de la syntaxe comme le mot clef DO ici on retrouve le même fonctionnement. Ça nous permet d'ailleurs de revoir le fonctionnement de mise à jour des variables : on peut voir plus haut que le dialogue se déclenche quand la variable est à 1. A la fin du dialogue on met la variable à 2 pour éviter que le dialogue ne se répète.


Image
Image

Petit tour dans le tra où on retrouve nos références de type @ présentes dans notre fichiers d. La syntaxe est toujours la même :


@numéro = ~Votre texte~

ou éventuellement

@numéro = ~Votre texte si Charname est un homme~ ~Votre texte si Charname est une femme~


Pour les tra, vous pouvez utiliser un chapitrage pour le développement des répliques ou bien encore vous réserver des créneaux de type :


@21000,21001,@21002,@21003... // Réplique d'un personnage marchand
@22000,@22001,@22002,@22003... // Réplique d'une prostituée
@23000,@23001,@23002,@23003... // Réplique d'un mechand



Sachant que vous pourrez attribuer un fichier tra pour chaque fichier d (dialogues) et baf (script) que vous serez amené à créer un jour alors n’hésitez à jongler avec les numéros puisque vous pourrez utiliser les mêmes références dans des fichiers tra différents.



L'avis de Brigitte : Si je peux me permettre un conseil de ma longue expérience dans le classement des dossiers. Ne pas hésiter à mettre des noms explicites fussent ce t-ils longs, ce n'est pas le joueur qui lit le code c'est vous ! Idem pour les annotations, cela risque de vous servir énormément quand votre mod prendra de l'ampleur !! Un nom de bloc court de type « cmbat01 » ne vaudra jamais « quoibatestchaotiquemauvais ». Alors n'oubliez pas mon vieux credo : RANGEMENT ! RANGEMENT ! RANGEMENT !




Conclusion


On vient de voir la base du fonctionnement d'un dlg avec une partie théorique que vous pourrez revoir plus tard et surtout une partie pratique que vous pourrez expérimenter de suite. Vous avez donc de quoi commencer à remplir le dossier dialogues et translations de votre module. N’hésitez pas à bidouiller un peu et à farfouiller dans le mod qui vous a servi de guide pour voir comment ça fonctionne. Ça vous aidera avant de passer à ce tuto approfondi sur les dlgs .

Posté : sam. 10 nov. 2012, 13:52
par Armand
Le one hour mod de ce tuto a été mis à jour. L'incompatibilité avec le script de zone a été résolu.

Posté : mar. 29 mars 2016, 07:19
par Freddy_Gwendo
Pour les ceusses qui se désolaient, j'ai actualisé les liens des images. ^^

Bonne lecture. ;)