Diablo Beta#

While I started my reverse-engineering journey on the Diablo Beta (since it’s so close to Devilution), I actually know very little about it…

Installing#

  1. Install Beta, you can find the ISO at Diablo Evolution: https://diablo-evolution.net/index.php?pageid=files

  2. Install blankname’s Beta Unlock Patch, you get it from the same place: https://diablo-evolution.net/index.php?pageid=files

  3. Download and extract my dungeon unlocker: https://drive.google.com/file/d/11wxrnx9t3IehOtz_RnRa3Kf9Z_iD3tAS/view

  4. Copy diablo.exe from blankname’s Beta Unlock Patch into the dungeon unlocker folder

  5. Run patch.bat. This will pop open a terminal. If there are no errors then close the window. If vcdiff fails to run then please make sure you’re running an up-to-date copy of Windows 10 and try again.

  6. Copy diablomod.exe into your install directory (default is C:\DIABLO)

  7. Run diablomod.exe and enjoy!

This should work with both normal and nocd versions of blankname’s patch.

My patches (Dungeon Unlocker)#

Gitlab: https://gitlab.com/moralbacteria/diablo-beta-patches

This has some binary patches as well as instructions to fix other problems.

My DDRAW.DLL Mods#

GitHub: https://github.com/footballhead/diablo-ddrawwrapper/tree/bnet_beta

Warning

This requires blankname’s fix. Eventually, I intend to incorporate that fix but haven’t gotten there yet. I am missing the necessary mods to STORM.DLL/diabloui.dll/standard.snp.

This includes:

  • Dungeon Unlocker (access levels 6-8)

  • Poison Water fix

  • Catacomb warp fix

  • Fix bone spirit to use Elemental graphics

  • Cheats! Pressing Z gives a bunch of gold, all the spells, and a level up

Spells#

Two things happen when you read a book:

  1. Increase slvl by 1

  2. Set the corresponding entry in the “spell has been learned” bitmap. Counterintuitively, this is a separate field from slvl.

A spell with spell level of 0 is uncastable, along with a spell that hasn’t been learned. These are governed by separate memory addresses and structures:

  • Starting at 0x0062D94A, each spell gets 1 (signed) byte for spell level

  • Starting at 0x0062D990 is a bit map of which spells have been learned (1 is cast-able, 0 is not)

So to learn Firebolt (spell ID=0), you must:

  • Set 0x0062D94A to 1 (or higher, but not too high because it’s signed)

  • Take the value of 0x0062D990, bitwise OR the value with 0x1, then store it at the same address.

Since there are 36 spells, you’ll need to modify 36 bytes starting at 0x0062D94A, and set 5 bytes (~36 bits) to 0xFF.

Tip

They left the MaxSpellsCheat function in so just call that?

Spell IDs#

  1. Firebolt

  2. Healing

  3. Lightning

  4. Flash

  5. Identify

  6. Fire Wall

  7. Town Portal

  8. Stone Curse

  9. Infravision

  10. Phasing

  11. Mana Shield

  12. Fireball

  13. Guardian

  14. Chain Lightning

  15. Flame Wave

  16. Doom Serpents

  17. Blood Ritual

  18. Nova

  19. Invisibility

  20. Inferno

  21. Golem

  22. Blood Boil

  23. Teleport

  24. Apocalypse

  25. Etherealize

  26. Item Repair

  27. Staff Recharge

  28. Trap Disarm

  29. Elemental

  30. Charged Bolt

  31. Holy Bolt

  32. Resurrection

  33. Telekenesis

  34. Heal Other

  35. Blood Star

  36. Bone Spirit

Spells That Don’t Work#

The following spells don’t work for one reason or another:

  • Mana shield - can still be killed even if you have mana

  • Guardian - casting has no effect

  • Doom Serpents - no effect

  • Blood Ritual - no effect

  • Invisibility - no effect

  • Golem - the game crashes if part of Nova touches it

    • NOTE TO SELF: This could be the “no two missiles on one space” crash that you fixed in pre-ablo…

  • Apocalypse - no effect

  • Etherealize - no effect

  • Bone Spirit - crashes on cast

    • NOTE TO SELF: This graphic is missing