Let's Play Diablo (devilution port)

Hi all!
Many of you might know Diablo 1 back from the days.
A bit-identical source code version is available from github: diasurgical/devilution
A newer versions for modern OS is available here: diasurgical/devilutionX

I added platform support for the clockwork pi GameShell and I kindly ask you to run a beta test before I submit a pull request:

What you need is:

  • A copy of diablo 1 (get your CD from your parents loft or buy a copy from the download platforms) and copy the diabdat.mpq to ‘/home/cpi/.local/share/diasurgical/devilution/’
  • Copy https://raw.githubusercontent.com/danie1kr/devilutionX/gameshell/Packaging/cpi-gamesh/init.py to your GameShell under a new folder in /home/cpi/apps/Menu.
  • Restart the UI which will make the devilutionX available where you have put it to (in case the UI is stuck at “loading”, simply delete the init.py from the sd card).
  • Open devilutionX and hit “X” to download the source and compile it. It should take about five minutes. When everything is in place, hit “A” to play.

You can have a look at the key mapping here: https://github.com/danie1kr/devilutionX/tree/gameshell/Packaging/cpi-gamesh

Please tell me if anything is missing and if the key mapping is useful.
In the mean time, I will tidy up some things and inform you when the pull request has been accepted so we can switch to the diasurgical team.

Happy slaying


Nice, I was lazy to try it and went for the PS1 version of Diablo

I might need to dig up the CD of Diablo I have laying somewhere.

1 Like

I really like your installer script! But it currently seems to have a bug…

  • I grabbed __init__.py with wget and put it in /home/cpi/apps/Menu/21_Indie Games/46_Diablo. It ran fine and looked good as it synced with git and built the sources.
  • I restarted the launcher
  • Instead of seeing something different in the Diablo directory I mentioned above, instead a new directory is at /home/cpi/apps/Menu/21_Indie and it contains a different __init__.py and __init__.pyc

I think the space in the “21_Indie Games” directory is tripping up your script. :frowning:


1 Like

I deleted the __init__.py and __init__.pyc files that were in my 26_Diablo directory and moved the ones that were in the “21_Indie” directory there. Seems like that is working (I haven’t copied the game data file over yet, so that’s fine.)


It didn’t show the icon though. :frowning: I guess it’s still tied to the bogus 21_Indie directory (which I now deleted).

1 Like

Aha! I found the errant icon! It was installed to:

I just moved it to /home/cpi/launcher/skin/default/Menu/GameShell/21_Indie Games/Diablo.png, reloaded the launcher, and now it shows up properly.


So yeah, I’m guessing that space in the name is causing problems in your python script.

Also, I had to create the bold part of the path here, to copy the file in:

Might be a good idea to have it look for the game data file under /home/cpi/games/devilutionsince

And the file I used from CD was all uppercase, and it only works if it’s lowercase.

Sorry to be nitpicky, but hopefully this will prevent confusion for some other folks.



First, thanks for your help on this, your post really helped me. But i really wanna know what the visualizer app you’re using is!

I took the screenshots with two different things.

The ones inside a window are partial screenshots (using Windows 10’s “Snip”) I took using VNC. I installed the VNC server on my Gameshell, similar to these instructions:

Since I don’t want it running all the time, I just put this in a script (all on one line, for the second line starting with sudo) and run it when I want to start the server:

sudo x11vnc -auth guess -display :0 -forever -loop -noxdamage -repeat -rfbauth /home/cpi/.vnc/passwd -rfbport 5900 -shared -noshm

Then on Windows I have UltraVNC (Viewer) installed, and I connect to my Gameshell that way.

For the screenshots at the end, I took them on the Gameshell as described here:

I made a script that is a little fancier though. With mine I can just run it and it will create the next numbered capture file, and than I can go back and rename it later if I want:

path=$(dirname “$name”)
filename=$(basename “$name”)
if [[ -e $path/$filename.$extension ]] ; then
while [[ -e $path/$filename-$i.$extension ]] ; do
let i++
export DISPLAY=:0; xwd -root | convert xwd:- $target

I might have had to do a sudo apt-get install xwd before I could use it in the script though. I don’t remember if it was already installed or not.

1 Like

hi @adcockm,
thanks for the fast reply. I am really sorry for the trouble.
I updated the script with some escaping for the paths. You can find the newest script here: https://raw.githubusercontent.com/danie1kr/devilutionX/gameshell/Packaging/cpi-gamesh/init.py. Please copy it directly as updating will not work properly.
Best Regards


Good news, the pull request has been merged into the main repository.
Grab a new __init.py__ from here, replacing the old one. Then remove the directory from /home/games/devilutionX and restart the UI. Cloning again and updating is necessary for this step. Your save games are savely stored in another location and remain untouched.