• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!


Starting Tremulous Mapping

Page history last edited by PBworks 17 years, 2 months ago

Mapping For Tremulous





Many people have asked about mapping for tremulous. They especially seem to be having trouble with the install and their first couple of maps. Since the troubleshooting of the install is diverse I’ll leave that up to the rest of the mapping wiki and the Mapping Forum.


I advice to read the Tremulous Gameflow Guide before starting planning or mapping.


Remember that tremulous is capable of much more than what is shown here but you are beginners so everything is down to its basics.




First get a version of GTKradiant. I myself work with version 1.2.13 since it’s an older but tried and tested version and has everything you need for Tremulous. You can do it with newer versions but they don’t offer any real gain for tremulous mapping as far as I know and 1.5.0 does not even have the Z-bar which I find a real handy tool.

Install it according to the guide on this wiki. Some options might differ however from my version if you choose another but all essential ones have remained the same.




You should start with thinking about the type of environment you’ll be working in. Most common and easy is a simple human base. We’ll be using that for the tutorial. Other things to think off at this stage are that when you want to add something special into it you might need new textures, models, sounds and effects which all require extra work, some of which you might not be able to do yourself.


Next up is the gameflow chart.



We see that we’ll obviously have the 2 base locations and 2 interconnected basic engagement areas. Since we have so little engagement areas and paths this map isn’t really meant for relocation of bases. I’ve also added 2 trigger_stage entities into the gameplan which will trigger at stage 2 and prevent early pincer movements.


Now comes the real part, the mapping.


Introduction to the User Interface


First up, a simple explanation of the screen you’ll be doing most of your work in.


The Main Screen:

Some options I might name are in yellow.



You can see at the top left where you are saving your map to.


Mapping in 3D is done by manipulating a brush along 3 axis.

You can create a brush by clicking and dragging your mouse pointer in the gridded part of the screen. In the top left of this part of the screen you can see the two axis you are looking down upon. To the left is the Z-Axis which controls the height of the brush. You can switch the axis you look down on by pressing ctrl+tab but the Z-axis bar will always be on the left.

When you have created a brush you can either move it around by holding the left mouse button down on it and dragging it across the grid, delete it by pressing backspace or alter it’s dimensions by holding the left mouse button down outside the selected brush and dragging it. The same applies to the Z-Axis. You can deselect a brush by pressing escape and reselect one by holding shift and clicking on it. The amount of movement for now will be controlled by the grid size which can be selected by either the numbers at the top of the keyboard, the menu or the numpad.


The 3D view window displays what is seen by the 3D view position.

It’s standard controls are:

up = forward down = back

left = turn left right = turn right

A = Look up D = Move up along the Z-axis

Z = Look down C = Move down along the Z-axis

You can also use free look by right clicking on the 3D View Window


2-Point Clipping


Now we are getting closer to your first room. But there are still several ways to alter a brush. I will only explain the clipper now. Pressing either V (vertices) or E (edges) accesses two different ways of manipulating brushes and patches which you can explore yourself.


The clipper is an important tool so we’re going to learn how to use it before we start with the room. Only 2 point clipping will be explained here.

The clipper tool is activated by either pressing X or selecting it in the toolbar. In the screenshot I’m hovering my mouse over it.



Select a brush or multiple brushes and activate the clipper. The first click will fix a point 1 on the grid and your second click a point 2. Through these two points goes an infinite plain along the axis you are looking down. The part that will remain when you press enter is yellow on the grid. In the 3D View Screen you can also see the result of your action. If you want to change the selection so the other side stays and the current yellow one gets deleted press Control+Enter to switch the selection. Pressing Shift+Enter will result in a cut with both sides of the brush remaining. Press enter to make the change permanent. You can do this many times to a brush.


Your First Room


Now a simple room consists of four walls, a floor and a ceiling. An important thing to remember when building all rooms and hallways are that no entities should connect to the void. The void is the space not enclosed by brushes. First we will make a floor. You can first put in a temporary scale help by entering a reactor into the map. This will help you in getting the size right. To do this right click on the grid and select the reactor from the team menu.



Now since we’re doing this the simple way we’ll make the floor at editor ground level. Better known as Z-Axis 0.

For reasons which are hard to explain and not at benefit to the tutorial always try making walls and floors at least 32 gameunits (gu) thick. This is as thick as a single block at the grid size selected by pressing 6. I usually make mine even thicker.


For an easy ceiling you can clone the floor. Have the floor selected and press the spacebar to clone the floor. Now drag it upwards for about a difference of 192 gu using the Z-Axis and put it back right on top of the floor. Now we are going to make 1 wall and clone it three times. But we will use the clipper to get it at its most efficient way. This is important in larger maps where people can complain about fps and it can prevent certain light problems. It only needs to touch the corners of the floor and ceiling but if there is even a very small opening the map is open to the void and can’t be played.



When you are done clone it and turn it 90 degrees over the Z-axis by pressing the Z-axis Rotate button in the toolbar. Adjust the length to fit the other side of the floor.

Select the first wall you made again, clone it, but this time press the X-Flip button in the toolbar. Drag it across to the other side. You can do the same with the second wall you made but using the Y-Flip button in the toolbar this time. If you have done this all your first room is done, but it isn’t playable yet. But that isn’t so bad since I’m not done yet either. The gameflow chart showed we had 2 entrances to the human base engagement area. Next up is the first hallway.


Connecting Hallways


Your first hallway will be made by splitting the left side wall using the clipper and making an opening that will be about as wide as the reactor. Now use the clipper again to make a sharp corner and add the walls and ceiling of the hallway.



Now you can add a basic engagement area which can consist of several rooms or just a single room in the same way as explained above. Feel free to experiment with height of the room. Keep doing this in the same way until you’ve got the entire layout done. This means there are no decorations or lights, only hallways and rooms for now.


Inserting Bases


Next up we will add our bases. Keep in mind that you want to start with only stage 1 buildings. You can do it the same way you entered the reactor at the beginning of this guide. You can also select a building and use the angle keys to make them face a certain direction. This is important for people spawning with their face away from the wall and making turrets face the right way at the start. If you enter a turret you don’t see a model, only a bounding box. Don’t worry, this has to do with the dynamic nature of the turret ingame. The angle keys still point it in the right direction. You might also want to put some thought in cover for certain buildings which we will put in later. Also important is that the structures should be a bit above the ground or else they will not spawn. Right click on the grid where you want your building and select it from the team submenu. Remember that this is a small symmetrical map. Any larger non symmetrical maps needs to include the gameflow guide when placing the bases.


It should look something like the following now.



In 1.2 the layout command will be available. As a consequence mappers will be able to include some starting layouts in their .pk3.


Layouts are saved with the command "/layoutsave".

They should be saved in the layouts/mapname_version directory of the .pk3

Keep in mind that if a server operator decides to use layouts the original start locations will be ignored unless a layout is created for that one as well.


Making a Defective Door


Now the gimmick in the map; the stage 2 activated doors. We’ll start with the simple door and then add the stage 2 activator. A door is an entity. It can move up (-1), down (-2) or in divisions of 360 degrees around the Z-axis (0 to 360). It can not go diagonal upwards. For that you will have to use a platform and advanced mechanisms which will not be discussed here.

Start by making a brush in the shape of the door in it’s closed position. When this is done keep it selected and right click on it. Choose func>func_door. Now it is a defective door. We’ll proceed to entering the data that will make it work. While having the door selected press N. The entity window will pop up.


The Entity Window



This is the entity window. It applies to just about everything in the right click menu. For now I’ll give you a short description.

In the upper part you can select the entity you want the selected brush to be.

The regular brush is worldspawn but we will be using func_door.

Below that is a readme part concerning the selected class. You might have to drag the double dotted line to get it to show up.

Then there usually are a series of buttons you can read about in the readme part.

Below that comes the actual data of the entity in the form of keys and values which can be entered below. These are usually explained in the readme part as well.


Defective To Working Door


We will enter angle as a key and -1 as a value here, this will make the door go up. Now press enter to have the door use this data. Alternatively you could use the lowerleft corner to set angle. Next we want the door to open slowly, the usual speed has a value of 100 but we want 30% of that. Replace angle with speed and -1 with 30 and press enter to enter this second set of data. Now it is a functioning door.


Including a Trigger


For having a door activated by a button or trigger a door needs a targetname. We need this for the stage 2 trigger so enter targetname as a key and stage2door1 as the value. Press enter to have the door assume this name.

Now we will add the trigger. Deselect everything and right click, now select trigger>trigger_stage. This will make a small box appear. Make sure to not let it be located in the void since it is an entity. Press N to get to its data. Now enter the following data.


Key: target Value: stage2door1
Key: team Value: 1 (for the alien side door, use 2 for the human side door)
Key: stage Value: 1

This will make all entities by the name of stage2door1 be activated when the aliens level up to stage 2. Repeat this for the other door using the opposite team and another name for the door like stage2door2.


Decoration & Detailing


Next we will start adding some decorations and supports. Decoration should not block the vis field because it results in very long compile times.

The vis field is a strange subject to explain. Basically when your map is compiled it goes through the VIS stage (hopefully). This calculates what can be seen from every spot in the map and divides it into sections defined by vis portals which mostly have the same view, you can alter this with hinting but that will be discussed another time. The vis as such is blocked by brushes. If the map has a lot of vis portals it needs to load a lot of vis fields which is not efficient since it is wasting processing power. You might want to have some easy overlapping in this situation.


This is why most decorations should be made detail brushes. Detail brushes do not block the vis and thus allow for simpler vis fields. This can be done by having a brush selected and pressing Ctrl+M. This will make the selected brush detail. By pressing Ctrl+D the present detail brushes are toggled on and off in the radiant view. This is very handy with high detail work in your later maps. Remember to never make a brush connected to the void detail since it will result in a leak and the map will not compile. Decorations usually include lamps, trimmings and anything else that is smaller than a player at the least and only do this to regular brushes, not entities! Please note that with all the detail brushes hidden it looks exactly like the hull we had previously. It doesn’t need to look exactly like your hull but it should look very simple.


Don’t forget that Tremulous’ alien radar in its current state is affected by the vis. You don’t want to give humans the advantage of a radar free corner since that isn’t how the game is supposed to work. Detail allows radar while structural brushes block it.




There is a certain class of elements known as patches. Cilinders, endcaps, bevels and the simple patch mesh are the most known ones. I will only shortly explain their use since they are not that hard. You make them by making a brush the size of the patch you want. While you have it selected you click the curve menu and select what you want. The brush will be converted to a patch. You can alter this patch in several ways but you can’t use the clipper on it. Also remember that patches are not structural. If a patch separates an entity from the void you will get a leak. In this case you might want to patch the hole behind the patch with a caulk wall. To deform a patch you can use bend (b) or edges(e) but the one with the most control is vertices(v). Vertices gives you several vertice points you can play with to achieve what you want like bending a pipe or patch. Try it out and get a hang for it. It’s the best way to get rounded objects in maps.




Now comes the graphical part, texturing and lighting. We’ll start with texturing using ATCS’s texture set. But first load up the common set by using the texture menu at the top and simply select common. The common texture set is the Swiss-army knife like texture collection. Most will be explained in tutorials around the internet so I won’t go into all of them now.

Now deselect everything and press shift+A. If you haven’t textured anything yet everything using the notex texture should be selected. Now select caulk in the texture window. Caulk is a texture that isn’t drawn ingame by tremulous thus it has no impact on the performance. When caulk is visible to a player however you get what is known as a Hall of Mirrors effect, very ugly and unwanted so make sure you don’t leave any caulk open to the player’s eyes.

There are two ways to texture and several things to look out for. You can select a brush in the normal way and apply a texture; the texture will be on all faces of the brush. This is usually not wanted. Better is using ctrl+shift+left click; this will select a single face of a brush. If you keep ctrl+shift+left click down and drag it you can select multiple surfaces which lessens the workload.

One thing to look out for are that textures aren’t spread too large so they appear ugly in game. Another thing is to be careful with the textures surrounded by a white border in the texture window. These are shaders. They can range from simple light emitting textures, image sequences to deforming surfaces. Be sure to use the white bordered lights since others might simply not emit any light. You can now select the ATCS texture set or any other through the texture menu at the top. Now go forth and texture your map.


Surface Inspectors


Now you might have noticed that texturing is off on some points. The texture is misaligned or repeated more then you want. This is where the surface inspector comes in at the press of the S key (or Shift+S for patches)




Texture points to the texture to be used.

The 5 following should be pretty clear with the first box being the current value and the step size the amount it changes when using the arrows. You can directly alter both values.


Axial sizes and orients it to the axis.

Fit fits the texture the specified amount of times to the right on the selected face(s).


Cap is best applied to caps of cylinders and such.

Set is not often used.

Natural can be used to correct awry displaying of textures

Fit fits


Now there is also a surface inspector for patches activated by pressing shift+S.

This one is better to use on patches, bevels and end caps.

Most things are the same except that you’ll want to use natural a lot because of the curved nature of most patches.





Final point before coming to a complete map is lighting. This is really not a matter that can be expressively taught or explained. I’ll go over the basics and the settings but where to put them and which settings to use strongly depends on everything else in the map and the mood you’re trying to create so I can’t help with that.


There are two main sources of light. The point lights and the light emitting textures. Also available for an overall light is the ambient key with a value entered in any worldspawn.

The point lights can be selected by right clicking and selecting either light or lightJunior.

Light is the normal light originating from one point.

When you select light it will ask for a value, don’t worry, you’ll change it anyway. Just click ok. Press N to bring up the entity window.

Light specifies the strength of the light.

_color specifies the color by a 256 point system, you simply divide 1 by the R, G and B value each to get the color values you enter.

Target allows for the making of a spotlight.

The rest of the settings are not important for starting mappers.


lightJunior is almost entirely the same as light, the only difference is it only affects entities.


Light emitting textures are actually shaders, refer to a shader manual for precise facts.


Now come some tips to lighting.

By preference use light emitting textures. They usually look better in place then light coming from nowhere.

If you use point lights don’t make the values too big since you will get ugly spots, it’s better to use several small lights.

Don’t let to many lights overlap, this will increase compile times significantly.


Intermissions (Cameras)


When loading a map in tremulous the game checks for the info_intermissions. The least a game needs to load is the info_player_intermission from the right-click>info menu. This is the spectator start view when you enter the map. The info_alien_intermission is the spectating point for the alien team when dead and the info_human_intermission is for the human team.

The direction settings for them are as follows. They cannot currently be aimed using a target_position. You need to enter an angles key to aim them in a polar-like coordinate system. Input: Angles (x in degrees) (y in degrees, -degrees is up) 0 (roll).

The position of the alien and human intermission usually is aimed at the starting base. The player_intermission should be aimed at either a map trademark or the most important engagement area.




Now we are going to compile the map for the first time. I usually compile it several times before this to get the gameflow right. I do this before applying caulk to all brushes.


You can compile with the compiler that came with GTKradiant but it’s better to use the newest q3map2 and Q3Map2Toolz. Since there are a lot of options for compiling I can’t go through all of them, nor should all be used. I will sum up the essential switches and an explanation why.


BSP: Binary Space Partioning, Just do it

Vis: Calculates the visibility from the portals, Performance wise important

Light: Calculates the light, pretty obvious

Custinfoparms (custominforparms): Needed for the nobuild textures.

-meta: I don’t know exactly what it does but it’s needed for advanced compiling. Use it

-patchshadows: Shadows from patches, was previously not available.


-patchmeta: Advised for preventing patches going awry. Not necessary but advised


-bounce: It is a common lightbleeding switch if you don’t know how to use them so don’t at the start.


Testing your map


You can try your map out now by loading up tremulous, pulling down the console by pressing ~ and entering /sv_pure 0 and /devmap mapname.


Now correct the mistakes in gameflow and construction and try again, several times. Don’t worry, your first map will be crap, so will your second probably but practice makes perfect.


Now when the blatant mistakes are removed the alpha stage is complete. You can try and submit it to tremulous.info to get it on the derelict server as a beta but only maps which have some work and potential behind them will get on. I advice to never release or even mention maps in alpha stage unless you are having problems you can’t find the answer to on the internet.


Map Naming Conventions


First important thing is a clear naming system which I’ll try to set an example for now. The system I will be proposing is the one used by soubok which allows for many versions with short names. It goes like this. ‘mapname_version.bsp’. Example: ‘mymap_34.bsp’. Save the .map for that version with the same name and if you alter it up the version number.


To make a map in the .pk3 format you can use the mapacker included in Q3Map2Toolz. This is the easy way and I recommend it, rename it to ‘Map-mapname-status-tremulous version number.pk3’. Example: ‘Map-mymap-beta2-1.1.0.pk3’

Status is either Alpha or beta, when a map is finished the status section should be removed.


Layout of the .PK3


The other way is by hand. A .pk3 is simply a .zip renamed to .pk3 but manually selecting all textures you used is a tiresome job. I will simply describe the internal components of the .pk3 and what they do. I suggest using the naming conventions above none the less.




Textures\mapname_version\ (Your textures here)

Env\(Skybox usually)

Layouts\mapname_version\ (layouts here)

Levelshots\ (Screenshot for loading screen in the form of ‘mapname_version.jpeg’)

Maps\mapname_version.bsp (your .bsp here)


mapname_version.arena (Information file)

mapname_version.shader (Shader file for texture effects and special surfaces)

mapname_version.particle (Particle file, advanced mapping)

mapname_version.trail (Trail file, advanced mapping)

Sounds\ (Your sounds here)


In the readme you mention the following

- Mapname, version, date.

- contactinfo for contacting the mapper, usually an e-mail address or site (you).

- any notes and extra information you’d like to add.

- people whose textures, shaders, particle systems etc you used.

If you want your map to be included in an official release you are also required to release it under the following license and include the .map file in the .pk3.






This map and all medias this map use are under creative commons license Attribution-ShareAlike 2.5 ( http://creativecommons.org/licenses/by-sa/2.5/ )

Attribution-ShareAlike 2.5

You are free:

- to copy, distribute, display, and perform the work

- to make derivative works

- to make commercial use of the work

Under the following conditions:

- Attribution: You must attribute the work in the manner specified by the author or licensor.

- Share Alike: If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.




The following is how a .arena file looks.




map "mapname_version"

longname "Displayed name in loading screen"

type "tremulous"





Now the shaders. These are sections of code that go into the mapname.shader file to define the effects on textures.

I'll give one example of how to make a simple light emmiting shader. The bits after the // are comments and not necessary in the shader file but for clarification purposes. For further information see this extensive Shader Manual


First we add our shaderfile to the list GTKradiant loads. We do this by simply adding the name of the shaderfile to the shaderlist.text located in the scripts directory.


Used .jpgs








textures/mymapname/largelamplight //Defines when to load if selected from texture menu


qer_editorimage textures/mymapname/largelamplight.jpg //image displayed in radiant

q3map_lightimage textures/mymapname/largelamplight.blend.jpg //emitting pattern

surfaceparm nomarks //This makes sure no shotmarks cover the lamp

q3map_surfacelight 1250 //This is the setting that makes the texture emit light


map textures/mymapname/largelamplight.jpg //Texture displayed in map



map $lightmap //maps lightmap in

blendfunc filter //filters dark parts

tcGen lightmap //generates lightmap



map textures/mymapname/largelamplight.blend.jpg //Overlay source, kinda

blendfunc add //Adds previous image ignoring the darker parts.




Quick Reference


Playerhitbox sizes.


Class Size
Granger 40x40x40
Adv Granger 50x50x50
Dretch 30x30x30
Basilisk 36x36x36
Adv. Basilisk 42x42x42
Marauder 50x50x38
Adv. Marauder 52x52x42
Dragoon 52x52x55
Adv Dragoon 64x64x67
Tyrant 64x64x92


Stance Size
Battlesuit (1.2) 30x30x76
Standing Human 30x30x56
Crouching Human 30x30x40



Battlesuits cannot crouch. Also come 1.2 the battlesuit will not be able to be bought while not having 76 gu height available. This is more applicable to players building but still.


Common Start Errors


Can’t find map maps/mapname.bsp

You haven’t made your map .pk3 yet or didn’t set /sv_pure to 0. Do either and try again.


My map doesn’t show up in the map list.

Check if your .pk3 includes a correct .arena file. Non .pk3 maps do not show up in the map list.


One of the team wins as soon as the maps load.

The losing team has no eggs or telenodes due to them simply not being included or because they are partially inside a brush.


My map is too dark/bright when I load it.

This is a combination of the right /r_gamma setting (online guide value is 1.5) and the light intensity you entered in radiant. Adjust /r_gamma to 1.5 and/or change the values in radiant accordingly.


If you have other problems first check this list.


Ingame Mapping Commands


Useful mapping commands and what they do, set them to 0 to disable them again:

~ : brings down the console where you can enter the following commands.

/sv_pure 0 : allows non .pk3 maps to be loaded

/devmap mapname : loads specified maps with cheats enabled for the following commands

/noclip : you can move anywhere in the map:

/r_clear 1: Makes the HOM effect in void pink. Also useful for spotting caulk.

/r_gamma 1: 1.5 is a common aim for the lighting but 1 is real. Adjusts light intensity.

/r_showtris 1: You can see the rendered vis fields from your position. Optimization analysis.

/r_speeds 1: Displays rendering speeds. Do not let them get too high. 30k is border case.

/cg_drawFPS 1: fps counter on screen. Optimization analysis.

/cg_draw2D 0: removes hud from screen, use with cg_drawgun 0 for levelshot.

/cg_drawgun 0: removes gun from screen, use with cg_draw2D 0 for levelshot.

/layoutsave 'name': saves a layout for use on servers or in the pk3


Game Settings Altering Commands


/g_Alienbuildpoints xxx : sets the alien’s buildpoint level

/g_Humanbuildpoints xxx : sets the human’s buildpoint level

/g_Humanstage2threshold x: Human stage 2 threshold kill count (triggers trigger_stage)

/g_Humanstage3threshold x: Human stage 3 threshold kill count (triggers trigger_stage)

/g_Alienstage2threshold x: Alien stage 2 threshold kill count (triggers trigger_stage)

/g_Alienstage3threshold x: Alien stage 3 threshold kill count (triggers trigger_stage)

/g_HumanStage x : 0 for stage 1, 1 for stage 2 and 2 for stage 3 humans. No trigger_stage

/g_AlienStage x : 0 for stage 1, 1 for stage 2 and 2 for stage 3 aliens. No trigger_stage

/give funds xxx : xxx is a specification of the amount of credits/ evolves you will receive.

/g_gravity xxx : gravity setting, 800 is default.

Comments (1)

Anonymous said

at 11:18 am on Oct 31, 2006

Edit away at anything that needs it. I'll be doing the gameplay/flow part later in a different page. Happy days. :)

You don't have permission to comment on this page.