Cactus Porting Instructions

A place to discuss Diablo II mods and porting them to Cactus.
Post Reply
Site Admin
Posts: 648
Joined: Sun Dec 19, 2021 11:23 am

Cactus Porting Instructions

Post by fearedbliss »

Hello all,

This post will show you how to try and port mods to Cactus. Not every mod is compatible since most of these mods are either dead, not actively maintained, have had massive changes done to them in many fundamental structural ways where it doesn't behave correctly with Cactus. The goal is to try and allow someone to easily play the mod by extracting the platform into the Cactus Platforms folder, adding a new entry in Cactus, and launching the mod.

Cactus is primarily designed to be a version switcher and character isolator, not a mod manager. However, a lot of mods are simply modifications to the existing Diablo II files, in place, or maybe have their own files, but everything is communicating with the files Diablo II is normally expecting to communicate with, and using the normal save paths. Assuming that nothing crazy is happening, it should be easy for someone to just:

1. Create a new Cactus platform by copying the base Cactus Platform that your mod requires (Example: Zy-El uses 1.09d as a base where as Hell Unleashed uses a 1.10 base).
2. Extract the target mod files over the new Cactus Platform, overwriting any existing files.
3. Launch the mod by adding a new entry in Cactus pointing to "Game.exe" (or another custom exe if required).

Most mods may work with that alone.

When done porting, you can create a post for the platform in the staging area. Please follow the same post template format as the other mods, such as Median XL. Make sure to include the information necessary in the MOD.txt file inside of the platform. This information should be pasted into the "code" section of the forum post. Your post should also include at least a SHA256 hash for the compressed platform file. The compressed file should be in 7z format using Ultra compression settings. Once this is done, I'll inspect the platform, provide feedback, male minor tweaks, and promote it to the Release section if it has no issues. At this stage, your mod will reach Platinum level.


1. Design your mod so that it all works within the Diablo II root directory. Don't require separate installers or other weirdness. If Cactus didn't exist, the installation would be as simple as dropping and replacing your mod files in the Diablo II root directory, and running Game.exe. Thus, all the required DLLs, Custom MPQs / Patch_D2.mpq should be in the platform folder you wish to distribute. The core MPQs should NOT be included since the user needs to provide those themselves through their legal purchase of the game. You should assume that the user has all of the core game MPQs, D2.LNG, and Cactus installed (and what comes with Cactus). That's it.

2. Do not hijack or modify the Save Path. Let the game naturally handle it. Cactus takes care of setting the Save Path for each entry and allowing it to be properly isolated.

3. Run the game through Game.exe or a custom exe directly in the Diablo II root directory. This means that if you want to use a custom loader you can, but don't have it do crazy things like nesting the launcher under a sub-folder in the Diablo II root directory. The launcher must be in your Diablo II root directory, just like Game.exe. When in doubt, emulate the original behavior. You can also take a look at all of the existing Cactus Platforms for reference and try to run your mod the same way.

4. Use cnc-ddraw (DirectDraw) when possible. Most Cactus users are probably using cnc-ddraw over glidewrapper for various reasons. It is less buggy and has more features while not affecting the game in any negative way. You shouldn't have to worry about video (or sound - DSOAL/OpenAL included in Cactus) though.

5. Allow the game to run normally without the CD. All Cactus Platforms already contain GalaXyHaXz's No-CD pack, which allows the game to run without the CD, basically using the same method as what Blizzard did starting with Patch 1.12.

- fearedbliss
Post Reply