By: Jonathan Vasquez (fearedbliss)
Build: 2023-10-18-0900
The Moving Caravan - A Diablo II Time Traveling Community (1.00 - 1.10) (Videos)
Screenshots
Light Mode
Dark Mode
Out Of The Box Experience
Settings (19 Material Design Colors Available + Light/Dark Mode)
Add Entry
Edit Entry
Download
The version switcher source code can be downloaded at the Cactus (Core) repo.
The Cactus Bundle is no longer available on GitHub since I want to provide a direct download location from my server (uptime is not guaranteed). 7-Zip must be
used to extract the archive since I'm using high compression. All releases are
hashed and PGP signed with the key: 34DA 858C 1447 509E C77A D49F FB85 90B7 C4CA 5279
,
which can be easily found at the link below.
Download Cactus
PGP Public Key
Latest Release Hash
Latest Release Hash Signature
Description / History
Cactus started out as just a simple application that allowed you to
easily and efficiently Time Travel between every version of Diablo II
that ever came out, while maximizing disk space and enabling full
character isolation between versions. However, even though Cactus itself
still is just that, the Cactus Repository has evolved to become a
centralized and historical archive, that aims to preserve every single
Diablo II version that exists (Official Retail
and Official Beta
Releases). Cactus is a complete rewrite from scratch of my previous
application called: Bliss Version Switcher
. However, since Cactus is
written in C#, it behaves as a native Windows application and allows it
to integrate natively with the system. On the other hand, Bliss Version
Switcher was written in Java and thus there were many limitations that
lead to the Cactus rewrite.
This repository also includes several other utilities that I have either
created or collected, which can help you play Vanilla
Diablo II
better. All Cactus Platforms are Vanilla
by default. The only fix
I made to all Platforms below 1.12
is to remove the CD requirement,
since modern computers no longer have a CD drive (Blizzard already did
this exact thing for 1.12+
). Other than that, the only other
modifications I provide are through Singling
,
which only contains non-gameplay modifications
and is
completely opt-in
.
Furthermore, if you will be playing online, you should make a copy of
the Vanilla Platform and use that one to connect to Battle.net (for
example, copying the 1.14d
platform and calling it something like
1.14d BNET
). You can use your other platforms with the Singling
changes for local play.
Lastly, the cnc-ddraw
video renderer and 3D Sound
support
are included. cnc-ddraw
is provided to improve video compatibility
for all versions between 1.00 - 1.13d
. Blizzard removed
DirectDraw
support starting with 1.14
, and thus Cactus will
only provide video support for versions before that. While the 3D Sound
support is provided to enable you to use the following lost
in-game sound functionality: 3D Sound
, Environmental Effects
, and 3D Bias
.
Cactus requires a purchased copy of Diablo II (Original, Not Resurrected)
from Blizzard in order to have all of the game assets stored in the
MPQs. Once you have these, they will be reused for all Cactus
Platforms.
For further information, please read the documentation below for anything you are interested in exploring.
Cactus Repository
The following opt-in modifications and utilities are available in this repository:
Singling
A collection of non-gameplay modifications and fixes in order to improve the Vanilla Diablo II Single Player & LAN Experience.
To use Singling, simply copy the Singling files for the version you want to
play from the 2. Singling/1. Files
folder, and replace the ones for
the equivalent version in your Platforms directory. To revert, use the files
in 2. Singling/2. Stock
instead.
Renderers
Cactus includes and promotes the cnc-ddraw
video renderer for
Diablo II versions 1.00 - 1.13d
, which can help you run the game
on newer systems with a higher window resolution (not a higher internal
resolution), and the ability to use shaders to upscale the quality of
the graphics in the game. Since Blizzard removed DirectDraw
support in 1.14+
, you'll need to find an alternative video
renderer for those versions.
Please read the README-RENDERERS
for
further explanation on this, for information on how to set it up, or for
any known technical limitations. Definitely read the
Recommendations
section at least, or you will most likely
encounter crashes if you've never played versions before 1.14
before. Blizzard has done major changes with how video configuration
works starting in 1.14
.
cnc-ddraw
- This renderer reimplements the DirectDraw API for GDI, OpenGL, and Direct3D to improve compatibility with Windows XP - 10, and Wine. This renderer also supports the use of custom shaders - which will allow you to upscale the game so it looks a lot better - and even provides hotkeys (such as[Alt] + [Enter]
) to switch between full screen and window mode.
3D Sound (DSOAL w/ OpenAL Soft)
Cactus includes the files required to allow you to enable the following
lost in-game sound functionality: 3D Sound
, Environmental Effects
, and 3D Bias
.
Please read the README-3D-SOUND
for more information.
License
Released under the Simplified BSD License.
Requirements
- Windows 7 or 10
- .NET Framework 4.6.2 + (Cactus)
- Visual C++ 2015 - 2022 Redistributable (x86) (DSOAL w/ OpenAL Soft)
Windows 11+ will not be supported.
Due to Microsoft mandating people to have an online connection and a Microsoft account for Windows 11 (at the OOBE stage), any version over Windows 10 will not be supported.
Windows 10 Pro doesn't have this requirement at all, and is the OS I primarily use on my gaming computer. Windows 10 Home does have this requirement though, but can be bypassed by unplugging your internet connection before the OOBE. I'm including Windows 10 support due to there still being a direct path to use the OS with no workarounds through the Pro edition. Windows 10 reaches EOL on October 14, 2025, However, I have gone dark already using my Dark Island strategy, and thus the EOL status of Windows 10 will no longer be an issue for me. This allows me plenty of time to make sure I have all necessary files backed up in order to be able to reproduce my Offline Single Player DRM Free Gaming Experience.
Furthermore, I will be exiting Windows development completely for newer versions of Windows. I will continue to maintain Cactus/Singling/Etc for Windows 7 and 10. You can read more about it here.
Please do not file any bug reports if you are running my software on Windows 11+,
they will be promptly closed as NOT SUPPORTED
.
Installation Instructions
Installation Video
Required Files
After you finish installing Diablo II (or restoring the files from a backup),
you only need to keep the following files in your Diablo II Root Directory
.
Everything else can be deleted since it will come from Cactus. Once you are done,
continue with the Cactus installation steps.
- D2.LNG
- D2Char.mpq
- D2Data.mpq
- D2Exp.mpq (1.07+)
- D2Music.mpq (Not needed for 1.00)
- D2Sfx.mpq
- D2Speech.mpq
- D2Video.mpq
- D2XMusic.mpq (1.07+)
- D2XTalk.mpq (1.07+)
- D2XVideo.mpq (1.07+)
Install Cactus, Dependencies, and Prepare MPQs.
This section will help you install Cactus to the correct location, its dependencies,
and also help you fix your MPQs, so that they are compatible with the older versions
of Diablo II. I only test on and support Windows 7
and Windows 10
,
however these instructions will probably work on versions in between as well.
-
Copy all of the files in the
1. Files
folder into yourDiablo II Root Directory
.Note:
It's important thatCactus
runs from inside yourDiablo II Root Directory
or you will get weird behavior in various situations like running-direct -txt
mods or taking screenshots. -
If you need to fix your MPQs, then also copy the
MpqFixer
located in the3. Other
directory into yourDiablo II Root Directory
. This fix is only needed if you want to play versions1.08 - 1.13d
and you also happened to install Diablo II from the new Blizzard Installer. If you are not planning to play those versions, or you installed Diablo II from the original1.00, 1.03, 1.07
discs, you don't need to fix your MPQs.You can then run the
FIX_MPQS_RUN_AS_ADMIN.bat
inside theMpqFixer
directory that you copied, asAdministrator
. -
Run the
vc_redist.x86.exe
file in the3. Other
directory to install the required libraries for3D Sound
. If you run the game without these being installed, you will get aVCRUNTIME140.dll
error message.Note:
If you don't want this functionality, just delete thedsoal-aldrv.dll
anddsound.dll
from yourDiablo II Root Directory
. -
(Windows 7 Only)
Cactus requires.NET Framework 4.6.2
to function, but that version does not come included in Windows 7 by default. You can run theNET_Framework_4.6.2_Offline_Installer_for_Windows_7.exe
file located in the3. Other
directory to install that dependency. Windows 10 provides this dependency by default.
Adding/Running A Platform
- Open
Cactus
. - Click
Settings
and set yourDiablo II Root Directory
to your Diablo II folder.(Example: C:\Games\Diablo II)
- Click
Add
. - Type in the name of the
Platform
you want to run. This should match a folder in thePlatforms
folder. (Example: If you want to run1.09b
, type1.09b
). Optional (Recommended)
: Type in aLabel
for this platform. If you label your platform, it will have its own dedicated save directory, allowing you to have multiple entries using the same platform but with different save locations. If you don't use a label, all the characters with this platform name will be stored in the same location (flat structure). You can have multiple entries using the same platform with and without labels as well. A label cannot be removed from an entry once created, but it can be renamed. A label cannot be added to an entry once created.- Enter the name of your
Launcher
.(Example: Game.exe, Alpaca.exe)
- Enter the Flags you want (Example:
-ns
). - Click
Add
. - Select your newly added Platform and press
Launch
.
The game should start. If you are having video issues, please make sure you
have read the README-RENDERERS
and ensure that
it was configured properly.
NOTE
: Make sure to leave the Cactus application running throughout your play sessions (you can minimize it).
Cactus keeps track of the running Diablo II processes it launches as to protect you from accidentally switching to
a different platform, and causing your Save Path
to be updated to an incorrect location.
Template & Labeling System
The Cactus Template & Labeling System allows you to be able to easily start using a few pretty cool and very interesting workflows, while allowing you to re-use your existing platforms, thus minimizing the amount of disk space used.
For example, let's say we want to play Solo Self Found
as defined
as Only using items that the character has found with their own hands
, this pretty much means untwinked play. However, let's say you
are also ok with using mules as a form of an extended stash for your
main character. Thus, any items your main character finds, can be placed
in storage, and will only be used by that main character specifically.
If you were to do this manually, for each particular main character you
made, it would quickly get out of hand since all the main characters and
each individual main character's set of mules, would all be in the same
folder. This is where the Templating & Labeling System kicks in. Now, we
could simply make a new entry in Cactus pointing to an existing
platform, and give it a particular label (Say the name of that specific
main character) and play the game. A dedicated save folder with the given
label will be created under the Saves directory for this platform.
For example, I want to make a character called Isaac
. Isaac will
have their own set of mule characters as well and we'll call them
Mule_A
, Mule_B
, and Mule_C
for simplicity. This
character will also be on 1.09b
. Thus, we can make a new entry for
our 1.09b
platform with the label Isaac
. Once we start the
game, we will have the following structure in our Diablo II root
directory (let's assume I already made the characters in-game):
/Platforms/1.09b/
/Saves/1.09b/
/Saves/1.09b/Isaac/
/Saves/1.09b/Isaac/Isaac.d2s
/Saves/1.09b/Isaac/Mule_A.d2s
/Saves/1.09b/Isaac/Mule_B.d2s
/Saves/1.09b/Isaac/Mule_C.d2s
As you can see, this entry is fully isolated using its platform and
label combination. Now, let's say you and your friends want to have some
type of tournament on 1.09b
. No problem! You can quickly add
another entry for the 1.09b
platform with another label, such as
Tournament 2022
and start it up. The same exact 1.09b
platform files that we used before will be re-used, and we will have a
new save directory. Let's create a new character called Bethany
and give Bethany a few mules as well. We'll call the mules the same as
before, and since they are isolated, we can reuse the same muling naming
scheme with no conflicts. So now our structure looks like this:
/Platforms/1.09b/
/Saves/1.09b/
/Saves/1.09b/Isaac/
/Saves/1.09b/Isaac/Isaac.d2s
/Saves/1.09b/Isaac/Mule_A.d2s
/Saves/1.09b/Isaac/Mule_B.d2s
/Saves/1.09b/Isaac/Mule_C.d2s
/Saves/1.09b/Bethany/
/Saves/1.09b/Bethany/Bethany.d2s
/Saves/1.09b/Bethany/Mule_A.d2s
/Saves/1.09b/Bethany/Mule_B.d2s
/Saves/1.09b/Bethany/Mule_C.d2s
This is just one of the new workflows that our Templating & Labeling
System enables. This workflow requires a modified D2gfx.dll
to
allow multiple instances of the game, allowing you to to mule between
your main character and your mules via LAN. Singling provides this
feature for the versions it supports. For all other versions, you'll
need to find a copy of it online.
Another workflow which I really like is using this labeling system to
separate my Classic
and Expansion
characters. By using two
separate labels to the same platform, we can have two separate save
paths for them. If we did this, we would have the following:
/Platforms/1.09b/
/Saves/1.09b/
/Saves/1.09b/Classic/
/Saves/1.09b/Expansion/
/Saves/1.09b/Isaac/
/Saves/1.09b/Isaac/Isaac.d2s
/Saves/1.09b/Isaac/Mule_A.d2s
/Saves/1.09b/Isaac/Mule_B.d2s
/Saves/1.09b/Isaac/Mule_C.d2s
/Saves/1.09b/Bethany/
/Saves/1.09b/Bethany/Bethany.d2s
/Saves/1.09b/Bethany/Mule_A.d2s
/Saves/1.09b/Bethany/Mule_B.d2s
/Saves/1.09b/Bethany/Mule_C.d2s
You can pretty much label your platforms whatever you want as long as
the name can be used for the folder on your hard drive. If you are using
some illegal symbols like /
, then Cactus will properly detect that
and give you the appropriate message so that you can fix it. You can
also omit the label if you want and that works perfectly fine with the
above scenarios. Let's say you wanted to have a 1.09b
platform and
have everything in there without caring about labels (essentially a flat
layout, although you can also have a flat layout with a label, it just
depends on how you want to organize stuff), go ahead and create an entry
with the platform name 1.09b
and leave the label blank. Launching
the game will just point the save path to the /Saves/1.09b/
folder
and your files will be placed in there. Assuming we then created a
character called Leslie
, we would then have the following
structure:
/Platforms/1.09b/
/Saves/1.09b/
/Saves/1.09b/Leslie.d2s
/Saves/1.09b/Classic/
/Saves/1.09b/Expansion/
/Saves/1.09b/Isaac/
/Saves/1.09b/Isaac/Isaac.d2s
/Saves/1.09b/Isaac/Mule_A.d2s
/Saves/1.09b/Isaac/Mule_B.d2s
/Saves/1.09b/Isaac/Mule_C.d2s
/Saves/1.09b/Bethany/
/Saves/1.09b/Bethany/Bethany.d2s
/Saves/1.09b/Bethany/Mule_A.d2s
/Saves/1.09b/Bethany/Mule_B.d2s
/Saves/1.09b/Bethany/Mule_C.d2s
It's just another folder after all ;). The nice thing about this is that since all of these are sharing the same platform, switching between these entries is extremely fast since no files need to change on your hard drive, but rather we simply just update the registry save path, and you are back in the action. Have fun!
Backup System
By clicking the Backup
button, Cactus will automatically create a backup
of the following files in the Backups
directory, inside your
Diablo II Root Directory
:
/Platforms/
/Saves/
/Entries.json
/LastRequiredFiles.json
/Settings.json
The Backups
directory is considered a Protected Directory
by Cactus,
and will not be deleted.
Lastly, you can change the backup location to any location you have write access
to, by modifying the Backups Directory
setting in the Settings
.
Using Cactus like a Service
Cactus has some basic tracking of processes that it launches in order to
ensure that there are no accidental launches of other versions or
combinations of the game that would cause your Save Path location to be
changed mid-game. Thus it is essential for Cactus to remain running
while you are playing. If you are always going to be running Diablo II
via Cactus, you may want to go into the Cactus Settings and toggle the
Minimize to System Tray
option so that it doesn't take up space in
your taskbar. I personally like having it show in the taskbar but that's
just preference ;D.
Moving Cactus To A New Computer
If you want to move all of your Platforms, Characters, and Diablo II folder to another machine, you will need to:
- Copy your entire Diablo II folder to your new computer.
- Open
Cactus
. - Click
Settings
and change yourDiablo II Root Directory
to match the location on your new computer. - Click
Reset
. - Now
Launch
whatever Platform you want.
Clicking Reset
will cause Cactus to reconfigure itself by removing
some files from your Diablo II Root Directory
and wiping the
Last Ran
box on the entry that has it. Once you launch the game,
the registry will properly point to your appropriate save location and
your platform files will be copied back to your Diablo II root folder.
In some rare cases (only on first install), you may need to do a little
bit of manual organization in your Diablo II root folder to get things
aligned properly. Once aligned, it's all tracked and automatic.
Video)
Unlocking All Cinematics (If you moved Cactus to a new computer, or you did a fresh install, you can unlock all of the cinematics by doing the following:
- Launch Diablo II, and then close it.
- Open the Registry Editor (
regedit.exe
). - Go to
Computer\HKEY_CURRENT_USER\SOFTWARE\Blizzard Entertainment\Diablo II
. - Set the
Aux Battle.net
key to216.148.246.35
. - Congrats! All of your cinematics are now unlocked.
Updating Files In The Platforms folder
If you update any files in your Platforms folder, then click the
Reset
button, and run it again. This will cause Cactus to
re-install the files with the new ones.
OMAHGOD! My Characters Are Gone! Cactus Deleted Them!!!
Cactus comes with built in safety features
specifically designed to protect critical directories and files, which
includes the save directories. Thus it is impossible for Cactus to have
deleted them. Cactus also only operates within the Diablo II root
directory so it also wouldn't be possible for Cactus to delete saves
that are in 1.14d+
's new save directory that is in your personal
folder.
Since Cactus is A Modern Version Switcher & Character Isolator
, it
will update the registry location of where the game should look for the
saves. For example, if you are playing a Platform
called
1.05b
with a Label
called Chinchilla
, the files for
this platform would logically be located under Platforms/1.05b/
,
and the saves would be located under Saves/1.05b/Chinchilla/
. Both
directories are located inside your Diablo II folder. Thus, when the
game starts, your characters are properly isolated and protected. If
this is the first time you launched a game with Cactus, and you
previously just had a regular Diablo II installation, then it would seem
as if all your characters got deleted, or magically dissapeared.
However, they are simply located in the original location that your
computer saved them to. If you were playing 1.14d+
, they most
likely are located at:
%USERPROFILE%/Saved Games/Diablo II
If you were playing 1.13d
or below, they are inside the Diablo II
folder itself under a folder called save
.
Lastly, always remember to keep backups when running Third Party Tools or Modifications.
Cactus switches versions but I don't see the Diablo II window and there are no errors either.
If switching versions with Cactus doesn't actually launch the game but you also
don't notice any errors, this could be an indication that either your Video Settings
are not correct, or that you may need to run Cactus in Admin Mode. I've noticed that
if I have Diablo II installed on the C:\
drive (i.e C:\Games\Diablo II
),
I would need to run Cactus at least once in Admin Mode for it to work properly, but
if I installed Diablo II on another drive (i.e D:\Games\Diablo II
), it would
work fine without Admin privileges. I'm pretty sure this is due to the C:\
drive generally being a protected drive.
Another thing to note is that I observed that I only needed to run Cactus once in Admin
Mode for this to "stick" and continue working even if I opened Cactus in the future without
Admin rights, although I haven't tested if this persists across reboots, but it possibly may.
I've also noticed that even when there was a problem, some versions would work,
and some wouldn't. Specifically versions 1.00 - 1.06b
worked, but 1.07 - 1.13d
didn't.
Lastly, make sure that there are no zombie Diablo II processes running in the background (Task Manager),
that can cause the version switcher to either not switch away or something else. I know that
the new telemetry executables added to 1.14d
(i.e SystemSurvey.exe
and BlizzardError.exe
)
are not needed for the game to actually function, and can lock the process for a bit after you close
the game. The Cactus platforms do not contain these files since I've deleted them, however, if you
are installing from a fresh copy of Diablo II from Blizzard, it will have them.
File Read Error on Diablo II Start Up
If you are receiving the above error, it may be possible that some of
your MPQs are still hidden from Cactus' previous behavior before version
2.2.0
. For newer versions of Cactus, Cactus will automatically
rename the following MPQs back to normal whenever you either
Launch
a platform, or if you already have an entry that was
Last Ran
, when you press the Reset
button as well. If for
whatever reason that still doesn't work, you can go to your Diablo II
root directory and make sure that the following 4
Expansion MPQs
are properly named: d2exp.mpq
, d2xvideo.mpq
,
d2xmusic.mpq
, and d2xtalk.mpq
. If you see any of them with
the .bak
extension, simply remove that extension and everything
should be good. If you are receiving this error but those files are in
place, then it is something else not related to Cactus.