DESCRIPTION DU FICHIER   (Partie 2, où nous rencontrons des données volatiles)




APERCU RAPIDE

Toutes les données de statut sont à considérer comme optionnelles. Le fait que l'une soit présente ou non, dépend d'un bit des champs de bits de statut. En conséquence, il est impossible de donner des offsets explicites où les données pourraient êtres trouvées.

Par exemple, quand vous montez de niveau, vous avez 5 points de statut et 1 point d'aptitude à répartir. Mais la plupart du temps vous n'avez pas de points de statut : la donnée points de statut ne sera pas égale à zéro : le bit correspondant sera oté, et la donnée ne sera pas présente du tout !

Un autre exemple facile : si tout votre or est dans votre bourse, alors la donnée Argent dans la bourse sera présente, mais la donnée Argent (sur soi) sera absente. Encore un dernier exemple (pas évident celui-là) : si le joueur est en mode hardcore ET est mort, alors la donnée vie actuelle sera absente.




ASSIGNATION DES BITS

Pour le moment, seuls les 2 premiers champs de bits sont utilisés. Ils fournissent un total de 16 bits, et chacun d'entre eux correspond à une donnée. C'est la raison pour laquelle j'appelle l'octet qui suit les 2 premiers champs de bits, le champ de bits réservé. Il est toujours égal à zéro, comme si Blizzard avait projeté de l'utiliser plus tard.

Les champs de bits sont nommés d'après les données qui ont le plus de chance d'être absentes.

Le premier d'entre eux (à l'offset 232h) est le Statut / aptitudes. Les données correspondantes sont :
 
Bit 0 : Force
Bit 1 : Energie
Bit 2 : Dextérité
Bit 3 : Vitalité
Bit 4 : Points de statut à répartir
Bit 5 : Points d'aptitude à répartir
Bit 6 : Vie actuelle
Bit 7 : Vie maximum


Le deuxième champ de bits (à l'offset 233h) est le Expérience / argent / bourse. Les données correspondantes sont :
 
Bit 0 : Mana actuel
Bit 1 : Mana maximum
Bit 2 : Endurance actuelle
Bit 3 : Endurance maximum
Bit 4 : Véritable niveau du joueur
Bit 5 : Expérience
Bit 6 : Argent
Bit 7 : Argent dans la bourse

Le bit 0 est le bit de poid faible et le bit 7 le bit de poid fort, évidemment.




LIRE LES DONNEES

Tout serait parfait si les données avaient la même taille. Et bien, ce n'est pas le cas. Certaines font 4 octets, d'autres 2 octets, et il existe même 2 données qui ne font qu'un seul octet chacune. Regardons ça de plus près.

En général, toutes les données ont une taille de 4 octets. Comme toujours, elles sont dans l'ordre d'Intel. En commençant à partir de l'offfset 235h, voici les données que l'on peut trouver, mais SEULEMENT si leurs bits respectifs sont posés !

Maintenant, il a un piège. Il y a un octet que l'on doit sauter. La plupart du temps il est égal à zéro, mais pas toujours. Je n'ai pas encore compris sa signification.
  • Octet piégé inconnu

On peut maintenant continuer la lecture normale des données, à une exeption près : ces données ont une taille de 2 octets. Juste après on trouve 2 autres octets avec parfois zéro, parfois de drôles de valeurs. Encore une fois, je n'ai pas compris leurs significations. On dirait qu'elles apparaissent quand certaines données actuelles sont supérieures à leur maximum. Par exemple quand la Vie actuelle est supérieure à la Vie maximum (à cause d'objets magiques).

  • Vie actuelle
  • ?
  • Vie maximum
  • ?
  • Mana actuel
  • ?
  • Mana maximum
  • ?
  • Endurance actuelle
  • ?
Un autre piège. L'endurance maximum à une taille de 2 octets (c'est bon), cependant elle n'est pas suivie de 2 octets, mais d' 1 seul octet. Se pourrait-il que l'octet piégé précédent (entre les données Points d'aptitude et Vie actuelle) soit, en fait, une partie de la donnée inconnue qui suit la donnée Endurance maximum ? Je ne sais pas.
  • Endurance maximum
  • ?

Après ça, toutes les données ont de nouveau une taille de 4 octets.

  • Véritable niveau du joueur (1)
  • Expérience
  • Argent (sur soi)
  • Argent dans la bourse
(1) Note à propos du Véritable niveau du joueur : puisque la copie de cette valeur à l'offset 024h ne fait que 2 octets, il n'est pas convenable de mettre une valeur plus grande que 65535 (FFFFh). Une valeur plus grande que 99 (63h) n'est de toutes façons pas convenable du tout :)



Après toutes ces données volatiles, nous trouvons normalement l'entête d'aptitude, qui est égale à 6669h. Dans le cas contraire, ceci peut être la cause du champ de bits Réservé. S'il n'est pas égal à zéro, c'est un problème de version. Mais s'il est égal à zéro, comment savoir ?


Tout ceci est expliqué dans la
Partie 3 : Niveaux d'aptitude

Retour à la Partie 1 : Modifications faciles
Aller à la Partie 4 : Objets
Aller à la Partie 5 : Cadavre & Mercenaire
Retour à la Page de menu