Page 1 sur 1
[TP2] dupliquer un Trigger trap x fois sur la même carte
Posté : sam. 20 févr. 2021, 23:24
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
Posté : dim. 21 févr. 2021, 11:26
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 ?
Posté : dim. 21 févr. 2021, 14:24
par Cocrane
Salut Freddy,
nom de la carte source COML01
nom du trigger TRAP COTSP
Cocrane
Posté : lun. 22 févr. 2021, 11:38
par Freddy_Gwendo
Et tu confirmes que ce sont bien des traps (avec un script), pas des travel regions ?
Posté : lun. 22 févr. 2021, 19:18
par Cocrane
Oui monsieur.
Posté : mer. 24 févr. 2021, 17:17
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.
Posté : mer. 24 févr. 2021, 18:36
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
Posté : sam. 27 févr. 2021, 22:52
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
Posté : dim. 28 févr. 2021, 10:26
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...
Posté : dim. 28 févr. 2021, 15:09
par Cocrane
[/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
Posté : lun. 01 mars 2021, 21:24
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.
Posté : lun. 01 mars 2021, 23:07
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
Posté : mar. 02 mars 2021, 07:53
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.
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.
Posté : mer. 03 mars 2021, 18:59
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 *
* ========================================================================================================================= *
Posté : mer. 03 mars 2021, 19:20
par Cocrane
Bon boulot! :-)
Cocrane