Tu commences par citer la description de la structure CRE, avec une valeur de 0x00800000 pour un conjurateur, puis tu évoques le fait que tu cherches la valeur 128. Idem pour le cas de Yoshimo, dont le KIT_BOUNTYHUNTER vaut 0x400B0000, puis tu dis chercher 11.
Il y a une grosse contradiction.
Je ne sais pas ce qui t'a donné ces valeurs que tu considères comme des références absolues. La référence absolue, c'est IESDP, point. Si tu as utilisé Near Infinity, quel fichier KIT.IDS as-tu utilisé ? Si c'est le nouveau, as-tu installé une installation avec BG2 Fixpack, qui patche aussi les fichiers CRE pour qu'ils correspondent bien au fichier KIT.IDS corrigé ?
Hors, justement, que vois-on dans les 4 octets que tu lis :
Conjurateur : 0,0,128,0, soit en hexadécimal 0x00 0x00 0x80 0x00
Chasseur de prime : 0,0,11,64, soit en hexadécimal 0x00 0x00 0x0B 0x40
Illusionniste : 0,0,0,4, soit en hexadécimal 0x00 0x00 0x00 0x04
Assassin (Yaga05 a un kit d'assassin, c'est Yaga01 le berserker): 0,0,10,64, soit en hexadécimal 0x00 0x00 0x0A 0x40
La description du champ "Kit information", en 0x244, indique
NB.: The values of this offset are written in big endian style.
Ah, le "big endian", qui, avec son compère "little endian" a fait perdre tant de cheveux aux programmeurs. Pour plus de précisions, consulte
l'article de Wikipédia qui donne aussi des exemples.
Concrètement, qu'est-ce que ça signifie ? Sur un PC (voir la partie Dans les ordinateurs / Little Endian de l'article), le premier octet qu'on lit en mémoire est l'octet de poids faible, et ainsi de suite jusqu'à l'octet de poids fort.
Hors, dans la représentation hexadécimale d'un nombre, on place toujours à gauche l'octet de poids fort et à droite l'octet de poids faible.
A noter que la remarque d'IESDP sur le Big Endian est à mon sens complètement erronée, même si elle m'a servi d'introduction. En effet quand on considère le champ Kit information en little endian, comme les autres champs, on arrive bien au résultat qui suit.
Ce qui nous donne :
Conjurateur : 0x00 0x00 0x80 0x00 -> 0x00800000
Chasseur de prime : 0x00 0x00 0x0B 0x40 -> 0x400B0000
Illusionniste : 0x00 0x00 0x00 0x04 -> 0x04000000
Assassin : 0x00 0x00 0x0A 0x40 -> 0x400A0000
Et que constates-tu ? Voilà justement les valeurs qu'indique IESDP.
D'ailleurs, dans ton premier des deux messages, tu disais avoir lu 8388608 pour conjurateur. C'était justement 0x00800000, donc la valeur indiquée par IESDP. On dirait que tu es fâché avec l'hexadécimal.
Concernant les "vrais" kits, le code est toujours en 0x40NN0000. Avec le patch TobEx, une limite a sauté et on peut dépasser 255 kits, donc ce serait plutôt 0x4NNN0000.
Comme je l'ai déjà indiqué dans le long sujet de discussion, on peut apparemment (vérifié avec Chloé et TDD) passer du code du kit au numéro de ligne dans le fichier KITLIST.2DA (pour accéder notamment au "UNUSABLE" pour les objets) en faisant l'opération (code du kit - 0x4000), à condition de ne conserver comme code du kit que la partie 0x4NNN (faire un décalage de 16 bits à droite pour l'obtenir).
Exemple : pour Chasseur de prime, 0x400B - 0x4000 = 0x0B, c'est à dire le fameux 11 en décimal, qui le numéro de ligne du kit dans KITLIST.2DA. Et pour le kit de Chloé, quand j'avais fait le test avec une installation ou c'était le seul kit de mod, j'avais obtenu 0x4020 - 0x4000 = 0x20, soit 32 en décimal. Et cela correspond bien au premier numéro de ligne disponible après celles du jeu de base.
Avant de faire cette opération, il faut t'assurer que tu as bien à faire à un vrai kit. Et pour ça, il faut commencer par vérifier s'il ne s'agit pas d'un mage (donc champ Class = mage) spécialisé (les 8 spécialités listées, plus 0x00008000 pour le mage entropique, qui est bizarrement absent d'IESDP) ou d'un barbare (donc champ Class = guerrier) avec "kit informatiion" égal à 0x00004000, et enfin que ce n'est pas un "true class" (0x40000000) ou "not kit" (0x00000000), donc un guerrier/voleur/etc. sans kit ni un mage sans spécialité.
Bonne continuation.