07-14-2015, 10:14 AM
From http://diablo1.se/notes/debug.html
Debug Release of Diablo 1
On the 26th of December 1996, version 1.0 of diablo.exe came into existence. Most people are aware of what happened five days later, as Blizzard released Diablo 1 for the world to see. Less known is what happened five days prior. On the 21st of December 1996, another version of diablo.exe came into existence, namely the debug release of Diablo 1, version 1.0.
Matryoshka Dolls
The debug release of diablo.exe is embedded within the MPQ archive d1221a.mpq, which in turn is embedded within the MPQ archive diabdat.mpq. A custom patch header of 36 bytes has been prepended to the diablo.exe executable.
Once the custom patch header has been removed, the debug release of diablo.exe should begin with the "MZ" signature and have the following SHA1 hash sum: accedfe32775d4a1984451309608c2a2d39ad406.
Assert Strings
One benefit with the debug release is that it contains a range of assert strings, which may give crucial insight into the inner workings of the game. For instance, the following assert strings give insight into the names of global variables, structure fields and enumerates.
Furthermore, a set of distinct categories of functionality may be inferred from the source code file names (e.g. "c:\diablo\direct\doom.cpp").
Debug Release of Diablo 1
On the 26th of December 1996, version 1.0 of diablo.exe came into existence. Most people are aware of what happened five days later, as Blizzard released Diablo 1 for the world to see. Less known is what happened five days prior. On the 21st of December 1996, another version of diablo.exe came into existence, namely the debug release of Diablo 1, version 1.0.
Matryoshka Dolls
The debug release of diablo.exe is embedded within the MPQ archive d1221a.mpq, which in turn is embedded within the MPQ archive diabdat.mpq. A custom patch header of 36 bytes has been prepended to the diablo.exe executable.
Once the custom patch header has been removed, the debug release of diablo.exe should begin with the "MZ" signature and have the following SHA1 hash sum: accedfe32775d4a1984451309608c2a2d39ad406.
Assert Strings
One benefit with the debug release is that it contains a range of assert strings, which may give crucial insight into the inner workings of the game. For instance, the following assert strings give insight into the names of global variables, structure fields and enumerates.
- Code:
! Monsters[monst].Anims[anim].CMem
- Code:
(uniquetrans << 8) + 4864 < LIGHTSIZE
- Code:
(DWORD)monster[nummonsters]._mx < MAXDUNX
- Code:
plr[myplr].InvGrid[i] <= plr[myplr]._pNumInv
Furthermore, a set of distinct categories of functionality may be inferred from the source code file names (e.g. "c:\diablo\direct\doom.cpp").
- appfat.cpp: Fatal application errors.
- automap.cpp: Automap.
- capture.cpp: Screenshots.
- codec.cpp: Encoding and decoding of save files.
- control.cpp: UI controls.
- cursor.cpp: Mouse cursor actions.
- dead.cpp: Dead bodies on ground.
- debug.cpp: Debug functions.
- diablo.cpp: Main functions of the game.
- doom.cpp: The doom quest.
- drlg_l1.cpp: Dungeon random layout generation of cathedral.
- drlg_l2.cpp: Dungeon random layout generation of catacombs.
- drlg_l3.cpp: Dungeon random layout generation of caves.
- drlg_l4.cpp: Dungeon random layout generation of hell.
- dthread.cpp: Dungeon thread management.
- dx.cpp: DirectX initialization.
- effects.cpp: Sound effects.
- encrypt.cpp: MPQ encryption.
- engine.cpp: CEL decoding, PRNG, memory management.
- error.cpp: Error dialogues used by shrines.
- gamemenu.cpp: Main game menu (e.g. single player, multi player).
- gendung.cpp: Dungeon generation utility functions.
- gmenu.cpp: In-game menu.
- init.cpp: General initialization.
- interfac.cpp: Cut-scenes and progress bar interface.
- inv.cpp: Inventory.
- items.cpp: Items.
- lighting.cpp: Lighting effects.
- loadsave.cpp: Save file handling.
- minitext.cpp: Medium-sized text rendering.
- missiles.cpp: Projectiles (e.g. arrow, firebolt).
- monster.cpp: Monsters.
- movie.cpp: Movie playing.
- mpqapi.cpp: MPQ functions.
- msg.cpp: Network messages.
- multi.cpp: Multi-player functions.
- nthread.cpp: Network thread management.
- objects.cpp: Objects (e.g. door, chest).
- palette.cpp: Colour palettes.
- pfile.cpp: Player save file.
- player.cpp: Players (i.e. character/hero).
- plrmsg.cpp: Chat messages.
- portal.cpp: Town portals.
- quests.cpp: Quests.
- scrollrt.cpp: Drawing functions.
- setmaps.cpp: Place objects in quest areas.
- sound.cpp: Sounds.
- stores.cpp: Stores (i.e. NPC item sales).
- sync.cpp: Network synchronization.
- themes.cpp: Dungeon themes (e.g. paintings on walls, armor stands).
- tmsg.cpp: Temporary network messages.
- town.cpp: Town rendering.
- towners.cpp: Town NPCs.
- trigs.cpp: Dungeon triggers (e.g. stairways, red portal).
- wave.cpp: WAVE audio file parsing.