Back to tutorial index page
Entities not included in the main maps
After completing the main maps and the supporting tutorials I was aware that a number of entities had not been covered. In this article the entities func_rotating, func_bobbing, func_door (including areaportals), func_train and func_plat will be examined, in addition to using triggers and traps. Open dk_lmtutmap2.map for examples of the entities that are going to be discussed. Remember the shortcut Ctrl Alt and left click to select func_ entities.
Let's begin with func_door entities (fig.1). Doors can be single or multiple brushes, they can open in one direction, or brushes can move in different directions. If you want the doors to open in different directions (classic double doors moving in opposite directions away from each other), they must be separate door entities but teamed together. Create the brushes that you intend to convert into a func_door. Select all the door brushes and drop the entity menu, select func, then func_door. Then bring up the entity editing window and allocate an angle for the door to open. If you so desire you can set the speed for the door, the amount of damage a door takes before it is triggered open, or whether or not it acts as a crusher and inflicts damage. You may want to target a func_button at it or some other trigger to cause the door to open. More on this later, as we discuss other entities. In the small entity map there are two doors, each given the key team and the value 1. As a result the doors open and close together as a single entity.
In some cases it is useful to cull what is drawn behind a door in order to control vis. This is never a perfect solution for multiplayer games, as the map can lag as the doors open and tris climbs steeply. In order to cull behind a door, or set of doors, an areaportal is placed inside the door entity. Draw a thin brush (8 units thick) made of skip, that completely fills the area filled by the door. Texture one side of the brush with the common/areaportal texture (fig.3). The areaportal will only work if each area of the map is completely sealed off from the next area with areaportals. As the doors open and close the areaportal brush is triggered and the far side of the func_door entity is culled.
Next func_rotating. In the example used in the accompanying map, the func_rotating entity as visible in game is a model. The entities discussed in this article could all be created with either a model or with brushes. The common/origin texture is used to specify the centre of the entity, around which it rotates along an axis set in the entity editing window (fig.4). Entities must be created from at least one solid brush, so when using a model you must also use a small player clip brush as part of the entity. Draw out a small brush out of common/origin, and a small playerclip brush. Select both and drop the entity menu, select func, then func_rotating. Edit the properties as required. In order to use a model as an entity, select both the model and the newly created func_rotating, then press Ctrl k to target the model at the func_rotating (fig.5). You should always target the model at the entity or a strange bug may occur where the model does not get baked into the .bsp on compile as normal.
Targeting entities can be done by hand, so to speak, if necessary. The entity to be targeted at another needs a targetname key, in the above example t2. The entity targeted by another, requires a target key and a value, in this case t2.
Func_bobbing entities can have any number uses. In the example map, 3 little crates are bobbing up and down gently in the water. The effect helps to give a sense of realism to the water brush. Once again, create and select the brush or brushes you want to create the entity from. This time select func_bobbing from the entity menu. Adjust the properties in the editing window (fig.6). Each of the 3 func_bobbing entities in the example map have a different value for the phase key, so that each bobs up and down at a slightly different rate, rather than at the same time. A general requirement for each of the entities covered is to experiment until you achieve the results you want.
Normally jump pads or steps are used for ascending levels in Quake 3. At times, however, it may be useful to use a platform that rises and falls. Platforms can be triggered by another entity (in this case a button), or will work automatically when a player steps aboard. Create and select the brush or brushes you intend to create the entity from and select func_plat. Bots can be rather stupid about running underneath platforms. This can be easily avoided by including as part of the entity a player or bot clip brush that at the platform's highest point completely fills the space below to the ground. Edit the entity's properties. Platforms are drawn in the editor in the highest, raised position, but spawn in game at the lower point. A slow rising platform can be used to reach more powerful items quite effectively. Adjust the height key value so that the platform sits neatly on the floor in its lowest position (subtract the thickness of the visible part of the func_plat from the total height from the top of the entity to the ground). The most significant problem with func_plat entities is the absence of sounds in the original distribution of Quake 3. To this end, replacement sounds must always be included with any map that uses this entity. Examine the sample .pk3. It contains a sound folder with a movers folder within and a plats folder inside that. Contained within the plats folder are the pt1_start and pt1_end .wav files looked for by the game.
In the map demonstrating the entities, the platform is triggered by the pushing of a button. A func_button is created by 1 or more brushes, in the same way as the other entities discussed. The angle key needs to be set, so that the entity moves in the desired direction when touched (fig.8). To target the entity at the func_plat, select the button, then the platform, then press Ctrl and k. Alternatively, set the target and targetname by the method outlined above.
An alternative method of creating a platform-like entity is to use a func_door. The trap door under the Rocket Launcher in the demonstrator map was created using a func_door, that is triggered to drop as the weapon is taken. The angle key is set with a value of -2 (fig.9) so that the door drops downward. As the door moves its own length (minus a lip), an unseen caulk brush is included as the underside of the entity. Edit the value of the speed key to suit your requirements.
To trigger the trap by taking the Rocket Launcher, target the weapon at the func_door entity.
Atmosphere can be added to the level by including sound effects. Select a target_speaker from the entity menu, then bring up the editing window (fig.11). The noise key allows a value to be set that points to the sound file, in this case sound/dk_lmtut/evilwind.wav, remember every custom media must be included in the .pk3. Many .wav files can dramatically increase the size of the file, so caution is recommended. Spawnflags can be set, in this case, looped_on, or spawnflags 1. The sound will play continually, getting louder as a player gets closer to the entity.
Finally, let us look at a func_train entity. This is perhaps the least often used of all the entities available in Quake 3. Firstly a path needs to be set by placing some path/path_corner entities from the entity menu (fig.12). Adjust the angles and target the entities in the order you with the train to follow and any other keys and values that you may feel appropriate for the level (fig.13). A line with arrows should correctly pass from entity to entity in the direction the train should pass.
Create a brush or group of brushes, with the common/origin brush in the centre, select func_train from the entity menu. Adjust the keys and values, once again in the entity editing window. Select the entity and then the first path_corner entity and press Ctrl k to link the 2 (fig.14). The train will spawn in game at the path_corner that it was targeted at.
That brings us to the end of our journey through Quake 3 level design. I sincerely hope that some of the thought and ideas expressed in this series has been of some benefit. Go forth a create many new worlds, in which you can meet your friends and blow them apart with a large gun. ;)