![]() |
| 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 |
| Ettercap ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | 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</span> 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 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 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 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 Code: IF
Global("MonPNJRomanceActive","GLOBAL",2)
Global("Lovetalk","LOCALS",17)
InParty(Myself)
See(Player1)
THEN
RESPONSE #100
*IncrementGlobal("Lovetalk","LOCALS",1)
*Interact(Player1)
END 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 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.
__________________ Traduction du BG1 NPC Project en cours: quelques tirades Conception de mod en cours : participez aux exploits de vos PNJ dans les tavernes d'Athkatla. Membre des D'Oghmatiques Statut : très peu présent jusqu'à fin octobre |
| | |
| | #2 |
| Araignée Colossale ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | *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:
__________________ Mon topic de présentation ici "L'Homme n'est qu'un pion que la main du destin agite tantôt de lumière tantôt d'ombre ..." "Et en arrivant Au Ciel, il dira à St Pierre : "Oui Seigneur, encore un, c'est de l'Enfer que je viens..." Prince Arthas, héritier légitime du trône de Lordaeron laissé vacant depuis la mort de feu mon père, le roi Terenas... Statut : Actif (eh oui !!) |
| | |
| | #3 |
| Ettercap ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Attention, il va quand même falloir mettre ça en pratique
__________________ Traduction du BG1 NPC Project en cours: quelques tirades Conception de mod en cours : participez aux exploits de vos PNJ dans les tavernes d'Athkatla. Membre des D'Oghmatiques Statut : très peu présent jusqu'à fin octobre |
| | |
| | #4 |
| Araignée Colossale ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Hum ! Sympa de casser ma joie et mon allégresse bon enfant !!! Je me vengerai !!! Sois maudit jusqu'à la 12ème génération !
__________________ Mon topic de présentation ici "L'Homme n'est qu'un pion que la main du destin agite tantôt de lumière tantôt d'ombre ..." "Et en arrivant Au Ciel, il dira à St Pierre : "Oui Seigneur, encore un, c'est de l'Enfer que je viens..." Prince Arthas, héritier légitime du trône de Lordaeron laissé vacant depuis la mort de feu mon père, le roi Terenas... Statut : Actif (eh oui !!) |
| | |
![]() |
| 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 |
| [GUIDE] Le Multijoueur | Egrevyn | La Taverne d'Amkethran (Baldur's Gate 2) | 4 | 06/02/2008 14h16 |