Game Release Preparations

You've created a mod or game, and you're getting it ready to release it for people to play. First up, congratulations! Getting from inception to finished product is a great feat, and you're hopefully proud of your creation.

Congratulations!

Releasing a Wolf3D mod is generally a very simple affair; you're either publishing a pk3 file (in the case of ECWolf/LZWolf), or zipping the relevant edited game files and releasing that. If you're looking for how to publish your game on Wolf3D.net, you'll want to visit this guide.

This guide is for people who are releasing a project that works with the original game engine (No source code or scripting changes). For those projects, with just a few small additional files, you can help players with additional game compatibilities and provide more ways to experience your creative work!

There are a number of considerations to be made in ensuring your game is ready for release, that can be generally referred to as "good practices". This is a simple checklist you can go through to ensure your game releases cleanly.


Considerations for all releases

🗸 Attribute credit somewhere in your project for borrowed or contributed assets.

This includes art, sounds, and other resources, and can come in the form of a Credits section in a text document, in the game itself, or on the website you publish your game to.

🗸 If you're borrowing art that hasn't been released with the intention of others to use (For example, lifted from another mod) or announced publicly that it's okay to use, it is generally good to ask permission from these people to use the resources.


DOS / Wolf4GW / Wolf4SDL releases

🗸 You should not include unedited game files in your release.

For example, if your project only edits the maps of the game, your download should only include the GAMEMAPS and MAPHEAD files. Being unedited, distributing the extra files would be a violation of id Software's copyright.

🗸 If you utilized a program like MapEdit to create your project, make sure you've removed any excess files from the folder, and do not accidently include them in your published release.


ECWolf/LZWolf releases

🗸 In almost all cases, you shouldn't include a full copy of the ECWolf or LZWolf files in your release.

Mods for these source ports are built so they can all run from the same copy of the engine. Once a person has downloaded ECWolf or LZWolf, they do not need another copy. At most, including a reminder in your text file to update to the latest version is all you will need.

🗸 You should never edit and re-distribute the ecwolf.pk3 or lzwolf.pk3 files.

The source ports rely on these files to translate the original games, and editing these files is almost always unnecessary. 

🗸 If your game is specifically intended for ECWolf or LZWolf, do not include the original game files in your release.

Basically, the only file that need to be included in an ECWolf-only or LZWolf-only release, is the new .pk3 containing your game. Any extra files are going to be unnecessary in most releases, and if not it is possibly a sign that you haven't prepared the mod properly.

If you need to learn how to build the .pk3 file, you can get started by learning How to create and import maps for an ECWolf Mod.

ECWolf and LZWolf are built with the ability to "soft-mod"; rather than edit the core game files, mods built on these source ports utilize a .pk3 file which they runs on top of the original game, making changes as designated in the pk3.

If your game is being released as a DOS, Wolf4GW or Wolf4SDL project, you can very often still set it up to run easily in ECWolf/LZWolf without the need to recreate the entire project as a pk3.


Vanilla Projects

To make your game's zip file compatible with ECWolf and LZWolf, you simply need to add a single empty file to your game zip. Create a new text file in your game directory and call it ECWOLF.TXT. Make sure the file is completely blank and empty.

ecwolf.txt

Depending on the game you are editing, you will also need to edit the .txt extension on the new file to match those of your game files. For example, if you're editing Wolfenstein 3D, the file extension will be changed to .WL6. Spear of Destiny would be .SOD.

ECWOLF.WL6

Projects with minor engine changes

If your project has minor tweaks and differences that aren't in the default, you can place a modified PK3 file into your project in the same way the .TXT file is implemented.

As an example, we want to change the behaviour of the pushwalls to move three spaces instead of just two. To do so, you would take this file (pushwallrange.pk3) and place it in your project directory. To get an idea of what the file is doing, you can crack it open and check it out in SLADE!

pushwallrange.pk3

Just like with the ECWOLF.TXT in the above example, you will rename it to ECWOLF.*, where * is your game's file extension.

ECWOLF.WL6

Anything you can script in an ECWolf or LZWolf mod is compatible with this method, including features like LZWolf's parallaxing skies. However, this should only be done for mods that are built for DOS/Wolf4SDL. If your project is intended for ECWolf or LZWolf, you should avoid distributing WL6 files in favour of a proper mod PK3 file.


Now, when you zip your mod's edited files, make sure you directly zip the files (as in, don't zip a folder), and make sure the new file is included in the zip.

So what does this do for your project?

Well, instead of having to extract the files to a new folder, an ECWolf or LZWolf user can play your mod by simply dragging and dropping the entire zip over the source port's executible file! The engines will see and read the new file and know how to run the game.

C-Dogs SDL is a port and extension of the classic top-down shooter, originally for DOS. Cong Xu has been updating the game over the years, getting it to feature parity and beyond with the original game.

One of the biggest updates to the game in the past few years was the addition of support for Wolfenstein 3D and mods of the game. If you own a copy of Wolfenstein 3D, Spear of Destiny or the Mission Packs, you can play them as campaigns within C-Dogs SDL!

Wolf3d

if you have an installed Steam or GOG copy of Wolfenstein 3D or Spear of Destiny, C-Dogs SDL will automatically detect these installations and the campaigns will be added to the game.
If you're using a different installation of Wolfenstein 3D or Spear of Destiny (ie from a CD-ROM), simply create a folder in /missions with the files from your game (The extension will vary depending on which game you're installing, between .WL1 .WL6 and .SOD).

Mapsets and mods can be played, but some require a few extra steps; if you have your Steam or GOG copy, you can put just the modded files in their own folder within your game's \missions folder. C-Dogs SDL will combine them with your Wolfenstein 3D or Spear of Destiny installation to build the campaign.
If you are using a different installation of the games, you will need to have the mapset files and any remaining necessary game files inside the folder within \missions.

With just a minute of effort, it is easy to add compatibility with C-Dogs SDL for your Wolf3D project!


campaign.json

Wolf3D mods and mapsets can also be played, as long as they don't change the game engine. To make your game compatible with C-Dogs SDL, you can create a simple campaign.json file that will look similar to the following:

{
    "Version": 16,
    "Title": "Wolf3D - Astrostein",
    "Author": "Bruce Ryder",
    "Description": "A three level demo of a never released project that ported Laz Rojas' Astrostein from Mac Wolf3D to DOS back
        on the 2nd of October, 1996.\n\nRate this campaign, and download more at Campaign Dogs! http://cdogs.morezombies.net",
    "Ammo": true,
    "SkipWeaponMenu": true,
    "RandomPickups": false,
    "DoorOpenTicks": 210,
    "Missions": 3
}

This is the campaign.json file included in the download for Astrostein, a 3 level demo by Bruce Ryder.

The first set of variables, "Title", "Author" and "Description", are used for the display of information in the Campaign Select menu of C-Dogs SDL.

C-Dogs SDL

The last 5 elements are important, and except for the "Missions" variable, should stay the same as the above example for each Wolf3D campaign.

"Missions" is important, as without it C-Dogs SDL automatically assumes the amount of levels present based on the Wolf3D mod's file extensions. For example, WL1 files are automatically assumed to have 10 levels, and .SOD would have 21.

Using Astrostein as an example again, it is a 3 level project that uses the 60-level WL6 files. By assigning "Missions" a value of 3 in the campaign.json file, we tell C-Dogs SDL that the game actually ends at level 3. Without it, C-Dogs would try to play the other 57 maps as well.


Your own campaign.json file

{
    "Version": 16,
    "Title": "Game Title",
    "Author": "Author Name",
    "Description": "\n\nRate this campaign, and download more at Campaign Dogs! http://cdogs.morezombies.net",
    "Ammo": true,
    "SkipWeaponMenu": true,
    "RandomPickups": false,
    "DoorOpenTicks": 210,
    "Missions": 60
}

Create a new file in notepad with the above text, changing the "Title", "Author", "Description" and "Missions" values to match your game. Save it as "campaign.json", and include it alongside your game files on release.

This simple inclusion has minimum impact on the game files, but gives the player everything they need for C-Dogs SDL compatibility, giving them an additional way to experience your game!

Mapsets that are C-Dogs SDL ready can also be uploaded to Campaign Dogs, a child of Wolf3D.net dedicated to C-Dogs SDL campaigns!

MacenWolf

MacenWolf is a fork of the Wolf4SDL engine designed to emulate the environment of the Mac Wolf3D games. In addition, the engine is designed to be flexible and easy to create your own scenarios or games in.

If you've made a set of maps (or more) in MacenWolf, there is a standardized way of preparing and packaging the files so people can easily unzip and play.


Did you prepare your GAMEDICT.WL6 file?

When making a new MacenWolf project, you will most likely need to make a copy of the GAMEDICT.WL6 file that comes with the download of "core" MacenWolf to include in your published files.

This file contains many variables read by the engine to know how to handle the game files. The file includes everything from par times and music, to episode titles and level structure, all able to be edited from any text editor. The file is very well annotated, so it's worth reading through to see all the options on offer.

For most projects though, there's a few specific variables to pay attention to. These are all at the top of the file, because MacenWolf was built to be convenient.

Compatibility Flag

The Mac version of Wolf3D was originally released in several forms, with most mods and custom scenarios being Wolfenstein: The Second Encounter and Wolfenstein: The Third Encounter (And of course, many built on the demo Wolfenstein 3D: The First Encounter). There were several engine differences between The Second Encounter and The Third Encounter, and these are toggled between by commenting and uncommenting the variable:

//3rdenc

To enable the variable, simply remove the two slashes (This uncomments the line).

As noted in the "Modding Reference" text file included with MacenWolf, The Third Encounter has the following quirks, which will be enabled in your project if the variable is uncommented:

  • Shorter knife distance
  • No vacuum spot trick (In The Second Encounter, when you push a pushwall and stand around in the spot where the wall used to be, enemies cannot attack you)
  • Enemies can't open locked doors
  • Knife displays 0 ammo
  • Objects don't block projectiles, besides the cage and column block
  • Red frame in difficulty menu
  • 40,000 points needed for an extra life (Commented, it is only 20,000 points)
  • The point at which BJ's face becomes damaged (50% uncommented, 25% commented)
  • Map limits with the compatibility option enabled: Uncommented, 400 guards, 64 visible objects. Commented, 127 guards with 200 objects.

Episode Names, Starts/Ends, and Secret Levels

MacenWolf is designed to be flexible in how an author structures their scenarios, and uses variables from these next sections to manage that.

The first is episode names. Each episode planned in a project (Up to 12) should have it's own line.

Here's an example of the section in a project containing three episodes:

// ========== EPISODE NAMES 
// Rather self-explanatory. You can have up to 12 episodes/scenarios per game
episode1 "EPISODE NAME 1"
episode2 "EPISODE NAME 2"
episode3 "EPISODE NAME 3"

The game will read this information, and know there are three episodes as well as what to name them.

The next section tells MacenWolf when each episode starts, and which maps end an episode. This is important, otherwise MacenWolf will keep trying to play extra maps after finishing the final map in the planned project (Or, end prematurely).

The starts of episodes are determined using the startepisode* variable, with the * replaced by the episode number.
The finalmap variable tells MacenWolf which maps contain elevators that will "end" the game. Unlike startepisode*, finalmap does not require information about an episode.

Using the same example of a three episode game, we'll say each episode is 5 levels long (Ignoring secret levels for now). So the game will start Episode 1 on map 1, and end on Map 5, Episode 2 will start on Map 6 and end on Map 10, and so on.

// ========== EPISODE STARTS/ENDS 
// Specify the starting map for each episode/scenario in 
// your mod. You can have as many final maps as you like 
// and they're not tied to any specific episode, to accomodate 
// for certain rare episode flow decisions 
startepisode1 1 
startepisode2 6 
startepisode3 11 

finalmap 5 // the final map for Episode 1 
finalmap 10 // the final map for Episode 2 
finalmap 15 // the final map for Episode 3

If the planned project has secret levels, there's one more section to fill out. In this section, using the secretlevel* variable will tell the game that if there is a Secret Elevator present on the specified map (Which replaces the *), to send the player to the designated secret level.

In the example project, Episode 1 and Episode 3 will each have a secret level, which will be maps 16 and 17.
The secret level in Episode 1 will be found on Map 1, and will take the player back to Map 2 when it is finished.
Episode 3, however, will have a secret elevator on it's second level (Which is Map 12 in the project), and if completed will skip the player all the way to the final level of the episode, Map 15. So, the section below the STARTS/ENDS section will look as follows:

// ========== SECRET LEVELS 
// Any map can have a secret (alternate) exit, so for example secretlevel1 10 
// sends you from E1M1 to E1M10 and secretlevel10 2 sends you from E1M10 back to E1M2

secretlevel1 16  // The first secret elevator is on E1M1, and takes you to M16 
secretlevel12 17 // The second secret elevator is on E3M2, and will take you to M17 

secretlevel16 2  // Taking the secret elevator on M16 will take you back to E1M2, allowing you to
                 //continue on with the Episode. 
secretlevel17 15 // Taking the secret elevator on M17 will skip you through the game and take you
                 // straight to the final boss of Episode 3 at E3M5, which is the 15th map in the project.

The above sections are the main elements that should be edited when creating a project in MacenWolf, to ensure the game will play out as you have planned.

There are many other elements and features that can be activated and changed within the GAMEDICT.WL6 file, and it is worth taking a look at the options on offer.


Extra Elements

To further customize a project, MacenWolf allows authors to include extra image files to customize the look of the menus when a player runs their game.

A project may have it's own thumbnails associated with it's episodes. To do so, the author simply has to include a .BMP image (96x64px in size) in their project called "episode*.bmp, with the * replaced with the number of the episode. When MacenWolf runs the project, it will see these files and use them instead of the included defaults.

Episode 1 Thumbnail

The same can also be done with the menu layouts for the Episode/Scenario Select Screen (episodeframe.bmp and episode.bmp), and the Difficulty Select Screen (difficulty.bmp). Copy each file into your project's subfolder and edit to create your own custom menu backgrounds for your project.

Episode Select

Packaging the project for release

MacenWolf is built so that most mods and games built on it can be played utilizing the one copy of the engine.

To do so, the game allows customized files to be stored in subfolders inside the game directory, which are then started using commands in individual BAT files.

When releasing your game, following this standard ensures that things are kept consistent, easy and simple for the end user who wants to play your game.

1. Place your project files in their own folder.

Any edited files necessary to your project should go in this folder, which should be given a simple name. This includes your edited map files (GAMEMAPS.WL6, MAPHEAD.WL6) and the GAMEDICT.WL6 file edited with the information needed for the game.
Should your project go further and edit the sprites and textures in VSWAP.WL6, or any of the other files of the game, include those in the folder as well. If your project has other edited elements (Such as episode*.bmp files), they will also need to be in this folder.

2. Create a BAT file

The BAT file is the file that will tell MacenWolf to run the modded project instead of the core files.

To create one, simply start a new text document containing only the following line:

macenwolf --file modfoldername

Change modfoldername to the name of the actual folder the modded files are in.
Save the text file's name and extension to MODNAME.BAT, replacing MODNAME with the name of your project for convenience.

Assuming the folder containing your main copy of MacenWolf is located at C:\MacenWolf, the player will be able to run MODNAME.BAT from within that folder, which will start the game, but use the files in the subfolder specified (In the above example, it would run any files in C:\MacenWolf\modfoldername).

Test the BAT file to make sure it works (Ensure your mod is in it's subfolder within the MacenWolf folder), and if so, success!

3. Zip your files

When publishing your project, you only need to include your BAT file, and the folder containing your edited and modded files. When looking inside your zipped project, it should appear as follows (with variation depending on program used):

Zip Structure

4. Publish your game!

Do it! Do it now!

Your game is ready. It's time to upload it. Where can you go?

Wolf3D.net

This very website offers a means for users to create their own game pages for mods of all Wolf3D games (Including Blake Stone, Corridor 7, etc), and upload game files to it. Register an account on the website, and visit this guide to learn more.

Wolf3D.net is built to try and account for the various quirks of the Wolf3D modding community and the variety of games, addons and ports that exist.

ModDB

ModDB is a website for mods of all games, and includes it's own section for Wolfenstein 3D! ModDB allows registered users to create their own game pages to upload their projects to, as well as broadcast news and updates.

IndieDB

ModDB's sister website, IndieDB is a website for original indie games. If your game is an original that runs by itself (with no copyrighted material from other games), this can be an alternative location to upload, especially if you are already familiar with how ModDB works!

itch.io

itch.io is a major indie gaming platform that could also be the home for your game or project, if its an original that runs by itself (with no copyrighted material from other games).

Campaign Dogs

A child-site of Wolf3D.net, Campaign Dogs is dedicated to custom content in C-Dogs SDL, the topdown shooter. If your project includes a compatible campaign.json file, you can upload your project to this website as well, for C-Dogs SDL fans to enjoy!