D2Decomp: Diablo II Rebuilt as a Native Engine
By Indie Kings | November 3, 2026
Updated November 3, 2026: D2Decomp is a cross-platform reimplementation of the Diablo II: Lord of Destruction engine, using version 1.14d as its reference. All five acts play through, Nightmare and Hell are populated, and the project can join a game hosted by the original over TCP/IP. Version 0.8.3 arrived on November 2 with another batch of behaviour fixes.
Image: D2Decomp running in widescreen in the Rogue Encampment. Source: psi29a/d2decomped.
A native Diablo II engine, not an emulator
D2Decomp is a reimplementation of the Diablo II: Lord of Destruction game engine, not a wrapper around the original executable and not an emulator. It reads the game data you own and runs the game natively on Windows, macOS and Linux. The reference is version 1.14d, and the long-term goal is a drop-in replacement with optional features beyond the original game.
The motivation is personal and specific. The author wanted to play Diablo II with his daughter, natively on Linux, without Wine or an emulation layer. That goal shaped the project: a game engine that runs on the machines people actually use, reads the data they already own, and lets them play together. The repository is GPL-3.0, written in C++, and about 61 MB.
GitHub lists 34 stars, 9 forks and 18 open issues. The project was created on September 26, 2026, and has shipped a rapid series of releases: 0.7.1 on October 28, 0.8.0 on October 31, 0.8.1 and 0.8.2 on November 2, and 0.8.3 later the same day. Download counts are small, from 38 on 0.7.1 to 12 on 0.8.3 at the time of writing, which fits a specialist project at an early stage.
The engineering method is the interesting part. The team uses Ghidra to understand the original game's code and Unicorn to run original functions so their behaviour can be compared with the reimplementation. That is a more rigorous approach than guessing from observation: a function can be executed in isolation, its output recorded, and the new code checked against it. The README says every completed act's maps, monster and object placement, drops and monster AI are checked against the original.
The legal position is set out in a separate document. D2Decomp does not bundle Blizzard's game files or assets. It reads data from your installation or media, and the project says it is not affiliated with or endorsed by Blizzard. The legal notes explain how EU law allows reverse engineering for interoperability and how the project stays within it. That does not make the project official, but it does explain the boundary it is trying to respect.
All five acts, with the original as the reference
The scope is the full campaign. Character setup, the Rogue Encampment, Lut Gholein, the Kurast Docks, the Pandemonium Fortress and Harrogath are all in. Every area from the Blood Moor to the Worldstone Chamber is playable, and all twenty-seven quests run up to Baal's death. A classic game ends at Diablo; in Lord of Destruction, Tyrael's portal leads on to Act V. Nightmare and Hell populate their levels as the original does.
The act breakdown is specific. Act I has 39 levels and 6 quests, Act II has 35 levels and 6 quests, Act III has 28 levels and 6 quests, Act IV has 6 levels and 3 quests, and Act V has 28 levels and 6 quests. Single player supports softcore and hardcore. Gamepad play works with Xbox, PlayStation, Switch and Steam Deck controllers and is remappable. The one caveat in Act V is that the uber levels' monster groups are not yet exact.
| Act | Levels | Quests | Status |
|---|---|---|---|
| Act I | 39 | 6 | Complete |
| Act II | 35 | 6 | Complete |
| Act III | 28 | 6 | Complete |
| Act IV | 6 | 3 | Complete |
| Act V | 28 | 6 | Complete, uber monster groups not exact |
| Nightmare and Hell | All acts | All quests | Populated as the original |
Sound is the least complete major system. The project says 3,416 of 3,520 base-install sounds are covered, leaving 104, and that this matches 3,416 of the 3,423 sounds the original plays as traced. That is close enough that most players will not notice a gap until they hit a specific unit or event. The README does not hide the remaining work.
Multiplayer is split into two halves. Joining a game hosted by the original game over TCP/IP works, with Acts I through IV checked live and Act V not yet checked. Hosting a game with d2d, running a dedicated server, and playing with a d2d host are not started. So the project can join the original, but it cannot yet replace the original as the host. That is an important distinction for anyone planning a co-op session.
Widescreen, gamepads and joining the original
Widescreen is opt-in. The in-game view widens to the window's aspect up to 1,400 pixels wide and 600 high, revealing more of the world horizontally while keeping the familiar 800 by 600 HUD and panel layout in the centre. Menus and cinematics stay 800 by 600. The launcher has a Widescreen checkbox, and the widescreen flag or widescreen = 1 in d2d.cfg turns it on. A view width flag pins the width for scripts.
Gamepad support is broader than the original. Xbox, PlayStation, Switch and Steam Deck controllers work and can be remapped. The project also adds optional comforts, each switchable off with a toggle: gold is picked up by walking over it, roofs turn see-through around your character, lights reach the screen's edges at any resolution, the world's sounds pause with the game menu, and Configure Controls can put Attack and the right-hand skill on a mouse's extra buttons. These are the kind of changes that make a 2000-era game feel less like a 2000-era game.
Joining the original is straightforward. From the menus, choose Other Multiplayer, TCP/IP Game, Join Game, type the host's address, and pick a character. The command line equivalent is running d2d with the join flag and the host address for a host on your LAN. The game remembers the address as last_tcp_ip in d2d.cfg. The README is explicit that this is for a LAN and that hosting with d2d is not implemented yet.
The data path is configurable. d2d looks for the data flag or $D2_MPQ_DIR first, then a d2data.mpq beside the binary or in the working directory, then data = in d2d.cfg. If the first hit is wrong, it stops rather than trying the next one. The launcher finds an installed Diablo II and writes the data and patch paths into the config. Your install is read in place and never changed.
The config lives in ~/Library/Preferences/d2d on macOS, ~/.config/d2d on Linux, and Documents\My Games\d2d on Windows. Alt and Enter toggles between a window and borderless fullscreen, and fullscreen = 1 starts that way. The launcher also has Fullscreen, Widescreen and Skip intro movies checkboxes.
Steam Deck support is experimental, with no Flathub listing yet. In Desktop Mode, download the x86_64 Flatpak from the latest release, install it with Discover or a user install from the bundle, exit Steam, start D2Decomp from the app menu, and press Add to Steam. That adds the game with artwork and makes it launch from Gaming Mode. Updates reinstall from the new bundle, and the Steam entry stays as it is.
0.8.3 and what is still missing
Version 0.8.3 is a dense list of behaviour fixes, which is what the project needs at this stage. A monster now starts at 75 percent velocity instead of 100. Nightmare and Hell monsters start at the area's MonLvl rather than their own Level values. Item prices, gamble stock, pickup-equip behaviour and several function spots were corrected. A new game now drops the last game's gear and BO maxima shares, which fixes a state leak between sessions.
Combat details got attention too. Blizzard and Eruption shards fall in the correct range relative to the centre. Frozen Armor freezes by the freeze rule, and a frozen monster thinks again at the freeze end plus the aidel. Curses and auras count a fifth on a monster whose base resistance is 100 or more. Crushing blow, Rite portals, shrines, stacks and a batch of Coverity warnings were also addressed. These are the kinds of changes that only matter if you know the original deeply, and they are exactly what a reimplementation needs.
The missing pieces are clear. Hosting with d2d, a dedicated server and multiplayer with a d2d host are not started. Act V's uber monster groups are not exact. Joining an original host has not been checked in Act V. Sound has 104 base-install sounds left. High-DPI displays are planned but not implemented. The project calls itself unfinished and says it is not the original game or a complete replacement, which is the right framing.
The build requirements are modern. You need a C++26 compiler, CMake 3.28 or newer, Ninja, SDL3, OpenAL, zlib, libcurl and Qt 6.5 or newer for the launcher. On Linux and macOS the build also produces a small Bink-only FFmpeg. StormLib comes from the system or from source. The README gives apt and Homebrew commands, and points Windows users at the CI workflow for the prebuilt dependencies.
The project also has a headless mode and a local control channel for scripted play and testing, plus opt-in crash reports from the launcher that are off by default. Those are developer-friendly features rather than player-facing ones, but they fit the project's method: make the engine observable, compare it with the original, and fix what differs.
FAQ
Is D2Decomp an emulator?
No. It is a native reimplementation of the Diablo II: Lord of Destruction engine. It reads your own game data and runs the game on Windows, macOS and Linux without Wine or an emulation layer.
Does it include the game files?
No. You need your own Diablo II and Lord of Destruction data. D2Decomp does not bundle Blizzard's files or assets, and it reads them from your installation or media.
Can I play the whole campaign?
Yes. All five acts, every area from the Blood Moor to the Worldstone Chamber, and all twenty-seven quests up to Baal are playable. Nightmare and Hell are populated as the original.
Can I play with someone using the original game?
You can join a game hosted by the original over TCP/IP on your LAN. Acts I through IV have been checked live, and Act V has not. Hosting with d2d is not implemented yet.
Does it support widescreen?
Yes, as an opt-in setting. The view widens up to 1,400 by 600 while the HUD stays 800 by 600 in the centre. Menus and cinematics remain 800 by 600.
Is it finished?
No. The project calls itself unfinished. Multiplayer hosting, a dedicated server, high-DPI support, some Act V uber details and 104 base-install sounds remain.
Bottom Line
D2Decomp is one of the more rigorous game reimplementation projects around. It uses Ghidra and Unicorn to check behaviour against the original, it has the full five-act campaign playable, and it can join a game hosted by the original over TCP/IP. The 0.8.3 release is a long list of small, specific fixes that show the team is working from evidence rather than approximation. The optional widescreen, gamepad support and quality-of-life toggles make it pleasant to use, not just technically interesting.
The limits are real. Hosting with d2d, a dedicated server and high-DPI support are not done. Act V's uber monster groups are not exact, joining an original Act V game is unchecked, and 104 sounds are missing. The project is young, with 34 stars and 18 open issues, and the releases are coming fast enough that a bug you hit may already be fixed. You also need your own game data, and the legal notes matter.
Our take: this is worth following if you play Diablo II on Linux or want a native engine that can join the original. Start with a single-player character, use the launcher to point at your install, and try widescreen and a gamepad. For co-op, plan around the original as the host until d2d hosting lands. The project is not a replacement yet, but it is a credible path to one.
Sources
- GitHub psi29a/d2decomped README, progress table, install and build notes, widescreen, Steam Deck, legal notes and licence, accessed November 3, 2026
- GitHub release 0.8.3, release notes and asset sizes, published November 2, 2026, accessed November 3, 2026
- GitHub releases 0.8.0 through 0.8.2, release notes and download counts, published October 31 to November 2, 2026, accessed November 3, 2026
- GitHub API metadata for psi29a/d2decomped, stars, forks, open issues, creation date, language, size and licence, accessed November 3, 2026
Related: PD2 Trader: Price Checks and Net Worth for Project Diablo 2 | D2R VR: Diablo 2 Resurrected Gets a Headset Mode Where Your Blade Picks the Target | Why No Diablo 2 Remake Ever Feels Right (Even with the Source Code)