Item Prefix/Suffixes | Unique Items | Character Stats | Base Items | Spells and Skills | Monsters | Unique Monsters | Shrines | Quests | Miscellanious

Character Data

Diablo

The starting stats are located at offset 9FE50 (9EDDF) and are 4 bytes long each.

  Warrior Rogue Sorcerer  
Strength...... 1E00 0000 1400 0000 0F00 0000 0000 0000
Magic......... 0A00 0000 0F00 0000 2300 0000 0000 0000
Dexterity..... 1400 0000 1E00 0000 0F00 0000 0000 0000
Vitality...... 1900 0000 1400 0000 1400 0000 0000 0000

The max stats are located at offset 9FEB0 (9EE24) and is 4 bytes long each as well.

  Strength Magic Dexterity Vitality
Warrior...... FA00 0000 3200 0000 3C00 0000 6400 0000
Rogue........ 3700 0000 4600 0000 FA00 0000 5000 0000
Sorcerer..... 2D00 0000 FA00 0000 5500 0000 5000 0000

The blocking bonuses are at offset 9FE90 (9EE0F) and are 4 bytes long each. The values are in percentages. Referring to Diablo, the Warrior has a 30% blocking bonus.

Warrior Rogue Sorcerer  
1E00 0000 1400 0000 0A00 0000 0000 0000

The rest of the bonus and framesets are located at offset 9FDF0 (9ED88) and are one byte each for each bonus. Each character has 11 bonuses and framesets.

Byte Effect
0 Idle frameset in the dungeon
1 Attacking frameset
2 Walking frameset in dungeon
3 Blocking speed
4 Death frameset
5 Frameset for magic casting
6 Hit recovery speed
7 Idle frameset in town
8 Walking frameset in town
9 Single handed weapon attacking speed 
10 Spell casting speed

Note about the speeds.....
To get the actual "time" of the speeds, multiply the value by 0.05. The number you get is the speed in seconds. AND...if you set the framesets lower than the speed value, that action will not work. For example, you set byte 5, which is the frameset for magic casting, to 0A...and the spell casting speed to 09, the character will not perform the spell. Same goes for attacking.

Changing the class' names is a bit difficult for a newbie who isn't too familiar with how a pointer works. So, I'll try to explain it the best I can.
First, the locations of the name pointers (this example is from Diablo 1.07)....

Warrior........4B23
Rogue..........4B2F
Sorcerer......4B3B

For the warrior, we see a pointer value of 2451 4800. To find out where this points to, subtract 402200 from it. Since hexadecimal is written from right to left in a program, we need to reverse the pointer. Just swap the first and last bytes around (drop the 00) and we get 485124. Subtracting 402200 from that, we get 82F24. Now, go to this offset and there is the name! We can NOT change these names here. So, we have to find an enused spot for the new names. We'll use offset 82960. Go there are write in the new names you wish to use, null terminating the name (00 byte value) after each one. Now, for the new warrior name, get the offset of the first letter (which should be 82960) and add 402200 to it to get the new pointer. You'll get 484B60. Now, reverse this and you'll get 604B 4800, which is the new pointer we'll put in at offset 4B23. So do that, save the exe, and start up your mod. The class name will still be the same here (changing it will require editing the diabloui.dll), but in game, the box where it says WARRIOR will now show your new name!

Editing the name in the DLL is really easy, but tricky. After you load the "diabloui.dll" into the hex editor, go to offset 26E68. Here, you'll find the names, along with some additional data that I haven'y ever looked at. As you can see, you'll need to null terminate EACH LETTER. Plus, each name can only be so long, going over and under the given amount of letters will cause the selection screen to look odd. You can insert and delete stuff in this file without getting an invalid Win32 application error. So if you change a class' name to something one letter longer, simply add 2 bytes to the file and it may help some. Other crap is changable here, like the text in the credits screen.

Hellfire

The Hellfire data is exactly the same, with just the additional data for the 3 extra classes. Shouldn't be too hard to figure out. The name pointers are stored elsewhere and are not in the code like they are in Diablo. At offset B47B8 are the 4 byte long name pointers. The first pointer is for the Warrior, then Rogue, Sorcerer, Monk, Bard, and Barbarian. To change the names, do like you would in Diablo with the pointers, but this time, use 401600 to subtract/add with.

The starting stats are located at offset B4740 and are 4 bytes long each.

  Warrior Rogue Sorcerer Monk Bard Barbarian
Strength 1E00 0000 1400 0000 0F00 0000 1900 0000 1400 0000 2800 0000
Magic 0A00 0000 0F00 0000 2300 0000 0F00 0000 1400 0000 0000 0000
Dexterity 1400 0000 1E00 0000 0F00 0000 1900 0000 1900 0000 1400 0000
Vitality 1900 0000 1400 0000 1400 0000 1400 0000 1400 0000 1900 0000

The max stats are located at offset B47D0 and is 4 bytes long each as well.

  Strength Magic Dexterity Vitality
Warrior...... FA00 0000 3200 0000 3C00 0000 6400 0000
Rogue........ 3700 0000 4600 0000 FA00 0000 5000 0000
Sorcerer..... 2D00 0000 FA00 0000 5500 0000 5000 0000
Monk......... 9600 0000 5000 0000 9600 0000 5000 0000
Bard......... 7800 0000 7800 0000 7800 0000 5000 0000
Barbarian.... FF00 0000 0000 0000 3700 0000 9600 0000

The blocking bonuses are at offset B47A0 and are 4 bytes long each.

Warrior Rogue Sorcerer Monk Bard Barbarian
1E00 0000 1400 0000 0A00 0000 1900 0000 1900 0000 1E00 0000

The name locations in the "hellfrui.dll" are at offset 2656C.

 
Click here to go back.