Page 1 sur 1

[DLG] Comment mettre en oeuvre un dialogue à 7 ?

Posté : mer. 04 mars 2009, 22:22
par Nightmare
Bonjour, ça faisait longtemps ^^ !
Voilà je me demandais si le jeu était capable de gérer autant de personne à la fois pour un dialogue et surtout comment cela se traduit-il dans le .d ?
Dois-je insérer un APPEND pour chaque personnage ? Ou seulement pour le premier qui intervient dans le dialogue.

Exemple:
Dans le .tra:
J: "" (initie le dialogue à l'arrivée de charname)
S: "" (premier intervenant)
A: "" (deuxième)
P: "" (troisième)
S: "" (premier)

Dans le .d: (de J)

Code : Tout sélectionner

IF ~~ THEN BEGIN Discussion
SAY @0
IF ~~ THEN EXTERN ~#BS~ 00
END
 
IF ~~ THEN BEGIN 01
SAY @2
IF ~~ THEN EXTERN ~#BP~ 02
END
 
APPEND ~#BS~
IF ~~ THEN BEGIN 00
SAY @1
IF ~~ THEN EXTERN ~#BA~ 01
END
 
APPEND ~#BP~
SAY @3 etc...
Faut-il uniquement indiquer le premier intervenant dans le APPEND ou tous? Ou je me trompe complètement lol ^^ ?
Bonne soirée !

Re : Mettre en oeuvre un dialogue à 7

Posté : mer. 04 mars 2009, 23:26
par Vel Cheran
Si beaucoup de personnages disent à la suite une réplique, utiliser un "CHAIN" te simplifiera grandement la tâche.
Le CHAIN s'utilise pour des PNJ intervenant dans un dialogue. Suivant ton exemple, tu auras donc à la fin du fichier :

Code : Tout sélectionner

CHAIN
IF ~~ THEN ~J~ Exemple
@1
== S IF ~~ THEN @2
== A IF ~~ THEN @3
== P IF ~~ THEN @4
== S IF ~~ THEN @5
END IF ~~ THEN GOTO Suite
C'est assez pratique si tu veux faire parler des PNJ du groupe, car tu peux alors préciser :
== S IF ~InParty("S")~ THEN @3 pour vérifier si le PNJ S est bien dans ton équipe.

Par contre, s'il y a des personnages externes à ton groupe, il te faudra obligatoirement utiliser plusieurs APPEND. C'est pas tellement plus compliqué, il faut juste penser à les placer en fin de fichier (juste après les CHAIN). Là, tu es obligé par contre d'en faire un par personnage.

Re : Mettre en oeuvre un dialogue à 7

Posté : mer. 04 mars 2009, 23:45
par Akadis
Tu as la fonction CHAIN qui sert à ça, dans ton cas ça donnerait dans le #BJ.d
CHAIN
IF ~~ THEN #BJ 0
@0
== #BS @1
==# BA @2
== #BP @3
== #BS @4
END IF ~~ THEN EXIT
Seule précaution à prendre, il faut que les fichiers
#BS.dlg, #BA.dlg, #BP.dlg, #BS.dlg existent déjà. Si certains (tous) tes personnages A, S, P n'ont de dialogue propre il suffit de compiler des fichiers .d "vides"

Le #BS.d serait
BEGIN ~#BS~
Le #BA.d
BEGIN ~#BA~
etc.

Si tu as d'autre dialogue dans ton #BJ.d, le CHAIN doit être placé après les dialogues de ton personnage J et avant d'éventuel APPEND


--------------------------------------------------
EDIT
Grillé par Vel Cheran sauf que les CHAIN peuvent marcher avec TOUS les personnages (à condition qu'ils aient un fichier dlg associé) mêmes de personnages hors du groupe qui sont des PNJs purs comme Ribald, Bernard ou Frikraag.
Par contre j'avais bien oublié de parler des personnes du groupes et du trigger InParty

Re : Mettre en oeuvre un dialogue à 7

Posté : jeu. 05 mars 2009, 18:10
par Nightmare
D'accord merci pour tout je vais de ce pas me mettre au travail!

Re : Mettre en oeuvre un dialogue à 7

Posté : lun. 09 mars 2009, 21:25
par Isaya
En complément de ce qu'on dit mes camarades, j'ajouterai que InParty est nettement insuffisant pour s'assurer que le personnage est en mesure de parler. Il faut le compléter d'autres triggers pour éviter de faire parler un personnage endormi ou paralysé, par exemple.
A titre d'exemple, le BG1 NPC utilise le test suivant pour vérifier que Garrick peut se mêler à une discussion entre Imoen et Xan :
~InParty("garrick") InMyArea("garrick") !StateCheck("garrick",CD_STATE_NOTVALID)~
De mémoire, le CD_STATE_NOTVALID n'existe pas à l'origine. Il y a des chances que sa définition fasse partie des éléments du pack du moddeur heureux du BG2 Fixpack. Le mieux est de copier dans ton mod le bout de code qui l'ajoute dans le jeu s'il n'existe pas déjà.
Exemple de code, toujours issu du BG1 NPC, pour l'ajouter :
/* STATE.IDS patching to ToB - thanks, Cam, if you read it */
/* adds custom IsValidForPartyDialogue state */
APPEND ~STATE.IDS~ ~0x80101FEF CD_STATE_NOTVALID~ UNLESS ~CD_STATE_NOTVALID~
Bonne continuation.

PS : WeiDU dispose de tous les éléments nécessaires pour ajouter des répliques dans plein de dialogues sans avoir recours aux EXTERN et de façon beaucoup plus simples. En plus les EXTERN ne permettent pas de gérer correctement certaines choses pour lesquelles des commandes telles que I_C_T ont été créées. Pensez-y !

Re : Mettre en oeuvre un dialogue à 7

Posté : mar. 10 mars 2009, 00:29
par phoeunix
Effectivement il est dans le pack du moddeur heureux mais ça ne mange pas de pain de l'ajouter à l'install, surtout si on veut avoir un mod indépendant de ce pack. (qui apparemment fait polémique chez les anglosaxons)