Page 1 sur 1

[PsT] Modification d'un dialogue existant

Posté : ven. 15 avr. 2016, 14:17
par To_an
Bonjour à tous. En vue d'apprendre à maîtriser WeiDU je me suis lancé dans une petite modification de fichiers pour le jeu Planescape Torment, mais sitôt commencé que je me heurte à un problème ... qui n'en est peut-être même pas un d'ailleurs. Je souhaite donner l'opportunité au joueur de prélever sur certains Zombis de la Morgue un morceau de chair putréfiée et un seul (qu'il pourra plus tard donner à Moelle-Pote au lieu de se faire mordre). Et pour cette petite modification j'essaie d'être le plus rigoureux possible (en créant les bons fichiers dans les bons dossiers, etc.). De plus l'installation via WeiDU se passe bien - je n'ai aucun message d'erreurs et lorsque je teste ma modification dans le jeu, elle a l'air de fonctionner. Le dialogue modifié est le DZM825.DLG associé au Zombi 825 (ZM825.CRE) qui n'est qu'une créature générique sans dialogue particulier.

J'utilise 3 fichiers pour cette modification (en plus de l'exe de WeiDU et d'un fichier *.tp2 bien sûr) : moelle_pote.tph, DZM825.d et PST-Exp1.tra pour les textes. Mes codes pour chaque fichier :
Fichier moelle_pote.tph

Code : Tout sélectionner

// Création de l'objet : Chair à Zombi
COPY ~PST-Exp1/moelle_pote/copy/II181.BAM~ ~override~ // Icône d'inventaire de notre bout de chair
COPY_EXISTING  ~SKINSCRP.ITM~ ~override/ZOMBFLSH.ITM~ // Clonage d'un objet existant du jeu pour créer notre nouvelle objet
  SAY  0x0c @3                                        // Modification de son nom (Chair de zombi)
  WRITE_ASCII 0x3a ~II181~                            // Modification de son icône d'inventaire
  SAY 0x54 @4                                         // Modification de sa description détaillée
 BUT_ONLY_IF_IT_CHANGES

// Modification du dialogue du Zombi 825 pour permettre au joueur de prélever un bout de chair
COMPILE ~PST-Exp1/moelle_pote/dlg/DZM825.d~

// Modification des Variables globales du jeu à l'aide de la macro développée par Qwinn
// L'auteur des 3 modifications majeures pour PST
INCLUDE ~PST-Exp1/utils/Q_VARMacros.tph~
COPY_EXISTING ~VAR.VAR~ ~VAR.TMP~
  SET Q_FileSize = %SOURCE_SIZE%
  SPRINT "Q_NewVarType"  ~GLOBAL  ~
  SPRINT "Q_NewVarName"  ~825_Flesh_Taken~
  SET    "Q_NewVarValue" = 0
  LAUNCH_PATCH_MACRO Q_VarVar_AddNewRecord
 BUT_ONLY_IF_IT_CHANGES
COPY ~VAR.TMP~ ~VAR.VAR~
Fichier DZM825.d

Code : Tout sélectionner

EXTEND_TOP DZM825 0 #5 // Pour faire apparaître en 5e position cette ligne de dialogue
  IF ~Global("825_Flesh_Taken","GLOBAL",0)PartyHasItem("SCALPEL")~ THEN REPLY @5 GOTO 825-FleshTaken
END

APPEND DZM825
  IF ~~ THEN BEGIN 825-FleshTaken
    SAY @6
    IF ~~ THEN REPLY #24572 DO ~SetGlobal("825_Flesh_Taken","GLOBAL",1)GiveItemCreate("ZOMBFLSH", Protagonist, 1, 0, 0)~ EXIT
  END
END
Alors comme je l'ai dit, dans le jeu tout semble fonctionner parfaitement, l'objet est crée avec ses attributs, le joueur ne peut couper le Zombi qu'une seule fois. Le problème vient plutôt du fait que Near Infinity m'affiche bien ma modification mais également un [state 2] supplémentaire qui n'était pas là avant. En revanche, en décompilant le dialogue avec WeiDU, il a l'air de collé. Étonnant non, alors qui croire ? Donc, je me dis que mon code a "l'air" bon mais qu'il doit être faux. Et cerise sur le gâteau, lorsque je la désinstalle, WeiDU ne me supprime pas les entrées qu'il a créé dans les deux fichiers *.tlk - elle est pas belle la vie.

Alors si un gourou un WeiDU passe par là, pourrait-il me dire là où mon code merde, parce que je sèche.


===============================================================================
RESOLU
===============================================================================
Je travaillais avec deux installations différentes de PST, la seconde étant la version anglaise, mise à jour mais non modifiée et c'est le PST-FixPack de Qwinn qui a modifié le fichier de dialogue (en le corrigeant) entre les deux versions.
Quant au fait que WeiDU ne supprime pas des fichiers *.tlk les entrées qu'il créé peut-être est-ce dû au fait que j'installe ma modification française sur une installation anglaise ? Mais c'est mineur.

Édit de Freddy : Pour marquer une discussion comme "résolue", utilise le bouton "Marquer comme résolu" à droite du bouton "Répondre", en haut de la page.

Posté : ven. 15 avr. 2016, 19:32
par Isaya
WeiDU ne retire jamais les textes ajoutés dans le fichier dialog.tlk. C'est une mesure indispensable à la fonction de désinstallation / réinstallation de mods ou de composants de mods en cours de partie. Si, lorsqu'on retire un mod ou un composant au milieu de toute la liste, WeiDU retirait les textes du mod/composant, la réinstallation des mods qui sont à sa suite dans la liste leur ferait obtenir des numéros de texte différents. Cela poserait d'énormes problèmes pour des noms de personnages ou de lieux qui ne seraient plus pointés correctement dans le fichier dialog.tlk en cas de poursuite du jeu à partir de sauvegarde. C'est déjà un problème très fréquent pour ceux qui réinstallent tout (jeu et mods) et essaient de poursuivre une partie créée avant, ce serait catastrophique si cela se produisait juste parce que tu as changé un composant en cours de partie.

Par ailleurs WeiDU ne crée pas de nouveau texte si un mod ajoute un texte qui existe déjà. De sorte qu'il ne peut pas se permettre de retirer le texte lors de la désinstallation, car il se pourrait bien que ce soit un texte du jeu de base ou d'un autre mod.

Posté : ven. 15 avr. 2016, 19:33
par Freddy_Gwendo
Heureux de savoir qu'en fait tu n'as pas de problèmes... ^^

Non, non : les modifications des fichiers tlk sont irréversibles: même quand tu désinstalles un mod, le fichier tlk garde les nouvelles entrées.

D'où l'intérêt de conserver une copie de sauvegarde des fichiers originaux en phase de développement. ;)

Édit : grillé à une mn près !

Posté : ven. 15 avr. 2016, 19:40
par To_an
Merci à tous les deux. Oui, après vous avoir lu et en y réfléchissant cela tombe sous le sens que WeiDU se comporte ainsi pour les fichiers *.tlk. Quant aux fichiers de sauvegarde, je les ai (tlk, key et var car PST - donc de ce côté, tout va bien).