D2R File Extractor
A WPF desktop app with easy 1-click extraction of Diablo 2: Resurrected CASC game archives for faster load times.
Also lets you undo the extraction before game updates and easily re-apply the extraction after updating.
🎥 YouTube Installation & Usage Guide
How it works
D2R normally loads assets from compressed CASC archives at runtime. By pre-extracting the data\global\, data\hd\, and data\local\ folders to plain files, the game loads them directly — dramatically reducing load times.
This app automates that process for one or more D2R installations and keeps a manifest of every extracted file so the extraction can be fully reversed.
This app uses Ladislav Zezula’s native CascLib library — the same engine that powers Ladik’s CASC Viewer.
Prerequisites
Extraction writes ~40–45 GB of data per D2R installation. More if also extracting international files. Ensure sufficient free space.
Usage
- Launch
D2RExtractor.exe - Click + Add Installation and select your D2R base folder (the one containing the Data subfolder). Repeat for any additional D2R folders.
- Click the Gear icon at the top right corner for settings. This allows for extraction of international files (multi-language dubbing) if needed.
- Click Extract — extraction runs in the background (can take ~30–45 min depending on your hardware)
- Launch D2R with the
-direct -txtcommand line options and enjoy faster load times.
Before Updating D2R
- Click Undo Extraction — removes all extracted files using the saved manifest
- Update D2R normally via Battle.net
- Re-extract after the update
Build from Source
dotnet build D2RExtractor.sln -c Release -p:Platform=x64
Output: D2RExtractor\bin\x64\Release\net8.0-windows\D2RExtractor.exe
File Layout
D2RExtractor\ ├── D2RExtractor.sln └── D2RExtractor\ ├── App.xaml(.cs) ├── MainWindow.xaml(.cs) ├── Models\ │ ├── D2RInstallation.cs Observable model for each managed installation │ └── ExtractionManifest.cs Per-install record of extracted files ├── Services\ │ ├── CascExtractorService.cs CASC open / extract / undo logic │ └── ManifestService.cs JSON settings + manifest persistence ├── Native\ │ └── CascLib.cs P/Invoke declarations for CascLib.dll └── Tools\ └── CascLib.dll (place your copy here before building)
Settings: %AppData%\D2RExtractor\settings.json
Manifests: <D2RPath>\data\.extraction_manifest.json