FILE DESCRIPTION   (Part 2, where we meet volatile datas)




QUICK OVERVIEW

All the status datas are somewhat optional. Wheter one is present or not, depends of one bit of the status flags. Because of that, it's impossible to give explicit offsets where the datas can be find.

For instance, when you go up a level, you have 5 statut points and 1 skill point to dispatch. But most of the time you have no statut points : the statut points data will not be equal to zero : the corresponding bit will be cleared, and the data will not be present at all !

Another easy example : if all your gold is in your stash, then the stash data will be present, but the gold data will be absent. Here is a last (but tricky) example : if the player is in hardcore mode AND is dead, then the current life data will be absent.




BITS DESCRIPTION

At the moment, only the first 2 flags are used. It's provide a total of 16 bits, and all of them corresponds to a data. That's the reason why I called the byte which follow the fisrt 2 flags, the reserved flag. It's always set to zero, like if Blizzard projected to use it as another flag.

The flags are named after the datas that are most likely to be absent.

The 1st flag (at the offset 232h) is the Stat / Skill flag. The corresponding datas are :
 
Bit 0 : Strength
Bit 1 : Energy
Bit 2 : Dexterity
Bit 3 : Vitality
Bit 4 : Stat points
Bit 5 : Skill points
Bit 6 : Life current
Bit 7 : Life max


The 2nd flag (at the offset 233h) is the Xp / Gold / Stash flag. The corresponding datas are :
 
Bit 0 : Mana current
Bit 1 : Mana max
Bit 2 : Stamina current
Bit 3 : Stamina max
Bit 4 : True player level
Bit 5 : Experience
Bit 6 : Gold
Bit 7 : Gold in stash

The bit 0 is the lowest bit and the bit 7 is the highest bit, of course.




READING DATAS

It will be perfect if all the datas will be the same size. Well, it isn't. Some must be read with 4 bytes, some with 2 bytes, and it exists 2 tricky datas of 1 byte each. Let's check it.

In general, all the datas are 4 bytes size. Like always, they are in the Intel's order. Starting with offset 235h, here is the datas that you can find, but ONLY if their flag's bit are set !

Now here comes a trick. There is a byte that we must skip. Most of the time it's equal to zero, but not always. I don't figure out what it means.
  • Unknown tricky byte

Now we can continue with the normal reading of datas, with an exeption : this datas are 2 bytes. Just after are another 2 bytes with sometimes zero, sometimes funny values. Again, I don't figure out what they means. It seems they appears when some current datas are greater than the max data. For instance when Life current is greater than Life max (due to magical items).

  • Life current
  • ?
  • Life max
  • ?
  • Mana current
  • ?
  • Mana max
  • ?
  • Stamina current
  • ?
Another trick. The Stamina max data have a size of 2 bytes (it's OK), but it is not followed by 2 bytes, only by 1 byte. Could it be that the previous tricky byte (between Skill points and Life current datas) is, in fact, one part of the unknown data which follow the Stamina max data ? I don't known.
  • Stamina max
  • ?

After that, all the datas are again 4 bytes size.

  • True player level (1)
  • Experience
  • Gold
  • Gold in stash
(1) Note about the True player level : since the copy of this value at the offset 024h is only 2 bytes size, it's not wise to put a value greater than 65535 (FFFFh). A value greater than 99 (63h) is not wise at all btw :)



After all these volatile datas, we normaly find the Skill header, which is equal to 6669h. If not, well, it may be the cause of the reserved flag. If it is not equal to zero, then it is a version problem. But if it's zero, we don't know.


All of this is explained on
Part 3 : Skill Levels.

Back to Part 1 : Easy Hacking
Go to Part 4 : Items
Go to Part 5 : Corpse & Mercenary
Back to Menu page