Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

[TUTORIEL] [CARTES] Annexe 2 : Modifier un fichier .are avec WeiDU (.tp2)

Répondre
Avatar du membre
Armand
Adepte de Grondemarteau
Ours des cavernes
Messages : 1141
Enregistré le : lun. 03 déc. 2007, 22:04
Localisation : Dordogne
Statut : Hors ligne

[TUTORIEL] [CARTES] Annexe 2 : Modifier un fichier .are avec WeiDU (.tp2)

.

Message par Armand »

Créer une map pour bg2 (annexe 2)



Introduction

[JUSTIFIER]Depuis quelque temps déjà de nouvelles macros ont été implantées dans le programme WeiDU et sont désormais utilisables par tous. Les macros permettent en fait de simplifier une manipulation en automatisant un processus qui est générique. C'est-à-dire un processus qui se répète toujours de la même manière. En effet à quoi bon répéter une page entière de tp2 quand on veut juste supprimer quelques effets sur une créature, quand on veut modifier le contenu d’un conteneur sur une crte ou même concevoir un lien entre une nouvelle zone de notre cru et une crte d’origine du jeu par exemple. C’est pourquoi certains modders comme l’auteur d’Aurora shoes ou celui de Fishing for troubles ont eu l’idée de créer leurs propres macros afin de gagner du temps sur certaines manipulations.
Il y aurait beaucoup à dire et beaucoup à faire sur les macros mais pour l’heure je vais juste vous donnez un petit exemple concernant la création de travel trigger. Dans l’absolu c’est la fonction de patch que vous risquez d’utiliser le plus souvent et qui pourra vous servir de modèle si vous voulez tentez l’aventure avec d’autres macros.
Pour suivre ce tuto, je partirai du principe que vous avez déjà suivi mon tutorial sur les travel triggers. Je ne m’étendrai donc pas sur les manipulations liées à la création de « régions » permettant de transiter entre les zones.

Première étape : récupérer les coordonnées sous DLTCEP

Pour illustrer mon propos, on va imaginer qu’on a créé un sous-sol par exemple dans les docks d’Atkhatla et qu’on veut faire un lien entre notre nouvelle carte et la carte d’origine des docks. Il va donc falloir ouvrir DLTCEP pour charger cette carte - je vous invite à le faire avec moi. La référence de cette zone est AR0300 et on peut y accéder facilement en choisissant la commande :[/JUSTIFIER]

Area/load area

Image
Image




[JUSTIFIER]On reconnaît ici facilement le quartier des docks. DLTCEP nous offrant un aperçu de chaque carte, cela nous simplifie considérablement la tache. On peut également noter une fonction « search next » qui nous permet de recherche une carte via une entrée texte complète ou partielle. Maintenant nous allons nous diriger vers l’endroit de la carte qui nous intéresse :[/JUSTIFIER]

Image
Image

[JUSTIFIER]Ils ‘agit d’une maison dont l’un des cotés est masqué par la perspective, nous pouvons donc imaginer qu’il y a un passage par lequel accéder au bâtiment. Ici j’ai crée une nouvelle "région" afin de pouvoir déterminer un polygone sur la zone qui m’intéresse. C’est sur cette zone là que le symbole « porte ouverte » apparaîtra par la suite. Vous pouvez d’ailleurs vous-même créer votre propre polygone sur n’importe quel endroit de la carte. Maintenant faisons un zoom sur l’élément caractéristique qui va nous intéresser sur ce screen :[/JUSTIFIER]

Image
Image



Nous avons ici une série de cinq points déterminés par une combinaison de valeurs x et y. Il va vous falloir les noter sur un éditeur de texte en prenant bien garde à en respecter l’ordre. Avant de quitter DLTCEP nous allons également déterminer l’entrance (entrée) qui va nous permettre de nous positionner sur la zone de destination. J’ouvre donc une carte de mon cru à titre d’exemple :

Image
Image



Ici j’ai utilisé le menu entrance pour déterminer une entrance, comme d’habitude je détermine mon entrance prés de la porte vu que c’est là qu’il a plus de chance de déboucher lorsqu’on la franchit… :( Mais ce qui va surtout m’intéresser ici, ce sont les valeurs visibles tout en faut de la fenêtre, à savoir :

Image



De même, je transcris ce point sur mon éditeur de texte en précisant quelque chose comme :

Entrance : valeur x = 470 ;valeur y = 548

Voila pour la partie graphique, maintenant passons à la partie code !


Deuxième étape : mettre en place une région par tp2


Avec les informations que nous avons récupéré, nous allons pouvoir patcher notre carte afin d’avoir un travel trigger fonctionnel. Il faut savoir que sur la macro que j’utilise qui est une macro qui permet de faire des modifications structurelles sur une carte, certains composants sont indispensables au bon fonctionnement de la macro alors que d’autres sont optionnels. Pour plus de lisibilité j’écrirai en rouge les éléments essentiels et en bleu les éléments plus accessoires. ATTENTION : quand je dis accessoire c’est accessoire à la bonne exécution de la macro mais si par exemple vous ne mettez pas d’area de destination à une « region» la carte plantera. Voici donc comment se décompose le code :

COPY_EXISTING ~AR0300.are~ ~override/AR0300.are ~
On copie la zone et on la place dans l’override afin de la patcher.

LPF fj_are_structure
On annonce à la macro que l’on va utiliser ici comme je l'ai déjà dit c’est une macro que l’on utilise afin de modifier une zone. Le nom de la macro est « fj_are_structure », le terme LPF est un raccourci LAUNCH_PATCH_FUNCTION qui est une instruction qui permet de faire comprendre au programme que nous allons lancer une macro. Vous allez d’ailleurs la retrouver dans tous les patch utilisant des macros car sans ça la macro ne peut être lue et comprise.

INT_VAR
fj_type = 2

Le fj_type correspond au type de région auquel on a affaire (0=trap (piège), 1=info (texte cliquable), 2=travel (transition de zone). Ici on désire créer une nouvelle « travel region » ce sera donc deux.

fj_box_left = 2260
Le point de votre polygone qui se trouve le plus à gauche. Sachant que plus on se positionne vers le haut ou vers la gauche plus on se rapproche de 0 et plus on se positionne vers le bas ou la droite plus on s’en éloigne. Je choisis donc la valeur x la plus faible : 2260.

fj_box_top = 505
De même, il faut inscrire le point de votre polygone le plus haut. Je choisis donc la valeur y la plus faible également : 505

fj_box_right = 2435
La plus à droite cette fois. La valeur la plus forte de l’axe x : 2435.

fj_box_bottom = 633
La plus en bas. La valeur la plus forte de l’axe y : 633

fj_cursor_idx = 32
Comme son nom l’indique il s’agit du curseur qui apparaît lorsque vous vous positionnez sur la « travel region ». Ici il s’agit d’une porte entrebâillée. Il existe bien sur d’autres icônes faisant toutes référence au fichier « cursors.bam ». Vous pouvez également trouver ces références sous l’onglet régions de DLTCEP à la partie « cursor index ».

fj_vertex_0 = 2346 + (505 << 16)
fj_vertex_1 = 2260 + (565 << 16)
fj_vertex_2 = 2293 + (632 << 16)
fj_vertex_3 = 2400 + (633 << 16)
fj_vertex_3 = 2435 + (554 << 16)

Le système est assez simple ici, vous indiquez les coordonnées x et y de chaque point en suivant cette syntaxe : valeurx + (valeury <<16). En toute logique vous devez avoir autant de « fj_vertex » que de points sur votre polygone.


STR_VAR
fj_structure_type = region

Cette commande sert à préciser le type de modification auquel on a affaire. Ce sont les différents onglets que vous avez déjà pu voir sous DLCTEP à savoir :

(actor, region, spawn, entrance, container, itm, ambient, variable, door, animation, explored bitmask, songlist, rest interrupt table, note or projectile)

Qu’ont pourrait éventuellement traduire par :

(créatures implantées, génération de monstres, point d’arrivée, contenant, objets, sons ambiants, variable, porte, animation, musiques, interruptions lorsque le personnage se repose, note ou projectile)

fj_name = « #VART1 »
Le nom de la nouvelle région que vous venez de créer. N’oubliez surtout pas de PRÉFIXER pour éviter les incompatibilités ! Nous avons affaire ici à une entrée texte spécifique dans le programme, il est donc nécessaire de la mettre entre guillemets (ou entre ~~) afin que le programme la comprenne.

fj_destination_area = "#V7000"
La zone vers laquelle vous désirez transiter.

fj_destination_name = "#VARE2"
Le nom de l’entrance de la zone vers laquelle vous vous dirigez et par laquelle vous voulez arriver.

END
Annonce la fin de la manipulation.

Ce qui au final doit nous donner quelque chose comme :

COPY_EXISTING ~AR0300.are~ ~override/AR0300.are ~

LPF fj_are_structure
INT_VAR
fj_type = 2
fj_box_left = 2260
fj_box_top = 505
fj_box_right = 2435
fj_box_bottom = 633
fj_cursor_idx = 32

fj_vertex_0 = 2346 + (505 << 16)
fj_vertex_1 = 2260 + (565 << 16)
fj_vertex_2 = 2293 + (632 << 16)
fj_vertex_3 = 2400 + (633 << 16)
fj_vertex_4 = 2435 + (554 << 16)
STR_VAR
fj_structure_type = region
fj_name = « #VART1 »

fj_destination_area = "#V7000"
fj_destination_name = "#VARE2"
END


Collez ça quelque part dans votre tp2 et installez. Si tout fonctionne alors bravo vous avez patché votre première carte. Sinon eh bien postez à la suite de ce topic pour voir ce qu’on peut faire.


Troisième étape : mettre en place une entrance par tp2

Si vous patchez une carte originale du jeu pour allez vers une zone de votre cru, il vous suffit en effet de faire correspondre l’entrance que vous avez créée sur votre carte. Mais maintenant si vous voulez transiter d’une zone à vous vers une zone originale peut être voudrez vous créer une nouvelle entrance sur cette zone pour plus de cohérence. C’est là que les coordonnées qui avez notées plus haut vont nous servir.


COPY_EXISTING ~AR0300.are~ ~override/AR0300.are ~
De même, on prépare la carte au patch.

LPF fj_are_structure
INT_VAR

Ici rien ne change même commande que d’habitude.

fj_loc_x = 470
Coordonnées x du point que l’on a déterminé au préalable.

fj_loc_y = 548
Même chose pour le point y.


fj_orientation = 10
La direction vers laquelle le groupe pointe lorsqu’il arrive sur la zone. (valeur de 0 à 15 0=sud, 4=ouest 8=nord, 12=est)

STR_VAR
fj_structure_type = entrance

Comme on l’a vu auparavant le type d’élément que l’on est amené à modifier. Ici une entrance.

fj_name = "#Vent1"
Le nom de l’entrance afin que vous puissiez le repérer. Comme d’habitude on n’oublie pas de PRÉFIXER !

END
Comme d’habitude pour terminer l’instruction.
COPY_EXISTING ~AR0300.are~ ~override/AR0300.are ~
LPF fj_are_structure
INT_VAR
fj_loc_x = 470
fj_loc_y = 548

fj_orientation = 10 STR_VAR
fj_structure_type = entrance
fj_name = "#Vent1"
END


Maintenant vous savez comment créer une entrance et une région. Direction la prochaine étape où nous allons apprendre deux trois petits trucs potentiellement utiles.


Quatriéme étape : quelques commandes utiles pour nettoyer une map

Je m’étendrai davantage sur le sujet lors de prochains tutos néanmoins je voulais profiter de celui-ci pour vous indiquer deux trois commandes généralistes qui en l’occurrence sont très utiles pour nettoyer une carte :

COPY_EXISTING ~AR0300.are~ ~override/AR0300.are ~
On cible toujours la même carte qui sert à nos tests.

LPF DELETE_AREA_ITEM
Cette commande supprimera tous les objets d’une zone en supprimant tout simplement le contenu de tous les conteneurs. On peut noter ici que nous avons affaire à une nouvelle macro : DELETE_AREA_ITEM . A quoi le voit-on ? Eh bien à la présence de LPF (LAUNCH_PATCH_FUNCTION) bien sur ! Nous l’avons déjà vu plus haut c’est l’instruction indispensable à al bonne exécution d’une macro.


STR_VAR
item_to_delete = "RNDTRE01"

Mais ici par exemple je peux préciser un objet à supprimer en particulier. Il me suffit d’indiquer la référence du fichier itm. Si je ne met pas cette ligne (ou plusieurs autres si je désire supprimer plusieurs items) tous les items seront supprimés.

END
On a lancé une commande il faut la fermer.

LPF fj_are_structure
Notre macro habituelle.

INT_VAR
fj_delete_mode

On utilise une instruction particulière.qui va permettre de supprimer un composant de la carte au lieu d’en ajouter.

STR_VAR
fj_structure_type = actor

On précise quels composant supprimer, ici on choisit de supprimer tous les « actors » c'est-à-dire toutes les créatures de la carte.

END
Idem que plus haut.

Dans un cas pratique cela peut nous donner quelque chose du genre :
COPY_EXISTING ~AR0300.are~ ~override/AR0300.are ~
LPF DELETE_AREA_ITEM
STR_VAR
item_to_delete = "RNDTRE01"
END
LPF fj_are_structure
INT_VAR
fj_delete_mode = 1
STR_VAR
fj_structure_type = actor
END

Conclusion

Tout ceci n’est bien sur qu’un échantillon de ce que vous pouvez faire. Les macros couvrent une étendue extrêmement large de possibilités. Mais vous avez quelques cas pratiques pour vous guider. N’hésitez pas aussi à consulter régulièrement les infos du readme de WeiDu à ce sujet, je n’invente rien tout est ou bien encore .
http://toutlemondesontrolistes.blogspot ... ation.html
Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe
Avatar du membre
Wolghaï
Grouilleux
Messages : 9
Enregistré le : mer. 28 mars 2012, 13:37
Localisation : Bordeaux
Statut : Hors ligne
.

Message par Wolghaï »

YOUHOU !! :dance4: C'est tellement plus engageant que d'avoir à bidouiller les offsets à la main !
Un grand nouveau merci pour ce nouveau tuto, qui est complétement ce que je voulais savoir !

Jetage de fleurs mis à part, j'ai remarqué ce détail :
fj_destination_area = « #VAR7000 »
il faut un nom d'area sur 6 caractères, non ?

En tous cas, j'ai moins peur d'exécuter mon SetupWeidu en relisant mon tp2 de maintenant plutôt que dans sa version précédente.
Mon dernier test d'intégration avait planté BG2 au démarrage (puisque j'éditais (mal) la map du dongeon d'irenicus, moitié avec tp2, moitié avec DLTCEP... bref, impossible de lancer ma nouvelle partie).
N'étant pas très sûr de ce que je devais faire, j'ai écrasé (comme un bourrin) tout le contenu du dossier BG, pour le remplacer par une copie de ce même dossier avant modification. :whistle3: rigolez pas ! :$

encore une question/vérification :
Dans l'éventualité où il faille désinstaller un mod (un mod non fonctionnel par exemple), il suffirait de relancer le Setup-NomMod.exe qui proposera la désinstallation d'un ou des composants qu'il a déjà installé.
Le moddeur n'a pas besoin d'ajouter de procédure particulière dans le tp2. correct ?
Avatar du membre
Armand
Adepte de Grondemarteau
Ours des cavernes
Messages : 1141
Enregistré le : lun. 03 déc. 2007, 22:04
Localisation : Dordogne
Statut : Hors ligne
.

Message par Armand »

fj_destination_area = « #VAR7000 »
il faut un nom d'area sur 6 caractères, non ?
Oui tout a fait ceci est une erreur de ma part. Je le corrige de suite en fait la référence était "#V7000".
En tous cas, j'ai moins peur d'exécuter mon SetupWeidu en relisant mon tp2 de maintenant plutôt que dans sa version précédente.
Mon dernier test d'intégration avait planté BG2 au démarrage (puisque j'éditais (mal) la map du dongeon d'irenicus, moitié avec tp2, moitié avec DLTCEP... bref, impossible de lancer ma nouvelle partie).
N'étant pas très sûr de ce que je devais faire, j'ai écrasé (comme un bourrin) tout le contenu du dossier BG, pour le remplacer par une copie de ce même dossier avant modification. :whistle3: rigolez pas ! :$
On est tous passé par là, c'est en bidouillant qu'on apprend ! Il existais bien des manoeuvres de tp2 de patch via des enchaînements de READ et de WRITE autrefois mais bon c'étais tellement lourd que faire ça en quelque ligne c'est un vrai plaisir. Quand on vois ce qu'à du faire akadis pour son mod ne serait ce que pour patcher une zone des bas quartiers on se dit qu'on est content d'avoir une alternative...
Dans l'éventualité où il faille désinstaller un mod (un mod non fonctionnel par exemple), il suffirait de relancer le Setup-NomMod.exe qui proposera la désinstallation d'un ou des composants qu'il a déjà installé.
Le moddeur n'a pas besoin d'ajouter de procédure particulière dans le tp2. correct ?
Oui exactement c'est l'avantage de weidu c'est rétroactif ça permet de multiplier les tests sans se fouler. Ravi que le tutorial t'ai plus dans tous les cas. Et au plaisir de voir tes créations.


EDIT : J'ai aussi remplacé les « par des " plus classique. Word utilise ces guillemets par default mais je ne suis pas sur que weidu les reconnaisse.
http://toutlemondesontrolistes.blogspot ... ation.html
Ancien moddeur pour bg2, critique sur la sphère roliste et gamedesigner en herbe
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

Pour les ceusses qui se désolaient, j'ai actualisé les liens des images. ^^

Bonne lecture. ;)
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Répondre

Retourner vers « Tutoriels, guides »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités