J'ai fini par trouver !
Je vous passe les détails - d'ailleurs mes compétences info font que je n'ai certainement pas tout compris, en tout cas pas au point de faire un exposé clair -, mais si ça vous intéresse, faites une recherche "long big ended" ou "slow big ended".
Ceci dit, j'ai compris le principe : il s'agit d'intervertir les valeurs.
En l’occurrence, pour le fichier kit.ids, les valeurs du type 0xnnnn doivent être considérées comme si elles étaient 0x0000nnnn (0x4000 ==> 0x00004000)
Pour celles qui sont de type 0xnnnnnnnn, on ne change rien.
Puis il suffit d'intervertir les blocs de 4 valeurs dans chaque variable.
Ce qui donne :
Code : Tout sélectionner
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~TRUECLASS~) = 0x40000000 <== CODE ORIGINAL du FICHIER ids = 0x4000.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~BERSERKER~) = 0x40010000 <== CODE ORIGINAL du FICHIER ids = 0x4001.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~WIZARDSLAYER~) = 0x40020000 <== CODE ORIGINAL du FICHIER ids = 0x4002.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~KENSAI~) = 0x40030000 <== CODE ORIGINAL du FICHIER ids = 0x4003.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~CAVALIER~) = 0x40040000 <== CODE ORIGINAL du FICHIER ids = 0x4004.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~INQUISITOR~) = 0x40050000 <== CODE ORIGINAL du FICHIER ids = 0x4005.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~UNDEADHUNTER~) = 0x40060000 <== CODE ORIGINAL du FICHIER ids = 0x4006.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_ABJURER~) = 0x00400000 <== CODE ORIGINAL du FICHIER ids = 0x0040.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_CONJURER~) = 0x00800000 <== CODE ORIGINAL du FICHIER ids = 0x0080.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_DIVINER~) = 0x01000000 <== CODE ORIGINAL du FICHIER ids = 0x0100.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_ENCHANTER~) = 0x02000000 <== CODE ORIGINAL du FICHIER ids = 0x0200.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_ILLUSIONIST~) = 0x04000000 <== CODE ORIGINAL du FICHIER ids = 0x0400.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_INVOKER~) = 0x08000000 <== CODE ORIGINAL du FICHIER ids = 0x0800.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_NECROMANCER~) = 0x10000000 <== CODE ORIGINAL du FICHIER ids = 0x1000.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_TRANSMUTER~) = 0x20000000 <== CODE ORIGINAL du FICHIER ids = 0x2000.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~MAGESCHOOL_GENERALIST~) = 0x40000000 <== CODE ORIGINAL du FICHIER ids = 0x4000.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~FERALAN~) = 0x40070000 <== CODE ORIGINAL du FICHIER ids = 0x4007.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~STALKER~) = 0x40080000 <== CODE ORIGINAL du FICHIER ids = 0x4008.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~BEASTMASTER~) = 0x40090000 <== CODE ORIGINAL du FICHIER ids = 0x4009.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~ASSASIN~) = 0x400A0000 <== CODE ORIGINAL du FICHIER ids = 0x400A.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~BOUNTYHUNTER~) = 0x400B0000 <== CODE ORIGINAL du FICHIER ids = 0x400B.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~SWASHBUCKLER~) = 0x400C0000 <== CODE ORIGINAL du FICHIER ids = 0x400C.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~BLADE~) = 0x400D0000 <== CODE ORIGINAL du FICHIER ids = 0x400D.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~JESTER~) = 0x400E0000 <== CODE ORIGINAL du FICHIER ids = 0x400E.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~SKALD~) = 0x400F0000 <== CODE ORIGINAL du FICHIER ids = 0x400F.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~GODTALOS~) = 0x40130000 <== CODE ORIGINAL du FICHIER ids = 0x4013.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~GODHELM~) = 0x40140000 <== CODE ORIGINAL du FICHIER ids = 0x4014.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~GODLATHANDER~) = 0x40150000 <== CODE ORIGINAL du FICHIER ids = 0x4015.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~TOTEMIC~) = 0x40100000 <== CODE ORIGINAL du FICHIER ids = 0x4010.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~SHAPESHIFTER~) = 0x40110000 <== CODE ORIGINAL du FICHIER ids = 0x4011.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~BEASTFRIEND~) = 0x40120000 <== CODE ORIGINAL du FICHIER ids = 0x4012.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~BARBARIAN~) = 0x00004000 <== CODE ORIGINAL du FICHIER ids = 0x40000000.
CONTROLE KIT TROUVE dans KIT.ids et MODIFIE : $GW_ids(~kit~ ~WILDMAGE~) = 0x00008000 <== CODE ORIGINAL du FICHIER ids = 0x80000000.
A partir de ces nouvelles valeurs, le WRITE_LONG attribue bien le bon code au champ 0x244 (kit).
Voici le code de la macro :
Code : Tout sélectionner
COPY_EXISTING - ~kit.ids~ ~override~
COUNT_2DA_COLS nb_cols // On compte le nombre de colonnes du fichier
COUNT_2DA_ROWS %nb_cols% nb_lignes // On compte le nombre de lignes du fichier
FOR (ligne = 0; ligne < %nb_lignes%; ligne = ligne + 1) BEGIN // Pour chaque ligne
READ_2DA_ENTRY %ligne% 0 %nb_cols% code_ids // On lit la valeur du code du kit (dans la première colonne, considérée comme 0).
READ_2DA_ENTRY %ligne% 1 %nb_cols% kit // On lit la valeur du nom du kit (dans la seconde colonne, considérée comme 1).
PATCH_IF (STRING_LENGTH "%code_ids%" = 6) THEN BEGIN // [color="#FFFF00"]codes de type 0xnnnn[/color], donc longueur de la chaîne = 6
SPRINT code_kit "%code_ids%0000" // [color="#FFFF00"]équivaut à intervertir les blocs[/color] : autant se faciliter la vie en rajoutant 4 zéro à la fin de la chaîne.
END ELSE BEGIN
INNER_PATCH ~%code_ids%~ BEGIN READ_ASCII 2 first (4) END // [color="#FFFF00"]Lecture de la première chaîne de 4 caractères[/color] (après "0x").
INNER_PATCH ~%code_ids%~ BEGIN READ_ASCII 6 second (4) END // [color="#FFFF00"]Lecture de la seconde chaîne de 4 caractères.[/color]
SPRINT code_kit "0x%second%%first%" // [color="#FFFF00"]Inversion des deux chaînes de caractères sans oublier de rajouter "0x" devant.[/color]
END
SPRINT $GW_ids(~kit~ ~%kit%~) ~%code_kit%~ // [color="#FFFF00"]Définition de l'array qui sera utilisé pour attribuer la valeur idoine au kit choisi.[/color]
END
BUT_ONLY
Reste un petit détail : manifestement le moteur ne fait pas de différence entre TRUECLASS et MAGESCHOOL_GENERALIST. Mais ça n'a pas l'air de le déranger, notamment dans les fichiers vanilla.