User:Jekyll Grim Payne/How to start modding for GZDoom
Jump to navigation
Jump to search
Last updated: February 10, 2025
"Modding" is a very broad term that may involve a lot of different things.
Types of projects you can create
- Gameplay mods
- Mods that feature gameplay changes (such as new weapons/monsters/HUD/game mechanics etc.) but don't contain any maps. These are meant to be played alongside existing maps, be it maps from one of the IWAD (such as Doom, Heretic, Hexen, or Strife), or custom map packs.
- As a rule, gameplay mods are not compatible with each other if they focus on the same thing. For example, you can't combine two weapon mods together, because they rely on Actor replacement to have a modded weapon spawn instead of a vanilla one, and they can't be combined. However, mods that focus on entirely different things — such as a weapons-only mod and a monsters-only mod — may work together. Some mods are explicitly made for high compatibility, which is usually stated in their description.
- Gameplay mods always require that the player has an IWAD, such as doom2.wad.
- Maps and map packs
- Map packs come with new maps. They may or may not contain new textures or gameplay changes. Map packs are always made for a specific game, such as Doom, Heretic, Hexen, or Strife, and the player will need an IWAD from those games (such as doom2.wad) to be able to play them. If a map / map pack has no gameplay changes, it can usually be combined with a gameplay-only mod.
- Total conversions (TCs)
- A TC replaces everything there is in a vanilla game. While they usually still require an IWAD to run, they will feature unique maps, 100% unique textures and unique gameplay. They're normally not compatible with other map packs or gameplay mods, unless the latter was made specifically for that TC.
- A TC may be made completely standalone, so it comes in the form of a custom IWAD and doesn't require anything like doom2.wad to run. In this case, it's effectively a standalone game.
- Standalone games
- GZDoom's license allows making standalone games for it and releasing them commercially. A standalone game will feature its own IWAD, and, naturally, entirely custom maps, gameplay systems and assets.
Required software
- The most up-to-date and maintained map editor. UDB can be used for creating maps in any format, from vanilla to UDMF, for GZDoom and other source ports. It has some predecessors that are considered deprecated: Doom Builder, Doom Builder 2, GZDoom Builder, GZdoom Builder Bug Fix — these should not be used nowadays.
- Note, if you're on Linux, Ultimate Doom Builder won't work for you out of the box. You may either try to compile it yourself, or use SLADE instead.
- This is an archive manager that can edit the contents of WAD and PK3 files, which are the primary formats used by GZDoom. It also offers a lot of Doom-specific features, such as script editors and various operations with graphic files. SLADE also has a map editor, albeit much less advanced than UDB.
The following tools are also recommended:
- A graphics editor, such as Photoshop, Krita, Aseprite, Gimp or Paint.NET. These can be used to create and edit sprites and textures.
- A script editing environment, such as Visual Studio Code, Notepad++, Sublime Text, Textpad, etc. While SLADE comes with a built-in scripting interface, a dedicated editor is often much more convenient.
- A GitHub repository. GitHub is a cloud based system for backups and version control. It's a convenient tool to have safe backups and easily track and comment all the changes. It's also great for collaborating with others and it's free. If you’re planning a large-scale project, you should set up GitHub (or an alternative similar service, like GitLab) right away. Never rely on backups created by SLADE, or the backups you make for yourself manually—those are not safe, not detailed or controlled enough, and you will definitely run into issues at some point if you use them.
- If you decide to create 3D models or render graphics from 3D models, you will need 3D-modeling software, such as Blender.
What you will need to learn
General subjects
- This is needed so you can structure your project. Note that it's recommended to use a PK3 (in a packed or an unpacked form) for the project in general, while the maps in it (if you have any) will be in separate WAD files.
- This coding language is required to create actors: things that can be placed in the game's world, such as enemies, weapons, items and proprs, as well as new UI elements, HUDs, new menu elements and more. See:
- ZScript guides on the wiki
- ZScript Basics by Agent_Ash — an introductory ZScript guide
- Making maps
- You will need this if you plan to make maps (obviously). You can check out BridgeBurner's tutorials on YouTube or search for others that work for you. For historical reasons you may also be interested in the original classic Doom Builder guide by John W. Anderson, but this was written for vanilla Doom and the original Doom Builder, so it's not always useful nowadays.
- This simple C-style language is used to define events in maps. Things like "press this switch here, a message appears, a door opens somewhere" and similar are defined in ACS. ACS is a fairly simple language and it's fully documented on this wiki.
- Lumps
- A lump is any file inside a WAD or a PK3. Most importantly, you will need to learn about special lumps that are used to define new menus, console variables, and general gameplay features. See Special lumps.
Specific subjects
- You will need to learn how this works if you want to make gameplay-only mods, and you want to replace existing enemies/weapons/items etc. with your versions.
- Adding textures
- To add textures, make sure the image is in one of the compatible formats and its name is 8 characters or fewer. If you want to use it as a texture directly, place it under the /textures/ subfolder in your PK3. If you want to scale it or make a composite texture out of several images, see the TEXTURES lump.
- Adding sounds
- GZDoom cannot play audio files directly. To make a sound available in your project, you will need to place it under the /sounds/ subfolder of your PK3, then give it an internal name through SNDINFO. After that it will be playable in ZScript and ACS with functions like A_StartSound and PlaySound respectively.
- Adding 3D models
- GZDoom supports displaying 3D models for actors in several formats: IQM, OBJ, MD3, MD2. The models require that an actor is defined in ZScript, then a model is placed in your PK3 (usually under the /models/ subfolder, but this isn't required), and then attached to the actor using the MODELDEF lump. See the MODELDEF page for information about the formats and their features, and how to attach models to actors.
- Adding music
- Music files must be in one of the compatible formats (most commonly OGG or MP3) and placed under the /music/ subfolder of your PK3. You can add it to maps via MAPINFO, or play it through ACS with SetMusic.
- Dynamic lights
- Dynamic lights can be attached to actors and/or placed in maps to illuminate the surroundings. See GLDEFS.
- Shaders and materials
- GZDoom supports normal/specular as well as (partially) PBR materials. GZDoom also supports material and post-processing shaders. See GLDEFS#Materials.
- Creating options controlled by the player