← Back to the archive

Doom Modding with Batch and Shell scripting

This is a simple guide on how to create and use both Batch (.bat) files and Shell scripts (.sh) to quickly load mod configurations for Doom and its source ports in Windows and Linux.

These types of files are a great way to automate tasks and more complex processes into a single command. In the specific case of Doom we can use very simple scripts to create custom mod load orders to quickly change between different mod packs and such without the need to drag your mods into the game executable every single time you want to play a different .wad or .pk3 file.In the case of Linux the act of drag-and-drop is a little bit more complex in some cases so believe it or not, using shell scripts is more convienient for playing with custom files.

  1. Guide for Windows
  2. Guide for Linux
Guncaster Vindicated mixed with the maps of AUGER;ZENITH, running in GZDoom on Windows

For this we will be using two source ports: GZDoom and Crispy Doom. GZDoom is the best Doom source port for mod support, with thousands of complex mods made for it, while Crispy Doom is a more conservative port that aims to make a vintage but high quality doom experience in modern systems, supporting only simple mods or custom maps.

There are two ways of doing this:

  1. Placing the scripts inside the mod folder
  2. Placing the scripts in a separate folder and specifying the folder path of the files

I will be using the second option since if you can separate the scripts in another place and keep your game folder better organized.

on Windows

After downloading the base wads and mod files inside your prefered game folder, let's create a simple .bat file with plain old Notepad, the template is as it follows:

@echo off

title [ANY TITLE]

start C:\YOUR\PATH\HERE\GZDoom.exe -iwad C:\YOUR\PATH\HERE\DOOM2.wad -file C:\YOUR\PATH\HERE\[YOUR_MOD].wad -file C:\YOUR\PATH\HERE\[YOUR_MOD].pk3

Open up Notepad, write it and save the file as something like RUN_GAME.bat, the places marked in this example are the ones that you will replace with your own path files.

The first line is part of the script so just ignore it.

The title line can be whatever you want, it is what will appear in the Command Prompt window name, however this windows will only show for a fraction of a second so this doesn't matter much.

The start command is what we need to pay attention, first we specify the game executable and the main Wad that the mod relies on. Most of the mods out there use Doom 2 as a base, but if it needs Heretic for example just write HERETIC.wad after -iwad (being that you have said Wad file too) so that it loads it with GZDoom.

After these two arguments we can list the mods that we want to play with. Let's say I want to play Guncaster Vindicated with the Extermination Day mod, we can achieve this with -file EdayTest001.pk3 -file EdayMusic001.pk3 -file Guncaster_Vindicated.pk3. There is no specific order in what to load first (.wad or .pk3) but I find easier to follow this order just to better organize things.

With the -file argument we can list basically everything that we want to cram together, however more complex mod combinations are more prone to errors so it is more of a test and repeat process. In this case I loaded both the Extermination Day Wad and the music pack that comes with the mod, together with Guncaster Vindicated.

And what about other source ports? (PrBoom+, Crispy Doom, etc.)

It is the same idea, the only difference of course is to name the executable accordingly, using start prboom.exe or start crispy-doom.exe for example. In this case this is more used simply to load custom maps and such since these source ports don't have the same support for modding as GZDoom does.

With this you can also create shortcuts to quickly launch the game, as I did here

on Linux

In Linux things are a bit different, but the idea is basically the same as in Windows, so open up Gedit, VI or Nano and type:

gzdoom -iwad /YOUR/PATH/HERE/DOOM2.wad -file /YOUR/PATH/HERE/[YOUR_MOD].wad -file /YOUR/PATH/HERE/[YOUR_MOD].pk3

The main difference is that due to how Linux system packages work we don't actually need to specify the location of the program itself but you can do it if you prefer, in this example I used GZDoom but the same works in the case of Crispy Doom or any other source port.

However keep in mind that I suggest you to avoid using Flatpaks since they usually have issues finding folder paths. Crispy Doom and GZDoom have distributed Flatpaks but they also are in most distro's repositories as standard packages. GZDoom also have a .deb installer so I suggest installing this source ports in one of the ways listed instead of using the Flatpaks.

But if you really love Flatpaks, you can try to run them by replacing the program name with flatpak run [FLATPACK NAME] , you can search for the specific name of the package in Flathub. Maybe Flatseal can fix Flatpaks' path folder issues, but I didn't tested this myself so I can't say for sure.

And like everything in Linux, we will need to boot up the terminal where your script is located and type ./[YOUR SCRIPT].sh, remember to make the file executable first to actually run it!

Schism mixed with the Freedoom Phase 1 maps, running in GZDoom on Linux.

There are other prettier solutions out there such as ZDL, however what I showed here is the easiest method and just require standart system tools.

Back to top