Affichage des résultats 1 à 5 sur 5

Discussion: [WeiDU] Comment ajouter des colonnes au fichier TOOLTIP.2da ?

  1. #1
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 658

    [WeiDU] Comment ajouter des colonnes au fichier TOOLTIP.2da ?

    Deux questions pour le prix d'une !


    1. Existe-t-il une commande simple et automatique pour ajouter une ligne à ce fichier lors de la création de l'objet ?

    2. Comment rajouter une colonne vide (ou plusieurs) à ce fichier ?




    1. Jusqu'à présent, j'utilisais une technique simple : création du fichier .itm, rajout d'une ligne (APPEND) au fichier Tooltip dotée d'une ou de plusieurs valeurs numériques (999998, 999999 ...) avec Weidu, puis remplacement de ces valeurs par les bons textes, toujours avec WeiDU.

    Je me demandais si quelqu'un avait trouvé un moyen de le faire directement lors de l'implantation de l'objet dans le fichier avec WeiDU, du style une fonction ou une macro... Je n'ai rien vu de tel dans la doc WeiDU, mais sait-on jamais....


    2. Lors du premier jet du mod, comme il n'existait que peu de mods concernés par ce type de procédures (une trentaine et une cinquantaine d'objets), j'avais créé une routine WeiDU qui rajoutait des lignes supplémentaires au fichier Tooltip pour TOUS LES OBJETS des mods. Puis je rajoutais à la main (merci DLTCEP) deux colonnes vides dans le fichier Tooltip. Mon setup copiait ce nouveau fichier dans l'override (aucun risque de plantage puisque je traitais tous les mods). Enfin j'appliquais la méthode 1 pour installer mes objets.



    Mais voilà, déjà que cette solution racro ne me plaisait pas, elle est injouable aujourd'hui avec tous les mods dispos. De plus, il me semble que les nouvelles versions de WeiDU permettent de rajouter "facilement" des colonnes aux fichiers 2da.

    Problème : je n'ai toujours pas compris comment ça fonctionne...


    Brèfle, si vous pouviez éclairer ma lanterne sur ces deux points, je vous serais éternellement reconnaissant par ce gain de temps : j'ai laissé suffisamment d'énergie dans la compréhension et la mise en pratique des fonctions et des macros pour automatiser mes créations d'objets que je répugne à en faire autant sur ce point...

    Merci d'avance aux joyeux pompiers du modding !
    Dernière modification par Freddy_Gwendo ; 25/03/2016 à 22h59.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  2. #2
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages 
    6 838
    Pour le premier point, je ne connais que la solution que je t'ai proposé pour les numéros des textes associés aux effets pour ajouter des textes dans le fichier dialog.tlk, en récupérer les numéros puis les écrire à l'endroit adapté, ici via un APPEND par exemple, au fichier 2DA.
    En combinant avec COUNT_2DA_ROWS, tu peux aussi utiliser INSERT_2DA_ROW pour ajouter à la fin du fichier, mais il te faut déterminer le nombre de lignes si tu veux utiliser INSERT_2DA_ROW en désignant la fin, d'où l'usage de la première commande.

    Il n'y a pas d'instructions pour ajouter des colonnes, manifestement. J'ai constaté que le composant permettant d'ajouter jusqu'au niveau 50 dans BG2 Tweaks utilise un technique subtile pour ajouter des colonnes dans la ligne d'en-tête : il utilise une méthode consistant à remplacer la séquence de caractères de la ligne d'en-tête des colonnes par la même chose plus les colonnes qu'il veut ajouter. Et pour les autres lignes, il fait des remplacements de contenu de colonnes avec des caractères génériques afin de les remplacer à l'identique et d'ajouter les colonnes nécessaires.
    Cette méthode te permettrait d'ajouter les colonnes supplémentaires, mais il faudrait sans doute travailler le code pour qu'il soit robuste à des fichiers où d'autres mods auraient déjà ajouté une colonne, par exemple.
    L'ajout de ligne est une opération simple, par contre, puisque tu maîtrises tout le contenu.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  3. #3
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 658
    Effectivement, il me semble avoir déjà vu ce code qui rajoute du contenu aux lignes selon le nombre de variables contenues dans chaque ligne.
    Chaque codification (des "^", "k", "kk", "kkk" ...) correspondant au nombre de caractères à rajouter à chaque ligne pour obtenir quelque chose du style : "RINGXX 12345 12345 * * *"

    Je vais me replonger dedans.

    Quant au point 1, tant pis s'il n'y a pas de possibilité de régler l'ajout simplement, je vais utiliser la même méthode qu'auparavant. Au moins, je sais qu'elle fonctionne parfaitement. Le tout, c'est de la lancer en une seule fois après avoir défini tous les objets, ça fait gagner du temps.

    Merci encore, dès que j'ai un truc qui fonctionne pour le point 2, je le poste ici.
    Dernière modification par Freddy_Gwendo ; 18/07/2013 à 23h28.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  4. #4
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 658
    Bon, j'ai fini par trouver un code qui fonctionne, inspiré du mode Hammers.

    Je lance ceci avant d'installer mes objets :

    Code:
    COPY_EXISTING ~tooltip.2da~ ~override~
        COUNT_2DA_COLS cl
        COUNT_2DA_ROWS 1 rw
        SPRINT cz ~~
        SPRINT rx ~       ~ // 7
        SPRINT ry ~-1~
        SPRINT rz ~~
        PATCH_IF cl < 5 BEGIN // J'ai besoin d'une colonne de tooltips supplémentaire.
          SPRINT rz ~$ $ 4~
          FOR (i = 0; i < (rw - 3); i += 1) BEGIN // Cycle through rows
            SPRINT rz ~%rz%~ ^ ~%rx%~ ^ ~%ry%~
          END
        END ELSE BEGIN
          FOR (i = 4; i < (cl - 1); i += 1) BEGIN // Cycle through columns
            SPRINT cz ~%cz%~ ^ ~%rx%~ ^ ~%ry%~
          END
        END
    BUT_ONLY
    
    ACTION_IF cl < 5 BEGIN
      APPEND_COL ~tooltip.2da~ ~%rz%~
    END

    Puis j'installe les objets en utilisant la fameuse fonction RESOLVE_STR_REF :

    Code:
    // Faux filet
    COPY ~Diamant/Clones/GWFood2.itm~ ~override/GWVde03.itm~	SAY NAME1 @8476007	SAY NAME2 @8476007	SAY DESC @8476008
    	WRITE_LONG 0x34 12	WRITE_ASCII 0x3a ~GWVDE03~ #8	WRITE_ASCII 0x44 ~GWVDE03G~ #8	WRITE_LONG 0x4c 20	WRITE_ASCII 0x58 ~GWVDE03D~ #8	WRITE_ASCII 0x76 ~GWVDE03~ #8
    	WRITE_SHORT 0x94 20	WRITE_ASCII 0xae ~GWVDE10~ #8	WRITE_LONG 0xe6 2	SAY 0x146 @7000004	WRITE_LONG 0x1d6 585	WRITE_LONG 0x236 1080
    	WRITE_LONG 0x266 169	WRITE_LONG 0x296 119	SAY 0x2c6 @7000011	WRITE_LONG 0x2f6 20	WRITE_ASCII 0x306 ~GWVDE10~ #8
    // 10 % de chances de bénéficier d'un afflux d'énergie pendant un tour.
    	LPF ADD_ITEM_EFFECT INT_VAR opcode = 146 target = 1 timing = 4 parameter2 = 1 resist_dispel = 3 duration = 6 probability1 = 20 probability2 = 10 header = 1 STR_VAR resource = GWVDE03B END
    // 5 % de chances d'être victime d'une intoxication alimentaire pendant cinq rounds.
    	LPF ADD_ITEM_EFFECT INT_VAR opcode = 146 target = 1 timing = 4 parameter2 = 1 resist_dispel = 3 duration = 6 probability1 = 85 probability2 = 80 header = 1 STR_VAR resource = GWVDE03M END
    SPRINT objet ~%DEST_RES%~
    TO_UPPER objet
    OUTER_SET tool0 = RESOLVE_STR_REF (@7200001) // Manger
    OUTER_SET tool1 = RESOLVE_STR_REF (@7200002) // Débiter en steaks
    OUTER_SET tool2 = ~-1~
    OUTER_SET tool3 = ~-1~
    APPEND ~tooltip.2da~ ~%objet%    %tool0%    %tool1%    %tool2%       %tool3%%cz%~ UNLESS ~^%objet%~

    Mais je souhaiterais encore simplifier le tp2 en utilisant une macro finale se référant à une table des objets du style :

    NOMOBJET, tool0, tool1, tool2, tool3 [avec tool0_3 = RESOLVE_STR_REF (@n) ou -1]

    Le but du jeu étant de lancer les lignes jaunes en un seul passage qui concernera tous les objets.

    Mais je bloque avec les arrays...
    Dernière modification par Freddy_Gwendo ; 29/01/2016 à 16h55.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  5. #5
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 658
    Désolé, j'avais oublié de notifier que j'avais trouvé ma fonction.

    La voici :

    Code:
    /* ================================================================================ *
     * FONCTION GW_ADD_TOOLTIP : AJOUT de nouvelles lignes dans le fichier Tooltip.2da. *
     * -------------------------------------------------------------------------------- *
     * Ajoute 4 valeurs au fichier tooltip.2da.                                         *
     * ================================================================================ */
    
    DEFINE_ACTION_FUNCTION ~GW_ADD_TOOLTIP~
    	STR_VAR	GW_item_tooltip0 = "N"		// Nom de la 1° capacité.
    			GW_item_tooltip1 = "N"	// Nom de la 2° capacité.
    			GW_item_tooltip2 = "N"	// Nom de la 3° capacité.
    			GW_item_tooltip3 = "N"	// Nom de la 4° capacité.
    			GW_objet	 = "N"	// Code de l'objet.
    BEGIN
    
    	ACTION_IF ("%GW_objet%" STRING_COMPARE_CASE "N") BEGIN
    		ACTION_TO_UPPER GW_objet
    
    		ACTION_IF NOT (IS_AN_INT "%GW_item_tooltip0%") BEGIN
    			OUTER_SET GW_tool0 = "-1"
    		END ELSE BEGIN
    			ACTION_IF (STRING_LENGTH "%GW_item_tooltip0%" > 6) BEGIN
    				OUTER_SET GW_tool0 = RESOLVE_STR_REF ((AT %GW_item_tooltip0%))
    			END ELSE BEGIN								// Sinon, on va chercher le nom de l'objet dans le fichier dialog.tlk
    				OUTER_SET GW_tool0 = EVAL "%GW_item_tooltip0%"
    			END
    		END
    		ACTION_IF NOT (IS_AN_INT "%GW_item_tooltip1%") BEGIN
    			OUTER_SET GW_tool1 = "-1"
    		END ELSE BEGIN
    			ACTION_IF (STRING_LENGTH "%GW_item_tooltip1%" > 6) BEGIN
    				OUTER_SET GW_tool1 = RESOLVE_STR_REF ((AT %GW_item_tooltip1%))
    			END ELSE BEGIN								// Sinon, on va chercher le nom de l'objet dans le fichier dialog.tlk
    				OUTER_SET GW_tool1 = EVAL "%GW_item_tooltip1%"
    			END
    		END
    		ACTION_IF NOT (IS_AN_INT "%GW_item_tooltip2%") BEGIN
    			OUTER_SET GW_tool2 = "-1"
    		END ELSE BEGIN
    			ACTION_IF (STRING_LENGTH "%GW_item_tooltip2%" > 6) BEGIN
    				OUTER_SET GW_tool2 = RESOLVE_STR_REF ((AT %GW_item_tooltip2%))
    			END ELSE BEGIN								// Sinon, on va chercher le nom de l'objet dans le fichier dialog.tlk
    				OUTER_SET GW_tool2 = EVAL "%GW_item_tooltip2%"
    			END
    		END
    		ACTION_IF NOT (IS_AN_INT "%GW_item_tooltip3%") BEGIN
    			OUTER_SET GW_tool3 = "-1"
    		END ELSE BEGIN
    			ACTION_IF (STRING_LENGTH "%GW_item_tooltip3%" > 6) BEGIN
    				OUTER_SET GW_tool3 = RESOLVE_STR_REF ((AT %GW_item_tooltip3%))
    			END ELSE BEGIN								// Sinon, on va chercher le nom de l'objet dans le fichier dialog.tlk
    				OUTER_SET GW_tool3 = EVAL "%GW_item_tooltip3%"
    			END
    		END
    
    		APPEND ~tooltip.2da~ ~%GW_objet%   %GW_tool0%      %GW_tool1%      %GW_tool2%       %GW_tool3%%cz%~ UNLESS ~^%GW_objet%~
    
    	END	// of ACTION_IF ("%GW_objet%" STRING_COMPARE_CASE "N")
    END		// of DEFINE_ACTION_FUNCTION
    Utilisée dans un tp2 :

    Code:
    // Galure de Florence
    COPY ~Diamant_Eternel/Objets/Equipement/GWHat01.itm~ 	~override/GWHat01.itm~	SAY NAME1 @8255901	SAY NAME2 @8255903	SAY DESC @8255904	SAY UNIDENTIFIED_DESC  @8255902
    	LAF ~GW_ADD_TOOLTIP~ STR_VAR GW_item_tooltip0 = 7515001 GW_item_tooltip1 = 12055 GW_item_tooltip2 = 10996 GW_objet = GWHAT01 END
    	// Appel de la Tempête	-	Nuage de Brouillard	-	Régénération
    
    // Tricorne de commandement
    COPY ~Diamant_Eternel/Objets/Equipement/GWHat02.itm~	~override/GWHat02.itm~	SAY NAME1 @8255901	SAY NAME2 @8255905	SAY DESC @8255907	SAY UNIDENTIFIED_DESC  @8255906
    	LAF ~GW_ADD_TOOLTIP~ STR_VAR GW_item_tooltip0 = 22614 GW_item_tooltip1 = 7300101 GW_item_tooltip2 = 7300102 GW_objet = GWHAT02 END
    	// Domination	-	Complainte des Pirates	-	Force de la meute
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/09/2018, 19h06
  2. Réponses: 1
    Dernier message: 05/08/2017, 03h12
  3. [WeiDU] Comment créer automatiquement un fichier bam ?
    Par Freddy_Gwendo dans le forum Animations
    Réponses: 5
    Dernier message: 07/02/2016, 18h41
  4. [WeiDU] Comment ajouter un objet AU SOL sur une carte ?
    Par deratiseur dans le forum Programmation WeiDU
    Réponses: 6
    Dernier message: 13/03/2015, 20h13
  5. [WeiDU] Comment lire un fichier .d ou .tp2 ?
    Par Glim dans le forum Programmation WeiDU
    Réponses: 2
    Dernier message: 30/09/2003, 19h54

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250