[TP2] dupliquer un Trigger trap x fois sur la même carte

Regroupe tous les sujets sur les commandes, les fonctions, les routines, les modifications des fichiers systèmes (ids, 2da...)...
Répondre
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne

[TP2] dupliquer un Trigger trap x fois sur la même carte

.

Message par Cocrane »

L'objectif est le suivant:
- cloner un trigger trap x fois sur la carte d'origine et changer le nom du trigger et le fichier .baf lié.
exemple:
Trigger Trap COTSP2 / COTSP2(.baf)
Trigger Trap COTSP3 / COTSP3(.baf) clone
Trigger Trap COTSP%i% / COTSP%i%(.baf) clone
etc...

Pour faire simple, éviter de faire x triggers quasi identiques à la main. J'en ai un paquet à gérer. Ca va être fastidieux et source d'erreur.

J'ai pris le code de Freddy qui permet de cloner un seul trigger sur une autre carte mais je parviens pas à l'adapter pour mon besoin.

Est ce quelqu'un a déjà un code équivalent ou pourrais m'aider à coder le TP2?

Code de Freddy

Code : Tout sélectionner

COPY_EXISTING	~BG3200.are~ ~override~
	PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE
		LPF ~GW_CLONE_TRAVEL_TRIGGER~ STR_VAR GW_Dest_old = BG3200 GW_Dest_new = BG3201 GW_Name_new = COTSPS2 RET GW_add_trigger END
		PATCH_IF ("%GW_add_trigger%" STRING_COMPARE_CASE "") THEN BEGIN
			LPF ~GW_REINCLUDE~ STR_VAR GW_input = EVAL "%GW_add_trigger%" END
		END
	END	// of PATCH_IF (SOURCE_SIZE > 0x11b)
BUT_ONLY
Pour moi, il faut placer une boucle avec un %i% pour créer à partir du trigger COTSP%i% x trigger sur la même carte.


Cocrane
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 »

1. Quel est le nom du trigger qui existe déjà et que tu veux cloner ?
2. C'est bien un trigger trap et non pas travel que tu veux cloner ?
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Salut Freddy,

nom de la carte source COML01
nom du trigger TRAP COTSP

Cocrane
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 »

Et tu confirmes que ce sont bien des traps (avec un script), pas des travel regions ?
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Oui monsieur. ^^
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 »

OK.

Je n'ai pas de code tout prêt pour ça, mais je dois pouvoir en adapter un assez facilement. Sans doute ce weekend, si ça te convient.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Salut Freddy,
le délai me va très bien. :-)

Merci pour ton aide.

Je regarderai les deux codes pour voir comment tu t'y es pris. :-)

Cocrane
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Freddy,

Je te confirme le besoin ci-dessus mais en poussant l'analyse sur la suite de mes besoins, Le clonage d'un Travel region x fois va être nécessaire. ;-)

Comme quoi, tu avais senti le coup venir. (tu n'as pas mis une caméra dans mon bureau quand même???)

Exemple:
Carte de référence: COMLR
la carte contient un travel région PN (travel région porte nord)

Contenu du travel région PN
Destination COML
Entrance PS

Résultat du clonage n°1 -> n°x
Destination COML1
Entrance PS


Je suppose qu'on aura les paramètres d'entrées ci-dessous:
Nom de la carte de référence
Nom du travel région de référence
X compteur

Je lancerai 4 fois la fonction pour cloner les travel régions de chaque porte (nord, est, sud et ouest).

Le sujet est pour le Mod Labyrinthe (36 salles piochées dans max 99 cartes).
Rien que pour gérer les changements de carte, j'aurai 4 * 99 trigger Travel sur la carte.

Est ce que l'on a une limite de création de trigger?
Dans la définition IESDP, je ne vois pas de limite annoncée.

Au final, selon les liens entre les cartes, j'aurai 4 Travel région d'actif par carte.

Ce travail est en amont de l'installation du Mod, c'est pour préparer ma carte de référence pour créer ensuite les X cartes du labyrinthe. La carte obtenue peut être une nouvelle carte.

Si c'est chiant à réaliser, pas de soucis laisse tomber. ;)

Cocrane
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 travel regions, mon tuto fonctionne quel que soit le nombre de fois que tu dupliques le trigger. Il suffit de lancer la procédure plusieurs fois, voire dans une boucle. Pour info, mes fonctions ont été utilisées par plusieurs mods sortis depuis et sont donc garanties sans bug. ;)

Pour les traps, je m'y mets en fin d'après midi car il faut que je complile les infos que j'ai reçues hier à la fois des devs et d'un programmeur qui a fait un peu de reverse engeneering du moteur EE. La bonne nouvelle, c'est que les paramètres de ma fonction qui installe IA dans EE sont bons. La mauvaise, c'est qu'ils ont confirmé le bug que j'avais identifié avec les animations de dragon. Et manifestement, il ne sera jamais corrigé. Il faut donc que je ponde un petit texte là-dessus dans la doc IA pendant que c'est encore chaud. Ou comment ércire de manière compréhensible par tous un truc technique que j'ai mis une bonne heure à comprendre... Le tout en anglais, évidemment...
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Code : Tout sélectionner

[quote][CODE]
[/QUOTE][/code] Freddy,
un niveau planning, pas de soucis. J'ai x sujets à traiter. :-)

J'ai testé la copie du Travel région sans succès. J'ai repris le code de l'époque.

Code : Tout sélectionner

INCLUDE ~
Laby/lib/GW_Cartes.tph~	// Chargement des fonctions


COPY_EXISTING	~BG3300.are~ ~override~
	PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE	
		LPF ~GW_CLONE_TRAVEL_TRIGGER~ STR_VAR GW_Dest_old = BG3300 GW_Dest_new = BG9999 GW_Name_new = TRPN RET GW_add_trigger END
		PATCH_IF ("%GW_add_trigger%" STRING_COMPARE_CASE "") THEN BEGIN
			LPF ~GW_REINCLUDE~ STR_VAR GW_input = EVAL "%GW_add_trigger%" END
		END
	END
BUT_ONLY
GW_Dest_old = BG3300 Carte contenant le travel région
GW_Dest_new = BG9999 Carte à créer avec le travel région copié
GW_Name_new = TRPN Nom du travel région à copier.

Résultat:

Code : Tout sélectionner

Installing [Laby] [BGT v1.1 - 2019]
Copying and patching 1 file ...
[./override/BG3300.are] loaded, 49740 bytes
Et il ne se passe plus rien.

J'ai testé avec une carte existante et BG3300. J'ai le même résultat.

A partir de cette fonction, je ne vois comment c'est possible d'avoir un nouveau nom de Travel (TRPN1 par exemple) région et un changement de nom de carte de destination contenue dans le travel région (COML -> COML1).

Cocrane
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 »

Tes problèmes ressemblent étrangement à un mauvais paramétrage des variables de la fonction.

Ceci dit, j'ai récupéré la plupart de mes fonctions de clonage et les ai fondues en une seule : GW_CLONE_AREA_TRIGGER qui permet de cloner n'importe quel type de trigger.

Testée sur AR0700 pour créer plusieurs clones du même trigger (travel ou trap) :

Code : Tout sélectionner

INCLUDE ~%MOD_FOLDER%/lib/gw_clone_triggers.tpa~

// 1. Launch GW_DEF_AREA_OFFSETS macro
// -----------------------------------
LAM ~GW_DEF_AREA_OFFSETS~

// 2. Patch area
// -------------
COPY_EXISTING ~AR0700.are~ ~BG0700.are~

	PATCH_IF (SOURCE_SIZE > GW_are_min_size) BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE

		FOR (i = 1 ; i < 10 ; ++i) BEGIN
			LPF ~GW_CLONE_AREA_TRIGGER~ STR_VAR GW_region_old = Vamptrap1 GW_region_new = EVAL "Cocotrap%i%" GW_script_new = EVAL "COCOSC%i%" END
		END

	END
BUT_ONLY

COPY_EXISTING ~AR0700.are~ ~BC0700.are~

	PATCH_IF (SOURCE_SIZE > GW_are_min_size) BEGIN

		FOR (i = 1 ; i < 10 ; ++i) BEGIN
			LPF ~GW_CLONE_AREA_TRIGGER~ STR_VAR GW_region_old = Tran0702 GW_region_new = EVAL "Cocotra%i%" GW_dest_new = EVAL "COCO0%i%" END
		END

	END
BUT_ONLY
BG0700 contient 9 nouveaux trap triggers, clones de Vamptrap1: Cocotrap%i% avec chacun son script COCOSC%i%

BC0700 contient 9 nouveaux travel triggers, clones de Tran0702: Cocotra%i% menant à la carte COCO0%i%

Tu verras dans la librairie qu'il est possible de modifier des paramètres du trigger avant de le cloner (difficultés de détection et de désactivation du piège, nom de l'entrée dans la carte de destination, flag, message d'information, etc...). D'autres seront ajoutés au fur et à mesure de l'affinement de cette fonction, mais là, je sature. ;)

Code : Tout sélectionner

 * ------------------------------------------------------------------------------------------------------------------------- *
 *  INT_VAR                                                                                                                  *
 *    - GW_region_type  = Changer le type de région - Modify the Region type (0 = trap, 1 = info, 2 = travel, 99 = all).     *
 *    - GW_flags_new    = Changer les flags de la région - Modify the region flags (9999 = no change).                       *
 *    - GW_info_point   = Changer le message d'information de la région - Modify the Information text string reference.      *
 *    - GW_trap_detect  = Changer le niveau de difficulté de détection d'un piège - Modify the Trap detection difficulty.    *
 *    - GW_trap_remove  = Changer le niveau de difficulté de désamorçage d'un piège - Modify the Trap removal difficulty.    *
 *    - GW_trap_active  = Changer l'activation du piège d'une région - Modify whether the Region is trapped (0=No, 1=Yes).   *
 *    - GW_trap_status  = Changer le statut d'un piège - Modify the Trap status (0=No, 1=Yes).                               *
 *    - GW_launch_x     = Modifier les coordonnées X de lancement d'un piège - Modify the Trap launch X coordinate.          *
 *    - GW_launch_y     = Modifier les coordonnées Y de lancement d'un piège - Modify the Trap launch Y coordinate.          *
 *    - GW_alt_x        = Modifier les coordonnées alt Y du trigger - Modify the use point X coordinate.                     *
 *    - GW_alt_y        = Modifier les coordonnées alt Y du trigger - Modify the use point Y coordinate.                     *
 *  STR_VAR                                                                                                                  *
 *    - GW_region_old   = Region's name to clone  (nom du trigger à cloner).                                                 *
 *    - GW_region_new   = Attribuer un nouveau nom à la region clonée - Give a new name to the cloned region.                *
 *    - GW_dest_old     = Carte de destination à trouver - Destination area to found (travel trigger only).                  *
 *    - GW_dest_new     = Changer la carte de destination - Modify the Destination area resource reference.                  *
 *    - GW_entrance_new = Changer l'entrée dans la carte de destination - Modify the Entrance name in the destination area.  *
 *    - GW_key_new      = Modifier la clé pour activer le trigger - Modify the key that activates the trigger.               *
 *    - GW_script_new   = Changer le script attribué à la région - Modify the region script.                                 *
 * ========================================================================================================================= */
Bref, je te conseille de lire la doc de la fonction pour en tirer le meilleur parti.
Fichiers joints
gw_clone_triggers.tpa
(51.77 Kio) Téléchargé 113 fois
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Salut Freddy,

je vois que tu as beaucoup investi sur cet aspect du Modding.

J'ai testé le clonage Trap et Travel. Ca fonctionne très bien et c'est très rapide.

Je suis monté à 200 triggers pour voir si le fichier ARE tenait le coup.

Tu viens de m'épargner un travail manuel et répétitif très fastidieux. Un grand merci à toi! :-)

Cocrane
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 »

Attention, le nombre de triggers max est une valeur de type word, soit 256. ;)
Il faudra que j'ajoute un contrôle pour éviter d'en créer plus, sinon le jeu plantera. :whistle2:

Faut aussi que j'affine le code pour éviter de dupliquer les vertex du trigger existant et privilégier l'utilisation de ceux qui existent. Mais ça suppose de ré-écrire la fonction ADD_AREA_TRIGGER, et ça me gonfle un tantinet pour l'instant.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
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 »

Mise à jour de la fonction :

- Ajout du contrôle pour limiter le nombre max de triggers à 256.
- Optimisation de la modification du flag de la région : il suffit désormais de renseigner quels bits sont modifiés, la fonction le fera automatiquement. ;)

Code : Tout sélectionner

 * ========================================================================================================================= *
 *    - GW_flags_new    = Changer les flags de la région - Modify the region flags (same = no change).                       *
 *      Flag bits set in bit format which are read right to left - 0 = off; 1 = on                                           *
 *      Code format per bit: "BIT0=value;BIT1=value..." - Supported bits:                                                    *
 *        BIT0: Key required [NI = Locked]                     - BIT1: Reset trap [NI = Trap resets] for proximity triggers  *
 *        BIT2: Party Required (for travel triggers)           - BIT3: Detectable [NI = Trap detectable                      *
 *        BIT4: NPC activates [NI = Trap set off by enemy]     - BIT5: Active in tutorial area only [NI = Tutorial trigger]  *
 *        BIT6: Anyone activates [NI = Trap set off by NPC]    - BIT7: No string [NI = Trigger silent]                       *
 *        BIT8: Trigger Deactivated (for proximity triggers)   - BIT9: Party only [NI = Cannot by passed by NPC]             *
 *        BIT10: Alternative point [NI = Use activation point] - BIT11: Door closed [NI = Connected to door]                 *
 *        Example: "BIT1=1;BIT9=0" adds BIT1 and remove BIT9                                                                 *
 * ========================================================================================================================= *
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

Bon boulot! :-)

Cocrane
Répondre

Retourner vers « Programmation WeiDU »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité