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é...

[DIAMANT] Programmation (WeiDU et autres)

Pourquoi les Ordres de Paladins ne comportent-ils que des hommes ? Et si tout ceci n'était qu'une fable racontée par les mâles pour dissimuler la vérité ? Ce mod tente de rétablir la vérité, du moins SA vérité...
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 »

Petit rappel :
Isaya a écrit :Pour éviter ton code monstrueux, tu dois pouvoir recourir à une astuce qui oblige à faire l'opération en deux temps :
  • créer l'objet de base, sans tous les effets, en lui donnant comme nom le texte que tu veux à terme ajouter dans les effets
  • copier l'objet sur lui-même et dans le patch tel que tu le fais, lire d'abord le STRREF du nom pour récupérer le numéro du texte, un nombre, que tu pourras alors passer à ta fonction
Non testé, mais ça pourrait s'écrire comme ça (pas sûr pour la syntaxe de COPY_EXISTING) :

Code : Tout sélectionner

COPY ~override/GWFood.itm~ ~override/GWFrt04.itm~
  SAY NAME1 @4337

COPY_EXISTING ~GWFrt04.itm~ ~override~
  READ_LONG NAME1 strrefnom
  SAY NAME1 @8470007 SAY NAME2 @8470007 SAY DESC @8470008 // Ananas
  ...
  LPF ADD_ITEM_EFFECT INT_VAR opcode = 139 target = 1 timing = 4 resist_dispel = 2 duration = 60 probability1 = 20 parameter1 = %strrefnom% END
Sachant qu'avec un objet tu disposes de 4 textes faciles à manipuler (2 noms et 2 descriptions) si jamais il te faut plusieurs textes.

Finalement, j'ai trouvé beaucoup plus simple. ;)

En cherchant comment rajouter une colonne au fichier Tooltip.2da, je suis tombé sur cette commande WeiDU :
RESOLVE_STR_REF (text) : Resolves the given text (adding it to the tlk), and returns its TLK index (so you can pass the result of this command to a function which then uses WRITE_LONG rather than SAY).
Je la teste illico presto et.... Bingo ! :victory:

Voici donc la version finale du code qui évite de multiplier les lignes et de passer par les COPY_EXISTING :

Code : Tout sélectionner

COPY ~override/GWFood.itm~ ~override/GWSal21.itm~	SAY NAME1 @8479031	SAY NAME2 @8479031	SAY DESC @8479032
	WRITE_LONG 0x34 10	WRITE_ASCII 0x3a ~GWSAL21~ #8	WRITE_ASCII 0x44 ~GWSAL21G~ #8	WRITE_LONG 0x4c 3	WRITE_ASCII 0x58 ~GWSAL21D~ #8	WRITE_ASCII 0x76 ~GWSAL21~ #8
	WRITE_SHORT 0x94 7	WRITE_LONG 0xae 2	SAY 0x10e @7000004	WRITE_LONG 0x19e 492	WRITE_LONG 0x1ce 12	WRITE_LONG 0x1fe 748	WRITE_LONG 0x22e 109	WRITE_LONG 0x25e 36
	LPF ADD_ITEM_EFFECT INT_VAR opcode = 180 target = 1 parameter1 = [U][color="#FFFF00"][/color][color="#FFFF00"]RESOLVE_STR_REF (@7000012)[/color][/U] resist_dispel = 2 duration = 2400 STR_VAR resource = GWSAL21 END

Je vois déjà les possibilités de l'utiliser dans d'autres cas : c'est très pratique. :)
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 »

Pour faciliter le développement, puis l'installation de mes composants, j'essaie d'automatiser au maximum certaines procédures.

Par exemple, pour créer des parchemins de sort et des bougies de connaissance, j'utilise cette procédure :

Code : Tout sélectionner

<<<<<<<<.../inline/blank
CODE		Objet | Niv	prix	Lore  | Cible	Range | Opcode	Target	Lvl	Type  | Learn | Classes	NoEvil	Good  Paladin  Kits  |  Icone		IconeG		IconeD	 |	Nom
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >> >> >> >
COPY ~.../inline/blank~ ~GWScrolls_log.txt~


ACTION_DEFINE_ASSOCIATIVE_ARRAY Objets_Scrolls BEGIN
// Ref	 Source   prix	  lore		Nb		Nv	Int	Wis	 Icone		IconeG		IconeD	   Exc 	 Cible 	  Range	 opcode	target	Lv Typ	Sort	Learn  XP NoEvil  Good	  Pala Kits	 Nom1		Nom2		Desc		Undes	=>	Fichier
//- 0 ----- 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 -------------------------------------
// Armure de Platine
SclP,	GWScrolP,	100,	20,		ID,		ID,	ID,	9,	GWARMPLA,		ID,			ID,		CP,		1,		1,		146,	2,	0,	0,	GWARMPL,	N,	0,	N,		Y,		N,	N,	7800001,	7711001,	7711002,	7800002	=> GWSArmPl	// Armure de platine
Bgie,	GWScrolP,	100,	20,		ID,		ID,	ID,	9,	GWBGIGR,	GWBGIGRG,	GWBGIGRD,	CP,		1,		1,		146,	2,	0,	0,	GWARMPL,	N,	0,	N,		Y,		N,	N,	7800011,	7810005,	7810006,	7800012	=> GWBArmPl	// Bougie d'Armure de platine
Con,	GWScrolP,	300,	20,		ID,		10,	ID,	ID,	IMISC74,	GWCHDGRG,	CMISC74,	N,		5,		1,		146,	2,	0,	0,	GWARMPL,	Y,	2,	N,		N,		N,	CD,	7800013,	7910005,	7910006,	7800014	=> GWCArmPl	// Cierge d'Armure de platine
// BclFo	Bouclier de la foi
SclP,	GWScrolP,	100,	20,		ID,		ID,	ID,	9,	GWBCLFOA,		ID,			ID,		CP,		1,		1,		146,	2,	0,	0,	GWBCLFO,	N,	0,	N,		Y,		N,	N,	7800001,	7721007,	7721008,	7800002	=> GWSBclFo	// Bouclier de la foi
Bgie,	GWScrolP,	100,	20,		ID,		ID,	ID,	9,	GWCDLGR,	GWCDLGRG,	GWCDLGRD,	CP,		1,		1,		146,	2,	0,	0,	GWBCLFO,	N,	0,	N,		Y,		N,	N,	7800011,	7810015,	7810016,	7800012	=> GWBBclPl	// Bougie de Bouclier de la foi
Con,	GWScrolP,	300,	20,		ID,		10,	ID,	ID,	IMISC74,	GWCHDGRG,	CMISC74,	N,		5,		1,		146,	2,	0,	0,	GWBCLFO,	Y,	2,	N,		N,		N,	CL,	7800013,	7910015,	7910016,	7800014	=> GWCBclPl	// Cierge de Bouclier de la foi
// Bouclier de Platine
SclP,	GWScrolP,	100,	20,		ID,		ID,	ID,	9,	GWBCLPLA,		ID,			ID,		CP,		1,		1,		146,	2,	0,	0,	GWBCLPL,	N,	0,	N,		Y,		N,	N,	7800001,	7711007,	7711008,	7800002	=> GWSBclPl	// Bouclier de platine
Bgie,	GWScrolP,	100,	20,		ID,		ID,	ID,	9,	GWCDLGR,	GWCDLGRG,	GWCDLGRD,	CP,		1,		1,		146,	2,	0,	0,	GWBCLPL,	N,	0,	N,		Y,		N,	N,	7800011,	7810017,	7810018,	7800012	=> GWBBclPl	// Bougie de Bouclier de platine
Con,	GWScrolP,	300,	20,		ID,		10,	ID,	ID,	IMISC74,	GWCHDGRG,	CMISC74,	N,		5,		1,		146,	2,	0,	0,	GWBCLPL,	Y,	2,	N,		N,		N,	CD,	7800013,	7910017,	7910018,	7800014	=> GWCBclPl	// Cierge de Bouclier de platine
// Bouclier de la foi de groupe
SclP,	GWScrolP,	400,	80,		ID,		ID,	ID,	9,	GWBCLFGA,		ID,			ID,		CP,		5,		15,		146,	2,	0,	0,	GWBCLFG,	N,	0,	N,		Y,		N,	N,	7800001,	7724005,	7724006,	7800002	=> GWSBclFG	// Bouclier de la foi de groupe
Bgie,	GWScrolP,	400,	80,		ID,		15,	ID,	9,	GWCANGR,	GWCANGRG,	GWCANGRD,	CP,		5,		15,		146,	2,	0,	0,	GWBCLFG,	N,	0,	N,		Y,		N,	N,	7800011,	7840011,	7840012,	7800012	=> GWBBclPG	// Bougie de Bouclier de la foi de groupe
Con,	GWScrolP,	1200,	80,		ID,		15,	ID,	ID,	IMISC74,	GWCHDGRG,	CMISC74,	N,		5,		1,		146,	2,	0,	0,	GWBCLFG,	Y,	2,	N,		N,		N,	CL,	7800013,	7940011,	7940012,	7800014	=> GWCBclPG	// Cierge de Bouclier de la foi de groupe
// Bouclier de Platine de groupe
SclP,	GWScrolP,	400,	80,		ID,		ID,	ID,	9,	GWBCLPGA,		ID,			ID,		CP,		5,		15,		146,	2,	0,	0,	GWBCLPG,	N,	0,	N,		Y,		N,	N,	7800001,	7714005,	7714006,	7800002	=> GWSBclPG	// Bouclier de platine de groupe
Bgie,	GWScrolP,	400,	80,		ID,		15,	ID,	9,	GWCANGR,	GWCANGRG,	GWCANGRD,	CP,		5,		15,		146,	2,	0,	0,	GWBCLPG,	N,	0,	N,		Y,		N,	N,	7800011,	7840013,	7840014,	7800012	=> GWBBclPG	// Bougie de Bouclier de platine de groupe
Con,	GWScrolP,	1200,	80,		ID,		15,	ID,	ID,	IMISC74,	GWCHDGRG,	CMISC74,	N,		5,		1,		146,	2,	0,	0,	GWBCLPG,	Y,	2,	N,		N,		N,	CD,	7800013,	7940013,	7940014,	7800014	=> GWCBclPG	// Cierge de Bouclier de platine de groupe
END

ACTION_PHP_EACH Objets_Scrolls AS donnees => Scroll BEGIN

COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~  ~override/%Scroll%.itm~
	TO_UPPER %DEST_RES%
	PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files

... liste de patchs
END
Tout fonctionne parfaitement :

Code : Tout sélectionner

CODE		Objet | Niv	prix	Lore  | Cible	Range | Opcode	Target	Lvl	Type  | Learn | Classes	NoEvil	Good  Paladin  Kits  |  Icone		IconeG		IconeD	 |	Nom
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GWSARMPL	SclP	-1	100	20	1	1	146	2	0	0	N	CP	N	Y	N	N	GWARMPLA 	same    	same    	Armure de platine
GWBARMPL	Bgie	-1	100	20	1	1	146	2	0	0	N	CP	N	Y	N	N	GWBGIGR 	GWBGIGRG    	GWBGIGRD    	Bougie d'Armure de Platine
GWCARMPL	Con	10	300	20	5	1	146	2	0	0	Y	N	N	N	N	CD	IMISC74 	GWCHDGRG    	CMISC74    	Cierge d'Armure de Platine
GWSBCLFO	SclP	-1	100	20	1	1	146	2	0	0	N	CP	N	Y	N	N	GWBCLFOA 	same    	same    	Bouclier de la foi
GWBBCLPL	Bgie	-1	100	20	1	1	146	2	0	0	N	CP	N	Y	N	N	GWCDLGR 	GWCDLGRG    	GWCDLGRD    	Bougie de Bouclier de la foi
GWCBCLPL	Con	10	300	20	5	1	146	2	0	0	Y	N	N	N	N	CL	IMISC74 	GWCHDGRG    	CMISC74    	Cierge de Bouclier de la foi
GWSBCLPL	SclP	-1	100	20	1	1	146	2	0	0	N	CP	N	Y	N	N	GWBCLPLA 	same    	same    	Bouclier de platine
GWBBCLPL	Bgie	-1	100	20	1	1	146	2	0	0	N	CP	N	Y	N	N	GWCDLGR 	GWCDLGRG    	GWCDLGRD    	Bougie de Bouclier de Platine
GWCBCLPL	Con	10	300	20	5	1	146	2	0	0	Y	N	N	N	N	CD	IMISC74 	GWCHDGRG    	CMISC74    	Cierge de Bouclier de Platine
GWSBCLFG	SclP	-1	400	80	5	15	146	2	0	0	N	CP	N	Y	N	N	GWBCLFGA 	same    	same    	Bouclier de la foi de groupe
GWBBCLPG	Bgie	15	400	80	5	15	146	2	0	0	N	CP	N	Y	N	N	GWCANGR 	GWCANGRG    	GWCANGRD    	Bougie de Bouclier de la foi de groupe
GWCBCLPG	Con	15	1200	80	5	1	146	2	0	0	Y	N	N	N	N	CL	IMISC74 	GWCHDGRG    	CMISC74    	Cierge de Bouclier de la foi de groupe
GWSBCLPG	SclP	-1	400	80	5	15	146	2	0	0	N	CP	N	Y	N	N	GWBCLPGA 	same    	same    	Bouclier de platine de groupe
GWBBCLPG	Bgie	15	400	80	5	15	146	2	0	0	N	CP	N	Y	N	N	GWCANGR 	GWCANGRG    	GWCANGRD    	Bougie de Bouclier de platine de groupe
GWCBCLPG	Con	15	1200	80	5	1	146	2	0	0	Y	N	N	N	N	CD	IMISC74 	GWCHDGRG    	CMISC74    	Cierge de Bouclier de platine de groupe
Mais j'aimerais rajouter un contrôle.

Pour l'instant, je suis obligé de créer deux tableaux : l'un pour les clones de fichiers de mon mod, l'autre pour les modifications de fichiers du jeu. Ce qui se traduit par :

ACTION_PHP_EACH Objets_Scrolls1 AS donnees => Scroll1 BEGIN
COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ ~override/%Scroll1%.itm~

ACTION_PHP_EACH Objets_Scrolls2 AS donnees => Scroll2 BEGIN
COPY_EXISTING ~%donnees_1%.itm~ ~override/%Scroll2%.itm~

Je souhaiterais définir une variable %donnees_0% qui me permettrait de savoir quel type de clonage j'effectue
M ==> COPY
J ==> COPY_EXISTING

Ce qui donnerait par exemple

ACTION_IF ("%donnees_0%" STRING_COMPARE_CASE "M") THEN BEGIN
OUTER_TEXT_SPRINT commande "COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ "
END ELSE BEGIN OUTER_TEXT_SPRINT commande "COPY_EXISTING ~%donnees_1%.itm~ "
END

%commande% ~override/%Scroll%.itm~
suivi de la suite des patchs

Mais je ne sais pas si WeiDU gère ce genre de commandes et si oui, comment procéder.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Je ne pense pas que tu puisses évaluer une variable en tant que commande. Cela impliquerait un niveau d'abstraction très poussé.

Une solution serait que tu constitues tes commandes sous forme de fichier temporaire de type tpa ou tph. Consulte la documentation WeiDU pour

Code : Tout sélectionner

<<<<<<<< fileName fileBody > >> >> >> >
Tu pourras constituer les commandes que tu souhaites dans ce fichier avec les évaluations. Il faudra sans doute y mettre le code du patch. Après tu devrais pouvoir simplement faire un include pour qu'il s'exécute en ayant accès à ton tableau local.

Sinon as-tu essayé le code le plus simple qui soit ?

Code : Tout sélectionner

ACTION_IF ("%donnees_0%" STRING_COMPARE_CASE "M") THEN BEGIN
COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ ~override/%Scroll%.itm~
END ELSE BEGIN
COPY_EXISTING ~%donnees_1%.itm~ ~override/%Scroll%.itm~
END
les instructions de patch immédiatement après
Il n'y a quand même pas beaucoup de chances que ça fonctionne. Il faudrait pour cela que WeiDU ne considère pas les END comme des fins d'action, ce qui me semble peu probable au regard des erreurs où il indique quels mots il s'attendait à trouver, ce qui suppose une gestion des états internes assez stricte.
:!: 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 !
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 »

C'est justement parce que ça ne fonctionnait pas que j'ai scindé mes tableaux en deux ! ;)

Je vais explorer ta piste pour voir si j'arrive à quelque chose. Au pire, je fonctionnerai avec mes deux tableaux...
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 »

Finalement, je me suis rappelé d'un échange avec Argent77 quand je testais NI et j'ai trouvé une bidouille :

Code : Tout sélectionner

ACTION_IF ("%donnees_0%" STRING_COMPARE_CASE "M" = 0) BEGIN
	OUTER_TEXT_SPRINT cmd "COPY Diamant_Eternel/Clones/%donnees_1%.itm override/%donnees_1%.itm"
	AT_NOW ~%cmd%~
END
COPY_EXISTING ~%donnees_1%.itm~ ~override/%Objet%.itm~

... liste de patchs

BUT_ONLY
ACTION_IF ("%donnees_0%" STRING_COMPARE_CASE "M" = 0) BEGIN
	DELETE + ~override/%donnees_1%.itm~
END
Ça fonctionne très bien : les fichiers du mods sont copiés dans l'override, clonés, puis supprimés. Quant aux fichiers du jeu, ils sont simplement clonés.

A une nuance près : je ne peux pas cloner un fichier du mod déjà installé dans le répertoire override, sinon, il est détruit.

Pour l'instant, je court-circuite cette limitation en installant ces fichiers dans une procédure à part après l'exécution du tableau.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

La solution a ses limites. AT_NOW exécute une commande du système d'exploitation, du coup copy n'existe que sous Windows et cela échouera sur Linux et Mac.

Par ailleurs, AT_NOW présente d'autres risques en terme d'ordre d'installation. Cf cette mise en garde dans la description de MOVE dans la doc WeiDU :
Safety notes: when uninstalling, MOVE is restored first, then all generic actions are restored, then AT_*_UNINSTALL is handled. As such, do your AT_NOW, then do your COPY, then do your MOVEs (exception: if you MOVE for biffing purposes, it is safe to call MAKE_BIFF after MOVE. Do not use the –make-biff command-line argument).
Pas sûr de bien comprendre les conséquences, et donc ça m’interpelle quand tu évoques que tu ferais les AT_NOW après avoir fait d'autres opérations alors qu'il est évoqué qu'il faudrait faire AT_NOW en premier.


Voici en gros ce que je te propose d'essayer à la place (je n'ai pas essayé de mon côté).

Code : Tout sélectionner

// Ton code pour créer la commande
ACTION_IF ("%donnees_0%" STRING_COMPARE_CASE "M") THEN BEGIN
OUTER_TEXT_SPRINT commande "COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ "
END ELSE BEGIN OUTER_TEXT_SPRINT commande "COPY_EXISTING ~%donnees_1%.itm~ "
END

<<<<<<<< .../tonmod-inlined/tonmod_patch.tpa
%commande% ~override/%Scroll%.itm~
 liste des patchs à appliquer
> >> >> >> >

REINCLUDE ~.../tonmod-inlined/tonmod_patch.tpa~
Le code d'UB fait quelque chose de comparable pour le composant Restored Minor Dialogs (tu peux chercher ce texte dans le tp2 pour localiser le code). Pour diverses raisons, UB n'inclut pas directement le fichier temporaire mais une copie dans override puis enrichie (sans doute parce que pour enrichir via WeiDU, il doit forcément être dans override).
Si le fait de faire l'include échoue, essaie de faire une copie avant, au cas où REINCLUDE ne fonctionne pas sans vrai fichier.

Code : Tout sélectionner

COPY ~.../tonmod-inlined/tonmod_patch.tpa~ ~override/tonmod_patch.tpa~

REINCLUDE ~override/tonmod_patch.tpa~
:!: 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 !
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 »

Bon, j'ai testé les deux méthodes :

Code : Tout sélectionner

ACTION_PHP_EACH Objets_Divers AS donnees => Objet BEGIN

	ACTION_IF ("%donnees_14%" STRING_COMPARE_CASE "M") THEN BEGIN
		OUTER_TEXT_SPRINT commande "COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ "
		END ELSE BEGIN OUTER_TEXT_SPRINT commande "COPY_EXISTING ~%donnees_1%.itm~ "
	END
<<<<<<<< .../Diamant_Eternel/inlined/essai.tpa
%commande% ~override/%Scroll%.itm~
	WRITE_LONG   0x34	"%donnees_2%"		// Prix
	PATCH_IF ("%donnees_5%" STRING_COMPARE_CASE "ID") BEGIN WRITE_SHORT 0x38 "%donnees_5%" END // Stack
	WRITE_SHORT  0x42	"%donnees_4%"		// Lore to ID
	WRITE_SHORT	 0x4c	"%donnees_3%"		// Poids
	WRITE_ASCIIE 0x3a	"%donnees_6%" #8	// Icon
	WRITE_ASCIIE 0x44	"%donnees_7%" #8	// Ground Icon
	WRITE_ASCIIE 0x58	"%donnees_8%" #8	// Description Image

// Rendre l'objet non vendable (1) ou vendable (V)
	PATCH_MATCH ~%donnees_9%~ WITH
		1 BEGIN WRITE_LONG 0x18 THIS | BIT0				END	// ajoute Unsellable
		V BEGIN WRITE_LONG 0x18 (THIS BAND BNOT BIT0)	END	// enlève le flag Unsellable
		DEFAULT
	END

// Noms et descriptions
	SET nom1 = RESOLVE_STR_REF ((AT %donnees_10%))
	SET nom2 = RESOLVE_STR_REF ((AT %donnees_11%))	SPRINT nom_final (AT %donnees_11%)
	SET desc = RESOLVE_STR_REF ((AT %donnees_12%))
	PATCH_MATCH ~%donnees_13%~ WITH
		N		BEGIN	SET undesc = "-1"	END
		DEFAULT			SET undesc = RESOLVE_STR_REF ((AT %donnees_13%))
	END
	WRITE_LONG 0x8 %nom1%	WRITE_LONG 0xc %nom2%	WRITE_LONG 0x54 %desc%	WRITE_LONG 0x50 %undesc%

// Écriture du fichier du contrôle
	TEXT_SPRINT source "%donnees_1% "
	TEXT_SPRINT iconei "%donnees_6%   "
	TEXT_SPRINT iconeg "%donnees_7%   "
	TEXT_SPRINT iconed "%donnees_8%   "
	INNER_ACTION BEGIN
		APPEND_OUTER ~GWObjets_log.txt~ ~%donnees_0%	%source%	%donnees_2%	%donnees_3%	%donnees_4%	%donnees_5%	%iconei%	%iconeg%	%iconed%	%donnees_9%	%nom_final%~
	END
BUT_ONLY
> >> >> >> >

COPY ~.../Diamant_Eternel/inlined/essai.tpa~ ~override/tonmod_patch.tpa~

REINCLUDE ~override/tonmod_patch.tpa~
//REINCLUDE ~.../Diamant_Eternel/inlined/essai.tpa~
Avec le même résultat : Tout se passe bien jusqu'à %commande% - le fichier tpa est bien copié dans l'override - puis

Code : Tout sélectionner

[.../Diamant_Eternel/inlined/tonmod_patch.tpa] PARSE ERROR at line 1 column 0-9
Near Text: %commande%
	GLR parse error
ERROR: parsing [.../Diamant_Eternel/inlined/tonmod_patch.tpa]: Parsing.Parse_error
Manifestement, WeiDU ne reconnaît pas la variable comme commençant pat COPY_EXISTING ou COPY
Par ailleurs, tu avais interverti le contenu de "commande" : STR_CMD_CASE "M" (sans = "0") signifie différent. Mais ça ne change pas grand chose au fait que WeiDU n’interprète pas le contenu de la variable...


Comme ça me gonflait passablement, j'ai fini par faire simple et me passer des fichiers temporaires :

Code : Tout sélectionner

ACTION_IF ("%donnees_14%" STRING_COMPARE_CASE "M") THEN BEGIN INCLUDE ~Diamant_Eternel/lib/essai2.tpa~
END ELSE BEGIN INCLUDE ~Diamant_Eternel/lib/essai.tpa~
END
avec essai et essai2 reprenant le patch avec pour seule différence COPY et COPY_EXISTING.
Ce n'est pas aussi élégant que ce que j'avais en tête, mais ça fonctionne.

De plus, j'avais aussi noté la question de l'incompatibilité de AT_NOW avec Mac et linux. Mais comme je ne connais pas ces systèmes, dans ma grande naïveté, je me disais que si le mode plaisait, il ne manquerait pas de candidats pour le rendre compatible. Idem pour BGT. Sam et Miloch se sont d'ailleurs gentiment déjà proposés pour la compatibilité Enhanced si j'en avais besoin. Enfin, ça c'était avant que Miloch ne soit embauché par le grand méchant loup !

Note : En fait, mon tp2 sera très court et consistera essentiellement en une liste de procédures INCLUDE (tph) pour installer les cartes, les créatures, les objets, les dialogues, les sorts, les effets, les animations, etc.
Certains tph appelleront aussi des routines tpa.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Effectivement je n'ai pas réfléchi au fait que la variable n'allait pas être évaluée avec cette façon de créer le fichier.

Je n'avais pas non plus vu que tu avais changé le test et j'avais recopié celui de plusieurs messages auparavant.

En conservant l'idée du fichier temporaire, tu pourrais écrire

Code : Tout sélectionner

	ACTION_IF ("%donnees_14%" STRING_COMPARE_CASE "M") THEN BEGIN
		<<<<<<<< .../Diamant_Eternel/inlined/essai.tpa
COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ ~override/%Scroll%.itm~
> >> >> >> >
        END ELSE BEGIN
		<<<<<<<< .../Diamant_Eternel/inlined/essai.tpa
COPY_EXISTING ~%donnees_1%.itm~ ~override/%Scroll%.itm~
> >> >> >> >
	END
	// Code repris d'Unfinished Business, car aucun moyen simple d'ajouter à la fin d'un fichier pendant la copie
	COPY ~.../Diamant_Eternel/inlined/essai.tpa~ ~override/blabla.tpa~
	COPY - ~.../Diamant_Eternel/inlined/essai.tpa~ ~.../Diamant_Eternel/inlined/essai.tpa~ // ne fait rien (-) mais permet de patcher l'autre fichier !
		INNER_ACTION BEGIN
			APPEND_OUTER ~override/essai.tpa~ ~ton patch~
		END
Ta méthode simple est sans doute plus efficace et plus lisible.
:!: 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 !
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 »

Je testerai pour mon prochain tableau. Mais pour mes objets, je conserve mon code pour l'instant.

En tant que non informaticien, je déteste utiliser des codes que je ne comprends pas. Et d'ailleurs, je ne le fais jamais, quitte à perdre un temps précieux à essayer de les déchiffrer, ou à en trouver un qui me "parle" ! ;)


A ce sujet, j'avais aussi effectivement remarqué qu'il était quelquefois impossible "d'Appender" après une copie, sans comprendre pourquoi. L'astuce que tu cites me permettra de contourner le problème si nécessaire.

Par ailleurs, j'ai utilisé le "COPY_EXISTING -" pour calculer automatiquement la valeur des JS et des Thac0 de mes créatures et pour créer des variables GW_Sp_DragonNoir ou GW_An_DragonNoir (valeur Dragon noir dans les fichiers ids specific et animate) ; ce qui :

1. Me permet d'enregistrer les nouvelles variables dans ces fichiers sans me soucier de leur valeur exacte.
2. M'évite de devoir les chercher à chaque fois et me permet de les intégrer directement dans des effets #177 ou autres.


D'ailleurs en parlant d'automatisation, j'ouvrirai bientôt un fil dans la rubrique Aide pour avoir votre avis sur une procédure d'automatisation de création de créatures (stats, équipement, sorts et sons) que j'ai commencé à définir. Elle n'est pas encore terminée mais fonctionne à peu près pour l'instant en test.

Ça n'a l'air de rien, mais en phase de développement, ça me permet de générer de nouvelles créatures assez rapidement.
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 »

Bonne nouvelle : je viens de gagner un bon mois de codage ! :dance4:

mike1072 vient de me communiquer son projet inachevé de création automatique de créatures pour que j'en intègre des éléments dans le mien. Certaines routines vont me permettre de simplifier mon tpa. De plus, j'ai développé des points qu'il avait abandonnés. Donc, d'ici quelques semaines, ce sera sans doute bien avancé, en tout cas assez pour être testé.
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 »

Je viens (enfin...) de créer l'animation de la [post=402368]demi-dragonne d'argent[/post] Gwendolynette à partir de SHENRICAL (0x5245 shenrical).

Après avoir recoloré les frames avec un script toshop, j'ai failli craquer en m'apercevant qu'il y avait 1 760 images à repositionner pour recréer une bam !
Et oui, les images de cette foutue animation n'ont pas la même taille... :gign:

Brèfle, j'en ai profité pour pondre un petit utilitaire WeiDU que j'avais en tête depuis un moment.

Voici donc le petit malin qui permet de recopier les coordonnées de positionnement (X.Y) de chaque frame d'une bam donnée dans une bam cible.


-> Bien évidemment, il faut que les deux fichiers bam aient le même nombre de frames.

-> Comme c'est un outil de développement, je ne me suis pas embêté à écrire tous les contrôles.


Pour l'utiliser, c'est simple :

1. Ouvrez le tp2 avec un éditeur de texte quelconque et allez à cette ligne :

Code : Tout sélectionner

LAF ~GW_WRITE_BAM_COORD~ STR_VAR file_origine = "µAI" file_final = "NEW" END
Changez la valeur file_origine par le nom générique des fichiers bam dont vous voulez copier les coordonnées.
Changez la valeur file_final par le nom générique des fichiers bam dans lesquels vous voulez copier ces coordonnées.

2. Lancez le setup-outils.exe.

Et voilou ! ;)


Pour l'instant, il ne fonctionne que pour les animations au format IWD. Je verrai plus tard pour gérer les autres formats.
Il vérifie l'existence de tous les fichiers bam relatifs à file_origine (A1, A2, A4, CA, DE ..., et versions E), crée un tableau des coordonnées des images pour chaque fichier existant, puis les recopie dans le fichier file_final correspondant s'il existe.
Le calcul et l'écriture des fichiers bam de ma petite Gwendolynette n'ont pas duré plus d'une minute. ;)


Par ailleurs, il crée un petit tableau (GW_bam_coordonnees_list.txt) qui liste les coordonnées de chaque frame :

Code : Tout sélectionner

Filename	Frame	Width	Height	X	Y
-----------------------------------------------------
µaia1.bam	0	143	100	62	83
µaia1.bam	1	129	123	61	93
µaia1.bam	2	123	156	57	129
µaia1.bam	3	118	157	48	130
µaia1.bam	4	132	152	50	116
µaia1.bam	5	137	162	72	119
µaia1.bam	6	159	93	81	80
µaia1.bam	7	128	107	55	64
µaia1.bam	8	119	97	64	78
µaia1.bam	9	136	115	74	94
µaia1.bam	10	164	100	77	87
µaia1.bam	11	166	92	76	75
µaia1.bam	12	155	109	73	76
µaia1.bam	13	126	115	48	79
µaia1.bam	14	102	105	40	83
µaia1.bam	15	119	123	69	88
µaia1.bam	16	93	147	41	114
µaia1.bam	17	98	151	38	129
µaia1.bam	18	147	145	45	122
µaia1.bam	19	166	146	53	120
µaia1.bam	20	133	143	34	101
µaia1.bam	21	133	146	80	119
µaia1.bam	22	101	130	58	72
µaia1.bam	23	123	91	65	79
µaia1.bam	24	145	98	67	84
µaia1.bam	25	166	118	71	86
µaia1.bam	26	135	129	69	88
µaia1.bam	27	98	128	43	89
µaia1.bam	28	111	110	56	82
µaia1.bam	29	117	106	70	86
µaia1.bam	30	117	141	40	112
µaia1.bam	31	140	146	66	123
µaia1.bam	32	151	137	65	114
µaia1.bam	33	168	122	66	102
µaia1.bam	34	185	114	78	95
µaia1.bam	35	192	113	85	90
µaia1.bam	36	81	182	40	146
µaia1.bam	37	123	122	78	84
µaia1.bam	38	109	119	48	88
µaia1.bam	39	125	134	40	99
µaia1.bam	40	96	142	32	100
µaia1.bam	41	88	137	38	99
µaia1.bam	42	120	122	69	92
µaia1.bam	43	142	117	80	84
µaia1.bam	44	116	127	60	99
µaia1.bam	45	164	138	74	113
µaia1.bam	46	166	136	70	111
µaia1.bam	47	157	119	57	94
µaia1.bam	48	167	129	58	104
µaia1.bam	49	179	139	63	102
µaia1.bam	50	194	109	86	79
µaia1.bam	51	131	166	55	145
µaia1.bam	52	150	105	103	95
µaia1.bam	53	97	122	34	88
µaia1.bam	54	86	131	28	96
µaia1.bam	55	133	133	63	100
µaia1.bam	56	147	115	81	97
µaia1.bam	57	163	96	82	83
µaia1.bam	58	140	113	56	95
µaia1.bam	59	100	139	43	116
µaia1.bam	60	155	126	64	96
µaia1.bam	61	138	119	47	97
µaia1.bam	62	122	135	41	110
µaia1.bam	63	115	150	39	119
µaia1.bam	64	121	155	52	120
µaia1.bam	65	139	136	50	101
µaia1.bam	66	188	125	68	116
µaia1.bam	67	136	108	68	96
µaia1.bam	68	136	112	53	95
µaia1.bam	69	158	116	61	91
µaia1.bam	70	181	110	81	93
µaia1.bam	71	173	103	76	89
µaia1.bam	72	157	105	64	87
µaia1.bam	73	128	129	65	107
µaia1.bam	74	123	132	54	108
µaia1e.bam	0	134	121	45	86
µaia1e.bam	1	122	136	46	102
µaia1e.bam	2	111	142	47	109
µaia1e.bam	3	143	150	68	114
µaia1e.bam	4	163	154	84	112
µaia1e.bam	5	123	147	71	103
µaia1e.bam	6	165	117	46	86
µaia1e.bam	7	100	105	27	92
µaia1e.bam	8	141	109	58	93
µaia1e.bam	9	150	112	61	91
µaia1e.bam	10	167	112	74	91
µaia1e.bam	11	130	111	44	94
µaia1e.bam	12	97	125	36	95
µaia1e.bam	13	117	127	39	94
µaia1e.bam	14	134	106	40	82
µaia1e.bam	15	124	108	61	84
µaia1e.bam	16	139	119	51	90
µaia1e.bam	17	151	119	59	96
µaia1e.bam	18	170	127	73	112
µaia1e.bam	19	187	126	80	106
µaia1e.bam	20	185	126	80	91
µaia1e.bam	21	93	122	22	86
µaia1e.bam	22	113	113	30	86
µaia1e.bam	23	110	117	41	87
µaia1e.bam	24	124	124	59	88
µaia1e.bam	25	101	134	42	98
µaia1e.bam	26	85	132	33	96
µaia1e.bam	27	126	124	39	88
µaia1e.bam	28	148	106	48	82
µaia1e.bam	29	135	97	49	85
µaia1e.bam	30	162	105	75	78
µaia1e.bam	31	169	86	76	75
µaia1e.bam	32	158	125	73	114
µaia1e.bam	33	169	148	81	134
µaia1e.bam	34	183	144	91	124
µaia1e.bam	35	196	126	90	114
µaia1e.bam	36	129	115	60	83
µaia1e.bam	37	138	102	31	74
µaia1e.bam	38	103	104	40	74
µaia1e.bam	39	101	122	45	91
µaia1e.bam	40	119	133	51	99
µaia1e.bam	41	137	121	45	88
µaia1e.bam	42	156	95	63	78
µaia1e.bam	43	149	103	70	80
µaia1e.bam	44	100	114	49	86
µaia2.bam	0	125	100	70	83
µaia2.bam	1	127	99	79	82
µaia2.bam	2	106	113	61	96
µaia2.bam	3	87	121	33	104
µaia2.bam	4	83	114	23	97
µaia2.bam	5	104	102	39	85
µaia2.bam	6	174	121	71	86
µaia2.bam	7	206	161	95	117
µaia2.bam	8	161	154	69	137
µaia2.bam	9	168	149	69	132
µaia2.bam	10	166	144	74	127
µaia2.bam	11	177	136	71	119
µaia2.bam	12	158	117	56	100
µaia2.bam	13	121	100	38	83
µaia2.bam	14	114	103	52	83
µaia2.bam	15	115	110	70	89
µaia2.bam	16	90	121	42	104
µaia2.bam	17	65	130	16	114
µaia2.bam	18	66	137	16	121
µaia2.bam	19	70	136	16	120
µaia2.bam	20	73	125	16	100
µaia2.bam	21	154	124	68	93
µaia2.bam	22	187	164	58	114
µaia2.bam	23	150	168	46	132
µaia2.bam	24	147	151	42	130
µaia2.bam	25	144	139	34	123
µaia2.bam	26	128	129	21	113
µaia2.bam	27	111	118	22	100
µaia2.bam	28	109	111	44	86
µaia2.bam	29	107	106	60	86
µaia2.bam	30	113	123	57	98
µaia2.bam	31	81	137	30	117
µaia2.bam	32	113	122	29	100
µaia2.bam	33	137	108	29	85
µaia2.bam	34	140	109	29	85
µaia2.bam	35	117	106	30	84
µaia2.bam	36	130	127	58	87
µaia2.bam	37	172	157	76	126
µaia2.bam	38	134	176	39	143
µaia2.bam	39	125	148	34	135
µaia2.bam	40	115	146	30	126
µaia2.bam	41	100	139	30	108
µaia2.bam	42	103	121	31	83
µaia2.bam	43	118	139	50	104
µaia2.bam	44	115	127	59	99
µaia2.bam	45	101	132	40	110
µaia2.bam	46	131	104	34	85
µaia2.bam	47	137	97	27	78
µaia2.bam	48	135	95	29	76
µaia2.bam	49	124	101	28	76
µaia2.bam	50	148	97	50	77
µaia2.bam	51	156	108	69	77
µaia2.bam	52	191	149	87	104
µaia2.bam	53	168	149	75	128
µaia2.bam	54	159	143	60	120
µaia2.bam	55	126	132	27	104
µaia2.bam	56	127	125	27	91
µaia2.bam	57	139	145	45	114
µaia2.bam	58	128	149	50	126
µaia2.bam	59	100	138	43	115
µaia2.bam	60	147	107	47	82
µaia2.bam	61	146	97	40	75
µaia2.bam	62	133	91	41	72
µaia2.bam	63	133	92	45	72
µaia2.bam	64	111	106	50	70
µaia2.bam	65	101	117	50	76
µaia2.bam	66	170	98	84	76
µaia2.bam	67	201	133	75	101
µaia2.bam	68	185	129	76	107
µaia2.bam	69	154	161	46	139
µaia2.bam	70	160	117	57	97
µaia2.bam	71	170	117	73	98
µaia2.bam	72	158	140	82	117
µaia2.bam	73	122	150	70	122
µaia2.bam	74	98	132	54	108
µaia2e.bam	0	136	99	41	79
µaia2e.bam	1	107	106	37	78
µaia2e.bam	2	71	115	37	76
µaia2e.bam	3	71	114	37	74
µaia2e.bam	4	88	113	55	75
µaia2e.bam	5	78	126	44	83
µaia2e.bam	6	127	124	65	92
µaia2e.bam	7	183	148	95	112
µaia2e.bam	8	145	165	61	142
µaia2e.bam	9	141	166	62	141
µaia2e.bam	10	139	129	72	103
µaia2e.bam	11	123	139	75	108
µaia2e.bam	12	110	160	67	122
µaia2e.bam	13	134	146	51	113
µaia2e.bam	14	142	103	40	79
µaia2e.bam	15	98	115	49	84
µaia2e.bam	16	76	120	43	83
µaia2e.bam	17	97	107	65	80
µaia2e.bam	18	117	90	86	78
µaia2e.bam	19	123	89	90	79
µaia2e.bam	20	111	107	72	83
µaia2e.bam	21	123	137	52	102
µaia2e.bam	22	192	168	70	124
µaia2e.bam	23	140	158	59	133
µaia2e.bam	24	143	164	59	138
µaia2e.bam	25	101	155	55	125
µaia2e.bam	26	97	150	48	119
µaia2e.bam	27	115	143	53	116
µaia2e.bam	28	136	102	56	85
µaia2e.bam	29	133	103	49	85
µaia2e.bam	30	88	116	40	85
µaia2e.bam	31	85	105	44	85
µaia2e.bam	32	104	94	65	84
µaia2e.bam	33	119	94	81	84
µaia2e.bam	34	119	94	77	84
µaia2e.bam	35	144	94	83	84
µaia2e.bam	36	156	141	70	97
µaia2e.bam	37	198	160	79	137
µaia2e.bam	38	178	155	61	143
µaia2e.bam	39	170	152	63	142
µaia2e.bam	40	119	143	68	133
µaia2e.bam	41	134	137	77	127
µaia2e.bam	42	163	120	79	110
µaia2e.bam	43	157	97	65	87
µaia2e.bam	44	115	110	49	86
µaia4.bam	0	141	112	59	80
µaia4.bam	1	162	118	77	89
µaia4.bam	2	160	120	89	97
µaia4.bam	3	155	116	88	97
µaia4.bam	4	166	122	80	105
µaia4.bam	5	202	121	91	99
µaia4.bam	6	196	123	82	95
µaia4.bam	7	196	107	87	74
µaia4.bam	8	111	114	50	79
µaia4.bam	9	130	110	58	72
µaia4.bam	10	166	119	74	79
µaia4.bam	11	163	131	68	90
µaia4.bam	12	127	135	49	94
µaia4.bam	13	107	112	44	76
µaia4.bam	14	102	105	40	83
µaia4.bam	15	161	105	90	85
µaia4.bam	16	186	116	94	100
µaia4.bam	17	179	117	90	101
µaia4.bam	18	168	115	85	99
µaia4.bam	19	178	123	75	109
µaia4.bam	20	192	136	88	105
µaia4.bam	21	180	130	87	102
µaia4.bam	22	174	102	89	77
µaia4.bam	23	117	96	57	79
µaia4.bam	24	145	100	78	76
µaia4.bam	25	166	116	90	87
µaia4.bam	26	181	124	91	105
µaia4.bam	27	178	112	91	98
µaia4.bam	28	151	93	84	77
µaia4.bam	29	117	106	70	86
µaia4.bam	30	136	118	68	83
µaia4.bam	31	127	125	55	94
µaia4.bam	32	118	122	42	101
µaia4.bam	33	107	117	34	98
µaia4.bam	34	107	144	31	110
µaia4.bam	35	102	167	38	118
µaia4.bam	36	112	154	48	109
µaia4.bam	37	111	136	54	88
µaia4.bam	38	108	115	57	88
µaia4.bam	39	110	118	66	87
µaia4.bam	40	111	143	72	103
µaia4.bam	41	123	142	75	112
µaia4.bam	42	149	115	78	93
µaia4.bam	43	143	103	75	79
µaia4.bam	44	116	127	60	99
µaia4.bam	45	125	117	42	90
µaia4.bam	46	130	114	36	80
µaia4.bam	47	112	118	27	88
µaia4.bam	48	107	121	27	91
µaia4.bam	49	122	135	26	95
µaia4.bam	50	153	139	65	106
µaia4.bam	51	141	140	65	110
µaia4.bam	52	114	137	54	97
µaia4.bam	53	91	117	37	96
µaia4.bam	54	102	119	48	95
µaia4.bam	55	119	129	60	105
µaia4.bam	56	123	130	43	106
µaia4.bam	57	117	111	32	83
µaia4.bam	58	84	122	27	94
µaia4.bam	59	100	139	43	116
µaia4.bam	60	143	104	70	80
µaia4.bam	61	153	94	66	74
µaia4.bam	62	146	97	51	76
µaia4.bam	63	138	102	45	81
µaia4.bam	64	167	111	69	90
µaia4.bam	65	211	102	99	96
µaia4.bam	66	200	110	91	99
µaia4.bam	67	195	117	92	100
µaia4.bam	68	109	110	48	100
µaia4.bam	69	130	104	58	98
µaia4.bam	70	170	99	80	95
µaia4.bam	71	168	99	71	92
µaia4.bam	72	115	105	54	84
µaia4.bam	73	114	117	52	90
µaia4.bam	74	123	132	54	108
µaia4e.bam	0	161	112	56	80
µaia4e.bam	1	172	115	71	80
µaia4e.bam	2	166	108	66	80
µaia4e.bam	3	156	110	64	83
µaia4e.bam	4	158	124	79	90
µaia4e.bam	5	180	119	77	97
µaia4e.bam	6	179	120	68	99
µaia4e.bam	7	176	123	76	99
µaia4e.bam	8	111	116	47	99
µaia4e.bam	9	130	110	50	99
µaia4e.bam	10	150	112	53	101
µaia4e.bam	11	165	132	63	107
µaia4e.bam	12	166	115	66	90
µaia4e.bam	13	162	97	60	75
µaia4e.bam	14	134	106	40	82
µaia4e.bam	15	136	114	53	86
µaia4e.bam	16	114	137	51	94
µaia4e.bam	17	102	143	53	93
µaia4e.bam	18	100	143	51	93
µaia4e.bam	19	111	148	55	104
µaia4e.bam	20	94	165	33	117
µaia4e.bam	21	105	152	40	114
µaia4e.bam	22	105	140	41	95
µaia4e.bam	23	94	117	30	94
µaia4e.bam	24	94	120	24	92
µaia4e.bam	25	91	144	13	107
µaia4e.bam	26	106	144	22	114
µaia4e.bam	27	145	124	56	100
µaia4e.bam	28	148	95	57	77
µaia4e.bam	29	135	97	49	85
µaia4e.bam	30	125	129	71	83
µaia4e.bam	31	122	152	73	100
µaia4e.bam	32	102	154	63	102
µaia4e.bam	33	104	147	59	98
µaia4e.bam	34	122	156	69	112
µaia4e.bam	35	137	163	57	119
µaia4e.bam	36	143	150	54	109
µaia4e.bam	37	118	130	49	84
µaia4e.bam	38	100	119	39	83
µaia4e.bam	39	99	128	33	84
µaia4e.bam	40	116	147	35	96
µaia4e.bam	41	139	157	65	106
µaia4e.bam	42	117	147	62	99
µaia4e.bam	43	86	120	45	78
µaia4e.bam	44	100	114	49	86
µaica.bam	0	191	106	83	89
µaica.bam	1	146	101	72	84
µaica.bam	2	127	120	62	80
µaica.bam	3	117	118	51	79
µaica.bam	4	103	120	39	79
µaica.bam	5	98	118	33	79
µaica.bam	6	99	117	34	78
µaica.bam	7	98	117	34	78
µaica.bam	8	98	117	34	78
µaica.bam	9	101	119	37	79
µaica.bam	10	106	118	42	80
µaica.bam	11	113	120	48	80
µaica.bam	12	118	118	53	80
µaica.bam	13	120	118	55	80
µaica.bam	14	127	116	59	80
µaica.bam	15	117	127	34	99
µaica.bam	16	105	120	56	84
µaica.bam	17	145	131	94	92
µaica.bam	18	141	128	84	91
µaica.bam	19	133	124	79	91
µaica.bam	20	127	121	76	91
µaica.bam	21	125	119	75	90
µaica.bam	22	123	118	73	90
µaica.bam	23	124	120	75	91
µaica.bam	24	125	122	76	91
µaica.bam	25	130	125	79	92
µaica.bam	26	133	128	82	92
µaica.bam	27	135	129	84	92
µaica.bam	28	137	129	87	92
µaica.bam	29	138	130	87	92
µaica.bam	30	92	147	34	102
µaica.bam	31	84	124	38	89
µaica.bam	32	136	127	89	109
µaica.bam	33	135	119	88	108
µaica.bam	34	129	111	82	101
µaica.bam	35	127	106	80	96
µaica.bam	36	125	107	82	97
µaica.bam	37	129	108	81	98
µaica.bam	38	131	106	83	97
µaica.bam	39	128	108	80	100
µaica.bam	40	130	113	82	105
µaica.bam	41	132	119	84	110
µaica.bam	42	131	124	84	114
µaica.bam	43	131	129	84	115
µaica.bam	44	131	132	84	117
µaica.bam	45	167	120	62	87
µaica.bam	46	127	108	68	92
µaica.bam	47	145	142	88	127
µaica.bam	48	134	148	75	131
µaica.bam	49	128	146	70	131
µaica.bam	50	120	146	63	128
µaica.bam	51	120	141	63	125
µaica.bam	52	118	139	61	126
µaica.bam	53	119	138	62	128
µaica.bam	54	123	136	66	128
µaica.bam	55	126	141	69	134
µaica.bam	56	129	143	72	136
µaica.bam	57	133	143	76	136
µaica.bam	58	137	148	80	137
µaica.bam	59	141	145	84	135
µaica.bam	60	192	106	90	86
µaica.bam	61	148	109	68	90
µaica.bam	62	131	144	40	124
µaica.bam	63	114	156	37	136
µaica.bam	64	99	155	37	137
µaica.bam	65	98	153	36	135
µaica.bam	66	100	150	37	135
µaica.bam	67	99	147	36	134
µaica.bam	68	98	150	35	137
µaica.bam	69	96	150	34	137
µaica.bam	70	97	151	34	138
µaica.bam	71	106	151	34	138
µaica.bam	72	117	150	35	137
µaica.bam	73	124	149	35	136
µaica.bam	74	128	145	37	132
µaicae.bam	0	124	136	66	92
µaicae.bam	1	101	115	31	89
µaicae.bam	2	154	139	31	123
µaicae.bam	3	148	142	31	126
µaicae.bam	4	139	138	30	122
µaicae.bam	5	137	133	37	117
µaicae.bam	6	130	134	32	118
µaicae.bam	7	123	133	25	118
µaicae.bam	8	122	134	23	118
µaicae.bam	9	130	137	24	121
µaicae.bam	10	134	142	24	126
µaicae.bam	11	137	142	24	126
µaicae.bam	12	144	145	24	129
µaicae.bam	13	126	148	22	133
µaicae.bam	14	140	146	22	130
µaicae.bam	15	96	143	45	102
µaicae.bam	16	94	121	39	82
µaicae.bam	17	159	124	40	96
µaicae.bam	18	159	117	40	94
µaicae.bam	19	154	111	37	95
µaicae.bam	20	154	107	39	95
µaicae.bam	21	148	107	33	95
µaicae.bam	22	141	107	26	95
µaicae.bam	23	136	108	23	96
µaicae.bam	24	140	110	23	96
µaicae.bam	25	145	113	23	96
µaicae.bam	26	136	117	22	97
µaicae.bam	27	142	122	22	98
µaicae.bam	28	140	126	23	102
µaicae.bam	29	137	130	23	103
µaicae.bam	30	167	104	86	90
µaicae.bam	31	131	111	52	84
µaicae.bam	32	145	132	27	88
µaicae.bam	33	142	129	31	88
µaicae.bam	34	124	128	29	89
µaicae.bam	35	110	124	28	87
µaicae.bam	36	111	121	28	86
µaicae.bam	37	111	122	29	86
µaicae.bam	38	111	123	28	87
µaicae.bam	39	117	124	28	88
µaicae.bam	40	125	126	27	88
µaicae.bam	41	130	127	27	88
µaicae.bam	42	136	127	27	88
µaicae.bam	43	142	127	27	88
µaicae.bam	44	131	127	27	88
µaide.bam	0	144	100	65	83
µaide.bam	1	166	112	79	95
µaide.bam	2	190	126	88	109
µaide.bam	3	204	136	89	119
µaide.bam	4	212	144	88	127
µaide.bam	5	213	153	86	136
µaide.bam	6	207	159	85	142
µaide.bam	7	199	163	84	146
µaide.bam	8	191	164	84	147
µaide.bam	9	183	163	84	146
µaide.bam	10	174	161	84	144
µaide.bam	11	172	159	84	142
µaide.bam	12	167	152	86	135
µaide.bam	13	149	137	84	118
µaide.bam	14	146	141	84	99
µaide.bam	15	135	111	95	89
µaide.bam	16	126	106	82	79
µaide.bam	17	122	113	79	81
µaide.bam	18	135	120	92	74
µaide.bam	19	146	121	102	70
µaide.bam	20	152	113	106	59
µaide.bam	21	149	108	104	50
µaide.bam	22	144	103	99	44
µaide.bam	23	140	101	95	42
µaide.bam	24	134	110	77	85
µaide.bam	25	139	127	76	100
µaide.bam	26	138	143	68	112
µaide.bam	27	136	151	56	117
µaide.bam	28	132	158	46	124
µaide.bam	29	125	170	40	136
µaide.bam	30	118	173	35	144
µaide.bam	31	113	174	34	151
µaide.bam	32	106	177	33	156
µaide.bam	33	101	173	32	153
µaide.bam	34	96	168	32	152
µaide.bam	35	91	165	29	148
µaide.bam	36	85	152	26	134
µaide.bam	37	77	157	32	131
µaide.bam	38	85	156	43	117
µaide.bam	39	102	120	66	106
µaide.bam	40	120	112	72	98
µaide.bam	41	125	126	75	106
µaide.bam	42	116	133	72	106
µaide.bam	43	115	138	75	106
µaide.bam	44	117	130	79	98
µaide.bam	45	113	123	74	81
µaide.bam	46	117	120	77	74
µaide.bam	47	118	115	76	67
µaide.bam	48	116	135	44	103
µaide.bam	49	111	134	29	99
µaide.bam	50	123	131	29	96
µaide.bam	51	139	136	29	93
µaide.bam	52	147	138	29	94
µaide.bam	53	151	145	29	106
µaide.bam	54	146	153	29	118
µaide.bam	55	141	160	29	128
µaide.bam	56	131	161	29	135
µaide.bam	57	123	164	29	142
µaide.bam	58	118	160	29	139
µaide.bam	59	120	154	29	135
µaide.bam	60	113	143	30	125
µaide.bam	61	131	146	51	132
µaide.bam	62	173	123	89	107
µaide.bam	63	114	125	52	103
µaide.bam	64	116	120	54	97
µaide.bam	65	137	127	72	104
µaide.bam	66	156	130	91	106
µaide.bam	67	167	134	102	109
µaide.bam	68	170	126	105	101
µaide.bam	69	172	107	107	81
µaide.bam	70	171	95	106	69
µaide.bam	71	169	87	104	61
µaide.bam	72	127	132	52	109
µaide.bam	73	148	119	60	96
µaide.bam	74	168	116	68	93
µaide.bam	75	183	105	75	81
µaide.bam	76	189	98	78	76
µaide.bam	77	191	99	78	79
µaide.bam	78	194	98	72	81
µaide.bam	79	186	110	68	95
µaide.bam	80	173	120	61	107
µaide.bam	81	160	125	54	115
µaide.bam	82	149	130	51	121
µaide.bam	83	142	128	48	118
µaide.bam	84	156	133	51	122
µaide.bam	85	169	135	60	126
µaide.bam	86	198	97	84	87
µaide.bam	87	147	110	44	91
µaide.bam	88	141	110	39	89
µaide.bam	89	155	115	52	93
µaide.bam	90	174	118	66	95
µaide.bam	91	183	124	69	98
µaide.bam	92	183	117	69	91
µaide.bam	93	194	96	80	70
µaide.bam	94	201	82	86	55
µaide.bam	95	201	83	91	56
µaide.bam	96	155	118	65	91
µaide.bam	97	166	117	71	90
µaide.bam	98	179	124	79	92
µaide.bam	99	178	122	89	84
µaide.bam	100	194	124	95	84
µaide.bam	101	185	133	90	97
µaide.bam	102	173	141	84	108
µaide.bam	103	165	148	75	119
µaide.bam	104	154	152	67	127
µaide.bam	105	151	158	62	135
µaide.bam	106	142	154	53	133
µaide.bam	107	139	153	50	130
µaide.bam	108	140	154	47	128
µaide.bam	109	134	169	39	138
µaide.bam	110	138	145	41	113
µaide.bam	111	135	134	39	105
µaide.bam	112	124	135	42	96
µaide.bam	113	140	145	41	105
µaide.bam	114	155	151	41	111
µaide.bam	115	164	155	43	115
µaide.bam	116	161	145	45	105
µaide.bam	117	158	130	45	90
µaide.bam	118	147	119	45	79
µaide.bam	119	141	112	45	72
µaidee.bam	0	135	116	42	86
µaidee.bam	1	140	131	45	98
µaidee.bam	2	131	145	47	109
µaidee.bam	3	122	150	52	112
µaidee.bam	4	110	160	55	119
µaidee.bam	5	100	176	52	131
µaidee.bam	6	94	184	48	139
µaidee.bam	7	89	192	44	145
µaidee.bam	8	79	194	39	148
µaidee.bam	9	77	198	34	151
µaidee.bam	10	76	195	31	147
µaidee.bam	11	68	191	28	141
µaidee.bam	12	73	185	28	134
µaidee.bam	13	99	185	25	130
µaidee.bam	14	90	165	23	108
µaidee.bam	15	106	158	34	99
µaidee.bam	16	113	149	40	87
µaidee.bam	17	120	153	43	92
µaidee.bam	18	129	155	41	94
µaidee.bam	19	135	157	40	96
µaidee.bam	20	134	144	38	83
µaidee.bam	21	121	135	39	74
µaidee.bam	22	119	126	41	64
µaidee.bam	23	118	126	41	64
µaidee.bam	24	127	113	59	86
µaidee.bam	25	117	136	64	99
µaidee.bam	26	124	157	72	113
µaidee.bam	27	133	169	84	122
µaidee.bam	28	138	175	90	129
µaidee.bam	29	142	185	86	139
µaidee.bam	30	137	190	78	145
µaidee.bam	31	135	194	70	149
µaidee.bam	32	132	194	64	149
µaidee.bam	33	130	194	58	149
µaidee.bam	34	121	190	53	144
µaidee.bam	35	113	188	54	142
µaidee.bam	36	115	180	51	134
µaidee.bam	37	152	153	59	110
µaidee.bam	38	171	128	58	81
µaidee.bam	39	131	135	50	80
µaidee.bam	40	143	116	63	66
µaidee.bam	41	163	110	65	62
µaidee.bam	42	183	106	66	58
µaidee.bam	43	188	104	66	52
µaidee.bam	44	189	95	66	40
µaidee.bam	45	185	88	66	32
µaidee.bam	46	181	85	66	30
µaidee.bam	47	176	84	66	30
µaidee.bam	48	126	111	60	79
µaidee.bam	49	149	121	68	86
µaidee.bam	50	167	129	76	97
µaidee.bam	51	184	133	83	107
µaidee.bam	52	187	132	88	111
µaidee.bam	53	191	134	86	116
µaidee.bam	54	183	140	84	122
µaidee.bam	55	180	143	85	126
µaidee.bam	56	193	145	86	129
µaidee.bam	57	185	147	87	130
µaidee.bam	58	180	144	87	129
µaidee.bam	59	171	144	90	130
µaidee.bam	60	178	139	97	126
µaidee.bam	61	193	116	102	100
µaidee.bam	62	208	86	102	66
µaidee.bam	63	178	101	103	65
µaidee.bam	64	169	97	102	53
µaidee.bam	65	175	85	101	42
µaidee.bam	66	186	80	102	41
µaidee.bam	67	190	72	102	34
µaidee.bam	68	186	70	102	27
µaidee.bam	69	183	69	103	24
µaidee.bam	70	200	69	110	24
µaidee.bam	71	201	69	107	24
µaigh.bam	0	119	118	56	90
µaigh.bam	1	146	129	71	105
µaigh.bam	2	167	146	85	115
µaigh.bam	3	168	143	92	113
µaigh.bam	4	160	126	90	99
µaigh.bam	5	154	106	89	82
µaigh.bam	6	150	108	88	86
µaigh.bam	7	172	118	90	90
µaigh.bam	8	154	145	78	111
µaigh.bam	9	141	125	60	96
µaigh.bam	10	129	96	52	79
µaigh.bam	11	102	105	40	83
µaigh.bam	12	159	110	83	82
µaigh.bam	13	169	122	80	87
µaigh.bam	14	170	134	71	91
µaigh.bam	15	168	130	61	88
µaigh.bam	16	150	125	53	87
µaigh.bam	17	123	123	42	88
µaigh.bam	18	107	120	36	89
µaigh.bam	19	123	137	40	98
µaigh.bam	20	119	159	45	117
µaigh.bam	21	104	151	50	108
µaigh.bam	22	108	121	64	86
µaigh.bam	23	117	106	70	86
µaigh.bam	24	149	110	61	84
µaigh.bam	25	137	112	50	86
µaigh.bam	26	159	114	63	89
µaigh.bam	27	172	114	63	88
µaigh.bam	28	159	112	56	86
µaigh.bam	29	134	111	45	86
µaigh.bam	30	125	107	42	83
µaigh.bam	31	155	129	58	98
µaigh.bam	32	183	150	73	123
µaigh.bam	33	155	153	58	123
µaigh.bam	34	112	143	39	110
µaigh.bam	35	116	127	60	99
µaigh.bam	36	111	121	54	95
µaigh.bam	37	113	117	68	86
µaigh.bam	38	136	119	81	88
µaigh.bam	39	152	121	83	85
µaigh.bam	40	153	120	78	84
µaigh.bam	41	153	116	68	85
µaigh.bam	42	158	110	61	82
µaigh.bam	43	179	111	74	79
µaigh.bam	44	191	126	88	102
µaigh.bam	45	186	132	86	114
µaigh.bam	46	148	136	67	116
µaigh.bam	47	100	139	43	116
µaigh.bam	48	123	117	53	85
µaigh.bam	49	135	107	56	82
µaigh.bam	50	146	113	57	84
µaigh.bam	51	154	116	62	82
µaigh.bam	52	148	121	57	79
µaigh.bam	53	142	118	52	78
µaigh.bam	54	143	118	50	80
µaigh.bam	55	172	120	65	81
µaigh.bam	56	167	137	58	94
µaigh.bam	57	153	130	61	94
µaigh.bam	58	147	134	65	103
µaigh.bam	59	123	132	54	108
µaighe.bam	0	158	96	57	81
µaighe.bam	1	159	95	72	80
µaighe.bam	2	154	118	79	90
µaighe.bam	3	146	130	83	92
µaighe.bam	4	132	126	78	84
µaighe.bam	5	110	122	66	76
µaighe.bam	6	101	128	57	79
µaighe.bam	7	127	128	68	85
µaighe.bam	8	129	141	53	103
µaighe.bam	9	120	135	37	94
µaighe.bam	10	133	115	39	78
µaighe.bam	11	134	106	40	82
µaighe.bam	12	150	109	69	84
µaighe.bam	13	124	138	60	100
µaighe.bam	14	143	155	69	107
µaighe.bam	15	161	147	82	95
µaighe.bam	16	156	131	86	80
µaighe.bam	17	136	123	80	74
µaighe.bam	18	125	126	73	78
µaighe.bam	19	149	131	80	86
µaighe.bam	20	180	121	87	90
µaighe.bam	21	154	107	78	86
µaighe.bam	22	133	99	63	81
µaighe.bam	23	135	97	49	85
µaighe.bam	24	103	127	39	87
µaighe.bam	25	107	154	27	110
µaighe.bam	26	141	162	50	122
µaighe.bam	27	165	149	68	115
µaighe.bam	28	165	125	75	95
µaighe.bam	29	163	104	84	81
µaighe.bam	30	161	98	90	80
µaighe.bam	31	173	103	87	87
µaighe.bam	32	187	104	79	90
µaighe.bam	33	184	102	82	86
µaighe.bam	34	148	108	70	83
µaighe.bam	35	100	114	49	86
µaigu.bam	0	126	101	80	56
µaigu.bam	1	125	88	79	57
µaigu.bam	2	123	81	79	52
µaigu.bam	3	123	81	79	54
µaigu.bam	4	122	84	79	57
µaigu.bam	5	120	88	79	61
µaigu.bam	6	119	97	79	65
µaigu.bam	7	123	114	83	75
µaigu.bam	8	143	126	104	74
µaigu.bam	9	136	113	102	54
µaigu.bam	10	105	102	80	47
µaigu.bam	11	96	97	69	56
µaigu.bam	12	100	102	67	70
µaigu.bam	13	122	113	80	78
µaigu.bam	14	143	127	99	97
µaigu.bam	15	167	135	109	96
µaigu.bam	16	165	130	104	84
µaigu.bam	17	135	127	87	88
µaigu.bam	18	117	120	74	82
µaigu.bam	19	124	106	65	73
µaigu.bam	20	118	96	62	62
µaigu.bam	21	106	91	61	61
µaigu.bam	22	116	96	55	70
µaigu.bam	23	111	102	49	83
µaigu.bam	24	117	119	76	80
µaigu.bam	25	117	99	78	76
µaigu.bam	26	113	88	75	70
µaigu.bam	27	114	91	78	72
µaigu.bam	28	111	97	78	77
µaigu.bam	29	111	103	78	83
µaigu.bam	30	105	109	76	89
µaigu.bam	31	103	130	76	104
µaigu.bam	32	103	138	76	103
µaigu.bam	33	121	110	75	72
µaigu.bam	34	91	92	72	61
µaigu.bam	35	87	99	73	71
µaigu.bam	36	80	109	67	81
µaigu.bam	37	75	129	60	100
µaigu.bam	38	85	146	62	124
µaigu.bam	39	123	153	91	120
µaigu.bam	40	136	131	102	98
µaigu.bam	41	143	124	101	101
µaigu.bam	42	143	113	93	93
µaigu.bam	43	149	103	76	83
µaigu.bam	44	144	98	82	74
µaigu.bam	45	145	102	89	69
µaigu.bam	46	128	109	82	78
µaigu.bam	47	119	106	72	86
µaigu.bam	48	150	99	85	73
µaigu.bam	49	129	98	64	72
µaigu.bam	50	119	97	54	70
µaigu.bam	51	118	101	53	75
µaigu.bam	52	120	108	55	81
µaigu.bam	53	122	114	57	87
µaigu.bam	54	132	117	67	91
µaigu.bam	55	147	129	82	104
µaigu.bam	56	169	128	105	106
µaigu.bam	57	161	86	105	67
µaigu.bam	58	135	91	82	77
µaigu.bam	59	121	95	73	86
µaigu.bam	60	111	100	64	94
µaigu.bam	61	131	106	76	106
µaigu.bam	62	138	128	75	129
µaigu.bam	63	158	128	88	124
µaigu.bam	64	156	117	94	109
µaigu.bam	65	126	115	76	105
µaigu.bam	66	118	113	70	101
µaigu.bam	67	118	114	67	91
µaigu.bam	68	112	104	68	85
µaigu.bam	69	108	109	69	90
µaigu.bam	70	112	125	62	97
µaigu.bam	71	108	132	52	104
µaigu.bam	72	180	88	74	62
µaigu.bam	73	155	89	54	67
µaigu.bam	74	142	89	41	67
µaigu.bam	75	140	93	39	72
µaigu.bam	76	138	99	37	78
µaigu.bam	77	141	104	40	84
µaigu.bam	78	146	106	45	87
µaigu.bam	79	159	110	56	92
µaigu.bam	80	197	109	75	92
µaigu.bam	81	173	82	73	68
µaigu.bam	82	134	89	46	80
µaigu.bam	83	134	94	53	91
µaigu.bam	84	135	99	58	100
µaigu.bam	85	162	98	63	102
µaigu.bam	86	166	115	58	120
µaigu.bam	87	196	108	75	110
µaigu.bam	88	162	107	70	106
µaigu.bam	89	125	113	51	108
µaigu.bam	90	106	130	44	111
µaigu.bam	91	92	125	39	99
µaigu.bam	92	95	126	46	102
µaigu.bam	93	123	131	62	107
µaigu.bam	94	128	135	59	112
µaigu.bam	95	100	135	43	113
µaigu.bam	96	135	121	45	81
µaigu.bam	97	123	115	45	75
µaigu.bam	98	122	110	44	70
µaigu.bam	99	121	113	43	73
µaigu.bam	100	120	118	42	78
µaigu.bam	101	120	124	40	84
µaigu.bam	102	128	131	39	91
µaigu.bam	103	144	146	39	106
µaigu.bam	104	158	153	38	111
µaigu.bam	105	138	112	34	76
µaigu.bam	106	104	97	24	68
µaigu.bam	107	96	106	13	78
µaigu.bam	108	105	114	20	88
µaigu.bam	109	116	131	15	109
µaigu.bam	110	131	138	14	132
µaigu.bam	111	152	142	28	130
µaigu.bam	112	149	119	32	103
µaigu.bam	113	133	112	27	100
µaigu.bam	114	119	110	28	97
µaigu.bam	115	117	107	47	93
µaigu.bam	116	110	107	42	94
µaigu.bam	117	116	108	38	94
µaigu.bam	118	133	121	53	101
µaigu.bam	119	132	130	54	106
µaigue.bam	0	117	134	40	73
µaigue.bam	1	116	129	38	68
µaigue.bam	2	113	123	35	62
µaigue.bam	3	110	124	33	63
µaigue.bam	4	107	128	30	67
µaigue.bam	5	105	133	28	72
µaigue.bam	6	106	139	28	78
µaigue.bam	7	109	153	27	92
µaigue.bam	8	114	155	25	93
µaigue.bam	9	111	125	30	69
µaigue.bam	10	99	105	15	55
µaigue.bam	11	98	115	8	69
µaigue.bam	12	92	124	1	79
µaigue.bam	13	83	147	-1	100
µaigue.bam	14	85	165	1	121
µaigue.bam	15	105	166	7	123
µaigue.bam	16	126	138	14	98
µaigue.bam	17	142	117	22	91
µaigue.bam	18	153	111	40	89
µaigue.bam	19	153	99	59	82
µaigue.bam	20	150	95	51	75
µaigue.bam	21	156	99	48	72
µaigue.bam	22	148	110	45	79
µaigue.bam	23	143	103	42	79
µaigue.bam	24	164	92	66	44
µaigue.bam	25	144	93	66	45
µaigue.bam	26	135	89	66	41
µaigue.bam	27	135	90	66	42
µaigue.bam	28	137	93	66	45
µaigue.bam	29	142	96	66	48
µaigue.bam	30	152	99	66	51
µaigue.bam	31	172	109	66	61
µaigue.bam	32	190	106	65	54
µaigue.bam	33	169	104	57	46
µaigue.bam	34	131	102	52	41
µaigue.bam	35	122	94	48	50
µaigue.bam	36	122	107	43	68
µaigue.bam	37	132	124	33	78
µaigue.bam	38	139	151	29	95
µaigue.bam	39	157	155	40	99
µaigue.bam	40	150	141	41	88
µaigue.bam	41	123	124	31	82
µaigue.bam	42	113	119	29	79
µaigue.bam	43	119	106	35	71
µaigue.bam	44	123	98	32	64
µaigue.bam	45	116	98	29	65
µaigue.bam	46	128	98	42	75
µaigue.bam	47	130	102	49	85
µaigue.bam	48	191	68	102	23
µaigue.bam	49	167	70	102	25
µaigue.bam	50	159	71	102	26
µaigue.bam	51	153	72	102	28
µaigue.bam	52	158	91	102	47
µaigue.bam	53	158	88	102	44
µaigue.bam	54	171	85	102	41
µaigue.bam	55	182	91	102	46
µaigue.bam	56	200	98	103	56
µaigue.bam	57	172	93	95	52
µaigue.bam	58	141	91	87	42
µaigue.bam	59	142	77	81	43
µaigue.bam	60	146	84	77	54
µaigue.bam	61	168	87	80	61
µaigue.bam	62	172	111	79	76
µaigue.bam	63	203	128	96	81
µaigue.bam	64	172	125	81	74
µaigue.bam	65	121	125	55	77
µaigue.bam	66	104	118	47	74
µaigue.bam	67	87	106	37	73
µaigue.bam	68	92	102	40	62
µaigue.bam	69	124	98	55	56
µaigue.bam	70	132	109	61	71
µaigue.bam	71	100	115	49	86
µaisc.bam	0	99	106	42	84
µaisc.bam	1	102	100	45	82
µaisc.bam	2	106	104	47	83
µaisc.bam	3	109	105	48	84
µaisc.bam	4	110	108	46	85
µaisc.bam	5	125	111	55	86
µaisc.bam	6	147	113	66	87
µaisc.bam	7	156	116	69	88
µaisc.bam	8	158	115	69	88
µaisc.bam	9	159	115	70	87
µaisc.bam	10	154	114	65	85
µaisc.bam	11	143	111	56	84
µaisc.bam	12	126	109	44	83
µaisc.bam	13	112	107	38	83
µaisc.bam	14	102	105	40	83
µaisc.bam	15	120	105	72	86
µaisc.bam	16	123	103	72	87
µaisc.bam	17	124	103	72	87
µaisc.bam	18	125	104	73	87
µaisc.bam	19	123	113	73	89
µaisc.bam	20	122	123	73	92
µaisc.bam	21	123	131	73	94
µaisc.bam	22	123	142	73	102
µaisc.bam	23	123	146	73	107
µaisc.bam	24	122	147	72	107
µaisc.bam	25	122	141	72	103
µaisc.bam	26	123	130	72	94
µaisc.bam	27	122	121	71	87
µaisc.bam	28	121	114	71	86
µaisc.bam	29	117	106	70	86
µaisc.bam	30	112	123	58	99
µaisc.bam	31	113	121	57	101
µaisc.bam	32	113	120	55	101
µaisc.bam	33	115	120	55	100
µaisc.bam	34	120	120	58	97
µaisc.bam	35	128	120	62	93
µaisc.bam	36	135	120	64	89
µaisc.bam	37	140	123	66	93
µaisc.bam	38	142	127	67	98
µaisc.bam	39	141	126	67	97
µaisc.bam	40	142	122	68	91
µaisc.bam	41	142	119	67	88
µaisc.bam	42	137	124	65	91
µaisc.bam	43	130	127	63	95
µaisc.bam	44	116	127	60	99
µaisc.bam	45	92	134	38	115
µaisc.bam	46	87	134	32	115
µaisc.bam	47	91	135	33	115
µaisc.bam	48	101	137	38	114
µaisc.bam	49	120	132	49	112
µaisc.bam	50	149	129	64	110
µaisc.bam	51	176	127	76	108
µaisc.bam	52	188	125	82	107
µaisc.bam	53	192	126	85	108
µaisc.bam	54	190	127	82	108
µaisc.bam	55	185	132	81	110
µaisc.bam	56	173	131	76	109
µaisc.bam	57	146	131	70	111
µaisc.bam	58	130	133	56	113
µaisc.bam	59	100	135	43	116
µaisc.bam	60	119	128	48	106
µaisc.bam	61	116	126	41	106
µaisc.bam	62	116	124	40	105
µaisc.bam	63	117	123	42	103
µaisc.bam	64	122	122	48	102
µaisc.bam	65	124	124	56	101
µaisc.bam	66	146	126	63	103
µaisc.bam	67	153	126	65	103
µaisc.bam	68	158	130	64	105
µaisc.bam	69	158	127	64	104
µaisc.bam	70	153	128	67	104
µaisc.bam	71	141	130	68	105
µaisc.bam	72	130	134	68	107
µaisc.bam	73	128	135	61	107
µaisc.bam	74	123	132	54	108
µaisce.bam	0	134	104	37	81
µaisce.bam	1	138	98	38	80
µaisce.bam	2	138	100	41	82
µaisce.bam	3	141	106	41	84
µaisce.bam	4	137	114	40	85
µaisce.bam	5	135	123	37	87
µaisce.bam	6	134	131	37	91
µaisce.bam	7	135	142	36	100
µaisce.bam	8	134	144	35	105
µaisce.bam	9	129	143	36	106
µaisce.bam	10	143	140	44	101
µaisce.bam	11	138	131	42	91
µaisce.bam	12	134	119	38	82
µaisce.bam	13	132	115	37	82
µaisce.bam	14	130	106	36	82
µaisce.bam	15	127	98	44	85
µaisce.bam	16	123	100	39	85
µaisce.bam	17	122	101	40	85
µaisce.bam	18	122	101	42	85
µaisce.bam	19	129	104	45	86
µaisce.bam	20	135	113	49	87
µaisce.bam	21	145	120	54	89
µaisce.bam	22	143	123	56	92
µaisce.bam	23	149	129	57	95
µaisce.bam	24	145	128	55	96
µaisce.bam	25	147	122	55	93
µaisce.bam	26	148	110	55	87
µaisce.bam	27	145	104	57	84
µaisce.bam	28	142	97	55	83
µaisce.bam	29	135	97	49	85
µaisce.bam	30	94	115	45	86
µaisce.bam	31	87	117	38	87
µaisce.bam	32	92	115	40	86
µaisce.bam	33	101	118	45	87
µaisce.bam	34	120	117	57	86
µaisce.bam	35	151	117	72	87
µaisce.bam	36	174	118	81	86
µaisce.bam	37	186	118	85	87
µaisce.bam	38	190	117	85	86
µaisce.bam	39	194	117	87	87
µaisce.bam	40	181	116	82	85
µaisce.bam	41	167	116	78	86
µaisce.bam	42	156	116	72	86
µaisce.bam	43	130	115	63	86
µaisce.bam	44	100	114	49	86
µaisd.bam	0	64	104	13	97
µaisd.bam	1	64	103	13	96
µaisd.bam	2	64	105	13	98
µaisd.bam	3	64	105	13	98
µaisd.bam	4	63	105	13	98
µaisd.bam	5	63	104	13	97
µaisd.bam	6	63	103	13	96
µaisd.bam	7	63	105	13	98
µaisd.bam	8	63	106	13	99
µaisd.bam	9	63	104	13	97
µaisd.bam	10	63	103	13	96
µaisd.bam	11	64	105	13	98
µaisd.bam	12	64	103	13	96
µaisd.bam	13	64	104	13	97
µaisd.bam	14	64	103	13	96
µaisd.bam	15	68	113	14	103
µaisd.bam	16	68	113	14	103
µaisd.bam	17	68	114	14	104
µaisd.bam	18	71	113	14	103
µaisd.bam	19	68	113	14	103
µaisd.bam	20	67	113	13	103
µaisd.bam	21	66	112	12	102
µaisd.bam	22	66	113	12	103
µaisd.bam	23	66	112	12	102
µaisd.bam	24	66	112	12	102
µaisd.bam	25	66	111	12	101
µaisd.bam	26	66	112	12	102
µaisd.bam	27	67	112	13	102
µaisd.bam	28	67	111	13	101
µaisd.bam	29	68	112	14	102
µaisd.bam	30	68	123	18	109
µaisd.bam	31	68	125	18	109
µaisd.bam	32	68	126	18	109
µaisd.bam	33	68	128	18	109
µaisd.bam	34	68	126	18	109
µaisd.bam	35	68	123	18	109
µaisd.bam	36	68	120	18	108
µaisd.bam	37	68	117	18	108
µaisd.bam	38	68	117	18	108
µaisd.bam	39	68	116	18	107
µaisd.bam	40	68	117	18	108
µaisd.bam	41	68	116	18	107
µaisd.bam	42	68	117	18	108
µaisd.bam	43	68	118	18	109
µaisd.bam	44	68	120	18	108
µaisd.bam	45	64	131	19	113
µaisd.bam	46	65	134	20	113
µaisd.bam	47	64	134	19	112
µaisd.bam	48	64	138	19	113
µaisd.bam	49	66	134	20	113
µaisd.bam	50	67	130	21	112
µaisd.bam	51	65	129	19	112
µaisd.bam	52	66	129	20	112
µaisd.bam	53	66	128	20	111
µaisd.bam	54	66	126	21	111
µaisd.bam	55	65	126	20	111
µaisd.bam	56	64	129	19	112
µaisd.bam	57	64	127	19	112
µaisd.bam	58	63	127	18	112
µaisd.bam	59	63	129	18	113
µaisd.bam	60	77	124	29	112
µaisd.bam	61	82	123	33	111
µaisd.bam	62	84	125	35	111
µaisd.bam	63	86	126	37	111
µaisd.bam	64	86	121	37	110
µaisd.bam	65	81	121	32	111
µaisd.bam	66	75	122	27	111
µaisd.bam	67	73	123	26	111
µaisd.bam	68	72	124	26	111
µaisd.bam	69	71	127	26	111
µaisd.bam	70	71	129	26	111
µaisd.bam	71	72	130	26	111
µaisd.bam	72	73	129	26	111
µaisd.bam	73	72	127	25	112
µaisd.bam	74	74	123	26	111
µaisde.bam	0	89	115	35	107
µaisde.bam	1	95	115	40	107
µaisde.bam	2	99	115	44	107
µaisde.bam	3	103	114	49	106
µaisde.bam	4	98	114	44	106
µaisde.bam	5	93	114	39	106
µaisde.bam	6	91	114	37	106
µaisde.bam	7	85	115	33	107
µaisde.bam	8	84	115	31	107
µaisde.bam	9	83	116	31	107
µaisde.bam	10	86	116	33	107
µaisde.bam	11	85	119	32	108
µaisde.bam	12	85	117	31	107
µaisde.bam	13	85	115	30	107
µaisde.bam	14	86	116	31	108
µaisde.bam	15	80	108	27	101
µaisde.bam	16	82	108	28	101
µaisde.bam	17	80	108	30	101
µaisde.bam	18	82	107	32	100
µaisde.bam	19	75	108	27	101
µaisde.bam	20	77	108	25	101
µaisde.bam	21	76	108	25	101
µaisde.bam	22	78	109	26	102
µaisde.bam	23	78	109	28	102
µaisde.bam	24	81	110	31	103
µaisde.bam	25	86	110	35	103
µaisde.bam	26	90	109	38	102
µaisde.bam	27	92	109	39	102
µaisde.bam	28	82	109	31	102
µaisde.bam	29	80	108	28	101
µaisde.bam	30	64	102	18	97
µaisde.bam	31	64	102	19	97
µaisde.bam	32	64	102	19	97
µaisde.bam	33	63	102	19	97
µaisde.bam	34	64	102	19	97
µaisde.bam	35	64	103	19	98
µaisde.bam	36	66	103	19	98
µaisde.bam	37	66	104	19	99
µaisde.bam	38	66	104	20	99
µaisde.bam	39	67	104	20	99
µaisde.bam	40	67	103	20	98
µaisde.bam	41	69	103	22	98
µaisde.bam	42	69	103	22	98
µaisde.bam	43	65	102	19	97
µaisde.bam	44	64	102	18	97
µaisl.bam	0	128	97	65	80
µaisl.bam	1	141	98	79	81
µaisl.bam	2	148	101	89	84
µaisl.bam	3	146	104	91	87
µaisl.bam	4	145	105	88	88
µaisl.bam	5	146	105	86	88
µaisl.bam	6	146	103	85	86
µaisl.bam	7	145	105	83	88
µaisl.bam	8	142	110	83	93
µaisl.bam	9	144	109	84	89
µaisl.bam	10	141	104	84	76
µaisl.bam	11	140	102	85	67
µaisl.bam	12	136	97	86	60
µaisl.bam	13	137	96	84	60
µaisl.bam	14	175	106	84	83
µaisl.bam	15	135	110	95	88
µaisl.bam	16	126	106	82	79
µaisl.bam	17	122	112	79	80
µaisl.bam	18	135	120	92	74
µaisl.bam	19	146	121	102	70
µaisl.bam	20	152	113	106	59
µaisl.bam	21	149	108	104	50
µaisl.bam	22	144	103	99	44
µaisl.bam	23	140	101	95	42
µaisl.bam	24	129	101	77	83
µaisl.bam	25	136	98	76	83
µaisl.bam	26	134	99	69	84
µaisl.bam	27	121	101	57	86
µaisl.bam	28	111	100	47	85
µaisl.bam	29	93	99	40	84
µaisl.bam	30	90	102	36	87
µaisl.bam	31	86	108	33	93
µaisl.bam	32	81	111	32	91
µaisl.bam	33	85	108	32	80
µaisl.bam	34	85	103	32	70
µaisl.bam	35	78	103	31	66
µaisl.bam	36	77	116	33	77
µaisl.bam	37	83	127	38	84
µaisl.bam	38	111	110	37	72
µaisl.bam	39	102	122	66	104
µaisl.bam	40	120	112	72	98
µaisl.bam	41	125	126	75	105
µaisl.bam	42	116	133	72	106
µaisl.bam	43	115	138	75	106
µaisl.bam	44	117	130	79	98
µaisl.bam	45	113	123	74	81
µaisl.bam	46	117	120	77	74
µaisl.bam	47	118	115	76	67
µaisl.bam	48	103	131	44	103
µaisl.bam	49	89	124	29	99
µaisl.bam	50	87	113	29	91
µaisl.bam	51	84	107	29	86
µaisl.bam	52	86	110	29	88
µaisl.bam	53	90	108	29	89
µaisl.bam	54	91	108	29	89
µaisl.bam	55	92	112	29	93
µaisl.bam	56	90	103	29	84
µaisl.bam	57	95	89	36	70
µaisl.bam	58	110	84	52	65
µaisl.bam	59	119	79	65	62
µaisl.bam	60	128	90	70	71
µaisl.bam	61	134	102	63	75
µaisl.bam	62	139	105	42	63
µaisl.bam	63	121	120	54	98
µaisl.bam	64	116	120	54	97
µaisl.bam	65	136	128	71	105
µaisl.bam	66	156	130	91	106
µaisl.bam	67	167	134	102	109
µaisl.bam	68	170	126	105	101
µaisl.bam	69	172	107	107	81
µaisl.bam	70	171	95	106	69
µaisl.bam	71	169	87	104	61
µaisl.bam	72	93	133	38	109
µaisl.bam	73	88	125	31	96
µaisl.bam	74	99	117	28	88
µaisl.bam	75	109	115	28	88
µaisl.bam	76	115	111	28	88
µaisl.bam	77	117	109	28	91
µaisl.bam	78	116	107	28	90
µaisl.bam	79	118	101	28	86
µaisl.bam	80	124	90	37	79
µaisl.bam	81	137	75	49	67
µaisl.bam	82	151	73	60	64
µaisl.bam	83	161	80	70	71
µaisl.bam	84	177	79	72	69
µaisl.bam	85	186	76	77	58
µaisl.bam	86	182	89	74	60
µaisl.bam	87	152	105	49	86
µaisl.bam	88	141	110	39	89
µaisl.bam	89	153	116	52	94
µaisl.bam	90	174	118	66	95
µaisl.bam	91	183	124	69	98
µaisl.bam	92	183	117	69	91
µaisl.bam	93	194	96	80	70
µaisl.bam	94	201	82	86	55
µaisl.bam	95	201	83	91	56
µaisl.bam	96	142	115	52	91
µaisl.bam	97	145	112	50	88
µaisl.bam	98	150	113	47	89
µaisl.bam	99	143	109	44	87
µaisl.bam	100	136	109	44	88
µaisl.bam	101	132	111	38	92
µaisl.bam	102	125	110	36	90
µaisl.bam	103	128	109	39	89
µaisl.bam	104	129	102	41	81
µaisl.bam	105	128	88	39	68
µaisl.bam	106	128	87	39	66
µaisl.bam	107	128	94	39	71
µaisl.bam	108	132	93	39	67
µaisl.bam	109	144	93	49	56
µaisl.bam	110	170	98	80	58
µaisl.bam	111	135	130	39	101
µaisl.bam	112	124	135	42	96
µaisl.bam	113	139	145	41	105
µaisl.bam	114	155	151	41	111
µaisl.bam	115	164	155	43	115
µaisl.bam	116	161	145	45	105
µaisl.bam	117	158	130	45	90
µaisl.bam	118	147	119	45	79
µaisl.bam	119	141	112	45	72
µaisle.bam	0	141	110	48	87
µaisle.bam	1	149	102	54	83
µaisle.bam	2	139	110	57	84
µaisle.bam	3	126	120	58	84
µaisle.bam	4	110	125	53	83
µaisle.bam	5	92	129	40	85
µaisle.bam	6	84	131	36	87
µaisle.bam	7	73	136	31	91
µaisle.bam	8	67	134	28	88
µaisle.bam	9	65	125	27	78
µaisle.bam	10	78	114	31	66
µaisle.bam	11	79	113	28	63
µaisle.bam	12	79	112	26	61
µaisle.bam	13	87	110	35	55
µaisle.bam	14	110	134	63	77
µaisle.bam	15	106	159	34	100
µaisle.bam	16	113	149	40	87
µaisle.bam	17	120	153	43	92
µaisle.bam	18	129	155	41	94
µaisle.bam	19	135	157	40	96
µaisle.bam	20	134	144	38	83
µaisle.bam	21	121	135	39	74
µaisle.bam	22	119	126	41	64
µaisle.bam	23	118	126	41	64
µaisle.bam	24	118	108	50	81
µaisle.bam	25	101	120	49	83
µaisle.bam	26	101	130	47	86
µaisle.bam	27	94	133	44	88
µaisle.bam	28	97	135	41	88
µaisle.bam	29	93	134	39	88
µaisle.bam	30	86	129	37	85
µaisle.bam	31	84	132	42	88
µaisle.bam	32	83	137	46	91
µaisle.bam	33	85	131	41	87
µaisle.bam	34	94	121	41	75
µaisle.bam	35	109	112	43	65
µaisle.bam	36	130	107	51	61
µaisle.bam	37	130	102	67	59
µaisle.bam	38	128	127	81	80
µaisle.bam	39	133	135	50	80
µaisle.bam	40	143	116	63	66
µaisle.bam	41	163	111	65	63
µaisle.bam	42	183	106	66	58
µaisle.bam	43	188	104	66	52
µaisle.bam	44	189	95	66	40
µaisle.bam	45	185	88	66	32
µaisle.bam	46	181	85	66	30
µaisle.bam	47	176	84	66	30
µaisle.bam	48	94	111	47	79
µaisle.bam	49	86	114	41	79
µaisle.bam	50	105	113	57	81
µaisle.bam	51	118	110	72	83
µaisle.bam	52	127	106	79	84
µaisle.bam	53	129	103	82	84
µaisle.bam	54	131	99	84	81
µaisle.bam	55	133	100	84	84
µaisle.bam	56	133	105	85	89
µaisle.bam	57	138	104	86	88
µaisle.bam	58	151	94	87	79
µaisle.bam	59	164	84	90	69
µaisle.bam	60	176	77	97	63
µaisle.bam	61	178	75	102	58
µaisle.bam	62	188	91	102	72
µaisle.bam	63	178	101	103	65
µaisle.bam	64	169	97	102	53
µaisle.bam	65	174	86	101	43
µaisle.bam	66	186	80	102	41
µaisle.bam	67	190	72	102	34
µaisle.bam	68	186	70	102	27
µaisle.bam	69	183	69	103	24
µaisle.bam	70	200	69	110	24
µaisle.bam	71	201	69	107	24
µaisp.bam	0	104	105	47	84
µaisp.bam	1	109	101	59	84
µaisp.bam	2	116	102	66	85
µaisp.bam	3	113	103	62	86
µaisp.bam	4	89	117	39	85
µaisp.bam	5	75	119	30	83
µaisp.bam	6	63	95	24	77
µaisp.bam	7	64	95	20	78
µaisp.bam	8	64	98	20	81
µaisp.bam	9	90	101	39	84
µaisp.bam	10	157	106	70	89
µaisp.bam	11	169	133	71	116
µaisp.bam	12	144	167	45	150
µaisp.bam	13	134	167	40	150
µaisp.bam	14	133	165	40	148
µaisp.bam	15	136	166	40	149
µaisp.bam	16	134	164	41	147
µaisp.bam	17	125	166	35	149
µaisp.bam	18	129	166	35	149
µaisp.bam	19	130	164	35	147
µaisp.bam	20	140	161	39	144
µaisp.bam	21	157	155	49	138
µaisp.bam	22	175	147	62	130
µaisp.bam	23	194	137	76	120
µaisp.bam	24	206	126	84	109
µaisp.bam	25	206	126	86	109
µaisp.bam	26	192	129	78	112
µaisp.bam	27	170	134	64	117
µaisp.bam	28	155	150	52	133
µaisp.bam	29	144	167	45	150
µaisp.bam	30	118	110	73	87
µaisp.bam	31	121	109	75	88
µaisp.bam	32	123	108	74	89
µaisp.bam	33	125	105	75	89
µaisp.bam	34	117	105	69	89
µaisp.bam	35	107	107	57	88
µaisp.bam	36	85	99	35	83
µaisp.bam	37	79	95	31	79
µaisp.bam	38	84	101	31	85
µaisp.bam	39	94	103	31	87
µaisp.bam	40	131	109	40	93
µaisp.bam	41	141	158	40	143
µaisp.bam	42	133	173	31	158
µaisp.bam	43	129	167	31	152
µaisp.bam	44	131	165	31	150
µaisp.bam	45	135	165	33	150
µaisp.bam	46	140	168	35	153
µaisp.bam	47	139	169	36	154
µaisp.bam	48	140	167	36	152
µaisp.bam	49	147	165	35	150
µaisp.bam	50	146	164	31	149
µaisp.bam	51	143	161	31	146
µaisp.bam	52	144	159	31	144
µaisp.bam	53	137	156	31	141
µaisp.bam	54	133	158	35	136
µaisp.bam	55	145	158	47	132
µaisp.bam	56	149	154	51	133
µaisp.bam	57	144	158	46	142
µaisp.bam	58	133	168	31	153
µaisp.bam	59	133	173	31	158
µaisp.bam	60	111	128	56	102
µaisp.bam	61	98	129	47	107
µaisp.bam	62	84	126	37	108
µaisp.bam	63	92	120	43	104
µaisp.bam	64	119	106	69	90
µaisp.bam	65	120	106	71	91
µaisp.bam	66	78	102	32	88
µaisp.bam	67	82	100	34	85
µaisp.bam	68	82	100	34	86
µaisp.bam	69	88	102	34	89
µaisp.bam	70	92	129	34	99
µaisp.bam	71	95	175	34	149
µaisp.bam	72	117	171	34	154
µaisp.bam	73	120	164	34	146
µaisp.bam	74	122	160	34	143
µaisp.bam	75	122	162	34	144
µaisp.bam	76	128	162	34	145
µaisp.bam	77	129	151	34	141
µaisp.bam	78	139	148	35	137
µaisp.bam	79	142	143	35	130
µaisp.bam	80	144	146	34	128
µaisp.bam	81	136	153	34	128
µaisp.bam	82	136	163	34	131
µaisp.bam	83	123	169	34	134
µaisp.bam	84	118	173	34	135
µaisp.bam	85	116	174	34	140
µaisp.bam	86	111	172	34	144
µaisp.bam	87	110	179	34	152
µaisp.bam	88	113	182	34	159
µaisp.bam	89	117	171	34	154
µaisp.bam	90	93	133	43	114
µaisp.bam	91	88	141	42	117
µaisp.bam	92	85	137	37	114
µaisp.bam	93	81	133	31	111
µaisp.bam	94	87	111	30	91
µaisp.bam	95	92	104	43	86
µaisp.bam	96	81	106	33	88
µaisp.bam	97	81	103	34	83
µaisp.bam	98	88	101	36	80
µaisp.bam	99	91	108	37	85
µaisp.bam	100	117	119	38	87
µaisp.bam	101	151	154	45	130
µaisp.bam	102	140	161	38	142
µaisp.bam	103	140	155	38	136
µaisp.bam	104	140	154	38	134
µaisp.bam	105	143	153	38	132
µaisp.bam	106	140	152	37	129
µaisp.bam	107	134	142	35	119
µaisp.bam	108	139	135	32	109
µaisp.bam	109	140	126	28	99
µaisp.bam	110	145	122	28	94
µaisp.bam	111	150	122	28	94
µaisp.bam	112	160	128	35	97
µaisp.bam	113	166	133	49	102
µaisp.bam	114	180	138	62	109
µaisp.bam	115	172	148	65	118
µaisp.bam	116	171	155	66	129
µaisp.bam	117	162	164	56	141
µaisp.bam	118	141	168	38	147
µaisp.bam	119	139	161	37	142
µaisp.bam	120	124	130	48	106
µaisp.bam	121	128	122	42	100
µaisp.bam	122	128	114	34	95
µaisp.bam	123	124	109	34	93
µaisp.bam	124	90	112	28	92
µaisp.bam	125	82	103	25	83
µaisp.bam	126	70	104	23	85
µaisp.bam	127	74	100	30	81
µaisp.bam	128	69	96	28	79
µaisp.bam	129	88	98	33	81
µaisp.bam	130	154	93	65	78
µaisp.bam	131	182	116	71	103
µaisp.bam	132	143	145	55	132
µaisp.bam	133	136	145	53	132
µaisp.bam	134	134	143	50	130
µaisp.bam	135	134	143	53	128
µaisp.bam	136	130	139	52	120
µaisp.bam	137	124	130	43	109
µaisp.bam	138	128	124	48	97
µaisp.bam	139	130	116	52	87
µaisp.bam	140	138	118	58	88
µaisp.bam	141	157	116	68	87
µaisp.bam	142	178	112	79	85
µaisp.bam	143	197	113	85	86
µaisp.bam	144	202	113	86	90
µaisp.bam	145	199	117	83	97
µaisp.bam	146	191	126	73	109
µaisp.bam	147	177	136	65	123
µaisp.bam	148	159	145	59	132
µaisp.bam	149	143	145	55	132
µaispe.bam	0	138	104	36	81
µaispe.bam	1	138	99	36	82
µaispe.bam	2	139	100	36	84
µaispe.bam	3	139	101	37	85
µaispe.bam	4	126	102	37	86
µaispe.bam	5	107	103	39	87
µaispe.bam	6	89	102	34	86
µaispe.bam	7	80	101	31	85
µaispe.bam	8	83	101	34	86
µaispe.bam	9	96	102	47	84
µaispe.bam	10	132	113	71	84
µaispe.bam	11	146	159	62	134
µaispe.bam	12	118	165	60	146
µaispe.bam	13	113	160	58	139
µaispe.bam	14	114	158	57	137
µaispe.bam	15	120	162	59	139
µaispe.bam	16	126	157	63	134
µaispe.bam	17	129	149	65	129
µaispe.bam	18	132	142	68	121
µaispe.bam	19	130	137	67	114
µaispe.bam	20	132	139	72	111
µaispe.bam	21	132	144	76	112
µaispe.bam	22	125	149	73	114
µaispe.bam	23	126	154	71	119
µaispe.bam	24	140	157	70	123
µaispe.bam	25	150	158	68	128
µaispe.bam	26	153	164	66	135
µaispe.bam	27	158	174	65	147
µaispe.bam	28	141	174	63	151
µaispe.bam	29	118	165	60	146
µaispe.bam	30	133	102	49	86
µaispe.bam	31	119	111	44	88
µaispe.bam	32	105	117	37	89
µaispe.bam	33	101	116	30	89
µaispe.bam	34	118	102	29	88
µaispe.bam	35	116	97	35	87
µaispe.bam	36	85	93	38	84
µaispe.bam	37	93	96	45	86
µaispe.bam	38	92	97	44	88
µaispe.bam	39	86	104	38	87
µaispe.bam	40	83	137	35	102
µaispe.bam	41	81	174	31	149
µaispe.bam	42	94	166	41	155
µaispe.bam	43	96	160	42	149
µaispe.bam	44	96	159	43	146
µaispe.bam	45	100	158	46	148
µaispe.bam	46	109	160	53	150
µaispe.bam	47	121	160	65	150
µaispe.bam	48	126	156	70	146
µaispe.bam	49	127	150	70	140
µaispe.bam	50	126	148	71	138
µaispe.bam	51	124	153	70	139
µaispe.bam	52	119	160	67	138
µaispe.bam	53	113	169	63	140
µaispe.bam	54	107	172	59	137
µaispe.bam	55	100	169	52	138
µaispe.bam	56	105	173	46	142
µaispe.bam	57	100	172	42	151
µaispe.bam	58	96	172	40	157
µaispe.bam	59	93	166	41	155
µaispe.bam	60	92	118	42	87
µaispe.bam	61	83	120	34	88
µaispe.bam	62	72	121	27	89
µaispe.bam	63	78	124	32	90
µaispe.bam	64	85	121	35	89
µaispe.bam	65	80	113	27	85
µaispe.bam	66	75	96	27	81
µaispe.bam	67	77	93	29	79
µaispe.bam	68	82	98	30	84
µaispe.bam	69	92	101	37	87
µaispe.bam	70	119	119	61	103
µaispe.bam	71	150	156	63	142
µaispe.bam	72	127	168	60	154
µaispe.bam	73	119	163	58	149
µaispe.bam	74	121	164	60	150
µaispe.bam	75	121	165	61	151
µaispe.bam	76	127	164	66	150
µaispe.bam	77	120	167	60	153
µaispe.bam	78	117	166	61	152
µaispe.bam	79	119	164	68	150
µaispe.bam	80	129	164	76	150
µaispe.bam	81	141	157	80	143
µaispe.bam	82	160	152	88	138
µaispe.bam	83	174	145	89	131
µaispe.bam	84	175	138	81	124
µaispe.bam	85	175	135	73	121
µaispe.bam	86	166	138	73	124
µaispe.bam	87	166	147	69	133
µaispe.bam	88	152	162	64	148
µaispe.bam	89	127	168	60	154
µaiwk.bam	0	84	121	30	107
µaiwk.bam	1	83	117	28	106
µaiwk.bam	2	83	118	25	111
µaiwk.bam	3	89	116	26	111
µaiwk.bam	4	96	120	27	113
µaiwk.bam	5	101	125	25	114
µaiwk.bam	6	105	127	22	112
µaiwk.bam	7	112	128	21	110
µaiwk.bam	8	109	128	22	113
µaiwk.bam	9	117	125	26	113
µaiwk.bam	10	132	123	32	116
µaiwk.bam	11	128	122	33	117
µaiwk.bam	12	122	122	36	114
µaiwk.bam	13	108	128	33	116
µaiwk.bam	14	94	127	31	111
µaiwk.bam	15	79	126	26	108
µaiwk.bam	16	76	131	23	117
µaiwk.bam	17	75	129	21	117
µaiwk.bam	18	78	127	19	119
µaiwk.bam	19	85	129	19	120
µaiwk.bam	20	84	130	19	120
µaiwk.bam	21	89	135	19	122
µaiwk.bam	22	96	136	19	122
µaiwk.bam	23	107	138	21	122
µaiwk.bam	24	107	137	18	121
µaiwk.bam	25	109	139	18	121
µaiwk.bam	26	107	142	18	123
µaiwk.bam	27	101	142	18	123
µaiwk.bam	28	93	139	18	122
µaiwk.bam	29	89	139	22	122
µaiwk.bam	30	85	137	27	122
µaiwk.bam	31	85	134	29	122
µaiwk.bam	32	77	147	25	125
µaiwk.bam	33	71	144	18	125
µaiwk.bam	34	72	143	16	126
µaiwk.bam	35	76	145	17	126
µaiwk.bam	36	85	149	20	126
µaiwk.bam	37	96	155	23	127
µaiwk.bam	38	111	161	28	127
µaiwk.bam	39	120	166	32	127
µaiwk.bam	40	123	165	26	125
µaiwk.bam	41	120	165	20	124
µaiwk.bam	42	108	166	14	125
µaiwk.bam	43	104	165	15	126
µaiwk.bam	44	96	162	18	126
µaiwk.bam	45	92	158	24	126
µaiwk.bam	46	87	155	30	127
µaiwk.bam	47	86	151	32	128
µaiwk.bam	48	84	145	30	126
µaiwk.bam	49	81	148	26	126
µaiwk.bam	50	81	149	23	126
µaiwk.bam	51	87	152	24	127
µaiwk.bam	52	96	148	27	127
µaiwk.bam	53	105	152	31	127
µaiwk.bam	54	114	156	35	126
µaiwk.bam	55	120	158	37	124
µaiwk.bam	56	130	156	40	121
µaiwk.bam	57	137	157	43	121
µaiwk.bam	58	142	156	45	121
µaiwk.bam	59	134	153	44	122
µaiwk.bam	60	127	154	41	124
µaiwk.bam	61	110	152	37	125
µaiwk.bam	62	95	147	33	125
µaiwk.bam	63	85	145	27	126
µaiwk.bam	64	108	141	44	119
µaiwk.bam	65	102	140	39	120
µaiwk.bam	66	101	139	39	121
µaiwk.bam	67	104	137	43	121
µaiwk.bam	68	109	142	49	121
µaiwk.bam	69	119	146	59	120
µaiwk.bam	70	131	150	68	117
µaiwk.bam	71	141	152	75	114
µaiwk.bam	72	145	150	81	113
µaiwk.bam	73	142	152	81	112
µaiwk.bam	74	145	151	83	114
µaiwk.bam	75	140	149	79	115
µaiwk.bam	76	131	148	71	117
µaiwk.bam	77	123	144	63	118
µaiwk.bam	78	118	139	54	118
µaiwk.bam	79	113	137	45	116
µaiwke.bam	0	104	131	38	109
µaiwke.bam	1	110	131	44	112
µaiwke.bam	2	110	130	47	112
µaiwke.bam	3	113	134	50	114
µaiwke.bam	4	108	140	46	116
µaiwke.bam	5	113	143	53	115
µaiwke.bam	6	123	142	62	112
µaiwke.bam	7	131	139	71	107
µaiwke.bam	8	130	140	72	106
µaiwke.bam	9	128	143	73	108
µaiwke.bam	10	124	145	69	108
µaiwke.bam	11	122	147	67	110
µaiwke.bam	12	115	148	59	113
µaiwke.bam	13	111	144	53	113
µaiwke.bam	14	106	138	45	110
µaiwke.bam	15	102	128	37	107
µaiwke.bam	16	99	117	44	103
µaiwke.bam	17	97	118	42	105
µaiwke.bam	18	95	117	41	107
µaiwke.bam	19	92	119	38	109
µaiwke.bam	20	99	120	44	110
µaiwke.bam	21	108	121	56	111
µaiwke.bam	22	119	115	69	108
µaiwke.bam	23	121	110	76	103
µaiwke.bam	24	125	109	81	103
µaiwke.bam	25	126	114	82	106
µaiwke.bam	26	120	118	77	107
µaiwke.bam	27	117	122	72	109
µaiwke.bam	28	112	126	64	111
µaiwke.bam	29	104	125	55	111
µaiwke.bam	30	94	120	45	106
µaiwke.bam	31	94	113	43	101
µaiwke.bam	32	82	115	43	102
µaiwke.bam	33	80	114	39	103
µaiwke.bam	34	80	114	39	106
µaiwke.bam	35	88	114	43	108
µaiwke.bam	36	98	113	49	110
µaiwke.bam	37	108	117	57	111
µaiwke.bam	38	115	118	63	109
µaiwke.bam	39	122	116	68	105
µaiwke.bam	40	129	116	71	106
µaiwke.bam	41	139	117	77	109
µaiwke.bam	42	139	116	77	111
µaiwke.bam	43	136	117	77	112
µaiwke.bam	44	124	120	68	112
µaiwke.bam	45	109	123	61	112
µaiwke.bam	46	91	122	52	108
µaiwke.bam	47	80	117	43	102
Amusez-vous bien.
Fichiers joints
GW_Ecriture automatique des coordonnees.7z
(845.98 Kio) Téléchargé 138 fois
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 »

Isaya a écrit :Effectivement je n'ai pas réfléchi au fait que la variable n'allait pas être évaluée avec cette façon de créer le fichier.

Je n'avais pas non plus vu que tu avais changé le test et j'avais recopié celui de plusieurs messages auparavant.

En conservant l'idée du fichier temporaire, tu pourrais écrire

Code : Tout sélectionner

	ACTION_IF ("%donnees_14%" STRING_COMPARE_CASE "M") THEN BEGIN
		<<<<<<<< .../Diamant_Eternel/inlined/essai.tpa
COPY ~Diamant_Eternel/Clones/%donnees_1%.itm~ ~override/%Scroll%.itm~
> >> >> >> >
        END ELSE BEGIN
		<<<<<<<< .../Diamant_Eternel/inlined/essai.tpa
COPY_EXISTING ~%donnees_1%.itm~ ~override/%Scroll%.itm~
> >> >> >> >
	END
	// Code repris d'Unfinished Business, car aucun moyen simple d'ajouter à la fin d'un fichier pendant la copie
	COPY ~.../Diamant_Eternel/inlined/essai.tpa~ ~override/blabla.tpa~
	COPY - ~.../Diamant_Eternel/inlined/essai.tpa~ ~.../Diamant_Eternel/inlined/essai.tpa~ // ne fait rien (-) mais permet de patcher l'autre fichier !
		INNER_ACTION BEGIN
			APPEND_OUTER ~override/essai.tpa~ ~ton patch~
		END
Ta méthode simple est sans doute plus efficace et plus lisible.

En m'inspirant de Stratagems et de aTweaks, j'ai réussi à régler le problème avec cette fontion :

Code : Tout sélectionner

/* ====================================================================================== *
 * FONCTION GW_REINCLUDE : Intégration d'une sous-routine dans une routine tp2 principale *
 * ====================================================================================== */
DEFINE_PATCH_FUNCTION ~GW_REINCLUDE~
	STR_VAR	input = ""
BEGIN

	INNER_ACTION BEGIN
		<<<<<<<< temp_file
			%input%
		> >> >> >> >
		COPY - temp_file ~temp_file2~ EVALUATE_BUFFER
	END
	PATCH_REINCLUDE ~temp_file2~

END

Exemples d'application :

LECTURE des fichiers CLAB avec GAIN AUTOMATIQUE des sorts et APPLICATION AUTOMATIQUE des effets.

Code : Tout sélectionner

...
// Écriture des fichiers GA_*
// --------------------------
PATCH_IF (nb_innate > 0) BEGIN
	FOR (i = nb_innate; i > 0 ; i = i - 1) BEGIN	// Inversion de l'ordre pour que le premier effet du premier sort se trouve en tête des effets du fichier cre
		SPRINT spell_to_add $innate_spell_to_add(~%clab%~ ~SPELL_TO_ADD~ ~%i%~)
		SPRINT input_kno "ADD_KNOWN_SPELL ~%spell_to_add%~ #0 ~innate~"
		SPRINT input_mem "ADD_MEMORIZED_SPELL ~%spell_to_add%~ #0 ~innate~"
		LPF ~GW_REINCLUDE~ STR_VAR input = EVAL "%input_kno%" END
		LPF ~GW_REINCLUDE~ STR_VAR input = EVAL "%input_mem%" END
	END
END

// Écriture des effets des fichiers AP_*
// -------------------------------------
PATCH_IF (nb_eff_innate > 0) BEGIN
	FOR (i = nb_eff_innate; i > 0 ; i = i - 1) BEGIN	// Inversion de l'ordre pour que le premier effet du premier sort se trouve en tête des effets du fichier cre
		SET opcode = $effect_to_add(~%clab%~ ~%i%~ ~opcode~)
		SET parameter1 = $effect_to_add(~%clab%~ ~%i%~ ~parameter1~)
		SET parameter2 = $effect_to_add(~%clab%~ ~%i%~ ~parameter2~)
		SPRINT resource $effect_to_add(~%clab%~ ~%i%~ ~resource~)
		SPRINT effsource $effect_to_add(~%clab%~ ~%i%~ ~source~)
		SPRINT input_add_effect "LPF ~ADD_CRE_EFFECT~ INT_VAR opcode target = 1 timing = 9 parameter1 parameter2 restype = 1 STR_VAR resource effsource END"
		LPF ~GW_REINCLUDE~ STR_VAR input = EVAL "%input_add_effect%" END
	END
END
...

INTÉGRATION des sorts divins mémorisables dans les fichiers de CRÉATURES

Code : Tout sélectionner

...
FOR (lev=GW_highest_cleric_level; lev > 0; lev = lev - 1) BEGIN	// Inversion car ADD_KNOWN_SPELL place le dernier sort connu en tête de liste.
	SET max_here = $max_at_level("%lev%")
	SET bornesup = lev*100 + max_here
	FOR (spellcode=bornesup; spellcode>lev*100; spellcode = spellcode - 1) BEGIN	// id.
		PATCH_IF (FILE_EXISTS_IN_GAME "SPPR%spellcode%.spl") && (!VARIABLE_IS_SET $hidden("sppr%spellcode%")) BEGIN
			INNER_ACTION BEGIN
				COPY_EXISTING - ~sppr%spellcode%.spl~ ~override~
					SPRINT ~spell_to_add~ EVALUATE_BUFFER ~SPPR%spellcode%~
					SET GW_not_allowed=0
					PATCH_MATCH type WITH			// class check
						1 BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "cleric"	RET GW_not_allowed END	END
						2 BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "druid" RET GW_not_allowed END	END
						DEFAULT
					END
					PATCH_IF GW_not_allowed=0 BEGIN	// G/N/E align check
						PATCH_MATCH "%GW_aligt_lib%" WITH
							L_G N_G C_G BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "good"		 RET GW_not_allowed END	END
							L_N N_N C_N BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "GEneutral" RET GW_not_allowed END	END
							L_E N_E C_E BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "evil"		 RET GW_not_allowed END	END
							DEFAULT
						END
					END
					PATCH_IF GW_not_allowed=0 BEGIN  // L/C/N align check
						PATCH_MATCH "%GW_aligt_lib%" WITH
							L_G L_N L_E BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "lawful"	 RET GW_not_allowed END	END
							N_G N_N N_E BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "LCneutral" RET GW_not_allowed END	END
							C_G C_N C_E BEGIN LPF ~GW_EXCLUSION_CLERIC_SPELLS~ STR_VAR GW_cleric_exclusion = "chaotic"	 RET GW_not_allowed END	END
							DEFAULT
						END
					END
					LPF ~GW_READ_SPELL_VARIABLES~ RET spell_type spell_level END
					SPRINT input "ADD_KNOWN_SPELL ~%spell_to_add%~ #%spell_level% ~%spell_type%~"
				BUT_ONLY
			END	// of INNER_ACTION
			PATCH_IF GW_not_allowed = 0 BEGIN
				LPF ~GW_REINCLUDE~ STR_VAR input END
			END
		END	// of PATCH_IF FILE_EXISTS_IN_GAME
	END		// of inner FOR
END			// of outer FOR
...

AJOUT automatique de l'immunité à l'effet de Toile dans les fichiers CRÉATURES et OBJETS

Code : Tout sélectionner

DEFINE_PATCH_FUNCTION ~GW_IMMUN_WEB~ 
//	INT_VAR GW_imm_web = "-1"	// A rajouter pour intégration dans la procédure automatique de création de personnages.
BEGIN

//	PATCH_IF ("%GW_imm_web%" = 1) BEGIN
	READ_ASCII 0 sig (3)
	PATCH_MATCH "%sig%" WITH
		CRE	BEGIN SPRINT GW_Fonction "ADD_CRE_EFFECT"	 SET timing = 9	END
		ITM	BEGIN SPRINT GW_Fonction "ADD_ITEM_EQEFFECT" SET timing = 2	END
		DEFAULT
	END
	PATCH_FOR_EACH res_206 IN	~SPWI215~	// Toile d'araignée - Web (mage)
								~SPIN683~	// Enchevêtrement de toile - Figurine Spider Web
								~SPIN575~	// Toile de vortex - Vortex Web
								~SPIN566~	// Toile de mimique - Mimic Web
								~SPDR201~	// Toile d'araignée - Web (druide)
// VOIR FAIRE les AUTRES SORTS
	BEGIN
		SPRINT resource EVAL "%res_206%"
		SPRINT input_add_effect "LPF ~%GW_Fonction%~ INT_VAR opcode = 206 target = 1 timing parameter1 = 4742 parameter2 = 0 STR_VAR resource END"	// Spell: Protection from Spell [206] = Sort inefficace
		LPF ~GW_REINCLUDE~ STR_VAR input = EVAL "%input_add_effect%" END
	END	// of PATCH_FOR_EACH
	SPRINT input_add_effect169 "LPF ~%GW_Fonction%~ INT_VAR opcode = 169 target = 1 timing parameter1 = 0 parameter2 = 129 END"	// Graphics: Immunity Special Effect Icon [169] = 129  Webbed
	SPRINT input_add_effect101 "LPF ~%GW_Fonction%~ INT_VAR opcode = 101 target = 1 timing parameter1 = 0 parameter2 = 157 END"	// Protection: from Opcode [101] = State: Web Effect [157]
	LPF ~GW_REINCLUDE~ STR_VAR input = EVAL "%input_add_effect169%" END
	LPF ~GW_REINCLUDE~ STR_VAR input = EVAL "%input_add_effect101%" END

//	END	// of PATCH_IF
END
Comme d'hab, tu avais pré-senti la bonne piste. ;)
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 »

J'ai un petit souci avec une procédure : le but du jeu est d'ajouter automatiquement toutes les armes magiques créées par mes nouveaux sorts aux différents sorts de dissipation présents dans le jeu.

Le principe est simple :

1. Je vérifie l'existence des opcodes Cure: Dispellable Effects (Dispel Magic) [58] et Item: Remove Item [112] au sein d'un même fichier.
2. S'ils existent, je clone l'effet 112 autant de fois que nécessaire pour inclure mes armes.

Tout fonctionne parfaitement pour les sorts, mais la fonction est sensée fonctionner aussi pour les objets. J'ai donc lancé un

Code : Tout sélectionner

COPY_EXISTING_REGEXP GLOB	~^.+\.spl$~ ~override~
				~^.+\.itm$~ ~override~

	LPF ~GW_DEF_OFFSETS_FILE~ RET GW_oe GW_oc GW_al GW_fx GW_fc GW_fi GW_min_size END

	PATCH_IF ("%SOURCE_SIZE%" > GW_min_size) BEGIN

		LPF ~GW_SEARCH_OPCODE~ INT_VAR GW_opcode_to_check = 112 RET GW_opcode_checked END	// Item: Remove Item [112]
		SET GW_opcode_112 = GW_opcode_checked

		LPF ~GW_SEARCH_OPCODE~ INT_VAR GW_opcode_to_check = 58 RET GW_opcode_checked END	// Cure: Dispellable Effects (Dispel Magic) [58]
		SET GW_opcode_58 = GW_opcode_checked

		PATCH_IF GW_opcode_112 = 1 AND GW_opcode_58 = 1 BEGIN

			PHP_EACH GW_WeaponsToDispel AS donnees => WeaponToDispel BEGIN 

				LPF ~GW_EFFECT112_TO_CLONE~ STR_VAR GW_resource_to_add = EVAL "%donnees_0%" END

				PATCH_IF debug_variable > 0 BEGIN
					PATCH_PRINT "Sort %SOURCE_RES% modifie pour integrer les nouvelles armes magiques invoquees : %donnees_0%."
				END

			END
		END

	END
BUT_ONLY
Et boum ! ça plante pour AX1H06 donc le premier header ne contient pas d'effet, mais le second oui.
Je n'arrive pas à trouver l'origine du problème.

Si quelqu'un a une soluce, ça m'arrangerait, même si je ne compte utiliser la fonction que pour les sorts. ;)
Fichiers joints
GW_Modif_Dissip.7z
(1.59 Kio) Téléchargé 130 fois
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 »

Problème identifié et réglé. Désolé, c'était de ma faute. :$

Comme j'en avait marre des

Code : Tout sélectionner

READ_LONG  0x64 "abil_off"
READ_SHORT 0x68 "abil_num"
READ_LONG  0x6a "fx_off"
FOR (i = 0 ; i < abil_num ; i = i + 1) BEGIN
	READ_SHORT (abil_off + 0x1e + (0x28 * i)) "abil_fx_num"
	READ_SHORT (abil_off + 0x20 + (0x28 * i)) "abil_fx_idx"
...
J'ai créé la fonction ~GW_DEF_OFFSETS_FILE~ qui fait ce boulot pour chaque fichier et renvoit les valeurs adéquates quel que soit le ype de fichier (itm, spl, cre).
Et ça n'a pas loupé, la fonction ~GW_SEARCH_OPCODE~ est la seule qui a échappé à mes modifs. Il a suffi de remplacer

Code : Tout sélectionner

READ_SHORT (abil_off + 0x1e + [color="#FFFF00"]0x28[/color]*i) "abil_fx_num"
READ_SHORT (abil_off + 0x20 + [color="#FFFF00"]0x28[/color]*i) "abil_fx_idx"
par

Code : Tout sélectionner

READ_SHORT (abil_off + 0x1e + [color="#FFFF00"]GW_al[/color]*i) "abil_fx_num"
READ_SHORT (abil_off + 0x20 + [color="#FFFF00"]GW_al[/color]*i) "abil_fx_idx"
pour que tout rentre dans l'ordre.

Vraiment désolé d'avoir fait perdre du temps aux deux courageux qui se sont penchés sur le problème. ;)
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 »

Freddy Le Retour ! ;)

Et il est plutôt coincé...

J'essaie d'automatiser la création de triggers et de points d'entrée dans une carte.

Le but du jeu, c'est de cloner un trigger et/ou un point d'entrée existant en modifiant certains de ses paramètres.

Pour le point d'entrée, c'est réglé :

Code : Tout sélectionner

COPY_EXISTING	~AR7800.are~ ~override~
		~AR7812.are~ ~override~
	PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE
		READ_LONG  0x68 "GW_ent_off"			// Offset to entrances
		READ_LONG  0x6c "GW_ent_num"			// Count of entrances
		FOR (i = 0 ; i < GW_ent_num ; ++i) BEGIN
			READ_ASCII ("%GW_ent_off%" + (i * 0x68)) "entree"
			PATCH_IF ("%entree%" STRING_COMPARE_CASE "exit7811" = 0) THEN BEGIN
				READ_SHORT ("%GW_ent_off%" + 0x20 + (i * 0x68)) coordX
				READ_SHORT ("%GW_ent_off%" + 0x22 + (i * 0x68)) coordY
				READ_SHORT ("%GW_ent_off%" + 0x24 + (i * 0x68)) orientation
			END
		END
		LPF fj_are_structure	INT_VAR fj_loc_x = EVAL "%coordX%" fj_loc_y = EVAL "%coordY%" fj_orientation = EVAL "%orientation%" 
					STR_VAR fj_structure_type = entrance fj_name = Exit0001 END
	END	// of PATCH_IF (SOURCE_SIZE > 0x11b)
BUT_ONLY
C'est testé et ça fonctionne.

En revanche, je suis bloqué avec le trigger.

J'arrive à lire le trigger que je cherche et à le cloner dans la carte.
Seul problème - et de taille - je ne sais pas comment lui ajouter les différents vertex qui le composent.

En l'état, le tp2 suivant fonctionne parfaitement

Code : Tout sélectionner

COPY_EXISTING	~AR7800.are~ ~override~
		~AR7812.are~ ~override~
	PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN	// Taille minimum d'un fichier .ARE = Vérification de la validité du fichier .ARE
		READ_SHORT 0x5a "GW_region_num"			// Count of regions
		READ_LONG  0x5c "GW_region_off"			// Offset to regions
		READ_LONG  0x7c "GW_vert_off"			// Offset to vertices
		READ_SHORT 0x80 "GW_vert_num"			// Count of vertices

		FOR (i = 0 ; i < GW_region_num ; ++i) BEGIN			// Pour chaque région
			READ_ASCII ("%GW_region_off%" + 0x38 + (0xC4 * i)) "destination" (8) NULL	// 0x0038 	8 (resref) 	Destination area (for travel regions)
			PATCH_IF ("%destination%" STRING_COMPARE_CASE "AR7811" = 0) THEN BEGIN
				PATCH_PRINT "%SOURCE_RES%	-	Destination Area = %destination%	- vertices = offset : %GW_vert_off%	- Nb : %GW_vert_num%"
				READ_SHORT ("%GW_region_off%" + 0x20 + (i * 0xC4)) region_type
				READ_SHORT ("%GW_region_off%" + 0x22 + (i * 0xC4)) box_left		// Minimum bounding box of this point LEFT
				READ_SHORT ("%GW_region_off%" + 0x24 + (i * 0xC4)) box_top		// Minimum bounding box of this point TOP
				READ_SHORT ("%GW_region_off%" + 0x26 + (i * 0xC4)) box_right		// Minimum bounding box of this point RIGHT
				READ_SHORT ("%GW_region_off%" + 0x28 + (i * 0xC4)) box_bottom		// Minimum bounding box of this point BOTTOM
				READ_SHORT ("%GW_region_off%" + 0x2a + (i * 0xC4)) nb_vertices		// Count of vertices composing the perimeter of this region
				READ_LONG  ("%GW_region_off%" + 0x2c + (i * 0xC4)) first_vertex		// Index of first vertex for this region
				READ_LONG  ("%GW_region_off%" + 0x34 + (i * 0xC4)) cursor		// Cursor index (cursors.bam)
				READ_ASCII ("%GW_region_off%" + 0x40 + (i * 0xC4)) entrance		// Entrance name in destination area (for travel regions)
				READ_LONG  ("%GW_region_off%" + 0x60 + (i * 0xC4)) flags
				READ_LONG  ("%GW_region_off%" + 0x64 + (i * 0xC4)) info_text		// Information text (for info points)
				READ_SHORT ("%GW_region_off%" + 0x68 + (i * 0xC4)) trap_det		// Trap detection difficulty (%)
				READ_SHORT ("%GW_region_off%" + 0x6a + (i * 0xC4)) trap_rem		// Trap removal difficulty (%)
				READ_SHORT ("%GW_region_off%" + 0x6c + (i * 0xC4)) trap_set		// Region is trapped (0=No, 1=Yes)
				READ_SHORT ("%GW_region_off%" + 0x6e + (i * 0xC4)) trap_detected	// Trap detection difficulty (%)
				READ_SHORT ("%GW_region_off%" + 0x70 + (i * 0xC4)) launch_X		// Trap launch location X
				READ_SHORT ("%GW_region_off%" + 0x72 + (i * 0xC4)) launch_Y		// Trap launch location Y
				READ_ASCII ("%GW_region_off%" + 0x74 + (i * 0xC4)) key (8) NULL		// Key item
				READ_ASCII ("%GW_region_off%" + 0x7c + (i * 0xC4)) script (8)		// Region script
				READ_SHORT ("%GW_region_off%" + 0x84 + (i * 0xC4)) alt_X		// Alternative use point X coordinate
				READ_SHORT ("%GW_region_off%" + 0x86 + (i * 0xC4)) alt_Y		// Alternative use point Y coordinate

PATCH_PRINT "%SOURCE_RES%	-	region_type = %region_type%	-	box ==> left : %box_left% - top : %box_top% - right : %box_right% - bottom = %box_bottom%	-	nb_vertices = %nb_vertices%	-	first_vertex = %first_vertex%
			cursor = %cursor%	-	entrance = %entrance%	-	info_text = %info_text%	-	trap = det : %trap_det% - rem : %trap_rem% - set : %trap_set% - detected : %trap_detected%
			key = %key%	-	script = %script%	-	Trap launch location X-Y = %launch_X% - %launch_Y%	-	Alternative use point X-Y coordinate = %alt_X% - %alt_Y%	-	flags = %flags%"

				FOR (j = 0 ; j < nb_vertices ; ++j) BEGIN
				SET vertex_offset = ("%GW_vert_off%" +        ((j + first_vertex) * 0x04))
				READ_SHORT ("%GW_vert_off%" +        ((j + first_vertex) * 0x04))	vertex_X
				READ_SHORT ("%GW_vert_off%" + 0x02 + ((j + first_vertex) * 0x04))	vertex_Y

		PATCH_PRINT "vertex n° %j% =	X %vertex_X% - Y %vertex_Y%	==> offset = %vertex_offset%"

				END
			END
		END
	END	// of PATCH_IF (SOURCE_SIZE > 0x11b)
BUT_ONLY
J'arrive parfaitement à lire les infos (que j'ai vérifiées dans le fichier ARE) :

Code : Tout sélectionner

AR7800	-	Destination Area = AR7811	- vertices = offset : 39260	- Nb : 697

AR7800	-	region_type = 2	-	box ==> left : 2893 - top : 472 - right : 2911 - bottom = 546	-	nb_vertices = 8	-	first_vertex = 50
		cursor = 30	-	entrance = Exit7800	-	info_text = 0	-	trap = det : 0 - rem : 0 - set : 0 - detected : 0
		key = 	-	script = 0	-	Trap launch location X-Y = 2772 - 404	-	Alternative use point X-Y coordinate = 0 - 0	-	flags = 0

vertex n° 0 =	X 2893 - Y 522	==> offset = 39460

vertex n° 1 =	X 2911 - Y 546	==> offset = 39464

vertex n° 2 =	X 2911 - Y 500	==> offset = 39468

vertex n° 3 =	X 2911 - Y 494	==> offset = 39472

vertex n° 4 =	X 2907 - Y 485	==> offset = 39476

vertex n° 5 =	X 2902 - Y 477	==> offset = 39480

vertex n° 6 =	X 2898 - Y 472	==> offset = 39484

vertex n° 7 =	X 2893 - Y 474	==> offset = 39488


AR7812	-	Destination Area = AR7811	- vertices = offset : 1024	- Nb : 11

AR7812	-	region_type = 2	-	box ==> left : 239 - top : 185 - right : 340 - bottom = 261	-	nb_vertices = 4	-	first_vertex = 0
		cursor = 28	-	entrance = Exit7812	-	info_text = 0	-	trap = det : 0 - rem : 0 - set : 0 - detected : 0
		key = 	-	script = 0	-	Trap launch location X-Y = 340 - 244	-	Alternative use point X-Y coordinate = 32 - 0	-	flags = 0

vertex n° 0 =	X 340 - Y 225	==> offset = 1024

vertex n° 1 =	X 296 - Y 261	==> offset = 1028

vertex n° 2 =	X 239 - Y 222	==> offset = 1032

vertex n° 3 =	X 292 - Y 185	==> offset = 1036
Je n'ai pas testé, mais normalement il n'y aucune raison pour que la fonction suivante ne fonctionne pas.

Code : Tout sélectionner

LPF ADD_AREA_REGION_TRIGGER
	INT_VAR ab_RT_Type = EVAL "%region_type%" ab_RT_BbLX = EVAL "%box_left%" ab_RT_BbLY = EVAL "%box_top%" ab_RT_BbHX = EVAL "%box_right%" ab_RT_BbHY = EVAL "%box_bottom%"
		ab_RT_VxPr = EVAL "%nb_vertices%" ab_RT_CuId = = EVAL "%cursor%" ab_RT_Fbit = EVAL "%flags"%
		ab_RT_Itxt = EVAL "%info_text%" ab_RT_TDtD = EVAL "%trap_det%" ab_RT_TRmD = EVAL "%trap_rem%" ab_RT_TSet = EVAL "%trap_set%" ab_RT_TDet = EVAL "%trap_detected%"
		ab_RT_LPoX = EVAL "%launch_X%" ab_RT_LPoY = EVAL "%launch_Y%" ab_RT_ALPX = EVAL "%alt_X%" ab_RT_ALPY = EVAL "%alt_Y%"
	STR_VAR ab_RT_Name = Trancoco0001 ab_RT_Dest = Coco0001 ab_RT_EntN = EVAL "%entrance%"  ab_RT_KeyI = EVAL "%key%" ab_RT_Rbcs = EVAL "%script%" END
Mon problème, c'est qu'il faut que je rajoute les différents vertex : ab_RT_Vx_Y_0, ab_RT_Vx_Y_1, ab_RT_Vx_Y_2... jusqu'à ab_RT_Vx_Y_7.
Pour les ajouter à la fonction, je pense qu'un REINCLUDE devrait fonctionner
Mais comment créer ces variables à partir de la première partie de mon code ?
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 »

Bonne nouvelle : j'ai trouvé.

En fait, j'ai utilisé la fonction maison suivante :

Code : Tout sélectionner

DEFINE_PATCH_FUNCTION ~GW_CLONE_TRAVEL_TRIGGER~
	STR_VAR GW_Dest_old = ""	// Carte de destination à trouver
		GW_Dest_new = ""	// Carte de destination du trigger cloné.
		GW_Name_new = ""	// Nom du trigger cloné.
	RET GW_clone_trigger		// Variable définissant si on clone un trigger ==> 0 = Non - 1 = Oui
		GW_add_trigger		// Chaîne de caractères définissant la fonction ADD_AREA_REGION
BEGIN

	SET GW_clone_trigger = 0
	SPRINT GW_ab_RT_Vx ""
	SPRINT GW_add_trigger ""
	READ_SHORT 0x5a "GW_region_num"		// Count of regions
	READ_LONG  0x5c "GW_region_off"		// Offset to regions
	READ_LONG  0x7c "GW_vert_off"		// Offset to vertices
	READ_SHORT 0x80 "GW_vert_num"		// Count of vertices

	WHILE (GW_clone_trigger = 0) BEGIN					// On réduit le temps de traitement de la fonction.

		FOR (i = 0 ; i < GW_region_num ; ++i) BEGIN			// Pour chaque région
			READ_ASCII ("%GW_region_off%" + 0x38 + (0xC4 * i)) "destination" (8) NULL	// Destination area (for travel regions)

			PATCH_IF ("%destination%" STRING_COMPARE_CASE "%GW_Dest_old%" = 0) THEN BEGIN

				READ_SHORT ("%GW_region_off%" + 0x20 + (i * 0xC4)) region_type
				READ_SHORT ("%GW_region_off%" + 0x22 + (i * 0xC4)) box_left		// Minimum bounding box of this point LEFT
				READ_SHORT ("%GW_region_off%" + 0x24 + (i * 0xC4)) box_top		// Minimum bounding box of this point TOP
				READ_SHORT ("%GW_region_off%" + 0x26 + (i * 0xC4)) box_right		// Minimum bounding box of this point RIGHT
				READ_SHORT ("%GW_region_off%" + 0x28 + (i * 0xC4)) box_bottom		// Minimum bounding box of this point BOTTOM
				READ_SHORT ("%GW_region_off%" + 0x2a + (i * 0xC4)) nb_vertices		// Count of vertices composing the perimeter of this region
				READ_LONG  ("%GW_region_off%" + 0x2c + (i * 0xC4)) first_vertex		// Index of first vertex for this region
				READ_LONG  ("%GW_region_off%" + 0x34 + (i * 0xC4)) cursor		// Cursor index (cursors.bam)
				READ_ASCII ("%GW_region_off%" + 0x40 + (i * 0xC4)) entrance		// Entrance name in destination area (for travel regions)
				READ_LONG  ("%GW_region_off%" + 0x60 + (i * 0xC4)) flags
				READ_LONG  ("%GW_region_off%" + 0x64 + (i * 0xC4)) info_text		// Information text (for info points)
				READ_SHORT ("%GW_region_off%" + 0x68 + (i * 0xC4)) trap_det		// Trap detection difficulty (%)
				READ_SHORT ("%GW_region_off%" + 0x6a + (i * 0xC4)) trap_rem		// Trap removal difficulty (%)
				READ_SHORT ("%GW_region_off%" + 0x6c + (i * 0xC4)) trap_set		// Region is trapped (0=No, 1=Yes)
				READ_SHORT ("%GW_region_off%" + 0x6e + (i * 0xC4)) trap_detected	// Trap detection difficulty (%)
				READ_SHORT ("%GW_region_off%" + 0x70 + (i * 0xC4)) launch_X		// Trap launch location X
				READ_SHORT ("%GW_region_off%" + 0x72 + (i * 0xC4)) launch_Y		// Trap launch location Y
				READ_ASCII ("%GW_region_off%" + 0x74 + (i * 0xC4)) key (8) NULL		// Key item
				READ_ASCII ("%GW_region_off%" + 0x7c + (i * 0xC4)) script (8) NULL	// Region script
				READ_SHORT ("%GW_region_off%" + 0x84 + (i * 0xC4)) alt_X		// Alternative use point X coordinate
				READ_SHORT ("%GW_region_off%" + 0x86 + (i * 0xC4)) alt_Y		// Alternative use point Y coordinate

				SPRINT GW_ab_RT_Vx ""							// Initialisation de la liste des coordonnées des vertex

				FOR (j = 0 ; j < nb_vertices ; ++j) BEGIN				// On lit les coordonnées des vertex
					SET vertex_offset = ("%GW_vert_off%" +  ((j + first_vertex) * 0x04))
					READ_SHORT ("%GW_vert_off%" +        ((j + first_vertex) * 0x04))	vertex_X
					READ_SHORT ("%GW_vert_off%" + 0x02 + ((j + first_vertex) * 0x04))	vertex_Y

					SPRINT ab_RT_Vx_X_j EVAL "ab_RT_Vx_X_%j%"
					SPRINT ab_RT_Vx_Y_j EVAL "ab_RT_Vx_Y_%j%"

					SPRINT GW_ab_RT_Vertex EVAL "ab_RT_Vx_X_%j% = %vertex_X% ab_RT_Vx_Y_%j% = %vertex_Y% "

					SPRINT GW_ab_RT_Vx EVAL "%GW_ab_RT_Vx%%GW_ab_RT_Vertex%"	// On établit la liste des vertex

				END	// of Looping through vertex
				SET GW_clone_trigger = 1

			END		// of PATCH_IF ("%destination%" STRING_COMPARE_CASE "%GW_Destination%" = 0)

		END			// of Looping through Regions

	END				// of WHILE (GW_clone_trigger = 0)

	PATCH_IF (GW_clone_trigger = 1) THEN BEGIN		// Si on a trouvé un travel trigger à cloner

		SPRINT GW_add_trigger "LPF ~ADD_AREA_REGION_TRIGGER~ INT_VAR ab_RT_Type = %region_type% ab_RT_BbLX = %box_left% ab_RT_BbLY = %box_top% ab_RT_BbHX = %box_right% ab_RT_BbHY = %box_bottom% ab_RT_VxPr = %nb_vertices% ab_RT_CuId = %cursor% ab_RT_Fbit = %flags% ab_RT_Itxt = %info_text% ab_RT_TDtD = %trap_det% ab_RT_TRmD = %trap_rem% ab_RT_TSet = %trap_set% ab_RT_TDet = %trap_detected% ab_RT_LPoX = %launch_X% ab_RT_LPoY = %launch_Y% ab_RT_ALPX = %alt_X% ab_RT_ALPY = %alt_Y%"

		SPRINT GW_add_trigger EVAL "%GW_add_trigger% %GW_ab_RT_Vx% STR_VAR ab_RT_Name = %GW_Name_new% ab_RT_Dest = %GW_Dest_new% ab_RT_EntN = %entrance%"

		PATCH_IF ("%key%" STRING_COMPARE_CASE "") THEN BEGIN		// Cas particulier de la variable key : pas besoin de l'écrire si elle est n'est pas renseignée
			SPRINT GW_add_trigger EVAL "%GW_add_trigger% ab_RT_KeyI = %key%"
		END

		PATCH_IF("%script%" STRING_COMPARE_CASE "") THEN BEGIN		// Cas particulier de la variable script : pas besoin de l'écrire si elle est n'est pas renseignée
			SPRINT GW_add_trigger EVAL "%GW_add_trigger% ab_RT_Rbcs = %script%"
		END

		SPRINT GW_add_trigger EVAL "%GW_add_trigger% END"

	END				// of PATCH_IF (GW_clone_trigger = 1)

END					// of DEFINE_PATCH_FUNCTION
Ce qui donne dans le tp2 :

Code : Tout sélectionner

COPY_EXISTING	~AR7800.are~ ~override~
		~AR7812.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 = AR7811 GW_Dest_new = COCO0001 GW_Name_new = Trancoco0001 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
La fonction GW_REINCLUDE est une autre fonction maison qui me permet de lancer des fonctions WeiDU en renseignant automatiquement leurs variables à partir du champ GW_Input.

Dans notre cas, ça donne pour AR7800
LPF ~ADD_AREA_REGION_TRIGGER~ INT_VAR ab_RT_Type = 2 ab_RT_BbLX = 2893 ab_RT_BbLY = 472 ab_RT_BbHX = 2911 ab_RT_BbHY = 546 ab_RT_VxPr = 8 ab_RT_CuId = 30 ab_RT_Fbit = 0 ab_RT_Itxt = 0 ab_RT_TDtD = 0 ab_RT_TRmD = 0 ab_RT_TSet = 0 ab_RT_TDet = 0 ab_RT_LPoX = 2772 ab_RT_LPoY = 404 ab_RT_ALPX = 0 ab_RT_ALPY = 0 ab_RT_Vx_X_0 = 2893 ab_RT_Vx_Y_0 = 522 ab_RT_Vx_X_1 = 2911 ab_RT_Vx_Y_1 = 546 ab_RT_Vx_X_2 = 2911 ab_RT_Vx_Y_2 = 500 ab_RT_Vx_X_3 = 2911 ab_RT_Vx_Y_3 = 494 ab_RT_Vx_X_4 = 2907 ab_RT_Vx_Y_4 = 485 ab_RT_Vx_X_5 = 2902 ab_RT_Vx_Y_5 = 477 ab_RT_Vx_X_6 = 2898 ab_RT_Vx_Y_6 = 472 ab_RT_Vx_X_7 = 2893 ab_RT_Vx_Y_7 = 474 STR_VAR ab_RT_Name = Trancoco0001 ab_RT_Dest = COCO0001 ab_RT_EntN = Exit7800 END
et pour AR7812
GW_add_trigger = LPF ~ADD_AREA_REGION_TRIGGER~ INT_VAR ab_RT_Type = 2 ab_RT_BbLX = 239 ab_RT_BbLY = 185 ab_RT_BbHX = 340 ab_RT_BbHY = 261 ab_RT_VxPr = 4 ab_RT_CuId = 28 ab_RT_Fbit = 0 ab_RT_Itxt = 0 ab_RT_TDtD = 0 ab_RT_TRmD = 0 ab_RT_TSet = 0 ab_RT_TDet = 0 ab_RT_LPoX = 340 ab_RT_LPoY = 244 ab_RT_ALPX = 32 ab_RT_ALPY = 0 ab_RT_Vx_X_0 = 340 ab_RT_Vx_Y_0 = 225 ab_RT_Vx_X_1 = 296 ab_RT_Vx_Y_1 = 261 ab_RT_Vx_X_2 = 239 ab_RT_Vx_Y_2 = 222 ab_RT_Vx_X_3 = 292 ab_RT_Vx_Y_3 = 185 STR_VAR ab_RT_Name = Trancoco0001 ab_RT_Dest = COCO0001 ab_RT_EntN = Exit7812 END
Testée dans BGT : ça marche ! ;)

Je n'ai plus besoin de renseigner les variables des triggers pour la fonction ADD_AREA_TRIGGER : ça se fait automatiquement. ^^
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 »

Bravo Freddy pour ta ténacité.

J'avoue que c'est une partie du modding qui ne m'attire pas mais chapeau car ça m'a l'air bien compliqué. Du coup, je te vois un peu comme un extra-terrestre.

Tu n'es pas tout vert j'espère? ;) (Ca y est! Même E.T s'est mis à modder BG *MDR*)


PS:
Je profite de ce message.

J'ai quasi terminé un petit outil tout simple pour se faciliter le passage entre un fichier texte (futur dialogue) et la génération auto .D / .TRA.

Il ne fait pas tout mais ça va me faciliter beaucoup la vie donc j'espère aussi à d'autres. ^^


En tout cas, cool que tu maîtrises ce domaine.

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 »

Le but du jeu, c'est de limiter au maximum les incompatibilités entre mods.

Bon, c'est vrai que c'était pour le tien. Mais le fait de persévérer m'ouvre des perspectives pour des opérations similaires : cloner une ambiance, une animation, etc...
Maintenant que j'ai pigé le truc pour cloner les vertex, ça peut se décliner pour tous les éléments qui les utilisent.

Cerise sur le gâteau, je peux boucler mon tuto sur les portes secrètes. Et le code sera détaillé : donc tu pigeras ce que tu ajouteras dans ton tp2. Enfin, j'espère. ;)


Note : j'ai modifié l'ordre des lignes pour éviter les boucles infinies si on a mal saisi les champs à vérifier.
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 »

Plusieurs messages ont été postés dans La Forge pour déterminer la position des créatures dans une carte.

Comme j'en avais assez de jongler avec IETME, DLTCEP ou NI et WeiDU, je me suis concocté une petite procédure qui le fait toute seule.

Le but du jeu était de supprimer les paladins transformés que l'on doit combattre en arrivant dans les Collines de Lancevent et de ne les faire apparaitre que lorsqu'on a parlé avec Firkraag à la Couronne de Cuivre.

Code : Tout sélectionner

[color="#FFFF00"][B]// Collines de Lancevent : Suppression des paladins pour éviter un téléscopage de quêtes si on n'a pas rencontré Firkraag (Merci à Haplo pour avoir identifié ce risque !).[/B][/color]

LAM ~GW_DEF_AREA_OFFSETS~							// Macro de définition des adresses des éléments structurant une carte.

COPY_EXISTING ~AR1200.are~ ~override/GW1200.are~

	PATCH_IF (SOURCE_SIZE > GW_area_min_size) THEN BEGIN

		LPF ~GW_READ_AREA_STRUCTURE~ RET GW_actor_num GW_actor_off END	// Lecture de la valeur des offsets de travail.

		FOR (i = 0 ; i < GW_actor_num ; ++i) BEGIN
			SET exists = 0
			READ_ASCII ("%GW_actor_off%" + 0x80 + ("%GW_act_size%" * i)) "GW_Cre_file"

			PATCH_MATCH "%GW_Cre_file%" WITH
				PALKNI01 BEGIN	index_to_delete = i
								exists = 1
								READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI01_X
								READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI01_Y
								READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI01_F END
				PALKNI02 BEGIN	index_to_delete = i
								exists = 1
								READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI02_X
								READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI02_Y
								READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI02_F END
				PALKNI03 BEGIN	index_to_delete = i
								exists = 1
								READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI03_X
								READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI03_Y
								READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI03_F END
				PALKNI04 BEGIN	index_to_delete = i
								exists = 1
								READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI04_X
								READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI04_Y
								READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI04_F END
				PALKNI05 BEGIN	index_to_delete = i
								exists = 1
								READ_SHORT ("%GW_actor_off%" + 0x20 + ("%GW_act_size%" * i)) PALKNI05_X
								READ_SHORT ("%GW_actor_off%" + 0x22 + ("%GW_act_size%" * i)) PALKNI05_Y
								READ_SHORT ("%GW_actor_off%" + 0x34 + ("%GW_act_size%" * i)) PALKNI05_F END
				DEFAULT
			END

			PATCH_IF (exists = 1) BEGIN
				LPF fj_are_structure INT_VAR fj_delete_mode = index_to_delete STR_VAR fj_structure_type = actor END
				SET i = 0 - 1				// réinitialisation de l'index car on a supprimé un acteur
				READ_SHORT GW_act_nb "GW_actor_num"	// on relit le nombre total d'acteurs.
			END

		END	// of looping through actors

	END		// of PATCH_IF (SOURCE_SIZE > GW_area_min_size)

BUT_ONLY

[color="#FFFF00"][B]// Collines de Lancevent : Ajout des paladins uniquement quand on a parlé à Firkraag.[/B][/color]

<<<<<<<< .../Diamant_Eternel/inlined/GWCL1200.baf
IF
  Global("GWCLTalkedtoFirkraag","GLOBAL",1)
  Global("GWCL1200PaladinsSpawn","AR1200",0)
THEN
  RESPONSE #100
	SetGlobal("GWACL200PaladinsSpawn","AR1200",1)
	CreateCreature("PALKNI01",[%PALKNI01_X%.%PALKNI01_Y%],%PALKNI01_F%)
	CreateCreature("PALKNI02",[%PALKNI02_X%.%PALKNI02_Y%],%PALKNI02_F%)
	CreateCreature("PALKNI03",[%PALKNI03_X%.%PALKNI03_Y%],%PALKNI03_F%)
	CreateCreature("PALKNI04",[%PALKNI04_X%.%PALKNI04_Y%],%PALKNI04_F%)
	CreateCreature("PALKNI05",[%PALKNI05_X%.%PALKNI05_Y%],%PALKNI05_F%)
	Continue()
END
> >> >> >> >

EXTEND_TOP ~AR1200.bcs~ ~.../Diamant_Eternel/inlined/GWCL1200.baf~ EVALUATE_BUFFER
Et voilou ! Il me suffit de connaître les fichiers .cre des acteurs à supprimer pour les supprimer automatiquement, puis les placer aux bonnes positions et dans les bonnes directions dans la carte avec un script qui s'écrit tout seul. ;)
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 »

Bon, on continue dans les galères.

J'ai défini un ensemble de fonctions-macros qui vérifient l'existence des opcodes Protection: From Projectile [83] et Spell: Bounce Projectile [197] présents dans les fichiers ITM, SPL et CRE. De là est créé un array que j'utilise pour patcher ces fichiers en leur ajoutant les immunités nécessaires à mes nouveaux projectiles non-magiques.

Problème : je dois vérifier l'existence de cet array avant de lancer la fonction. S'il n'existe pas, je le crée, s'il existe je le modifie :

Code : Tout sélectionner

ACTION_IF NOT FILE_EXISTS ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~ BEGIN

	<<<<<<<<.../inlined/blank
ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_files_to_patch_with_ptn_proj BEGIN
// SOURCE	opcode	Ext	Glob	=>	FILE
// -------------------------------------------
> >> >> >> >

	COPY ~.../inlined/blank~ ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~	// Création de la table des missiles disponibles dans le jeu.
END
MAIS : Pour fonctionner correctement, cet array doit se terminer par une ligne "END". Je dois donc supprimer cette ligne avant d'ajouter de nouvelles données.

Qu'à cela ne tienne, j'ai créé deux macros qui le font automatiquement :

Code : Tout sélectionner

ACTION_IF NOT FILE_EXISTS ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~ BEGIN

	<<<<<<<<.../inlined/blank
ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_files_to_patch_with_ptn_proj BEGIN
// SOURCE	opcode	Ext	Glob	=>	FILE
// -------------------------------------------
> >> >> >> >
	COPY ~.../inlined/blank~ ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~	// Création de la table des missiles disponibles dans le jeu.

END ELSE BEGIN

	[color="#FFFF00"]LAM ~GW_REMOVE_END_at_eof~[/color] 

END


COPY_EXISTING_REGEXP GLOB	~^.+\.spl$~ ~override~
				~^.+\.itm$~ ~override~
				~^.+\.cre$~ ~override~

	LPF ~GW_DEF_OFFSETS_FILE~ RET GW_oe GW_oc GW_al GW_fx GW_fc GW_fi GW_min_size END

	PATCH_IF (BUFFER_LENGTH > GW_min_size) BEGIN

		PATCH_FOR_EACH op IN 83 197 BEGIN	// Protection: From Projectile [83] - Spell: Bounce Projectile [197]
			LPF ~GW_SEARCH_OPCODE~ INT_VAR GW_global_effects = 2 GW_opcode_to_check = op STR_VAR GW_write_table = Y RET GW_opcode_checked END
		END

	END

BUT_ONLY

[color="#FFFF00"]LAM ~GW_ADD_END_at_eof~[/color]
Et le résultat fonctionne parfaitement !
Sauf que j'ai dû bidouiller parce que je n'arrive pas à lire "END" à la fin du fichier.

Code : Tout sélectionner

DEFINE_ACTION_MACRO ~[color="#FFFF00"][B]GW_REMOVE_END_at_eof[/B][/color]~ BEGIN

	COPY ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~ ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~

		SET "size" = (SOURCE_SIZE - 1)

		READ_BYTE ("%size%") "eof1"

//		PATCH_PRINT "eof1 = %eof1%---"

		PATCH_IF ((%size% > 0) AND ("%eof1%" = 0x44)) BEGIN // 68 D

			DELETE_BYTES "%size%" 0x01

			SET "size" = ("%size%" - 1)

			READ_BYTE ("%size%") "eof2"

			PATCH_IF ((%size% > 0) AND ("%eof2%" = 0x4E)) BEGIN // 78 N

				DELETE_BYTES "%size%" 0x01

				SET "size" = ("%size%" - 1)

				READ_BYTE ("%size%") "eof3"

				PATCH_IF ((%size% > 0) AND ("%eof3%" = 0x45)) BEGIN // 69 E

					DELETE_BYTES "%size%" 0x01

					SET "size" = ("%size%" - 1)

				END

			END

		END

	BUT_ONLY

END

Code : Tout sélectionner

DEFINE_ACTION_MACRO ~[color="#FFFF00"][B]GW_ADD_END_at_eof[/B][/color]~ BEGIN

	COPY ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~ ~%MOD_FOLDER%/Lists/GWFiles_ptn_missiles_list.tpa~

		offset = BUFFER_LENGTH

		INSERT_BYTES offset 3

		WRITE_ASCII offset ~END~

END
Quelqu'un aurait-il une idée pour simplifier la fonction GW_REMOVE_END_at_eof et me permettre de lire la chaîne de caractères "END" d'une traite ?
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 »

J'ai besoin d'aide pour alléger une procédure qui identifie l'existence de toutes les valeurs race, classe et specific des fichiers .CRE présents dans le jeu.

Les ceusses qui ont suivi mes tribulations savent que j'ai pondu une routine qui fonctionne. Cependant, elle est désespérément longue. Ce qui est sans doute dû au fait qu'elle effectue le même traitement pour tous les fichiers sans se soucier du fait qu'une de ces valeurs a déjà été trouvée.

J'ai testé plusieurs manips pour essayer d'implémenter ce contrôle, mais en vain. Si quelqu'un a une idée, je suis preneur. ;)

En pièces jointes se trouvent les routines WeiDU concernées.
Fichiers joints
GW_ids_fonctions_macros.7z
(4.13 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...
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 »

Bon, j'ai trouvé un embryon de solution qui me permet de gagner du temps selon WeiDU. ^^

Ancien code :

Code : Tout sélectionner

BUT_ONLY                         0.109
Parsing TPA files                0.188
stuff not covered elsewhere      0.188
unmarshal TLK                    0.188
APPEND                           0.266
loading files                    0.734
Parsing TP2 files                0.906
saving files                     3.266
COPY                             3.484
READ_*                           4.141
[color="#FFFF00"]
eval_pe                         19.875
process_patch2                  66.281
TOTAL                           99.813[/color]
Nouveau :

Code : Tout sélectionner

BUT_ONLY                         0.016
Parsing TP2 files                0.016
unmarshal BIFF                   0.031
unmarshal KEY                    0.078
stuff not covered elsewhere      0.109
parsing .tra files               0.125
Parsing TPA files                0.172
APPEND                           0.406
loading files                    0.500
unmarshal TLK                    0.563
READ_*                           1.750
saving files                     2.531
COPY                             2.656

[color="#FFFF00"]eval_pe                          8.891
process_patch2                  26.844
TOTAL                           44.688
[/color]
50 % de réduction, c'est pas trop mal, mais la vérification des valeurs specific prend toujours la plus grande partie des 44 secondes... :shok:

J'en ai aussi profité pour rendre la procédure compatible avec EE : ils ont rajouté des en-têtes aux fichiers IDS qui faisaient planter ma routine. :gign:
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 »

Les contraintes du moteur EE étant ce qu'elles sont, pour ajouter de nouvelles animations, je suis obligé de jongler avec les plages de slots disponibles.

Ce qui donne par exemple pour les animations au format BG1 Simple Monster :

Code : Tout sélectionner

ACTION_FOR_EACH BG1SimpMonst IN ~GUARD1_GLAIVE_D2~ ~GUARD1_SPEAR_D2~ ~GUARD2_GLAIVE_D2~ ~GUARD2_SPEAR_D2~ ~JELLYFISH_BLUE~ ~JELLYFISH_GREEN~ ~JELLYFISH_PURPLE~ ~JELLYFISH_YELLOW~ 
				~JELLYFISH_BLUE_LARGE~ ~JELLYFISH_GREEN_LARGE~ ~JELLYFISH_PURPLE_LARGE~ ~JELLYFISH_YELLOW_LARGE~ 
				~GUARD_ZEALOT_AXE~ ~GUARD_ZEALOT_VOULGE~ ~GUARD_ZEALOT_POLEAXE~ ~GUARD_ZEALOT_SCYTHE~ 
				~SNAKE_SEA~ ~MOSQUITO_GIANT~ ~VULTURE_DEMON~ 
				~MINOTAUR_ARMOR_2_AXES~ ~MINOTAUR_ARMOR_2_FLAILS~ ~MINOTAUR_ARMOR_AXE_AND_FLAIL~ ~MINOTAUR_2_AXES~ ~MINOTAUR_2_FLAILS~ ~MINOTAUR_AXE_AND_FLAIL~ 
BEGIN

  LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7210 slotMax = slotMin + 4 RET slot END

  ACTION_IF (slot < 0) BEGIN
    LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7220 slotMax = slotMin + 4 RET slot END

    ACTION_IF (slot < 0) BEGIN
      LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7230 slotMax = slotMin + 4 RET slot END

      ACTION_IF (slot < 0) BEGIN
        LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7240 slotMax = slotMin + 4 RET slot END

        ACTION_IF (slot < 0) BEGIN
          LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7250 slotMax = slotMin + 4 RET slot END

          ACTION_IF (slot < 0) BEGIN
            LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7260 slotMax = slotMin + 4 RET slot END

            ACTION_IF (slot < 0) BEGIN
              LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7270 slotMax = slotMin + 4 RET slot END

              ACTION_IF (slot < 0) BEGIN
                OUTER_SPRINT GWNewAnimation EVAL "%BG1SimpMonst%"
                WARN @10111	// ~Aucun emplacement libre n'a été trouvé pour l'animation %GWNewAnimation%.~
              END

            END
          END
        END
      END
    END
  END

  ACTION_IF (slot > 0) BEGIN
    LAF ~TO_HEX_NUMBER~ INT_VAR value = slot minDigits = 4 RET hexNumber END
    APPEND ~animate.ids~ ~0x%hexNumber% %BG1SimpMonst%~ UNLESS ~%BG1SimpMonst%~
    OUTER_SPRINT $GWNewIni(~%BG1SimpMonst%~) EVAL "%hexNumber%"
    CLEAR_IDS_MAP
  END
END

ACTION_FOR_EACH BG1SimpMons IN ~CHICKEN_GREY~ ~CHICKEN_BLACK~ ~RAT_WILD~ BEGIN 
  LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin = 0x7d10 slotMax = slotMin + 8 RET slot END
  ACTION_IF (slot < 0) BEGIN 
    OUTER_SPRINT GWNewAnimation EVAL "%BG1SimpMons%"
    WARN @10111	// ~Aucun emplacement libre n'a été trouvé pour l'animation %GWNewAnimation%.~
  END ELSE BEGIN 
    LAF ~TO_HEX_NUMBER~ INT_VAR value = slot minDigits = 4 RET hexNumber END
    APPEND ~animate.ids~ ~0x%hexNumber% %BG1SimpMons%~ UNLESS ~%BG1SimpMons%~
    OUTER_SPRINT $GWNewIni(~%BG1SimpMons%~) EVAL "%hexNumber%"
    CLEAR_IDS_MAP
  END
END
Et ceci pour chaque type de format d'animation.

Du coup, j'ai décidé de construire un array :

Code : Tout sélectionner

ACTION_DEFINE_ASSOCIATIVE_ARRAY GW_slots_BG2EE BEGIN
	BG1ML4,	0x1100,	0xff	=> ML41
	BG2SP4,	0x1300,	0xff	=> SP41
	DRAGON,	0x1210,	8	=> DGN1
	BG1SML,	0x7110,	2	=> 1SML1
	BG1SML,	0x7120,	2	=> 1SML2
	BG1SM,	0x7210,	4	=> 1SM1
	BG1SM,	0x7220,	4	=> 1SM2
	BG1SM,	0x7230,	4	=> 1SM3
	BG1SM,	0x7240,	4	=> 1SM4
	BG1SM,	0x7250,	4	=> 1SM5
	BG1SM,	0x7260,	4	=> 1SM6
	BG1SM,	0x7270,	4	=> 1SM7
	BG1SM,	0x7280,	4	=> 1SM8
	BG1SM,	0x7290,	4	=> 1SM9
	BG1SMA,	0x7d10,	8	=> 1SMA
	BG2SP,	0x7300,	0xff	=> 2SP1
	BG2SP,	0x7f00,	0xff	=> 2SP2
	BG2UN,	0x73f0,	0xff	=> 2UN
	BG1ML,	0xa200,	0xff	=> 1ML
	SPEC,	0xd000,	0xfff	=> SPE
	IWD,	0xe000,	0xfff	=> IWD
END
Et une fonction

Code : Tout sélectionner

DEFINE_ACTION_FUNCTION ~GWTEST~ 
	INT_VAR GWSlotFound = 0
			slotSteps = 1
	STR_VAR GWFormatAnim = ""
	RET		slot
BEGIN

	ACTION_PHP_EACH GW_slots_BG2EE AS slots => GW_slot BEGIN

		ACTION_IF ("%GWFormatAnim%" STR_CMP "") AND ("%slots_0%" STR_EQ "%GWFormatAnim%") BEGIN

			OUTER_SET slotMin = EVAL "%slots_1%"
			OUTER_SET slotMax = slotMin + %slots_2%

			ACTION_IF (GWSlotFound = 0) BEGIN

				PRINT "%GWFormatAnim% = %slots_0% - slotMin = %slotMin% - slotMax = %slotMax%" 

				LAF ~FIND_FREE_ANIM_SLOT~ INT_VAR slotMin slotMax RET slot END

				ACTION_IF ("%slot%" >= 0) BEGIN
					OUTER_SET GWSlotFound = 1
				END
			END
		END
	END	// of ACTION_PHP_EACH
END		// of DEFINE_ACTION_FUNCTION
La fonction marche parfaitement sauf que je voudrais introduire une boucle :

WHILE (GWSlotFound = 0)

Tous mes essais ont planté avec une routine qui ne s'arrête jamais.
De plus, je voudrais introduire un compteur qui s'arrête au dernier slot vérifié par type d'animations (soir nb de tous les slots_2 pr slots_0 : si on n'a pas trouvé de slot libre au dernier slot possible, la valeur slot devient "-1" et envoie un message d'information.

Bref, toute aide est la bienvenue.
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 »

Pour tous ceux qui désirent optimiser leur code, je leur signale que la version beta de WeiDU (242.01) propose deux nouvelles commandes qui permettent de mesurer la durée de compilation de certaines procédures :
ACTION_TIME String BEGIN TP2 Action list END
PATCH_TIME String BEGIN TP2 Action list END


Measure the time taken to execute the TP2 Actions and report it under the label String together with the other time measurements at the end of the mod’s debug file.
Ce qui m'a permis de vérifier que j'avais considérablement simplifié mes ajouts de références aux fichiers IDS :

Code : Tout sélectionner

GW_VERIF_FILE_CLASS_IDS          0.000
GW_VERIF_CLASS_IDS               1.906
GW_ADD_CLASS_IDS_ENTRY           0.031

GW_VERIF_FILE_RACE_IDS           0.016
GW_VERIF_RACE_IDS                1.859
GW_ADD_RACE_IDS_ENTRY            0.016

GW_VERIF_FILE_SPECIFIC_IDS       0.000
GW_VERIF_SPECIFIC_IDS           19.219
GW_ADD_SPECIFIC_IDS_ENTRY        0.344
contre

Code : Tout sélectionner

BUT_ONLY                         0.016
Parsing TP2 files                0.016
unmarshal BIFF                   0.031
unmarshal KEY                    0.078
stuff not covered elsewhere      0.109
parsing .tra files               0.125
Parsing TPA files                0.172
APPEND                           0.406
loading files                    0.500
unmarshal TLK                    0.563
READ_*                           1.750
saving files                     2.531
COPY                             2.656

[color="#FFFF00"]eval_pe                          8.891
process_patch2                  26.844
TOTAL                           44.688[/color]
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 »

Nouveau petit souci avec une expression régulière.

Weidu ne trouve pas la chaîne de caractères

Code : Tout sélectionner

@9001 = ~\([Ss][oó]lo[ %tab%]+\)?[Pp]ermitido[ %tab%]+[Aa][ %tab%]*:~
dans
@112 = ~El origen de esta armadura se ha perdido en el tiempo. Durante años los jefes de las cofradías de ladrones más importantes han luchado por ella, ya que se dice que quien la posea se convertirá en el mejor ladrón de todos los tiempos y podrá ser llamado el maestro de los ladrones.

CARACTERÍSTICAS:

Aptitudes poseidas:
- Bonificador +2 a la Destreza
- +75% a esconderse en las sombras

Clase de armadura: 4 (2 contra daño cortante, 3 contra daño perforante y de proyectil)
Requisitos: Fuerza 6

Peso: 8

Sólo permitido a:
Ladrón (simple, dual, & multi-clase)~
En revanche, ça fonctionne avec

Code : Tout sélectionner

@9001 = ~\([Ss]ólo[ %tab%]+\)?[Pp]ermitido[ %tab%]+[Aa][ %tab%]*:~
Qu'est-ce que j'ai loupé ?
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Luren
Adepte de Grondemarteau
Ver charognard
Messages : 656
Enregistré le : dim. 20 juin 2010, 08:51
Localisation : Sûrement quelque part mais je n'arrive pas à bien voir où.
Statut : Hors ligne
.

Message par Luren »

Juste une hypothèse : ça semble de venir de son analyse des accents, et en l'occurence du o accentué en espagnol, non ?
Weidu ne semble pas traiter le o accentué comme une variante du o, au même titre que les majuscules, et du coup lorsque tu lui proposes, dans la première expression, de choisir entre les deux, comme pour lui ce n'est pas une alternative, il n'en choisit aucun et ne trouve rien.
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

Vérifie si tu es bien en encodage ANSI dans le fichier où tu utilises ce code (je suppose que la description à patcher l'est). Autrement le caractère accentué occupe 2 octets et il se pourrait que l'expression soit analysée comme [oó] (j'ai changé l'encodage avec notepad++ pour illustrer) et ainsi échoue. C'est juste une idée.

Est-ce que le problème se pose avec un jeu EE ? Auquel cas, c'est peut-être l'inverse. Peut-être faudrait-il que tu mettes l'expression régulière dans un fichier tra afin qu'elle soit convertie en UTF-8 pour un jeu EE afin que l'expression puisse correspondre.
:!: 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 !
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 »

Il s'agit d'une chaîne de caractères que j'utilise pour supprimer les restrictions d'objets lors s'une conversion jeu classique --> jeu EE.
La chaîne de caractères se trouve dans un fichier ANSI converti en UTF-8 pour les jeux EE. La fonction l'utilise donc en UTF-8.

Solution provisoire : je m'assure que les descriptions espagnoles n'utilisent pas "Solo permitido" dans les cartouches, mais ça me gave...
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Répondre

Retourner vers « Menace sur le Royaume de Diamant Éternel »

Qui est en ligne

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