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.
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:
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
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.
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.
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.
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):
4. Publish your game!
Do it! Do it now!