Bad Apple  Bad AppleBad Apple
 Maps Drivel

Completed maps

The Junkyard









Bad Apple

Your very first map

Part 2 - The right way

Now, if you really are new to mapping, sorry about that shit in part 1 which was more something I needed to get out of my system about beginner box map tutorials than a tutorial as such. True, that method will get you a map pretty quick but it does teach you some nasty habits too. When I first used Radiant I read a couple of them and didn't feel they really had helped me that much apart from teaching a few keyboard shortcuts while omiting some important ones. Now that we've got it out of the way we're going to do the same thing again but this time we will be using the techniques that you would use in making a proper map.

First up, make sure you are using the most recent stable build of GtkRadiant from In order to have a decent Radiant experience your system needs to be running a screen resolution of at least 1024x768, and thousands or millions of colours. If your monitor is smaller than 17 inches you may want to upgrade, I know from experience that using Radiant on a 14 inch monitor is horrific. You also need the latest drivers for your card because the Radiant engine uses OpenGL to draw all the windows, including the 2d views. There have been some classic driver problems over the years such as the 3DFX card drivers which would not render the grid in the 2d views (been there, suffered that).

Set up your copy of Radiant in the way you think you'll like it. Personally I like to have plenty of room to manipulate brushes in but I find floating windows annoying, so I use the first layout option available in the preferences (found on the Edit menu or by pressing the P key, you'll need to restart the program to switch to a different layout mode). This gives you a narrow, tall pane at either the left side of your editor window. This is the Z-checker and is used to manipulate the Z-Axis of brushes and entities in the world. Resize the panes as you see fit, bear in mind that making the 3d view too big can really slow things down. You can also configure the colours using the option on the Misc menu - I used to always use the black and green theme but now find the Maya/Max/Lightwave style most comfortable.

Controlling Radiant - movement

The evil version of the first room tutorial didn't require you to move your view around to any great extent in the windows. However, the first set of radiant keys you need to learn are for camera movement. The up and down arrow keys move you backwards and forwards, and the left and right arrows turn in those directions. You can strafe left and right using the comma and full stop keys (where the < and > point in the way you'll move). Vertical movement comes from D and C which are up and down respectively. Finally, you can look up or down using A and Z, and level your view with End. Try loading up one of the id sample maps and moving around in it.

As it has developed GtkRadiant has introduced a new method of using the camera in the 3D view which replaced an older, less user-friendly method. Right-click on the 3D view to switch to camera mode, you can now mouselook in the 3D view. If you hold down Ctrl and move the mouse, you can move in a plane perpendicular to the direction you're looking in instead of looking. You can move backwards and forwards with the mouse wheel, and the arrow keys change their function too, with the left and right arrow keys strafing instead of turning. Right click again to exit camera mode.

Holding down the right mouse button and dragging in the 2d views moves the view you have around - try it. Note that clicking with the right button brings up a context menu as you would expect.

Controlling radiant - brushes

If, like me, you've opted to have one large 2d view plus the Z-checker, you will need to know that Ctrl+Tab will switch your 2d view pane along the sequence of 2d views, XY Top, XZ Front, and YZ Side. XZ front is looking along the Y axis (you might think of it as looking North from outside the map, at the map's front) and YZ side looks along the X axis (in a direction that you can think of as East looking at the map's side). You can actually do most simple tasks using just XY view and the Z checker but for more complex work you will need to access the other views.

Next, the controls you need for basic brush manipulation. Left clicking and dragging in a 2d view while you have no brushes or entities selected will create a new brush (by 2d view I mean XY, XZ, or YZ but not the Z-checker). A selected brush is also manipulated in this view with the left mouse button. If you click inside a brush and drag, you will move the brush. If you click outside the brush, the face which you are outside will attempt to move in the direction you drag - it won't let you reverse the direction a brush is drawn in though. Dragging to move, stretch or squash a brush works in the Z-checker as well as any of the 2d views. Notice that the brush always snaps to the grid - this is important because it ensures that you can line up the edges of your brushes.

To deselect all currently selected brushes and entities use the escape key. Use shift+left click in either the 2d or 3d views to select a brush or entity. You can select multiple objects by shift+left clicking on them, also shift+left clicking a selected item will deselect it.

Laying down some brushes

Woo. A floor.

You now know enough to get into laying some brushes for an actual map. On the file menu choose 'New map' so we can get rid of any trial brushes you have drawn. First we'll make a floor. Select a texture for your floor: If you are using the 4-pane view or floating windows you may need to open the texture viewer with the 'T' key. Go to the Texture menu choose and open a group of textures, then click on the texture you want (I'm going to use gothic_floor/largerblock3b). In the XY Top view, lay down a brush for the floor, as with the first tutorial I should go for 256 units square. Aligning the brush with multiples of 128 is a good idea because most textures cover an area of 128 units square and tile well over this distance, and align to the world grid on this basis unless you tweak the alignment manually or move the brush. With this in mind look at the Z checker (or XZ/YZ view). Notice that the brush actually sticks up 8 units above the zero line. That will make aligning a complex wall texture a little tricky. Drag the brush so its top face is level with zero.

The red brush is a new wall, see

Next, make four walls. Select a different texture for the walls (I used gothic_blocks/blocks18c_3). I usually make my walls 16 units thick, there is no particular reason for this though! Deselect the floor using escape or by shift+left clicking it. Click and drag in the XY Top view to make the first wall, starting at a corner of the floor brush and dragging away from it and along its edge, so that the new brush is along the side of the floor but not on top of it. Then resize the new brush so that it is 128 units high, stretching from 0 to 128. Now drag out brushes for the other three walls (remembering to deselect the previous wall each time). Notice how each brush you make in the XY Top view has the same height and Z-axis position as the last brush you made - it actually copies these attributes from the last brush that was selected.

XY Top view

Front and side views

Send in the clones

Finally, a ceiling. We're going to do this the easy way. In the 3d view, position yourself so that you can see the floor brush and select it by shift+left clicking. Now watch the XY Top view and press the space bar - this clones the original brush, deselecting it and selecting the new cloned brush. Drag the brush back so it aligns with the position of the floor in the XY Top view then, in the Z-checker or one of the other 2d views, move it up so that it its base is level with the top of the walls.

Move the camera inside the box (if it isn't already) and look all around to check that there are no gaps between your brushes. If there is a gap, stretch or move your brushes to plug it.

Adding some entities

Entity dialogue box

Presently there is no light source in the map. Make sure nothing is selected and right click inside the room. Select light from the context menu. If a dialog box appears just hit return for now, but note that it is actually quite a helpful one. Position the new light where you want it. Keeping it selected hit 'N' which opens the entity dialogue box (look at the image here). Click on the 'light' entry for the current entity (near the bottom - not on the list of entities at the toy). Where it says 'Key' and 'Value' replace the value with 150. The room is going to be fairly dark but that looks, ah, moody, yeah?

Note that we have just added a light with no apparent source (one of the things on my bad list for the first tutorial). Not every light needs a visible source provided it seems like a convincing part of the ambient level in an area, but when you are building proper levels you should have at least one visible light source in each area.

Hit escape and N randomly until the entity dialogue disappears. Now right click again and insert an info_player_deathmatch. This is a player start position, you'll have several in a proper map. Position it so that it is inside the room, touching the floor. There is an arrow on this entity in the 3d view that shows which way a player starting there will face. You can change the angle using the buttons on the entity dialogue box or by entering a new angle key value there.

The final entity we will tinker with is the worldspawn. This is the 'root' entity on which the whole map depends. Make sure you have nothing selected and open the entity dialogue box. Scroll down the entity list and select worldspawn. Enter a new key 'message' and put a name for your map in the value. NEVER use double quote marks (") as part of the name - or any other entity key or value - or it will break the map file. If you want to, select a music track by entering a 'music' key with a value equal to the path of the track you want (the paths are from music\sonic1.wav to music\sonic6.wav, and from music\fla22k_01.wav to music\fla22k_06.wav).

Compiling and running the map

Save your map, from the file menu as you would expect :) The filename will be the initial name of the compiled map's BSP file so avoid making it very long, and definitely don't put in any odd punctuation or spaces. Next, from the BSP menu select bsp_FullVis. The Q3MAP compiler opens in a DOS box to build, vis, and light your map. This shouldn't take more than a minute even on slow systems. Check the output in Q3Radiants console after the compile has run - the word 'leaked' is bad - if you get it go back and recheck for gaps between brushes. You should see a little warning window pop up if there is a leak. Otherwise you're fine.

Run Quake 3 Arena, if your video card is old and doesn't have much memory you will probably want to quit radiant first. Pull down the console (this is done with either the tilde or left quote key depending where in the world you are) and enter:

sv_pure 0

This tells Quake 3 that you want it to use resources outside it's pk3 files by turning off pure server mode. Without it Q3 will refuse to run your map! If you are running a v1.29 of Q3 you will also want to turn on developer mode:

developer 1

Setting developer mode allows you to use various protected commands like r_showtris which can be useful foir debugging maps, and enables some feedback messages that tell you stuff the game is doing or having problems with. This is no longer necessary in v1.31 and v1.32.

Finally, you should enter:


The YOURMAPNAME you put here is the filename of your map, not the verbose name you put in the worldspawn's message key. This command will run your map. Be satisfied and yet strangely underawed :-)

If you are running a point release older than v1.29, there is a good chance that your map will appear completely unlit (fullbright) in game. To see the shadows, enter /give all in the console and then select the BFG. After a moments loading, all should be well. If not, you can check out this tutorial on the fullbright bug.

Copyright 2001-2011 Tom Waters -

Bad Apple is not intended for readers under 18 years of age, goats, emus, flukes, capybara, users of CSG subtract, or people who like the name Gary.