Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Melon

My unfinished newbie UDMF level editing guide

Recommended Posts

So a while back I made a very quick guide on the Something Awful forums on how to make maps for Doom for a bunch of people who had never mapped before. I never finished it, however I noticed all of the images were getting lost when waffleimages died and decided that it might be better to rehost the whole thing somewhere where more people are likely to find it in the event that somebody finds it useful. Bear in mind that I aimed the guide towards people who I imagined gave no shits about the annoying limitations of the original Doom, hence why I went for the super-flexible UDMF format. One day maybe I'll make a proper guide that also includes Boom format and other useful stuff, but today is not that day (tomorrow's not looking good either). Apologies for the multi-posting, the guide was split into multiple posts and it seems to make sense to leave it in that format.

How to make maps for Doom - Part 1

Contents
Part 1 - Setting up Doom Builder, basic map structure and controls for standard editing modes
Part 2 - 3D mode and its controls
Part 3 - Sector and Thing properties
Part 4 - Linedef properties, action specials, doors and lifts
Part 5 - Teleporters and flipping linedefs
Part 6 - Unpegging and sidedef propeties
Part 7 - Sound and basic monster teleport traps
Part 8 - More useful Doom Builder features
Part 9 - Skies and Sky boxes
Part 10 - Scripting

Things you will need:
1) Doom Builder 2 (or if your computer is complete garbage and can't run it, Doom Builder 1)
2) A copy of Doom 2, at least just the DOOM2.WAD file (or the original doom, but everyone uses Doom 2 because it's a complete upgrade)
3) A source port to actually play your levels with, e.g GZDoom, PrBoom+, Skulltag, etc.
4) The ZDoom wiki as your go-to source for finding out what stuff does or how to do things
5) Creativity

Things you might need:
1) A lump manager such as Slade 3 (this allows you to do things a level editor can't do, such as create your own enemies, add your own pretty graphics and give your level a name, and probably won't be covered by this set of tutorials)

Setting up Doom Builder 2
Open up Doom Builder and go to Tools -> Game Configurations. Doom Builder 2 doesn't come with all of the textures and stuff from the Doom games, because that would be illegal, so you'll need to tell the program where to find this stuff. Select "ZDoom (Doom in UDMF format)" and add in your DOOM2.WAD file.



Now select the Testing tab and add in the location of your sourceport in a similar manner. You might want to change the default difficulty to Ultra-Violence if you're not a big wuss.



(I would also advise selecting Tools -> Preferences..., clicking on the Appearance tab and checking the "Square things" box, but this is not necessary. This will show you exactly where the bounding boxes for the monsters and pickups are so you don't place monsters inside each other etc.)

Now that everything is set up, click on New Map and choose "ZDoom (Doom in UDMF format)" as your game configuration from the list. Leave the map as MAP01. You might want to immediately choose File -> Save Map As once the map drawing screen has opened to ensure the file actually has a name so that you can actually test your map (I would also advise saving frequently just in case). DO NOT SAVE YOUR LEVEL INTO DOOM2 WAD YOU RETARD.

The following guide will assume the default controls. You can change these at any time in the preferences.

Actually making your map

You should now be facing a big black screen with gridlines on it and the words "VERTICES MODE" in humongous letters at the bottom. Before we get to the cool stuff, here's a short explanation on what maps are made up of so you know what you're doing:



A Vertex is like the dots in a "join-the-dots" puzzle. These are the corners that you attach walls to, and are the "basic" unit in a map. A wall is made from joining two vertices together.

A linedef is most easily thought of as a wall (but doesn't have to be). These are the lines that connect two vertices, and can be given various properties and textures. Giving a linedef an action will let you do stuff with the architecture, such as a switch that you can use or teleporting anything that walks over it. Linedefs are usually two-sided unless there is empty space on one side. You can texture the front and back sides separately. The little line sticking out of the middle of the linedef shows which side is the front side. One sided linedefs should always have the front-side pointing inwards, Doom Builder should do this automatically unless you seriously cock things up.

A sector is the "floors and ceilings", and are made when you make a fully enclosed space with linedefs. Technically, they do nothing more than hold properties about that area, such as the height of the floor and ceiling, what texture they have, and whether they do cool stuff like hurt you or count as a secret area. One important feature about sectors is that because they just hold a set of properties, you can actually have entirely separate enclosed shapes all count as a single sector. While this does not speed up the performance of your level or anything, it can be useful for allowing sound to travel between different and separate areas of the map, or making lifts stop at certain places, however in UDMF format you can do all this stuff in a much more intuitive way.

Things (not pictured) are the objects. The player, monsters, guns and ammo, etc. This stuff should be really obvious.

Actually actually making your map

We're currently in Vertices mode, which lets us fiddle about with vertices, and can be accessed at any time by pressing v. There's a similar mode for linedefs (press l), sectors (press s) and things (guess what button you have to press). To start drawing, there are 3 ways to do this, either right click or double left click while not hovering your mouse over an existing linedef/sector etc., or press CTRL+D, which I find easiest.

In drawing mode, left clicking your mouse will place a vertex, and you'll see a line extend as you move your mouse, which shows you the linedef that will be created and it's length.



Complete a fully enclosed shape and you'll make a sector. Try it out. In drawing mode, pressing BACKSPACE will go back a step if you mess up while drawing, pressing ENTER will end the drawing prematurely with all you've done so far, and pressing ESCAPE will cancel the whole thing. Note that the vertices you're placing will both snap to the grid, and to any nearby lines and vertices, if you want to place something a bit closer to an existing linedef but not on top of it, you can zoom in and out with the scrollwheel and change the size of the grid with [ and ] (or use the two buttons at the bottom of the screen). Alternatively, hold SHIFT to ignore snapping to the grid for super precise placement, or there is an icon on the bar at the top which will toggle off snapping to the grid. Next to that is a button labelled "Merge Geometry". Never ever disable this or your map will fuck up! If you want to move your view around the level, either use the arrow keys, or hold space and move the mouse. Pressing HOME will fit your entire map onto one screen.

In the appropriate mode, you can move stuff by dragging it with the right mouse button. You can edit its properties by clicking the right mouse button once (or double clicking the left mouse button). If you want to highlight a number of them at once, a single left click will select or unselect a single thing/sector/etc at a time. Dragging the left mouse button will create a box and everything inside this box will be selected if you want to select a bunch of stuff at once. Finally, press c to unselect everything. Right clicking with multiple stuff selected will edit the properties for all of it at once.

Sometimes when drawing your level, you'll have an enclosed space that you want to be a sector, but isn't (this sometimes happens if you've delete a linedef and a sector is no longer "enclosed" in the same way it used to be). Situations like this is where Make Sector Mode comes in useful, accessed by pressing m. When in this mode, a single left click will attempt to flood fill the current space as a sector. It's also good for making two separate areas currently treated as the same sector into two different sectors (this usually happens when you draw a small shape to split a hallway in half e.g. to make a door, in this case both sides of the door will be the same sector, and sound will travel past the door and wake up the monsters behind it, usually not what you want).

Edit Selection Mode

One last mode that deserves special mention, highlighting a bunch of stuff and then pressing e will enter edit selection mode and let you manipulate stuff more easily. In this mode, a tab will appear at the right side of the screen called Edit Selection which lets you fiddle with numbers and flip/rotate/scale your selection. You can drag the selection around with the right mouse button and use the little squares on the selection box to rotate and scale the selection too.



Testing your shitty map

Press the play button at the top of the screen. Use the drop down to change the difficulty level or play without monsters, but neither should concern you yet.

Next time
This post is way too long already. My next post will detail the workings of the super awesome 3D MODE which is the main reason why Doom Builder 2 kicks so much ass.

Homework
Arse about with drawing sectors, then place a player 1 start thing, some monsters and ammo and stuff, and enjoy a extremely flat and boring frag fest. Don't worry about changing floor heights or textures or sector and linedef properties yet.

Share this post


Link to post

How to make maps for Doom - Part 2

3D mode

The coolest thing ever, 3D mode lets you see exactly what the map is going to look like as you build it, and lets you align textures and change floor heights directly. How anybody ever made Doom maps without being able to see this stuff in real time is beyond me, it must have been a complete nightmare.



3D mode is toggled by pressing w. To choose where the camera should actually start when entering 3D mode, exit out of 3D mode and press CTRL+W to place the camera where your mouse is.

In 3D mode use ESDF and your mouse to fly around the level. When you point the mouse at walls, floors/ceilings or things, they'll become highlighted, and you can change their properties by right-clicking.

Hover the mouse over a floor or ceiling and move the scroll wheel up or down and you will change the height by 8 units at a time. Hold SHIFT to move it in increments of 1. For reference, the player and monsters can walk up a step of 24 units, monsters will refuse to step on or off any height difference more than that.

Here I'm going to create a large box in the middle of the room, by drawing a square in drawing mode and then entering 3D mode to raise it up:



Note that the sides are red and have big exclamation marks on it, this means that it doesn't have a texture yet, and so will cause some horrible eye-raping effect called a Hall of Mirrors if we leave it like that and play a game with it. You can test the game and see for yourself. In order to texture it, hover over one of the sides and right-click to edit its properties. Select the sidedefs tab and you should be presented with something like this:



The warning sign tells us that a lower texture is needed, so click on it and select a texture, such as CRATE1. Alternatively, you can type the texture name into the box where the "-" is. This will texture one side of the box. In order to texture them all, you could do them one at a time, or you could select them all before editing the properties. An even easier way is to do the following: hover over a wall whose texture you want, and press CTRL+C to copy it to the clipboard, then hover over another wall and click the middle mouse button to paste the texture. If you hold SHIFT while middle-clicking, the texture will flood fill across all of the adjacent walls that have the same texture you're pasting over (in this case, no texture), which is a quick way to replace the texture in the whole room. Note that when you flood fill a lower or upper texture, both the upper AND lower textures will be pasted over, which is not always what you want.

There are two main ways to align a texture. You can hold the mouse over a wall texture and hold and drag the left mouse button to drag the texture along the wall, or you can hover over the texture then use the arrow keys to fine tune it. Another super cool feature is auto-align, hover over the texture then press a, and all of the adjacent walls with the same texture will be horizontally aligned to that one. By pressing SHIFT+A, it will align them vertically. This is an easy way to very quickly align all of the walls in a room in a way that doesn't look like a horrible mess, but you may need to fine tune some of the textures afterwards so bricks don't get cut in half by a lower ceiling etc if you really care about that sort of thing.

Finally, you can change the light level inside the sector by hovering over a floor or ceiling and moving the mousewheel up or down whilst holding CTRL.

Much like the 2D mode, pressing c will deselect everything. You can press g to toggle on "gravity", this will make it so you walk around the level rather than fly, but you'll probably never use it.

Note that changing heights, texture alignments and brightness levels can all be done inside the linedef and sector properties by typing in the numbers, but you won't do this very often. You may have also noticed that you can't align the floor or ceiling textures. While you can align them, it's a bit more complicated and we'll get to that eventually.

A cool feature: Sometimes you want to raise/lower entire portions of the level but all your sectors have different floor/ceiling heights. Rather than change all their values manually, select them all then put something like "++32" or "--32" in the floor/ceiling height fields and you will raise/lower all of them by 32 (or whatever value you want to change them by).

Next time
We'll dive into the properties section so you can start making doors and lifts and switches.

Homework
You now know how to change lighting levels, floor and ceiling heights and change and align textures, so make a level that incorporates all these things. You still won't be able to give it an exit, but you can have some fun messing around and testing things at this stage.

Share this post


Link to post

How to make maps for Doom - Part 3

Sector effects

Right click on a sector in Sectors Mode (or on a floor or ceiling in 3D Mode to get a window that looks like this:



Here you can manually set the floor and ceiling heights, brightness, and change the textures like you would a wall texture. Take note of the "tag" section at the bottom, we'll be coming back to that later. The effects section lets you make the sector do some cool stuff, and we'll take a look at that now.

Click on the button to the side of the dropdown box, and you'll get a window like this one:



In Doom and Doom2 map formats, this list will let you choose what funky thing you want the sector to do, such as count as a secret area, hurt the player, or flash the lights. (This is actually a list of the effects in Hexen rather than Doom.) However, in UDMF format, some of the options in the list, such as #9 : Secret area, won't actually work (at least, I've never managed to get them to work). Instead, click on the "Generalised Effects" tab and you'll be presented with a bunch of dropdowns that give you even more control:



Here, you can combine a whole number of effects together to get exactly what you want. Do you want a damaging sector that's also a secret? Well you can!

But sometimes, we want even more control over the effects we can give our sectors, such as making the lights blink at a very specific interval. Fortunately, in UDMF format we can do this via scripting, but it's a long way to go until we get to that part. In the meantime, if you're not sure what a particular sector effect does, why not check the sector specials page on the ZDoom wiki.

Even more sector stuff

Come out of the specials menu and go back to the standard sector properties screen. We have a second tab in this screen called "Custom". Select it to get a screen like this:



This screen is exclusive to UDMF format and lets us change a whole bunch more properties that ZDoom supports. Remember how you couldn't align the floor and ceiling textures? The "panning" fields on this screen is where you do it. Unfortunately, these won't actually be shown in Doom Builder's 3D Mode (yet, it's being worked on), so you'll have to test the map to see it. In addition to manipulating the textures, you can also make it so that the brightness levels on the floor and ceiling are different to the general brightness level of the sector, and a whole bunch of other cool stuff like disabling fall damage for that sector (if your mod uses it, of course) or the gravity.

Vertex properties

Verticies don't have any properties.

Thing properties

For this part of the tutorial, we're only going to look at the "Properties" tab, which looks like so:



The actions tab is very similar to the actions you can give linedefs, but it's such an involved topic that it'll be covered in its own part. The custom tab only has one use involved in making conversations, which is beyond the scope of this guide.

Hopefully by now you've realised how to change the thing from a player 1 start to something else by using the tree on the left side. The coordiantion section lets you set the angle the thing is initally facing, and in UDMF format, how high it starts above the ground (note that the Z Height is relative to the floor, not the absolute position!).

The settings section gives us a lot of basic options about when the thing appears and how it behaves. In other map formats, each thing has three skill settings; Easy (ITYTD and Hey Not Too Rough), Medium (Hurt Me Plenty) and Hard (UV and NIGHTMARE). In UDMF format, we can set whether we want the thing to appear in each skill setting separately (Skills 1 through 5), it even provides 3 more skill flags in case we want to add even more skill choices for our mod.

Similarly, we can set if we want it to appear in singleplayer, co-op or deathmatch.

Marking a monster as Deaf means that it won't wake up when you fire a gun, only when it sees you or you bump into it or hurt it. This is more useful than it might sound.

ZDoom adds a few extra options such as some basic rendering options. Be careful with the Dormant option, if a monster is dormant, it won't do anything and can't be hurt, which is a nice way to gain some efficiency if you've mad a humongous map, or to prevent a lost soul headbutting you to death during a cutscene, but the player should never come across a dormant monster or else it'll look bugged. You'll need to activate it before the player can reach it via scripting or an action first. In almost every map you'll probably make, the performance gain is trivial, so don't bother.

Finally, we can make it so that the thing will only appear if you're playing as a certain class. In Doom, there is only one player class, DoomGuy (as opposed to, say, Hexen's 3 classes) so you shouldn't need to fiddle with those flags unless you're making a special mod.

Next time

Remember how I said we'll make doors and stuff? I lied. That comes next time.

Homework

Implement difficulty settings into your crappy practice map. Add an inescapable slime pit that slowly kills the player, then never ever do it again because that shit is seriously annoying.

Share this post


Link to post

How to make maps for Doom - Part 4

Linedef settings

Today we'll be looking at linedef properties and action specials. Finally, you'll be able to make a door.

Right click on a linedef to bring up the following screen:



At the top is a number of "settings" flags, these define a couple of very basic properties the line should have. If a line is set to impassable, then no monsters or players can walk past it, but projectiles can still go through it (unless the line is one-sided and there's nothing on the other side). Alternatively, you can use the Block players, monsters, floating, projectiles and everything flags to fine tune how this works. Block sound doesn't work exactly like you might expect, and we will return to how sound travels through the map later.

We will also return to lower and upper unpegged later, these are fairly useful but require some explanation as to why and this part of the tutorial is already jam packed.

Secret, Hidden and Shown refer to how the line is displayed in the automap. Hidden and shown forces them to never/always be shown. Secret forces the line to be displayed in the colour of a standard wall even if it's a door or switch, so that the automap doesn't spoil your cunningly hidden secret doorway. It has nothing to do with the secret area count for the level.

If a linedef is not an outer one-sided wall and you give it a middle texture such as some see-through bars, then this texture will not be repeated vertically up towards the ceiling. Choosing "wrap midtexture" will make it so that it does. "Walkable midtexture" will make the texture solid so you can stand on it, and is an alternative to preventing players from walking through it without having to make the linedef completely impassable.

All one-sided lines that make up outer walls should be impassable (they will by default), and all other linedefs should have the doublesided property set (again, they will by default). Doublesided linedefs may be marked as impassable, but outer walls should never be marked as doublesided.

Action specials

The middle section is where we will make our linedefs interactive, so they can open doors and lower lifts, as well as provide a few cool special effects, such as mirrors. There is a big dropdown, next to it is a small button with a little image on it. Click this to get the following window:



This very large tree contains all of the interactive actions the linedef can have, as well as a few special effects you can apply to the line. At the top you'll notice some text saying what certain letters mean. This text doesn't actually apply to the UDMF format. In other map formats, how the action is activated (walk over the line, use it like a switch, shoot it, etc.) and how often it works (once only or repeatable) depends on the action special, and some basic actions such as "open door" are repeated multiple times, once for each combination. In UDMF, each action is generic and listed once, we then set the properties that we want it to have separately.

There are so many action specials that it would be silly and very boring to go through every single one. Instead, we will go through the most common and useful ones, as always the ZDoom wiki has all the information you need.

Doors

Click on the plus next to "Door" to get a list of the possible actions we can use involving doors. Note that Door Raise refers to doors that open and then close automatically after a short while. For now, choose Door Generic, as this single action can be used to make almost any type of door you could possibly want.

Back in the main linedef property screens, the 5 entry boxes underneath the action special dropdown are now activated like so:



In UDMF format, we are given absolute control over exactly how we want our door to behave. We can choose which sector we want to be the door, how fast it should open or close, how long it should stay open for (the delay), and what keys we want to lock it with. If the sector tag is zero, then it will refer to the sector on the back side of the linedef, you won't need to set the tag on the linedef. We'll come back to what the sector tag actually means in a second.

Reference: To get a door exactly like the doors in Doom, use the following properties: Speed -> 16, Delay -> 150.

A note about time: Doom runs at a fixed 35 frames per second (Zdoom has a higher framerate and smooths out the action between these frames, but the game itself only runs at 35 FPS). All time is referred to in frames, so to have the door stay open for 3 seconds, you want to give a delay value of 3*35 = 105.

Underneath these 5 entry boxes are a number of further property flags to tick, this is where we set how the door is activated and how often. Any and every combination of the flags is valid. Note that having none of these flags enabled will make the action completely unusable, everything must be enabled specifically.

If you want the action to work every time and not just once, turn on Repeatable action. If you want a door to openable by a monster, you will need to place the action on the door itself and turn on When monsters bumps. Don't forget that for doors you will most likely want to enable When player presses use, forgetting to do this is my most common mistake when it comes to making doors.

You can limit the action only being triggerable from the front side only using Front side only. Activating Switch height check will make it so that your player must be able to "reach" the switch before he can press it, the default behaviour is that the player can flick switches under the floor or on the ceiling without looking at them because Doom is a 2D engine. Finally, having a linedef with an action on it usually blocks any linedefs immediately behind them from being usable; when you press the use button it checks in front of you for the first action it finds close in front of you then stops, by enabling Pass use on the linedef will be triggerable and then the check will keep going.

Now that we've set up how we want our door to open, we'll want to set up the sector that is supposed to be the door.

Draw a sector where you want your door to be, then right-click on it to go into its properties. The first thing to do is to lower the ceiling so that it is at the same height as the floor. A door is really nothing more than raising the ceiling so the player can pass. The height of the sector should be 0 unless you want monsters to see and hear you through it. Don't forget to set textures onto the walls. Next, unless the action to open the door has been placed on one of the linedefs that make up the door itself, you'll want to give the sector a tag so that we know what door we are referring to.

The following image shows a sector that has been set up correctly to work like a door. Note that the Identification tag box has a value of 1 in it, this is the tag I have given this door, any door action referring to sector tag 1 will work on this door, and also any other sector I have tagged as 1 (so we can open multiple doors with a single action).



Note that if your linedef is usable, and you put a switch texture on it, then this texture will animate correctly automatically.

What about the tag for the linedef?: In other map formats, you can't set arguments for each action, and so the only way to tell the linedef that you want it to open doors tagged with 1 is to set the tag of the linedef to 1 as well. This is not the case in UDMF format! In UDMF, the tag for the door to open is determined in the arguments for the action, so we do not need to set the tag for the linedef. This means the linedef can be given a different tag and we can get another action to refer to the linedef if we want to.

More cool ways to open doors

Right click on a thing. On it's properties, there is a tab called Action, clicking on this will bring you to a action dropdown just like the linedef. By setting a door action onto a monster, we will trigger the action when we kill the monster! Similarly, putting it on a pickup like ammo or a key will trigger the action when we pick it up. Different things trigger their action in different ways, but these two are by far the most common, again the ZDoom wiki has the information you need.

I'm confused WAAAH!

I've made a wad that has nothing but a hallway filled with doors and some examples of different ways to activate them. You can download it to see how it all works here.

The walls inside the door rise up with the door and it looks silly!

All in good time my good friend, I don't want to bog you down with information just yet (if you can't wait, give those walls the "lower unpegged" property.)

The monsters behind the door are waking up while the door is closed!

We'll deal with this when we come back to explaining how Doom's sound travelling works.

-- END OF ABSURDLY LONG SECTION ON DOORS--

Giving your level an exit

You'll want to use the action special "End Normal".

Lifts

Lifts work just like doors and you set them up in a similar way, except the floor moves instead of the ceiling. They're actually called Platforms inside Doom Builder. Elevators are similar, except the ceiling moves with the floor. so the sector always stays the same height.

Platforms will move between the floor heights of sectors that connect directly to the sector that is the platform. So if you raise a platform, it will move until it reaches the height of another floor, then stop. You will need to trigger an action again if you want it to keep rising. The same applies to lowering platforms. Of course, if you use the Platform Lower Wait Raise action, it will automatically go back up after a delay without triggering a second action, like the automatically closing doors.

Next time

This was heavy going. We'll examine a few more useful action specials next time.

Homework

Doors doors doors. Practice doors, and then make some lifts using what you learnt about doors. Make a door open when you kill a monster, and set up a trap where picking up a key results in walls around you opening, releasing monsters.

Share this post


Link to post

How to make maps for Doom - Part 5

Teleporters

The last of the common and useful action specials. This involves placing a teleport destination thing where you want the teleporter to send things to, and then setting up a line special that sends the thing to the position of the teleporter destination when it is activated. The way you set up a teleporter has changed in UDMF format to the traditional map formats. In traditional map formats, there is no way to tag things, so the engine worked out what destination you wanted to use by tagging the sector it is in and then only placing one destination in that sector. In UDMF format, you just tag the destination thing directly.

Start off by creating a little teleport platform in your room like so (you don't have to create a teleport platform, but we might as well):



Now select all of the linedefs that make up the platform, and give them the action special "Teleport" (action special 70). Next, place a teleport destination thing where you want the teleporter to go to, and right click on it to enter its properties. Orient it so that it is pointing in the direction you want the player to face when they are telported, and then select the "Action" tab and give it a tag number. Go back to your linedefs and set the argument "MapSpotTag" to the tag you gave your destination thing. Keep the sector tag argument at zero unless you would rather set up a teleporter the old fashioned way. You can stop the teleporter from making a "whooshwooshwoosh" noise and produce a green fog when it teleports something by turning the fog argument to No. Note that this only disables the effect on the sending side, if you want to disable it where the destination is, you will need to use the "Teleport (silent)" action instead. Finally, you will likely want to set the properties "Repeatable action" and "When player walks over", and probably "When monster walks over" too.

But wait, regardless of whether or not you selected "Front side only" teleporters only work if something walks over it from the front side of the line. Check what direction your linedefs are pointing in, if they are pointing in to the platform, then you will need to turn them around, otherwise we will only teleport when we try to step off of the platform rather than on it.

Flipping linedefs

To get a linedef to face the other way is as simple as highlighting it and pressing "f" (not in 3D mode). Alternatively, you can go to Linedefs -> Flip Linedefs.

Linking teleporter platforms

Having a teleport platform send a player to another teleport platform, and vice versa, is as simple as placing the telporter destinations on each teleport platform and then setting the destination tags appropriately.

Important notes about teleporters

Monsters cannot telefrag. If something is in the way of the teleport destination so the monster can't teleport without telefragging, then it won't teleport at all and will continue to walk over the line. The exception to this rule is MAP30, it has to allow it in order to ensure that the Icon of Sin can spawn monsters correctly, and here they will telefrag everything, including each other. You can easily turn this behaviour off for your mod when using ZDoom based ports, but that can't be done in Doom Builder (it requires editing a different file).

Players can telefrag anything, especially each other. If you're making a co-op wad, I would either staying clear of teleporters players can enter, or using scripting to send each player to a separate destination to minimise the risk of accidental telefragging. Alternatively, stop playing co-op with assholes.

Some other cool action specials

The single other most useful action special is number 80, "Script Execute". We will deal with this at the end of the guide when we learn about scripting.

The floor and ceiling specials will give you complete control over the height of the floor and ceiling of sectors. The light specials similarly let you change the brightness and give you full control over special lighting effects. Some action specials that change how walls are rendered will work when placed on a wall without needing to be activated first, try placing the "Line Horizon" special onto a wall and see what happens.

Next time
There's not much left to cover until we get into scripting, but before then we'll be checking out what unpegging is and why it's useful, how sound travels through levels, the custom fields you can place directly onto the sides of linedefs, a few more miscellaneous Doom Builder features and some general mapping tips and tricks (probably not all crammed into one update, of course).

Homework
Make some teleporters and ensure you can get them working correctly. Try placing a teleport linedef that only monsters can use to add a bit more danger to your traps, such as making a monster come out of a monster closet only to suddenly teleport behind the player.

Share this post


Link to post

How to make maps for Doom - Part 6

Unpegging

I've been teasing about telling you what this is for a while now. Unfortunately, it's nowhere near as exciting as my teasing may suggest, but it is pretty useful for making your level look nice. Texture alignment in Doom is surprisingly complicated due to the way the 2.5D engine works.

When you apply a texture to a one-sided "outer" wall, by default the top of the texture is "clamped" to the top-left corner of the wall (and then your texture alignments move it from there). This is all fine and dandy, but what happens if the ceiling moves? If you've been doing your homework when following this guide, you'll have noticed that as a door opens (which is essentially just raising the ceiling), the texture moves along with it, and as a result looks completely ridiculous.

By selecting "lower unpegged" in your linedefs options, you will change it so that the bottom of the texture "clamps" to the floor. This way, it'll no longer move when the ceiling moves so your doors no longer look daft. Of course, instead it'll now move along with any height changes in the floor. There's no way to totally unclamp a texture ("Upper unpegged" does nothing on a one-sided wall), so if for some reason you want to move the floor and ceiling while keeping the texture still, you're shit out of luck.

So what about two-sided linedefs? These are more complicated because they can have anywhere up to six separate texture applied to them, an upper, lower and mid texture for each side (although if all six of these are visible at the same time, you're doing something horribly wrong, because it should be impossible). Worse, the linedef setting applies to all six of these textures, and affects different textures in different ways.

Midtextures on a two-sided linedef work the same as on a one-sided texture. Say for example you want to place some transparent bars in your level to make a cage, they'll be on the ceiling by default unless we either lower unpeg it or align it so that the texture looks like it's on the floor (remember, mid-textures on two-sided lines don't wrap vertically unless you enable "Wrap midtexture"). (Because I've not really mentioned it yet, mid textures on two-sided linedefs don't do anything, they're just rendered. They're completely walk through and monsters can see through them. Unless you give them special properties like "impassable", their only purpose is to block sight to hide stuff behind or make shoot through walls such as cages using partially transparent textures).



For upper textures, they are by default clamped to the lower ceiling. Think of the door, as the lower ceiling moves, the texture moves with it. Similarly for a lift, as the floor moves the lower texture moves along with it because the texture is clamped to the higher floor. So this appears to be what you might want. But consider what happens if you make a window between two rooms:



Uuuuuuuuurg! This is the exact opposite of what we want. Worse, when you try to align it, you realise that the texture alignment applies to the entire sidedef, there's no setting the alignments for the different textures separately. Fortunately, unpegging lets us reverse this so that the texture aligns exactly how we want it to. Upper unpegging the linedef will change how the upper texture is aligned, and lower unpegging will change the lower texture. So by setting this linedef to both upper and lower unpegged, we'll get the result we want.

Easy unpegging in 3D mode

Hover the mouse over a wall and then press "U" or "L" to toggle the upper or lower unpegging of the wall respectively. This will let you immediately see what it's doing so you can get the result you want with no fuss.

Custom properties for sidedefs

I briefly skimmed over the "Custom" tab for linedef properties because there was little in it, but there's actually a whole load more properties available, however, they're set separately for each side of your linedef.

You will have undoubtedly noticed by now the "Custom fields" button next to where you set your textures. Go on, press it.


(Look at me re-using images. Laziness forever!)



See those offset fields for the top, mid and bottom textures? Well I'm a huge lying bastard, you can in fact align the textures separately (in UDMF format)! However, as with all custom fields, you can't see it in Doombuilder's 3D mode and so will have to test the level to see it. You can now get exactly what you want for those times when your alignments just aren't cooperating. You can also altar the light level so that it is displayed differently to the brightness level of the sector. Bear in mind that all of these are relative, the orginal alignments and brightness levels are set in the standard way first, and are then added/subtracted by these custom fields afterwards.

Next time
Unpegging took way longer than I expected it to. We'll get to sound next time, and maybe a couple of other fun bits along with it before we get into the real heavy advanced stuff.

Homework
I dunno, unpeg some walls or something.

Share this post


Link to post

How to make maps for Doom - Part 7

Sound

Doom has a feature in place where shooting your gun wakes up all of the nearby monsters not marked as deaf. (It's actually when you fire any weapon, so punching the air will do the same thing). The way it works is fairly simple but perhaps not terribly intuitive, so it helps to know the ins and outs so you can avoid potential problems, and perhaps more importantly, exploit it to do neat stuff.

I should clarify that I'm not talking about sound effects here, this "sound" is something you can't hear, just a simple process for waking up monsters.

Sound travels by flooding out across sectors that are next to each other. Firing your weapon will always wake up any monsters in the same sector as you, the sound will then travel to all nearby sectors and only stop spreading out when there is no "physical gap" in the passage between sectors (e.g. a closed door or two sectors where the ceiling of one is below the floor of the other) or when that sound has passed over two linedefs with "block sound" turned on. Why is it two and not one like you might expect? I have absolutely no idea, but this is how it was in Doom, and so it's stayed for consistency.

A very important feature to note is that sectors can be made up of any number of separate unconnected rooms. If the sound travels into any of the rooms that make up this sector, it will immediately travel to all of them. This lets you wake up monsters in other parts of the map should you wish to do that. It's also the biggest source of confusion when a closed door doesn't appear to be blocking sound.

In Doom Builder 2, if you draw a hallway as a single sector and then cut a door into it like so:



then it will keep both parts of the hallway on either side of the door as the same sector. This means that although the door blocks sound like it should, it doesn't matter because the sound will magically appear on the other side of it anyway. You can tell if multiple parts of the map are the same sector by entering either Sectors Mode or Make Sectors Mode and hovering over a sector, if other parts of the map highlight, then they're the same sector. You can fix it by using Make Sectors Mode to turn each part of the sector into separate sectors.

A working example, Doom format compatible monster teleport traps

In UDMF format, there are a number of ways you can make monsters teleport in to ambush the player, each with various advantages or disadvantages. In the original map formats, there only really one way to do it, can be exploited by the player to prevent it happening, slow to trigger and there's a bit of randomness involved in when the monsters finally decide to teleport in, but it works and is a nice example to use to bring together a number of features we've learnt about so far.

Despite this method working in all map formats, we'll still do it in UDMF format. For other formats, the way you set up doors and teleporters may be slightly different, but is otherwise identical.

All we really need to get monsters to teleport is to make them walk over a linedef with the teleport action. The problem comes in that the only way to make them move is to wake them up. Ensuring that they have line-of-sight to the player is not always possible and sometimes results in a silly looking hole in the wall. Our other option is to wake them up by exploiting the way sound travels.

Unfortunately, unless you force the player to shoot a switch (such as in Doom2 MAP19) to exit the starting area, a player can sometimes deliberately make it through parts of your level without ever firing his gun. If this happens, the monsters will never wake up and they won't teleport, breaking your cunning ambush. Let's pretend the monsters will be woken up before the ambush is triggered so it all works correctly.

First, let's set up a simple scenario, the player picks up a seemingly unguarded key which totally-not-a-trap-honest and, surprise surprise, monsters teleport in. Draw your room with the key in it, and then draw some extra rooms to store the monsters in. It should look something like this:



We will need to make it so that the sectors the monsters are in, and a sector that sound will travel to before the ambush should be triggered are the same sector. For this example, we might as well use the key room. Go to Sectors mode and left click on the key room, then click on all the monster rooms so that they are all highlighted. Now press "J" or choose Sectors > Join Sectors. This will make all the sectors the same, making them all inherit the properties of the first sector you selected (hence why I told you to select the key room first). You may have noticed another option, "Merge Sectors" (press "Shift+J"). This does the same thing, except any linedefs connecting two sectors you will merge that are next to each other are deleted.

Now that the monsters will hopefully be awake, we will need to stop them from teleporting in until we are ready. There are a few ways we can do this that are basically the same, either we put the telport lines behind a door, or on a lift that lowers/raises when we're ready. We'll use the door method here because you should know how to make them like the back of your hand.

Behind the doors you will want to place the teleport lines. You must ensure that there is enough room for the teleport line to cross the centre of the monster, if it is too close to the wall and the monster can't walk far enough over it, it won't work. So far it should look something like this:



You should be able to see the doors, teleport destinations and teleport lines. Don't forget to link up the teleport lines to their destinations and to set the property "When monster walks over". Now we'll need to get the doors to open. Set the action on the key to open a door and tag the doors appropriately. Your monster trap should now be in a working state.

Test it. You'll notice that nothing will happen when you pick up the key until you fire your gun, so ideally fire it first and it should work as expected. If you're having trouble getting it to work, you can download the example I've used for the screenshots here.

You've probably also noticed that it's a bit slow. You can sort this by doing two things, making the door open faster and moving the teleport line in front of the door. Provided there is not enough room for the monster's centre to cross the line while the door is closed, it won't teleport. The closer the line is to the monster's postion, the less time it takes to teleport in, obviously.

Next time
We'll cover some miscellaneous things I should have mentioned earlier. Oops.

Homework
Make a teleport trap like the above example. Try trapping the player at the start unless he shoots a switch to escape to ensure that the monsters will be awake.

Share this post


Link to post

How to make maps for Doom - Part 8

I'm going to cover some small miscellaneous things in this update, mostly extra useful tools Doom Builder 2 has that I've not covered yet.

Press "t" in 3D view to toggle the visibility of things in 3D view. I forgot to mention this earlier. This is useful if you want to select the floor below a thing but the thing keeps getting selected instead.

Map analysis mode

One of the icons at the top of the screen is a tick. Press it to open the map analysis window.



This window will let you run a check in your map to try and find errors. It won't catch everything and not everything it flags up is necessarily an issue, but it's an extremely useful tool and you should always run it before releasing your level to the world.

Thing filters

Right next to the tick icon is an icon that looks like a funnel, with a drop down next to it. This dropdown will let you highlight things according to what skill level they are set to appear in, so by selecting the Skill 1 choice, all of the things that will appear in I'm To Young to Die difficulty will be highlighted. By clicking on the funnel icon next to it, you can set up extra thing filters.



Things can be filtered by the category they are listed in in the thing properties window and can also be filtered by the property flags (such as skill level or whether it appears in co-op). You can filter the property flags in 3 ways: an empty checkbox means that the thing must not have that property selected, a tick means it must have that property selected, and the blue filled box you can see above means that it doesn't matter what the setting is for that property. The things filter is a great way to quickly see how you've set up your difficulty settings or filter out any enemies you've added for co-op when trying to balance single player etc.

Gradients

When in sectors mode, three icons will appear at the right of the icon bar, Make Brightness Gradient, Make Floor Heights Gradient and Make Ceiling Heights Gradient. These three icons will let you quickly make sectors gradually change height or brightness in case you want to make stairs or light that smoothly dims as it moves away from a light source, for example.

Let's use stairs as an example. Make a bunch of sectors that you want to turn into stairs. Set the height at one end to be the height of the highest step, and the height at the other end to be the height of the lowest step. Now select them all in sequence, numbers should appear on each one as you select them. When they are all selected, press the floor heights gradient button, and all of the sectors will have their floor height set so that there is a gradual linear change in height between them. This is a lot less fiddly than doing it all manually yourself.

Easy curves and circles

When in Linedefs Mode a Curve Linedefs icon will appear at the right of the icon bar. This lets you make smooth curves out of linedefs. To use it, make a single linedef whose end vertices are at the points where you want the curve to start and finish (if you want to make a complete circle, I find it easiest to make two semi-circles with this method then join them together). Select the linedef then press the curve linedefs icon and a new window will appear. This window lets you choose the angle you want on the curve and how many linedefs should be used to make the curve. The more linedefs you use, the smoother the curve but you don't want to use an excessive amount because that's horribly inefficient. This mode should be fairly self-explanatory, although you'll probably want to have "Fixed Circular Curve" checked.

Next Time
We'll talk about skies and skyboxes, and then that should wrap up the "beginner" parts of the tutorial, and we can start to move on to the more complicated stuff such as slopes, bridges ,3D floors and scripting.

Homework
Why did I make this little section? There's nothing worth saying in this section half the time.

Share this post


Link to post

How to make maps for Doom - Part 9

Skies

It's not been mentioned in the guide yet but you've probably figured it out for yourself already, if you want the sky to appear, you need to place the texture F_SKY1 on the ceiling (or floor) of your room. Something you may have also noticed is that it doesn't work if you place it on a wall, it's floors and ceilings only.

Yet another thing you've probably noticed is that when you browse through the textures available, you'll find the images used for the skies listed:



Although you're free to place the sky images directly into your map, they'll be treated like a standard texture and might look a bit stupid. Only F_SKY1 is rendered as the sky.

Unfortunately, which sky is displayed in the level cannot be set in Doom Builder, this is actually hard coded into the original Doom exe file. Much like level names and the level music, you can change it in ZDoom, but you can't do it through Doom Builder.

Making walls show the sky

You probably don't want your room with the sky to have all of the walls go up to the height of the "ceiling" where your sky is, and might want an effect similar to these walls in E1M1:



To get this effect, make two sectors next to each other both have F_SKY1 as their ceiling texture, then lower the height of one of the ceilings so there is some "upper wall" showing (where you place upper textures). The Doom engine will ignore any textures placed on this wall and draw the sky instead. You want something like this:



In the picture above, the totally out-of-place lava rock texture won't be drawn and you will see sky instead. You can place any texture you like on the upper walls between two sectors with F_SKY1 on the ceiling, the player won't see it. The official id maps actually had no texture at all on these linedefs, you can do this too if you want but Map Analysis mode will flag it up as an error, so for piece of mind you might as well give it a texture.

Take another look at that E1M1 screenshot, you'll notice the little building actually has an upper linedef visible above the archway where the entrance is. This is achieved by placing a small thin sector directly in front of the doorway and lowering it to the height of the building, putting F_SKY1 on it's ceiling. Because the doorway doesn't have F_SKY1 on it's ceiling, the upper wall between these two sectors is drawn normally.

A problem to watch out for

Armed this amazing knowledge, you might go straight out and do the following:



This little building has a lowered sector all around that shows the sky instead. It looks pretty cool. But what happens if we move over to the side?



Oh no! The problem is is that the upper wall is still there even if you can't see it, blocking the view of the big wall behind it. It looks ridiculous.

It's at this point when people usually start to realise the horrible limitations that a simple 2.5D engine imposes on how you can make your maps. A simple stand-alone building with a lower ceiling that you can walk around just isn't possible without the above happening. (This is actually a big lie and is totally doable with 3D floors, but that's for another time).

Sky boxes

Want to change the sky but are useless at making replacement images that look good? One alternative is to use a sky box, which instead of drawing the sky will draw what some other camera sees instead. Setting these up in UDMF format is incredibly easy.

Make a sector unconnected to the rest of the map and put all of the architecture you want to show as the sky inside it. Then place thing #9080 Skybox Viewer (found in the Cameras and Interpolation category) in this room (you may want to increase the Z height so that it's a bit above the floor). You may need to fiddle around with the angle it's pointing in to get it to face the right way. Rather nicely, if the skybox viewer sees some sky, it'll render it as the sky rather than some eye-raping infinite repetition of the skybox. Bear in mind that at the first attempt you might make the room for your skybox quite small, in which case everything will look humongous and the textures will be blocky because the camera is so close.

Even better, you can actually make multiple skyboxes for a single map if for some reason you want to make a ridiculously huge map. To get this to work, just use multiple skybox viewer things and give them different tags, then place a skybox picker thing in every sector that has F_SKY1 in it in the main part of your map and give it the same tag as the skybox viewer whose view point you want to see as the sky.

Next time
That's it for the basics! Finally! You are now armed with enough technical knowledge to make some really good Doom maps. It only took 9 short parts too, pretty easy right?

Share this post


Link to post

How to make maps for Doom - Part 10

Scripting

Scripting is such a major and incredibly useful topic that it's going to have multiple parts of this guide solely dedicated to it. A whole new world of possibilities opens up in Doom mapping using even the most basic of scripts. The scripting used in ZDoom is ACS which was initially developed for Hexen by its creators (fun fact: ZDoom is technically more of a Hexen source port than a Doom port!)

Scripting is only available in ZDoom map formats (and Hexen format too I suppose). Of course we're going to carry on using UDMF format.

What scripting is good for

Almost everything, but 99% of the time, you will likely be making scripts do one of the following:
1) Give the player character a "tag" so actions can refer to the player indirectly. Placing a tag on the "player 1 start" thing doesn't transfer it over to the player. The only way to give the player a tag is via scripting.
2) Making a linedef trigger perform multiple basic actions all at once. No need for multiple linedefs placed really close to each other!
3) More control over lighting and other visual coolness. You can specify exactly how many frames you want a light to blink on and off for, for example.
4) Ridiculous over-the-top bullshit nobody likes playing. I won't be covering this one in the guide.

Doom Builder 2's script editor

On the icon bar at the top is an icon that looks like a piece of paper. Click on it to open up the script editor. The editor has two tabs, DIALOGUE and SCRIPTS. You'll want to use the SCRIPTS tab (we won't be covering interactive conversations in this guide).



The script editor has its own icon bar, the only one you will really need to press is the one at the end, the piece of paper with a lightning bolt through it. This button will compile your script.

The basics of scripting

The very very first line all of your scripts should have is the following:

#include "zcommon.acs"
Your scripts flat out won't work without this. This line tells the script compiler that you're scripting for ZDoom. You only need to write this line once, all of the examples that follow will have this line at the top, obviously you don't need to copy it if you've already got it at the top of your map's scripts editor!

Coding up a script requires that you follow a special format. Much like how sentences are required to begin with a capital letter and end in a full stop, scripts have their own "grammar" rules and if you don't follow them exactly, the compiler will be a huge grammar nazi and kick up a fuss. The format is as follows:
script # <type of script> {
    function;
    function;
    function etc;
}
The first word, "script", is used to start off a script. You'll need to follow it with a number between 0 and 999 so that you can identify each script. After the number you'll need define what type of script the script is. There are a number of types of script you can use (see the Script Types page at the ZDoom wiki), but if you're doing a single player map that doesn't use a "hub" system, there are only really three types you're going to use:

1) The type OPEN is executed the moment the map has finished loading. This script should be used to set up any special stuff you can't do in the map editor, such as very specific lighting effects.
2) The type ENTER is performed on a player the first time they enter the map. In single player maps, this is performed immediately after the OPEN script. The main difference between this and OPEN is that the player is the "activator" of the script, so we can directly apply a "tag" to the player and fiddle about with his inventory.
3) The type (void) is used for almost everything else. Basically, these are the scripts you trigger from using a switch or walking over a trigger linedef, etc. Note that the brackets around the word void are important and necessary, we'll cover why in a later part of the tutorial (for people who have done programming, this is where you define arguments, the word void means there aren't any).

Directly after the script type you'll need to place two curly brackets {}. Inside these two brackets is where we will put the parts of the script that actually do cool stuff.

Your first script, a switch that opens a door and teleports a monster AT THE SAME TIME!

Almost every action that can be triggered from a linedef/thing has an equivalent for scripting. You'll want to mosey over to the Action Specials page of the ZDoom wiki for an exhaustive list.

Set up a switch linedef like you normally would (don't forget to set "player presses use"!) only instead of choosing the action to be something like "open door", use action 80 Script Execute. You will be asked for 5 numbers, a script number, map number and 3 script "arguments". Set the script number to 1 and leave the rest as zero. Note that the Map Number should be left at zero unless you're making some convoluted Hexen-esque hub system puzzle shit and want to activate a script on another map.

Create a closed door and tag it 1. Then place a teleport destination thing in the room and tag it 10. Finally, hold a monster in an unconnected sector elsewhere in the map and tag it 11. (The actual tag numbers here are only an example).

Now go into the script editor and type in the following script:
#include "zcommon.acs"

script 1 (void) {
    door_open (1, 24, 0);
    TeleportOther (11, 10, true);
}
Notice that it's a (void) script, so it won't execute automatically, we need to get something else to execute it (in this case, a switch). In between the curly braces are two lines, door_open and teleportOther. You should be able to guess what these do. Notice that they both have numbers inside brackets after them, separated by a comma, and have a semi-colon at the end of the line. This format must be followed for all functions (door_open and teleportOther are functions).

The numbers inside the brackets let us define how exactly we want the function to act. If you check the Door Open ZDoom wiki page, it lists 3 "arguments". The first number indicates which tagged sector/door we want to open, the second is the speed at which it rises, and the third will let us perform some extra cool lighting effects, but we don't want it here so we'll set that to zero. Similarly, teleportOther takes 3 arguments, the tag of the thing you want to teleport, the tag of the teleporter destination, and whether or not you want the "whooshwhooshwhoosh" green lighting effect and noise (known as "fog"). We've set this third one to true, although 1 would have had the same effect (true is a special word in scripts, it basically represents the number 1, false similarly represents 0. They are used to make the scripts more readable.).

When you're done, press the compile scripts icon. Hopefully there should be no errors, in which case you can close the script editor and test the map. You now have a switch that performs multiple actions!

Next time
THERE WAS NO NEXT TIME, MY UNFINISHED GUIDE ENDED HERE, SORRY!

Share this post


Link to post

Nice guide, very well explained for computer-illiterate people (like me). I've made dozens of maps already, and yet reading this I learned a few basic things I completely missed before.

Share this post


Link to post

Something Awful! I like those guys. Never read their forums actually, but I play EVE Online with them in the Goonswarm Federation alliance. But they probably don't know me there, because I didn't do anything noteworthy there and I fly by the name klapstoelpiloot.

Anyway, on topic, nice tutorials!

Share this post


Link to post

Is there a way to override the usual death messages with random phrases? Instead of "Major Rawne was bruised by a Hell Baron" etc, I would like to be able to display random 40K quotes to fit in with a new set of maps I am working on.

Failing that, how can I make it display the message LINGUICA WAS BOOBIES?

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×