Preservation project for an all time classic, Diablo 1.
Note, djavul requires an original copy of diablo.exe
and diabdat.mpq
. None of the Diablo 1 game assets are provided by this project.
Project aim and objectives
The aim of this project is to provide an open source reference re-implementation of the Diablo 1 game engine.
To achieve this aim, the following objectives have been identified.
- Develop an understanding of the inner workings of the Diablo 1 game engine (subproject notes).
- Convert the original game assets to file formats with open specifications (subproject formats).
- Provide a framework of extensive test cases for comparing the re-implementation against the original Diablo 1 game engine.
- Split the engine into self-contained modules that may be validated and verified independently.
- Implement a set of tools around these modules which through interaction provide the functionality of the original Diablo 1 game engine.
- Validate that - given a deterministic seed - the re-implementation achieve pixel perfection, by mirroring the mouse and keyboard input and comparing the graphic and audio output against the original Diablo 1 game.
For an overview of the key idea behind this project, refer to the design documentation.
For installation and run instructions, refer to the respective documentation:
- Interact with the Diablo 1 game engine from Python script.
- Running the Djavul frontend (
djavul-frontend.exe
) on a Windows 7 host system (left) and the Djavul backend (djavul.exe
) on the same system using a modified version of DiabloPatch (right).
- Running the Djavul frontend (
djavul-frontend
) on a Linux host system (left) and the Djavul backend (djavul.exe
) on a Windows XP VirtualBox guest (right).
- Decode legacy Diablo 1 save files.
- Play sounds using Beep.
- Forward mouse and keyboard input from Djavul frontend to Diablo 1 game engine (also referred to as the Djavul backend).
- Render control panel.
- Correct rendering of Tristram.
- Mirror output using Pixel.
- Dungeon generation of Cathedral.