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.
|