Welcome!

QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

This help file is also provided free of charge. It is a compilation of Official and Unofficial Tutorials and Manuals that should help in the creation of Maps for the Quake 3 Engine Games.

The Compiled HTML Help file format (*.chm) is preferred because it not only provides offline help in one place, but it also features Search capabilities putting the necessary files at your finger tips.

This file is upgradeable! If a Developer/Programmer finds errors, missing information, or just wants to add more valuable information into the file, this file can be decompiled using HTML Help Workshop downloadable for free from Microsoft.com!

So Distribute and edit freely. I included no API or VBScripting in this file to make it operate safely on any computer. I tried to limit the use of graphics and reuse as much as possible, try to keep this file small. Large files are intimidating to download.

Beta Release 0.1.25 January 25, 2002

-NatasDM

Be sure to utilize the Search Feature!!


Q3Radiant Editor Manual: Page 1.1

Q3Radiant Editor Manual

Preface

The authors would like to thank the many supporters of Quake Engine editing who made this work possible. Several sections in the manual are based on material written by dedicated fans. Others were "corrected" by fans who found undiscovered bugs in both the editor and game code. Where possible, we have noted the contributors in the sections they helped produce.

Paul Jaquays
Robert A. Duffy

GtkRadiant note: This version of the manual is meant to be distributed with GtkRadiant. Being for Q3Radiant 192, some parts are very outdated, specially all the ones dealing with configuration. But the core features (curves and brush manipulation, texturing) are still very relevant. If you are willing to help maintaining this version more up to date get in touch with us (http://www.qeradiant.com/)

Introduction

Part of the fun of games like Quake III Arena is the ability to add to your own ideas to a favorite game and then have others play and enjoy them. While the technical skills needed to create a 3D graphic engine is beyond many game fans, the skills and equipment necessary to make modifications to the game are not. It has become the custom of many game developers to share their development tools with the public. This allows fans make their own game content. The Q3Radiant editor is the software used by the designers at id to create the arenas in Quake III Arena. In fact, it's an improvement on that editor, since it contains features that have been added since the game was completed. If you are familiar with Q3Radiant's immediate ancestor, the QeRadiant editor for Quake 2, then a good share of what's in this manual will be old hat to you. Whether you are a veteran mapmaker or new to the art of making game arenas, we think you will find some indispensible information in this manual.

Now comes the caveat.

This manual will tell you how to use the tools, but not necessarily, how to make what you have in mind. Many fine on-line tutorial and resource sites will be listed at the end of the document.

Minimum System Requirements

The designers at id used Q3Radiant on some heavy-duty computing equipment to make their game maps. Despite the fact that Quake III Arena runs under several different operating systems, not every computer that can run Quake III Arena will be able to run the Q3Radiant editor. Q3Radiant only runs under MS Windows 95, MS Windows 98, MS Windows NT, or MS Windows 2000 operating systems. There are currently no plans for Mac or Linux versions. The editor requires an Open GL compliant 3D graphics acceleration card (it is expected that all cards capable of running Quake III Arena will be able to handle editor functions … although some may handle it better). A 3-button mouse gives the best performance.

Minimum System

The minimum system requirements generally require that preferences such as texture quality and screen resolution be set to absolute minimums. The editor will run on the systems described, but speed of operation and visual quality will probably be less than satisfactory. It should also be noted that you would be limited to working on relatively small maps with limited texture and model usage.

Processor: | P233mmx
RAM: | 64 meg
Video Card: | 4 Meg, software Open GL-compliant
Screen Resolution: | 1024 x 768
Pointing Device: | Two-button mouse*

Recommended System

The more powerful the machine, the better and usually faster the development experience. This will become especially true when you get to the point of compiling your maps (turning them from editor code into game code). It should come as no surprise that, more powerful machines will crunch the numbers faster when compiling a map.

Processor: | P2450 (or better)
RAM: | 128 meg**
Video Card: | Open GL accelerated video card
Screen Resolution: | 1280 x 1024
Pointing Device: | Three-button mouse*

* This will work, but not well. A three-button mouse, even on a minimal system is highly preferred.
** id designers often found it convenient to work with several maps open at once. The recommended 128 Meg of RAM may not be enough to accommodate this.

What Doesn't Work (well) - and How to fix it

The key to a satisfactory editing experience is whether your video card supports the demands of the editor. The original id editor was designed for a workstation card called the Realizm, which ran on Intergraph workstations in a WinNT environment. Robert Duffy expanded this to include the Win9x operating systems and a number of other video cards. But not all video cards support the editor equally well.
  • The G200 and G400 require updated drivers from Matrox
  • The 3fx Voodoo 3000 chipset requires a driver upgrade in order for the map grids to show.
  • If the map grids don't appear when using some ATI chip sets, try turning the settings on you desktop up to 32 bit (true color).
  • Nvidia TNT and GeFORCE have slowdown issues when the user selects curve patches. While this is a driver issue, it can be addressed by checking the "Solid selection boxes" feature under preferences.


Q3Radiant Editor Manual: Page 1.2

Q3Radiant Editor Manual

Installation & Set Up

Installing the editor in the correct place is the first key to successful use. If you are working on a Quake III Arena project, the easiest way to work is to install the editor in the Quake III Arena directory on your computer. The instructions that follow assume that as a given.

Installing the editor

Extract the zip file for the game into your Quake III Arena directory.

Setting up Paths

This is done initially by the editor’s set up procedure. If you install it correctly, the paths will be automatically have been created to access the resources sitting in Quake III Arena’s .pk3 directory.

Improving Performance

If you find that the editor is sluggish on your system, try some or all of the following tweaks:
  • On the View menu, check Cubic Clipping to be ON. This reduces the number of game components in view, by shortening the distance that the editor can "see." Use CTRL + [ and/or CTRL +] to set the distance to 13 (a good number in this case).
  • On the Textures menu, open the Render Quality option and select an option higher on the list than your current setting. We recommend not going below Nearest MipMap first. This reduces the amount of blending and filtering in the textures as they are seen in the Camera window, but still lets you see what the textures look like in a relatively undistorted manner. The Nearest setting will further improve performance, but textures may be distorted when seen in perspective.
  • On View Menu, open the Entities as… option and select an option higher on the list than your current setting.
  • Select Preferences … from the Edit Menu. Under “Camera”, deselect (uncheck) “Update XY views during mouse drags.” This will stop the 2D-map window(s) from being repeatedly redrawn during Camera window mouse drags.
  • Select Preferences … from the Edit Menu. Under “Texturing Quality”, move the slider one or more settings to the left, reducing overall texture quality.
  • Further performance can be gained by turning off curves (CTRL + p) or reducing curve displays to wireframe only.

Setting up Preferences

To set up your editing preferences, open the Edit menu and select Preferences. Use preferences to set a variety of options that tailor the editor to a specific game: Quake2 or Quake 3; and to set up certain editor behavior based on your personal preferences.

Optimize Interface for
Choosing Quake2 or Quake3 in this list will reset certain preferences to the appropriate defaults for the selected game. Currently, the default is Quake3.

Mouse
This lets you choose between two or three-button mouse operation. The default setting is three-button operation. A three-button mouse is HIGHLY recommended for Q3Radiant.

Views / Rendering
These preferences allow you to choose between one of four general layouts for the various editing windows and set the way that rendering is handled. If you are coming to Quake III Arena editing from a Quake engine editing tool (or from a tool for another game engine), you may want to select a layout set up that is familiar. That being said, we also suggest you check out the “id” way of working.

Split Window view
This is the QeRadiant default view. The Camera, XY Map, Z-axis Scale, Texture, and Console windows are constantly displayed. While the arrangement of the windows cannot be changed, their size is adjustable by pulling the window border splitters. The Entity and Group windows share a common pop-up window. This arrangement is one that may work particularly well for mappers using smaller monitors and slower computers.

Floating Window view
This is the view used by id designers. The position, arrangement, and size of the windows are all adjustable. The windows initially come up on top of one another (a known bug), but once positioned, this view offers the greatest flexibility. The Camera, XY Map, Z-axis Scale, and a shared Entity/Texture/Console/Group window are all displayed simultaneously. Changing the size of one window does not automatically affect the others (it can lay atop the others). Additional map layout views can be cycled from menu commands or bound keys. This view only works well if you have a 20+-inch monitor.

Make it Big! In floating windows mode (ONLY), you can double-click on any window’s Title Bar to enlarge the contents of the window to fill the screen. Double clicking on it again reduces it back to normal size.

Quad view
The display window is split into four equal-sized windows: Camera, XY Map, YZ Map, and XZ Map. This is similar to other editors and offers four-way viewing. You see the map components in three views simultaneously. The size of the windows (relative to each other) can be adjusted, by pulling the splitters. The combined Entity/Texture/Console/Group window is brought into view as a single, floating window that lays over the others. The Z-axis window is not used in this view. This is a popular editing configuration, but it has significant performance issues. The editor is drawing all the 2D map components three times (plus maintaining a camera view). Some mappers have notice significant performance slow-downs when working with curves. Using the Quad view is only recommended for mappers with more powerful computers.

Reverse Split Window view
Essentially the same as the Split Window view, except that the windows are all flopped left to right.

Use SGI OpenGL
This will cause Q3Radiant to load the SGI software OpenGL drivers. If you do not have hardware OpenGL, these drivers will offer better speed than the standard Microsoft drivers. You must download and install the SGI OpenGL drivers for this option to work. Here’s a link to a direct download:

    ftp://ftp.qeradiant.com/opengl/sgi/opengl2.exe

Buggy ICD
If you see garbled text in your 2D view windows, check this. It changes the way Q3Radiant does font rendering which corrects an error in some ICD's.

OpenGL Display Lists
This is only used for patches (bezier curves) in Quake III Arena editing. Turning this on will speed up curve drawing by a large factor.

Solid Selection Boxes
Selecting curves, models, or large numbers of brushes causes a noticeable slowdown the Nvidia series. This is an uncorrected driver issue. Solid selection boxes are a workaround for that problem. Checking solid selection boxes reduces the performance hit by turning the dashed line boxes solid.

Camera
Camera
The slider allows you to set how fast the camera moves.

Update XY Views during Mouse Drags
When interacting with the camera (which you will do a lot), turning this off will NOT update the camera icon location in the Map windows automatically. This can help with speed but prevents you from seeing exactly where the camera icon is positioned.

QE4 Update Model
Leave this on unless you’re running on a very slow system with software OpenGL.

Texturing
Quality
This slider allows you to set the quality of the graphics displayed in the editor. The higher the quality setting the better the textures will look AND the more memory they consume. Setting the quality lower, reduces the overall visual quality of the textures (but ONLY in the editor, not in the final level), but can also drastically reduces memory consumption. If you are having performance problems, this is one option to set back right away.

Texture toolbar This provides a texturing toolbar. This feature may or may not work. According to Robert Duffy, it hasn’t been tested in about 100 builds of the code. That means use it at your own risk. But here’s what it appears to do:

It puts a texture toolbar at the bottom of the program window. The toolbar has six data fields. Five of them have up and down scroll arrow.

Shift H: | This shifts the texture horizontally in pixel increments equal to the current map grid. Values cannot be typed in.
(Shift) V: | This shifts the texture vertically in pixel increments equal to the current map grid. Values cannot be typed in.
Scale H: | Multiplies the texture’s horizontal size by a multiple of the current grid scale. Scaling of textures does not appear to function as it may have been intended.
(Scale) V: | Multiplies the texture’s horizontal size by a multiple of the current grid scale. Scaling of textures does not appear to function as it may have been intended.
Rotate: | This rotates the texture clockwise or counterclockwise (using the scroll arrows). The rotation increment (or decrement) uses the degree value set in the field (unnamed) to its immediate right.
(degrees): | This value is only used by the rotate command on the toolbar and no others. It does not affect the information entered on the preferences field. The value must be typed in.

Texture Subset
This provides a texture edit window within the texture window. It is still buggy as of build 188. It puts a text field at the top of the Texture window. Type in the first few letters of a texture name and the window will only display the textures beginning with that letter or letters.

Texture Scrollbar
This adds a Windows scrollbar to the texture window. You can use it (or the customary right mouse drag within the window) to scroll the texture window.

New functionality
Right click to drop entities
This lets you to right click in a Map Window to get a Pop-up menu that allows entity dropping among other things. Remember that a click is different than a press since a right press allows you to move around the map as well (see Moving Around under Map Building Basics).

Face Selection
If this is checked, the surface dialogue references and pulls it contents from the selected face (ONLY if a face and not an entire brush). If this not checked, the editor uses the current default texture (selected in the texture window) as the source.

Rotation Inc
This is the default rotation increment used by the keyboard shortcuts and the button bars for all types of texture, brush, and patch rotation.

ALT + Multi-drag
If this option is checked, you must hold down the ALT key to drag multiple brush edges. This lets you resize more than one brush at a time.

Snap T to Grid
This snaps the Texture tweak size to the grid size. The texture tweak size is the amount textures are moved with the texture toolbar and the keyboard shortcuts.

Mouse chaser
Turning this on causes the view to chase the mouse if you drag something off the edge.

Patch Toolbar
This enables the Quake3 specific toolbar that contains patch (bezier curve) shortcuts.

Light drawing
This draws lights as shaded triangle things (octahedrons) instead of standard square entities. When enabled, the light entities also show their emitted light color.

Paint sizing info
This draws size information on the selected item(s). It also draws in real time when dragging out a new brush or altering the size of an existing one.

Hi Color Textures
This causes the editor to load 24 and 32 bit TGA and JPEG textures. This should be checked for Quake3 editing.

Startup shaders
Allows you to specify which shaders are preloaded when the editor starts. The default is None. Options are None, Custom, and All. Loading all of the shaders at editor load time is VERY time consuming.

Game Path/ Tool Settings/ Stuff that wouldn’t fit anywhere else
Game
Set this to point at the proper game executable (Quake3.exe, for example). This is not properly set up automatically, as of build 181 and must be set manually.

Use Internal (DLL) QBSP
This is for Quake2 only and is grayed out for Quake 3 editing. The internal DLL is not provided with Q3Radiant. If you want to use it, you will need to acquire it from an earlier release of QERadiant. To get the .DLL for Quake 2 usage, you will need to download QERadiant from this site:

    http://www.qeradiant.com/files.cgi?dirin=qeradiant/latest/

Don’t clamp plane points
This turns off clamping of plane points. This allows for very precise brush/vertex manipulation but can make it difficult to get things properly aligned and can also cause the bsp process to take a LOT longer. In general, this should be unchecked.

Design Tip: Be warned, if at any point during design you change to a snap to grid setting, you may see everything you’ve worked on twist and deform to lock into grid coordinates. If you want to work to work in very fine detail, use a 1-unit map grid. But even then, you’re asking for headaches you don’t need.

Autosave
Checking this forces the editor to automatically save the map to the autosave name specified in project settings based on the selected time increment. This feature has saved more than one mapper’s bacon.

Snapshots
This saves an incrementally named snapshot of the user’s map based on the autosave time increment. The problem is it can quickly fill a hard drive, as there is no space checking in force. Current recommendation is to leave this feature turned off.

Run game after QBSP3
This will run the game pointed to by the game path with a +set map "yourmap.bsp".

Warning. With some video drivers, it is a bad idea to run Quake 2 or Quake III Arena and the Q3Radiant editor. The drivers just will not sustain two demanding OpenGL applications simultaneously. This feature is best left turned off.

Load last project on open
This causes the editor to load the last project file (.qe4) when it is re-started. This is a good thing.

Undo Level
There are a maximum of 64 levels or layers of Undo. This field lets you choose how many you want to use. Unless you are having serious memory problems, this it’s good to leave it set at 64 layers.

Use +set game for run
This is broken as of build 181. Its intended purpose is to allow mod's to run properly when the editor (using run game after QBSP3) starts the game.

Load last map on open
This causes the editor to load the last map when it is re-started.

Status point size
This sets the point size for the status bar font. A 10-point font is the default.

Use PAK/PK3 files
Checking this will cause the editor to load the specific PAK file for Quake2 or *.PK3 file(s) in the basepath for Quake3.

Prefab path
Allows the user to specify the path from which the editor will to load prefabs (premade map components).

User .ini path
Allows you to specify an INI file that contains custom key bindings. Most of the commands in Q3Radiant can be bound to specific key combinations. The .ini file should contain a section called 'commands' and a binding for each command you want to rebind under that. You use the normal character for most keys but there are special names for certain keys. You can modify each binding with a ‘+ SHIFT’ or ‘+ CTRL’ or ‘+ ALT’. You can also combine things like:

    SurfaceInspector = F4 + SHIFT + ALT

And so on.

Here is an example keymap file (note that this is NOT the default keymap):

    [Commands]
    NextView = TAB
    BendMode = O
    UpFloor = PAGEUP+shift
    DownFloor = PAGEDOWN+shift
    TexRotateClock = PAGEDOWN
    TexRotateCounter = PAGEUP
    CameraForward = E
    CameraBack = S
    CameraLeft = Q
    CameraRight = T
    CameraUp = F
    CameraDown = D
    CameraAngleUp = A
    CameraAngleDown = G
    CameraStrafeRight = R
    CameraStrafeLeft = W
    CenterView = 0
    CenterOnCamera = U
    GridDown = [
    GridUp = ]
    ViewConsole = F1
    ToggleConsole = F1
    ViewTextures = F2
    ViewEntityInfo = F3
    SurfaceInspector = F4
    EntityList = F6
    MapInfo = F7
    ToggleGrid = F8
    ToggleCamera = F10
    DragEdges = B
    DragVertices = V
    CloneSelection = SPACE+shift
    DeleteSelection = BACKSPACE
    UnSelectSelection = SPACE
    NextLeakSpot = L+ctrl+shift
    PrevLeakSpot = K+ctrl+shift
    MouseRotate = R+shift
    FlipClip = ESCAPE
    ZoomIn = Y
    ZoomOut = H
    ZZoomOut = DELETE
    ZZoomIn = INSERT
    TexDecriment = END
    TexIncriment = HOME
    TexScaleDown = DOWN+ctrl
    TexScaleLeft = LEFT+ctrl
    TexScaleRight = RIGHT+ctrl
    TexScaleUp = UP+ctrl
    ToggleClipper = X
    CycleGroupSelection = C
    ToggleSizePaint = P
    Copy = C+ctrl
    FileOpen = O+ctrl
    FileSave = S+ctrl
    Exit = X+ctrl
    Undo = Z+ctrl
    Patch TAB = L
    MakeOverlayPatch = P
    ToggleView = V+shift+ctrl
    ToggleZ = Z+shift+ctrl
    ConnectSelection = K
    ShowDetail = F9
    MakeDetail = M
    SelectNudgeDown = DOWN+shift
    SelectNudgeLeft = LEFT+shift
    SelectNudgeRight = RIGHT+shift
    SelectNudgeUp = UP+shift
    Preferences = F11

The Project File

The project file contains the paths for the various Q3Radiant file-processing functions. Using the installer to set up the editor should write these for you.

New Project

(Menu: File > New Project)

This creates a new folder (which you must name) in your Quake III Arena directory.
This is really only needed if you’ve messed up your project settings (without overwriting the original), and you want to reload the defaults.

Load Project

(Menu: File > New Project)

This opens up a browse directory pointed at the scripts directory. It is looking for a text file with a .qe4 file extension.

Changing the Project File

(Menu: File > Project Settings)

You can edit the project file by changing the pathnames to various functions in field of the dialogue window that pops up. HOWEVER, before doing this, you should make a backup copy of your Quake project file and give it a new name. Make your changes to this new file. If you mess things up, you can always reload the original. This is a good thing to do if you are making maps for a mod that uses a separate set of definitions for entities or directories for textures and want to easily change between types of projects.

Project Settings

    Basepath: This traces a path, beginning in your root directory to the baseq3 where the editor expects to find resources.

    Mapspath: This traces a path, beginning in your root directory, to the location where maps are saved and from which they are loaded. The default is the maps directory.

    Rshcmd: This means "remote shell command." Use it only if you are directing a remote processing device (not your editing computer) to compile maps. The syntax for the field is: "rsh [processor name]"

    Remotebasepath: If you are running your compile from your editing computer, this should be the same as your basepath. If you are working off a remote compling device, this should trace the full path to the to the baseq3 folder where the compiler will find the resources it requires.

    Entitypath: This traces a path to the definition file for your game entities. This can either be a .c file which contains the game code, or a .def file which contains more instructive information about the entities.

    Texturepath: This traces a path, beginning in your root directory, to the location from which textures are loaded. The default is the textures directory.

Menu commands
These commands are your map compile commands. You can CHANGE these commands or ADD your own. Each new command must start with “bsp_” The following is the compile command string for “bsp_Fullvis” taken off one of our project files.

    ! q3map $ && ! q3map -vis -threads 8 $ && ! q3map -light -threads 8 $

Command parameters:

! | The exclamation mark is replaced by the contents of the rshcmd field. It is the path to the processor.
$ | The dollar sign is replaced by the Mapspath.
&& | The double ampersand is the command terminator (end of command)
q3map | This is the process command. Without a switch after it, it performs the .bsp compile phase.
-vis | This is a switch to select the vis compile phase.
-light | This is a switch to select the lighting compile phase.
-threads | This is a switch to break the compile up into a number of different processor threads. The number of processors follows the switch parameter.

Other parameters

-onlyents | Process only the entities in the map.
-fast | A quicker process. However, it treats the map as if it were all one vis area.
-extra | As in -light -extra. This is a second lighting pass that more finely subdivides the map into areas of light and shadow.
-nowater | Compiled without liquids in the map. Used in the first compile phase only.
-nocurves | Compiles without curves in the map. Used in the first compile phase only.

Misc settings
Use brush primitives in MAP files.
Once this is set for a map, the program converts the texture mapping to this format. Once chosen, there is no going back to the old format. Brush primitives are described in detail under the Working with Textures section.

Setting up the Windows

There are six configurable windows in Q3Radiant.

The Camera Window (CAM)
The Camera window initially shows a gray field. This is where the 3D in-progress view of your map appears. You can SHIFT + click mouse button 1 to select objects in this window. If the images in this window appear overly dark, you can adjust the gamma value. Open the Misc menu and select Gamma. Enter a value between 0 and 1 for the light value. Close the program. Reopen the program. Check the darkness. Repeat this until you have a value you like.

Entity/Texture/Console/Group Window
Depending on the Windows layout view that you’ve chosen, one or more of the following sub-windows share this window. They are selectable by the tab at the bottom of the window, or by shortcut keys.

Entity Window

(Shortcut: N)
The Entity window is one of four windows that share the same window space: Console, Entity and Texture and Group. The entity window is used to create and modify the properties of game entities. The uppermost box in this window contains the entity names. Use the scroll bar to find the one you want or for speed, type in the first letter of the class of entity you desire (“w” for weapon, “I” for item and so on). Refer to the Working with Entities section for more details on this.

Texture Window

(Shortcut: T)
The Texture window displays textures that have been loaded from the texture directories for easy use. The texture subset tool (set in preferences) allows you to quickly jump to a texture if you know the first few letters of its name. The scrollbar tool adds normal Windows functionality to the window. The most common method of navigating the window is to right-mouse click and drag through the window contents. SHIFT + right-mouse click and drag speeds up the rate of movement through the window’s contents. A thin green outline around a texture indicates a non-shadered texture in use in the map. A thin white outline indicates a shadered texture. A bold red outline indicates a selected texture.

Console Window

(Shortcut: O)
The console tracks the editor’s processes, like loading, saving, and compiling. When you compile (selecting an option from the bsp menu), the contents of the console are dumped into the junk.txt file in your Temp file folder on your root drive. In the Split Window view layout, the Console window is always in view.

Groups Window

(Shortcut: none)
This window will deal with the future grouping functions that will soon be a part of the editor. At this time, it is only a non-functioning window.

Z-axis Scale Window
This window is used by three of the four views to show the Z-axis position (height) of the Point of View and any selected map components.

Map Window(s)

The Grid
Think of the Map window as a piece of graph paper, neatly divided into squares. However, unlike graph paper, you can change the size of the grid to fit your needs of the moment. You can change grid size from the Grid menu, but it’s faster to learn the key shortcuts listed below.

Setting Grid Size

Grid size | Key
1 unit grid | (1)
2 unit grid | (2)
4 unit grid | (3)
8 unit grid | (4)
16 unit grid | (5)
32 unit grid | (6)
64 unit grid | (7)
Grid Down | Decreases the size of the grid. [ key
Grid Up | Increases the size of the grid. ] key

Grid and Window Layouts
There are four distinct ways of laying out the work windows for Q3Radiant.

Design Notes:
Try not to build architecture with a grid smaller than 8 units.
Use a smaller grid if you need to build small details.
Use a large grid (32 or 64) for roughing in a level.
Use a large grid for moving large chunks of architecture around.

Snap to Grid
When this is checked, the edges and vertices of brushes and patches will “snap” to grid coordinates. Unless you are attempting some very fussy maneuvering of a map component, Snap to Grid makes life much easier. In fact, if you are building objects out of curve patches, it is crucial that you be able to line up patch control points with the vertices of surrounding solid geometry brushes.

Colors
Q3Radiant allows you to select the colors of your grids and tools. Because the manual refers to the colors of some features, you may wish to wait until you are more comfortable using the editor before changing too many things. You can always revert to the Q3Radiant defaults, should you choose change too much.

To change Map window and Texture window colors, select the “Misc” menu and choose colors. The pop-up lists a number of options.

Themes
Brings up three options:

    QE4 Original: The settings for id’s original Quake 2 editor
    Q3Radiant Original: The default setting.
    Black & Green: a black background with a green grid major.

Each of the following options opens the Windows color selector.

Grid Background…
The background color for the map window.

Texture Background…
The background color behind the textures in the texture window. This is probably best left a neutral color.

Grid Major…
These bolder grid lines mark 64 unit increments in the map window. These never change.

Grid Minor…
The finer grid lines in the map window.

Grid Text…
The color of the scale numbers along the left and top of the map window.

Grid Blocks…
These lines mark the 1024 x 1024 unit grids on the map.

Default Brush…
This is the color of unselected brushes in the map.

Selected Brush…
The color of selected brushes in the map.

Active View Name…
This is the text that says “XY Top” or “YZ Side” or “XZ Front” in the map view window(s). BODY>


Q3Radiant Editor Manual: Contents

Q3Radiant Editor Manual

Based on Version 192 - partly updated to GtkRadiant

By Paul Jaquays

With additional contributions by Astrocreep, Christian Antkow,
EutecTic, Inolen, Mr. Elusive, Maddog, Martin Ka’ai Cluney,
Robert A. Duffy, Small Pile of Gibs, Suicide20, and The Dog!

Special thanks go out to the members of the Quake3world Editing forum.

Your questions prompted many of the sections in this manual.

QERadiant.com thanks John Hutton for re-formating this manual into a more web friendly version.

Table of Contents

Preface
Introduction
Minimum System Requirements
    Minimum System
    Recommended System
    What Doesn’t Work (well) … and How to fix it
Installation & set-up
    Installing the editor
    Setting up paths
    Improving performance
    Setting up preferences
    The Project File
    Setting up the windows
Entities and assets
    What are entities?
    What are assets?
    Creating new assets
    Making the .pk3 file
New Functionalities in GtkRadiant
    Better movement in camera window
    Mod support
    Misc functionalities
    Known issues
Map-building basics
    Moving around
    Basic construction tutorial
Tools 1: Selecting and deselecting
    The component handling tools
    Group component selections
    Copying, pasting, cloning, deleting and prefabs
    Working with regions
Tools 2: Working with brushes
    Geometry brush handling tools
    Brush menu commands
    Moving selected brushes
    Efficient brush building techniques
Tools 3: Working with curve patches
    Curve menu commands
    Patch tool bar
    Moving patches
Tools 4: Working with textures
    Brush primitives: A new format
    Texture creation: Making new assets
    Texture manipulation: Shader overview
    Texture application: Texture handling tools
    Using interactive textures
Tools 5: Working with entities
    The entity window
    Entity handling tools
Tools 6: Lights & lighting
Tools 7: Miscellaneous commands
    Feedback & read-outs
    Viewing, seeing, not seeing, and hiding
    File management commands
    Projects and preferences
    Miscellaneous commands
    Opening menus from the keyboard
Tools 8: Compilings maps
Tools 9: Debugging maps
    The editor’s debug tools
    In-game Debug tools
    Curves, caulk, T-Junctions and cracks
    A debug config
Appendix A: Glossary of Terms
Appendix B: Entity descriptions
    Basic key information
    Ammo_* entities
    Func_* entities
    Holdable_* entities
    Info_* entities
    Item_* entities
    Light entity
    Misc_* entity
    Path_* entities
    Shooter_* entities
    Target_* entities
    Team_* entities
    Trigger_* entities
    Weapon entities
    Worldspawn entity
Appendix C: Bot navigation files
    Introduction
    Description
    Installation
    Usage
    Updating the entity lump
    Leaks
    Useful map information
    Optimizing a map for bspc compiling
    Entities & the navigation file
    Testing AAS files
    Version changes
Appendix D: Tips, tricks, and tutorials
    Making the death-fall sound
    Making a mirror
    Making a jump pad
    Making a launch pad
    Making a "Rocket Arena" style map
    Making an environment box
    Making a shooter
Appendix E: Online resources
    News about the editor
    Editing tutorials
    Editing tools
    Prefab sources
    Texture sources
    Map object model sources
    Sounds
    Frequently Asked Questions (FAQ)
    Map reviews, general information
Appendix F: Default key shortcuts
Appendix G: Shortcut keys and mouse functions
    Preface
    1. Introduction
    2. Shortcut key list
    3. Mouse function list


Q3Radiant Editor Manual: Page 4.1

Q3Radiant Editor Manual

Tools 1: Selecting and deselecting

The most basic interaction with the editor is selecting and deselecting the map components. Everything else builds off from these commands.

The Component Handling Tools

Escape (ESC)
This is the all-purpose deselect key. Use it to back out of operations you don’t want to complete or to stop working on a map component or group of components.

Select single component
(SHIFT + mouse button 1 while mouse pointer is over desired unselected component)
In the XY Window (or XZ or YZ), this selects a single map component that is “closest” to the top of all components beneath the pointer. The following is an exception: If an entity is directly beneath the pointer, it will be chosen in preference to a non-entity, even if the non-entity is “between” it and the pointer.

Select single face on brush
(SHIFT + CTRL + mouse button 1 while mouse pointer is over desired unselected brush face in the Camera Window).
This selects a single face on one brush, not the brush itself.

Select multiple faces on one or more brushes
(SHIFT + CTRL + ALT + mouse button 1 while mouse pointer is over desired unselected brush face in the Camera Window).
Use this to select several brush faces on one or more brushes.

Cycle through stacked components
(SHIFT+ALT+mouse1 while pointer is over map view)
Beginning with the component that has the greatest Z value, the user can cycle through vertically stacked components that are directly beneath the mouse pointer.

Deselect single component
(SHIFT+mouse1 while mouse pointer is over desired selected component)
In the XY Window (or XZ or YZ), SHIFT clicking on a selected component deselects it. The following is an exception: If a selected entity is directly beneath the pointer, it will be chosen and deselected in preference to a non-entity, even if the non-entity is “between” it and the pointer.

Deselect all selected components
(Menu: Selection > Deselect)
(Shortcut: ESC)
All selected components are deselected.

Group Component Selections

There are four commands for selecting large groups of components. These involve creating a brush that encloses or touches numerous other components. In most cases, the brush used to create the grouping is deleted by the operation. These operations can be selected by menu commands or by buttons on the toolbar. The toolbar buttons are in the third grouping (as counted from the left). The command buttons on the toolbar are given as they relate to the Selection sub-grouping on the toolbar.

Design Note: These grouping commands are particularly useful when you want to region off a small area of the map.

Select Complete Tall
(Menu: Selection > Select Complete Tall)
All brushes from the top to the bottom of the map that are totally enclosed within the XY dimensions of the grouping brush will be selected. The grouping brush is discarded.

WARNING: Undo will restore selected components but will delete the selection brush.

Select Touching
(Menu: Selection > Select Touching)
All brushes that are in contact with the grouping brush will be selected. The grouping brush is NOT discarded.

Design Tip: Need to work an area around a particular brush? Use this tool to select the brush and then use the selected brushes to create a regioned area.

Select Partial Tall
(Menu: Selection > Select Partial Tall)
All brushes from the top to the bottom of the map that are touched by the XY dimensions of the grouping brush will be selected. The grouping brush is discarded.

Select Inside
(Menu: Selection > Select Inside)
All brushes from the top to the bottom of the map that are totally enclosed by the XY and Z dimensions of the grouping brush will be selected. The grouping brush is discarded.

Copying, Pasting, Cloning, Deleting and Prefabs

Save Selected
(Menu: File)
The selected brushes are saved as a map file. Not a true prefab, but a way to duplicate pieces of a map for later insertion.

Copy brush
(Menu: Edit)
(CTRL+C)
This function copies all hi-lighted brushes, patches, and entities onto clipboard. Contents of clipboard may be pasted into the current open map file or into another open map file.

Paste brush
(Menu: Edit)
(CTRL+V)
The map information previously copied into the clipboard is pasted at the same XYZ coordinates as the original. UNDO will delete the paste

Clone
(Menu: Selection > Clone)
(Shortcut: SPACE)
Selected map components are immediately duplicated. The clone appears +1x and -1y units (current map grid) away from the original (down and to the right). The clone remains hi-lighted until deselected.

Save Selection as Prefab
(Menu: EditèSave Selection as Prefab)
(Shortcut: none)
The user is prompted to save the selected map components as a prefab file (*.pfb) in the directory set by Preferences.

Load Prefab
(Menu: EditèLoad Prefab)
(Shortcut: none)
Opens a file selection window into the directory set in Preferences. Select from that directory or browse for another. The selected prefab is pasted into the map at the same XYZ coordinates as the original.

Delete
(Menu: Selection > Delete)
(Shortcut: BACKSPACE)
All selected map components are removed from the map.

Undo
(Menu: Edit > Undo)
(Shortcut: none)
Undo will undo recent command actions affecting brush geometry, curve patches, and in-map comands that affect entities (move, rotate, delete, etc.). Undo has no effect on texture operations.

The number of levels or layers of Undo can be set in Preferences. The maximum number is 64. Unless your computer memory is extremely low, there is no real reason to use less than all 64 levels of Undo.

Working with Regions

Regions are an important tool to learn and use early on. Whether you isolate off a single brush, or half a map, you’ll wonder how you ever got along without this tool in other editing programs. The selections on the Region Menu allow the mapper to isolate, and work on, a subset of the map. There are innumerable benefits to working in a “regioned” area of the map. However, the following are the most important:
  • It allows you to work with a few map components at a time, without the distraction of the rest of the map pieces.
  • When you want to perform CSG operations, regioning lets you isolate the pieces from the rest of the map, reducing risk of making unwanted cuts or splits.
  • Map regions can be compiled without having to compile the rest of the map. This can be an incredible timesaver. Instead of spending hours to compile an entire map just to check for leaks in new construction, or check the appearance of a room, or test a lighting effect, minutes can be spent processing just the room itself.

There are several ways to select a region, by a group selection, by XY map window dimensions (or the corresponding view in YZ and XZ), or by a few selected map components.

The commands for selecting regioned areas are found under the Region Menu heading.

Region Menu
Off
(Menu: Region > Off)
This returns you back to the full map. Brushes that were selected while in the regioned mode remain selected until ESC is pressed to unselect them.

Set XY

(Menu: Region > Set XY)
Any map components that are inside, or that are touched by the bounds of the XY Map window are converted into a region. The size or shape of the window does not matter. Nor does the degree of Zoom matter. This is an excellent way to select are larger subset of your map, such as a complex room or group of rooms. Any brushes selected before regioning the map remain selected.

Set Tall Brush

(Menu: Region > Set Tall Brush)
This functions in a similar manner to the group selection command, Select Partial Tall. Any map components contained within the XY bounds, or touching the XY bounds of the brush will be regioned off. The selecting brush itself is discarded.

Set Brush

(Menu: Region > Set Brush)
This functions in a similar manner to the group selection command, Select Touching. Any map components contained within the XYZ bounds of the brush, or touching the XYZ bounds of the brush will be regioned off. The selecting brush itself is discarded.

Set Selected Brushes

(Menu: Region > Set Selected Brushes)
If you need to work with just a few brushes, this is the option to choose. Hi-light the brushes to be worked upon then select this option. Only those brushes are moved to the region. The selected brushes are unselected when the region is created.

Compiling Notes: Sometimes, when compiling a regioned area, md3 map object models near the edge of the region can cause a “false leak” situation to occur. This can usually be corrected by adjusting the region size to include more of the map near the md3 map object model.


Q3Radiant Editor Manual: Page 5.1

Q3Radiant Editor Manual

Tools 2: Working with Brushes

The geometry brushes are the basic building block of the Quake III Arena engine. These are the tools to make them work for you.

Geometry Brush Handling Tools

Escape (ESC)
This is the all-purpose deselect key. Use it to back out of operations you don't want to complete or to stop working on a brush or group of brushes.

Create New Brush
(Click mouse button 1)
(Shortcut: none)
While mouse1 clicking over the main map window (or any open map window) drag the mouse pointer across the grid. A brush will be created that has the height of the current map grid size. If you have the "snap to grid" function set in your preferences, the brush will start and stop on gridlines. The texture will be either the default texture (if none has been selected) or the most recently used texture. For all these functions, you will first need to select a brush in either the Map or Camera windows.

Move Geometry Brush
(Click mouse button 1)
The Undo command will return the brush to its original size (if the brush is still selected). If the brush has been deselected, the resized version will remain and another brush will be created at full size.
    In the Map Window. In the map window, select the brush. Click on the selected brush. With the mouse 1 button depressed move the brush around the map to the position you desire.
    In the Z (height) Window. In the map window, select the brush. Next, click on the selected brush in the Z window. With the mouse 1 button depressed move the brush around the map to the position you desire.
    In the Camera Window. Select a brush in the camera window (see select single component above). Mouse button 1 click on the brush and drag it in the desired direction. You may need to adjust your camera view to make dragging easier.

Stretching the Brush
(mouse1)
Think of this as stretching the brush. The Undo command will return the brush to its original size (if the brush is still selected). If the brush has been deselected, the resized version will remain and another brush will be created at full size.
    In the Map Window. In the map window, click next to the selected brush on the side you want to pull. With the mouse 1 button depressed pull in a direction away from the nearest edge. The brush will grow larger in that direction.
    In the Z (height) Window. Use this to make the brush taller. In the Map or Camera window, select the brush. Next, click above or below the selected brush in the Z window. With the mouse 1 button depressed pull away from the select brush. The brush will grow in that direction.
    In the Camera Window. Select a brush in the camera window (see select single component above). Mouse1 click near the edge of the selected brush. With the mouse 1 button depressed pull in a direction away from the nearest edge. The brush will grow larger in that direction. You may need to adjust your camera view to make dragging easier.

Shrinking the Brush
(mouse1)
Think of this as crunching the brush smaller.
    In the Map Window: In the map window, select the brush. Click next to the selected brush on the side you want to pull. With the mouse 1 button depressed pull in a direction toward the nearest edge. The brush will shrink in that direction.
    In the Z (height) Window: Use this to make the brush shorter. In the Map or Camera window, select the brush. Next, click above or below the selected brush in the Z window. With the mouse button 1 depressed, push towards the select brush. The brush will shrink in that direction.
    In the Camera Window: Select a brush in the camera window (see select single component above). Mouse1 click near the edge of the selected brush. With the mouse 1 button depressed push in a direction towards the nearest edge. The brush will grow larger in that direction. You may need to adjust your camera view to make dragging easier.

Flip Brush
(Menu: Selection > Flip)
There are three separate actions here. They flip a brush along either X, Y, or Z-axes. A menu command and toolbar button controls each. The six flip and rotate toolbar commands are the second grouping (from the left) on the toolbar. The rotate command for the same axis is always next to the flip command. Flipping will not change the facing on non-model entities.
    Flip X (Menu: Selection) (Toolbar: Leftmost button)
    Flips brush along x-axis.
    Flip Y (Menu: Selection) (Toolbar: left of center button)
    Flips brush along y-axis.
    Flip Z (Menu: Selection) (Toolbar: second button from the right)
    Flips brush along z-axis.

Rotate Brush
(Menu: Selection > Rotate)
There are three separate actions here. They rotate a brush in 90 degree increments around a brush's X, Y, or Z axes. Both a menu command and toolbar button controls each action. The six flip and rotate toolbar commands are the second grouping (from the left) on the toolbar. The flip command for the same axis is always next to the rotate command for the same axis. The rotation will not change the facing on non-model entities.
    Rotate X
    (Menu: Selection > Rotate > Rotate X)
    Rotates brush around the x-axis.
    Rotate Y
    (Menu: Selection > Rotate > Rotate Y)
    Rotates brush around the y-axis.
    Rotate Z
    (Menu: Selection > Rotate > Rotate Y)
    Rotates brush around the Z-axis.

Arbitrary Rotation
The Rotate commands accessed from the toolbar all rotate affected map components 90 degrees; no more, no less. Arbitrary Rotation allows the user to set angles individually for the X, Y, and/or Z-axes. Enter a number value for each axis you want to rotate. Value can be positive or negative. After the values are entered, select OK. This rotates the object and closes the pop-up window. If you don't like the rotation, you can use Undo, so long as the brush is still selected, and the brush will return to its un-manipulated facing.

Free Rotate in Map Window
(Shortcut: R)
Press the "R" key. The selected map component(s) turns lavender. The purple square at the center is the center of the selection and the axis around which it will rotate. Left Mouse clicking on or near the selected component (in the map or camera window) and dragging will cause it to rotate. If the user does a SHIFT + middle mouse button click on the 2D map window, the axis square will relocate to the coordinates of the click. Deselecting and reselecting the component returns the axis to its original center.

Drag
There are two "drag" functions that involve control points or "handles" on the brush.
    Drag Edges
    (Menu: Selection > Drag Edges)
    (Shortcut: CTRL + E)
    This highlights the edges of a geometry brush, marking those edges with a blue "handle" box at the center of each side. Press again and the feature will toggle off. Pull on a handle to resize part of a brush. If Snap-to-Grid is active (Menu: Grid), the handle will snap to the nearest grid coordinate as it is pulled. Undo functions with this effect.
    Drag Vertices
    (Menu: Selection > Drag Vertices)
    (Shortcut: CTRL + V)
    This highlights the corner vertices of a geometry brush, marking those corners with a green "handle" box where the sides of each brush face connect. Press again and the feature will toggle off. Pull on a handle to resize part of a brush. If Snap-to-Grid is active (Menu: Grid), the handle will usually snap to the nearest grid coordinate as it is pulled. Undo does NOT function with this effect.

Design Note: Drag Vertices is a balky tool at best. It works well if the user is manipulating a triangular brush face, raising or lowering corners of the triangle. Work with care, it is quite easy to pull a brush out of useable (or recoverable) shape.

Scale
(Menu: Selection > Scale)
With Scale you can enlarge or reduce a brush, patch, or group of brushes and patches. You choose the axes to scale (X, Y, or Z) and the factor of the scale. The scaling factor can be different for each axis. Selecting this option brings up a tool window. The size of the brush or group of brushes is multiplied by the numbers in the boxes adjacent to the X, Y, or Z axes. Leave the value as 1 and no change occurs. If the value is a decimal less than one, the size of that axis shrinks. If the value is greater than 1, it grows. Hit OK to activate the scaling function with you chosen values. Undo functions with this effect.

CSG Operations
CSG stands for "Computed Solid Geometry". The two functions here, CSG Subtract and Make Hollow, calculate the removing of sections from that geometry and breaking solid brushes (not curve patches) into smaller pieces. Although they are convenient to use for some operations, they often do things that the user may not care for. These "side effects" can include breaking brushes into inconvenient parts, cutting up adjacent brushes, and creating hard to find and remove micro brushes.

Subtract

(Menu: Selection > CSG > Subtract)
When you select this, the selected brush or brushes subtract its volume from all the geometry that contacts it. The cutting brush is not removed. Undo does not fix this action.

Design Note: Region off together the brushes that will be cut and the brushes which will be used for cutting. This keeps other brushes in the map from being affected by the action. It's also a good idea to save just before doing the action, so the user can "back up" to an earlier version.

Hollow

(Menu: Selection > CSG > Hollow)
When the user selects this, the sides of the highlighted brush are turned into separate brushes. The thickness of these brushes is equal to the grid size. Undo functions with this action.

Design Note: This works best with rectangular brushes. The edges of the created brushes overlap each other.

Merge

(Menu: Selection > CSG > Merge)
When the user selects this, the highlighted brushes are turned into a single, convex brush. If the result of the merge would not create a convex brush, the following message appears in the editor console: " Cannot add a set of brushes with a concave hull."

Examples: Example "A" shows two brushes can be merged together. Example "B" shows two brushes that cannot merge.

Clipper
(Menu: Selection > Clipper)
(X toggles the clipper tool on or off)
If you think of this tool as being near the same as the miter box that a carpenter uses to cut wood or moldings, then you are not far from the truth.

Placing Clip Points
Clip points are placed in the map views by two methods:

(Mouse button 1 after Clipper has been toggled on)
(CTRL + Mouse button 2 at any time)

The figure below shows a square brush that has been "clipped" from the lower left (point 1) to the upper right (point 2). The editor creates a line between the first point and the second point. The piece to be kept when the brush is cut is always created in a clockwise direction from the line (assuming that the first point is the center of the "clock")

In a two-point clip (shown here), the cut occurs perpendicular (at a 90 degree angle) from the plane of the map view. Adding a third point, and adjusting its position in a different map view can change the angle of the cutting plane. This will take practice to master.

    Toggle Clipper
    (Menu: Selection > Clipper > Toggle Clipper)
    (X)
    This toggles the Clipper function on and off. After completing a cut, the tool remains active and must be toggled off before another brush is selected.
    Clip Selection
    (Menu: Selection > Clipper > Clip Selection)
    (SHIFT)
    If the "clip selection" action is completed the red portion of the brush will be discarded and only the yellow will remain. The brush is unselected. Undo currently returns the original brush and keeps the clipped off piece.
    Split Selection
    (Menu: Selection > Clipper > Split Selection)
    (SHIFT + CTRL)
    If the "split selection" action is completed the red and yellow portions of the brush will remain, split into two triangular brushes. The brush is unselected.
    Flip Clip Orientation
    (Menu: Selection > Clipper > Flip Clip Orientation)
    The yellow and red hi-lights toggle so what was red is now yellow and what was yellow is now red.

Make Detail
(Menu: Selection > Make Detail)
(Shortcut: CTRL + M)
In Quake 2, this was a surface flag. In Quake III Arena, it is used on the brush itself. Detail makes a brush non-structural. This means that it cannot be used to seal the hull of the map world. Don't use it for wall, floors, or ceilings. If it is used as a hull, the map will "leak" when compiled. But it can be used on things that jut out away from the walls (as long as there is a structural brush behind it).

Detail has two beneficial effects:

1. Detail brushes are less likely to cause additional cuts to occur in non-detail brushes that they touch ... thus reducing triangle counts. This can help reduce frame rate.

2. When the compiler does Vis, it breaks the world up into many small volumes. Any break in the surface of the box that forms a room creates additional volumes that must be. Detail brushes don't create these breaks. Therefore, using them speeds up compiling.

Make Structural
(Menu: Selection > Make Structural)
(Shortcut: none)
Structural is the Default State for brushes. Textures that are not manipulated by shader scripts to be transparent or non-solid) do not change this. Essentially, this is a change-it-back command for Make Detail. It removes the detail flag from the brush. This surface WILL block Vis when the map is compiled (so long as there isn't shader content that says otherwise).

Func_Group
(Entity Window > Func_Group > Enter)
Technically, this is a b_model (brush model) entity. However, it's a great way to manage and handle related groups of map components for ease of selection. To use, select the brushes and patches you want to group and then open the Entity window (press "N"). Click on the entity list sub-window and type in "F" to move to the top of the "funcs". Double-click on Func_Group and all the brushes and patches selected are bound together into a group. Select one and you select them all.

Thumb through Components
(Shortcut: TAB)

When you have a Func_Group b_model entity selected, press the TAB key to "thumb" through the component pieces, hi-lighting them individually, one at a time. This allows you to work on part of a multi-piece group without having to work on all pieces

Find Brush
(Menu: Misc > Find Brush)
Find brush allows you to locate a brush in the map by its identifying number. As the map is built, the editor assigns identification numbers to each map component. For brushes (and patches) these include an Entity number and a brush number. For any brush that is not part of a brush model (b_model), the entity number is zero (0). Each b_model will have it's own number.

When the compiler outputs error messages in the console and junk.text file, an identification number will call out brushes with problems. Be prepared for them. Even when you do things right, you will get error messages.

Selecting Find brush pops up a dialogue window with two fields. The first field is the entity number. For most brushes, this will be zero. The second number is the brush's individual number. Selecting "OK," jumps the 2D map window(s) to the selected component and hi-lights it.

Brush scripts…
(Menu: Edit > Brush scripts…)
(Shortcut: none)
The command allows you to perform multiple step operations that manipulate a single brush. Currently, only two of the list scripts function.

BuildSpiral | This walks you through the steps of building a spiral staircase. Select a brush, then click on the map to locate the spiral origin. Click again to bring up a dialogue window that prompts you to enter the number of steps, the angle of rotation, and the height of each step.
BuildStep | This clones the selected brush and moves it +X 16 units and +Z 8 units.

Brush Menu Commands

The Brush menu lets the mapmaker convert a selected brush into a brush of a different shape. Most of the commands change the number of sides that the brush possesses. It will also change the brush to a single color. There are individual commands for three through nine sides. The brush will be given the number of sides indicated by the command (Plus top and bottom). The "top" facing is always relative to the view in which it is created. The sides are always at right angles to the view facing.

Poly-Sided Brushes
3 sided | (Menu: Brush > 3 sided) | (Shortcut: CTRL + 3)
4 sided | (Menu: Brush > 4 sided) | (Shortcut: CTRL + 4)
5 sided | (Menu: Brush > 5 sided) | (Shortcut: CTRL + 5)
6 sided | (Menu: Brush > 6 sided) | (Shortcut: CTRL + 6)
7 sided | (Menu: Brush > 7 sided) | (Shortcut: CTRL + 7)
8 sided | (Menu: Brush > 8 sided) | (Shortcut: CTRL + 8)
9 sided | (Menu: Brush > 9 sided) | (Shortcut: CTRL + 9)

Arbitrary sided…
(Menu: Brush > Arbitrary sided…)
This command opens a dialogue window. You can enter a number of sides in the field from 3 to 64. Select OK to execute the command.

Primitives
(Menu: Brush > Primitives)
Primitives are pre-made shapes other than squares or the polygonal multisided boxes made by the "number" sided brush commands.

Cone…

(Menu: Brush > Primitives > Cone…)
This opens a pop-up dialogue window that lets you enter an arbitrary number of sides. The height of the cone is equal to the Z height of the brush. The cone is always made with its axis along the Z-axis. At first, the radius of the base of the cone appears to be unrelated, or at least unevenly related to the XY dimensions of the brush from which it is transformed. However, if you make a four sided brush, the point to point "diameter" of the resulting pyramid is equal to the longest XY dimension of the brush. Starting the same size brush as you used for the four-side cone, an eight-sided cone fits neatly within the volume of the four-sided cone, four of its sides congruent with the side planes of the four-sided cone. Do the same for a 16 sided cone, and the same again for both a 32 sided cone. However, the number of sides seems to max out at 56.

Sphere…

(Menu: Brush>Primitives>Sphere…)
This opens a pop-up dialogue window that lets you enter an arbitrary number of sides. The maximum number of sides, which the editor seems willing to handle is 32.The diameter of the sphere, is roughly equal to the length of the longest XY side of the brush from which it is transformed. Attempts to create spheres with more faces than 32 may result in the brush disappearing and becoming infinitely tall. Use Undo to back up from this or hit backspace to discard the brush.

Torus…
Non functioniong command. No donuts for you!

Moving Selected Brushes

Moving the Brush
These keys move the brush around the map in discrete map grid increments.
    Move Selection Down
    (Shortcut: Keypad MINUS)
    Each press moves the selected map component down along the Z-axis by one grid position (at current grid setting). Not affected by current 2D-map view.

    Move Selection Up

    (Shortcut: Keypad PLUS)
    Each press moves the selected map component up along the Z-axis by one grid position (at current grid setting). Not affected by current 2D-map view.

Nudging the Brush
These keys move the brush around the map in discrete map grid increments. The movement is in terms of the selected window, not in terms of XYZ coordinates.
    Nudge Down
    (Shortcut: ALT + DOWN ARROW)
    Each press moves the selected map component "down" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Up

    (Shortcut: ALT + UP ARROW)
    Each press moves the selected map component "up" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Left

    (Shortcut: ALT + LEFT ARROW)
    Each press moves the selected map component "left" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Right

    (Shortcut: ALT + RIGHT ARROW)
    Each press moves the selected map component "right" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

Snap Selection To Grid
(Shortcut: CTRL + G)
If you are using the map grid to keep brushes in alignment, this is a great tool. Rotated brushes and brushes that have had their vertices tweaked can have vertices that no longer lie on map grid intersections. This snaps the vertices to align with the grid. Be warned that snapping to large grids may be hazardous to the health of your brush (Snap and it's gone! But that's what UNDO is for).

Efficient Brush Building Techniques

Developed from a Quake 3 World online posting by Astrocreep

Compiling a map is a necessary evil. It takes time, it ties up your processor, and in the early phases of map construction, comes up with construction errors as often as not. Nothing you can do about that … except the time thing. It is possible, through more careful construction (or perhaps reconstruction) to significantly reduce both map and bot compile times, and reduce map and .bsp file sizes (the latter being important for downloads). The following is based on reports written by Astrocreep that documents his extensive work to streamline the compile on one of the id sample maps.

Brush Construction
It cannot be overstressed. If you want shorter compile times and small file sizes, efficient brush construction is "critical" in building your map. There is one rule that stands above all:

DO NOT OVERLAP BRUSHES AT ANYTIME.

No matter what you have to do to build your map, do not overlap brushes. Overlapping means that all or parts of two or more brushes share the same physical space. If brushes overlap, you can expect to add time to your compiling, and add size to your .map, .bsp and, .aas file sizes.

Efficient map construction means that all brushes butt up against each other, but never intersect.

Brush Counts
The sample map to be reworked on had 1,100 brushes in it. Without changing the layout or appearance of the map, Astrocreep was able to remove 110, or 10% of the total brush count.

Learn how to do more with a single brush than with multiple brushes. Evaluate your map after you complete initial construction phases on all or part of it. Pick a part of the map, look at the layout and ask yourself if you could do that with fewer brushes. In all likelihood, nine times out of 10, the answer will be yes.

If you make a structure out of three brushes (or whatever) and have the same floor height and ceiling height (in some cases heights can be different), look at it in the "top view". Can you draw a line from each vertex and not cross out side of those three brushes? If you can, then that grouping of three can become one brush instead of three.

Example: here's how the engine might look at this.

Using 3 square brushes, you have 18 faces (with a texture mapped on each side) to be calculated. This doesn't take into consideration the number of in-game triangle faces that those brushes may generate. Even if two-thirds of those faces are not being drawn, they are still being calculated by both the compile process and the bot navigation compile process.

As compared to:

Using one brush (filling the same area), you have only 6 faces to be calculated. Here, you are compiling only a third of the total geometry. It should go faster.

Efficient map construction means using fewer brushes to build the world.

Caulking
It is possible to even further reduce the number of brush faces being calculated by applying a special non-drawing, but "solid" texture called "caulk" (common/caulk) to surfaces that cannot be seen in the game. When seen in the editor, this texture is a bright garish pink. In the game, it does not draw at all. Apply caulk to any brush face that either doesn't form the "shell" of the world or can't be seen by a player during play. Doing this may not improve your map's frame rate, but since your are telling the compiler that as many as five of the six faces on a square brush don't have to be calculated, it should have some significant effects on compile times. As long as you do not have any brushes that "share" the same space, caulking brushes should help reduce compile times. However, if you use caulk on a brush that "shares" the space of another, your compile time and all file sizes will actually increase.

Astrocreep compiled the test level nearly 200 times, many of those times were when he moved just a single brush, just to see what would change. Caulking seems to help the -light phase of compiling the most.

Efficient map construction means caulking all unseen brush faces.

Miscellaneous Tips
Lights: You can further improve compile times by careful use of lights. Entity lights, especially LOTS of entity lights can reduce compile time. If you need to reduce compiling time even more look to this.

Clip brushes: Clip brushes that have more than two sides not touching another brush appear to increase compile times.

Hint brushes: Use these only if you need to resolve a vis problem. Using them can significantly add to compile times.


Q3Radiant Editor Manual: Page 5.1

Q3Radiant Editor Manual

Tools 3: Working with Curve Patches

Escape (ESC)
This is the all-purpose deselect key. Use it to back out of operations you don't want to complete or to stop working on a patch or group of patches.

Curve Menu Commands

The next set of commands comes from the Curve Menu. Some are duplicated on the Patch Tool Bar.

Cylinder
(Menu: Curve > Cylinder)
This creates the simplest cylinder. Cylinders are always drawn with their open ends facing up and down. It does not matter which map view is open when the cylinder is created.

More Cylinders:

(Menu: Curve > More Cylinders)
    Dense Cylinder
    This is a cylinder with a set of extra rows. It allows a 180-degree bend into a half donut (half torus).

    Very Dense Cylinder
    This is a cylinder with two extra sets of rows. This allows a bend into a full donut (torus).

    Square Cylinder
    This is a cylinder whose columns have been adjusted so that a square, with flat sides, is formed.

End Cap
(Menu: Curve > Endcap)
This is a half cylinder.

Bevel
(Menu: Curve > Bevel)
This is a quarter cylinder

More End caps, Bevels:

(Menu: Curve > More End caps, Bevels)

Square Endcap
This is an endcap without the backside removed.

Square Bevel
This is a bevel with squared off back faces

Cone
(Menu: Curve > Cone)
A cone is a cylinder with control points drawn together and welded at one end to form a point.

Sphere
(Not implemented)
Design Note: A curve patch sphere can be constructed from a cone. Start with a cubic brush. Convert into a cone. Go into edit vertexes mode and grab the control point at the peak of the cone. Pull it downward to half the height of the cone. Clone the resulting piece and flip it upside down.

Simple Patch Mesh…
(Menu: Curve > Simple Patch Mesh…)
The patch mesh is the basic building block use to create all curves. All the curve primitives are deformations of this item. For this to work, you must first create a brush of the dimension desired for the patch. Selecting this opens a Patch dialogue window. This lets you select the vertical (rows) and horizontal (columns) complexity of the patch. The more complexity means being able to perform more deformations on the patch. It also means adding a greater number of triangles that must be rendered.

Insert
(Menu: Curve > Insert)
Adding control points increases the complexity of a mesh. This action does not increase the physical size of a mesh. Additions are usually done before manipulating the patch mesh.
    Insert (2) Columns
    This adds two columns of control points to the left edge of a patch.
    Add (2) Columns
    This adds two columns of control points to the right edge of a patch.
    Insert (2) Rows
    This adds two rows of control points to the lower edge of a patch.
    Add (2) Rows
    This adds two rows of control points to the upper edge of a patch.

Delete
(Menu: Curve > Delete)
Deleting control points reduces the complexity of a patch mesh. Be warned that the features created by the removed points are also removed. It does not make the mesh a less complex version of the former design. Deletions also change the dimensions of the mesh, removing the area created by the deleted control points. A mesh cannot be reduced smaller than a 3 column by 3 row complexity.
    First (2) Columns
    This removes two columns of control points from the left edge of a patch.
    Last (2) Columns
    This removes two columns of control points from the right edge of a patch.
    First (2) Rows
    This removes two rows of control points from the lower edge of a patch.
    Last (2) Rows
    This removes two rows of control points from the upper edge of a patch.

Matrix
(Menu: Curve > Matrix)
This has nothing to do with Neo and Trinity. It's the patch mesh taken as a whole.

Invert

(Menu: Curve > Matrix > Invert)
(Shortcut: CTRL + I)
This command inverts the normals of the patch mesh. The normals control the direction of facing for the texture skin and the clipping surfaces.

Re-disperse

(Menu: Curve > Matrix > Re-disperse)
This is used on a selected patch. When rows or columns are inserted or added to a patch, the dimensions of the patch are not changed. The distances between the new additions and the old points are not the same. This command averages out the distance between the points. It does not change the size of the patch. WARNING! Only apply this BEFORE adjusting the patch. Otherwise, you may lose your work on it. With some patches, selecting this command will destroy the patch itself.
    Cols
    (Menu: Curve > Matrix > Re-disperse > Cols)
    (Shortcut: SHIFT + CTRL + E)
    The distance between columns is averaged and evened out.

    Rows

    (Menu: Curve > Matrix > Re-disperse > Rows)
    (Shortcut: CTRL + E)
    The distance between rows is averaged and evened out.

Transpose

(Menu: Curve > Transpose)
(Shortcut: SHIFT + CTRL + M)
(Function undetermined)

Cap
(Menu: Curve > Cap)
This command adds "cap" patches to the ends of the patch. The original brush and the caps are linked together as a func_group entity. A Patch Tool Bar button duplicates this command. The type of cap depends on the selected patch:

Cylinder | The ends of the cylinder are sealed with circular patches.
Square Cylinder | The ends of the cylinder are sealed with square patches.
Cone | Both ends are capped (open and point). You will want to discard the cap on the point end.
Bevel | If you select to cap a bevel, a dialogue window pops up. A normal bevel cap covers the space between the curve and the center.
Inverted Bevel | An inverted bevel covers the space between the curve and the outer corner.
Endcap | If you select to cap an endcap, the same dialogue window pops up.
Patch Mesh | The bevel/endcap window will pop up. Results will vary depending on the manipulations done to the mesh.
Square Bevel | Capped in the same manner as a cylinder
Square End Cap | Capped in the same manner as a cylinder

Cycle Cap Texture

(Shortcut: CTRL + SHIFT + N)
Press this repeatedly until the texture on the cap patch looks correct.

Overlay
(Menu: Curve > Overlay)
Overlay turns the grid of control points on for the selected patches and leaves them on until the Clear command is selected. By having the control points on a curve patch be visible, it is easier for the designer to align the vertices of adjacent solid geometry brushes.
    Set
    (Menu: Curve > Overlay > Set)
    (Shortcut: Y)
    This is the command to turn on the control points in a selected patch.

    Clear

    (Menu: Curve > Overlay > Clear)
    (Shortcut: ALT + Y)
    This is the command to turn off all control points in all patches.

Thicken
(Menu: Curve > Thicken)
(Shortcut: CTRL + T)
If you think about it conceptually, Thicken transforms a curve patch into a three-dimensional object. It does this by duplicating the selected curve and moving it a distance away from the copied curve, and, if the "seams" checkbox is checked, it will cover the space between the original and the copy with patches. The distance between original and copy is selected in a pop-up dialogue window. The direction is determined by the facing of the curve's normals (the textured side). The duplicated curve appears on the opposite side of the textured face. The resulting object depends on the nature of the curve primitive being thickened. The following are some examples:

Cylinder | A pipe is created. Checking "seams" caps the ends.
Bevel | A matching bevel is created. Checking "seams" creates a bent square tube.
Endcap | A matching endcap is created. Checking "seams" creates an arch.*
Patch Mesh | A mesh that echoes the shape of the selected patch is created, but with XY dimensions smaller or larger by the measure of the thickness (smaller if the normals are on the concave side; larger if on the convex side).

* Thickening an Endcap is not the best way to create this shape. Bending a square cylinder will produce better results.

Patch Tool Bar

The patch tool part is turned on in the Preferences. Each of these buttons enables or disables a curve editing feature, or initiates a process on a selected curve patch.

Don't Select Curved Brushes
This button toggles the ability to select or not select curve patches in the map. If turned on (depressed), the user will not be able to individually select curve patches. Group selections will still include any curve patches within their boundaries.

Show Patch Bounding Box
This button toggles the display of the bounding box that defines the limits of the patch. On (button depressed) shows the bounding box.

Show Patches as Wireframe
This button toggles the display of patches between a fully textured mesh (off) and a wireframe-only mode (on). The wireframe mode makes it easier to see the deformations of the mesh and allows the user to see some control points that may be hidden by the texture when it is mapped on the mesh. It can also be a performance-enhancer for the editor (by setting the view to wireframe until you need to see the brush textured).

Design Tip: When manipulating the control points on a patch mesh, using wire frame allows you to best see both the control points and the deformations.

Patch Bend Mode
If a curve patch is selected, this button initiates a multi-step bending procedure. There are tutorials available on several sites that address the fine points of bending a patch, whether it is a cylinder or a simple flat mesh. The ESC key will exit the procedure at any point. The following are just the steps:
  • Select the patch (and only the patch).
  • Press the Patch Bend Mode button. This brings up an instruction window that says:
"Use TAB to cycle through available bend axis.
Press ENTER when the desired one is highlighted"

This highlights (turns pink) a row or column of patch control points. One of these control points will likely be the axis for your bend. Pressing ENTER locks in your choice and advances to the next step.

  • A second instruction window message appears:
"Use TAB to cycle through available rotation axis.
This will LOCK around that point. You may also
use Shift + Middle Click to select an arbitrary
point. Press ENTER when the desired one is
highlighted."

This highlights the specific control point around which the patch will bend. Pressing ENTER locks in your choice and advances to the next step. You can also choose the control point by SHIFT + middle mouse button clicking on the map window. The click need not be within the bounds of the patch.

  • A third instruction window message appears:
"Use TAB to choose which side to bend. Press
ENTER when the desired one is highlighted."

This highlights the side or end of the patch (relative to the bend point) around which the patch will bend. Pressing ENTER locks in your choice and advances to the next step.

  • A fourth instruction window message appears:
"Use the MOUSE to bend the patch. It uses the
same ui rules as Free Rotation. Press ENTER to
accept the bend, press ESC to abandon it and exit
Bend mode."

Clicking and holding the Left mouse button on the map window and dragging it around will cause the patch to bend. Pressing ENTER or ESC at this point will accept any changes that you have made.

Redisperse Patch Points
This is used on a selected patch. When rows or columns are inserted or added to a patch, the dimensions of the whole patch are not automatically adjusted. The distances between the new additions and the old points are not the same. This command averages out the distance between the points.

WARNING: Only apply this BEFORE making adjustments to the patch, otherwise you may lose your work on it. With some patches, the patch itself will be destroyed.

CAP (put caps on the current patch)
This is used on a selected patch.

Design Notes:
    Endcaps: Don't cap endcaps with this tool. Make a pair of opposing bevel caps that match the arch of the endcap
    Messed Up Texturing: If an inverted bevel endcap covers something other than an arc of a perfect circle, it is likely that the texture won't appear right when you apply the CAP function to the texture. Press SHIFT + CTRL + P a few times until it looks right.

Weld Equal Patch Points (welds equal patch points during moves)
(Patch Control Bar only) This feature, when selected (button pressed in) causes control points to weld together if they are moved to the same coordinates. Undo will undo the move and the weld.

Drill Down (selects drill down rows and columns)
When this is toggled on (depressed), clicking on a control point in a 2D Map view selects all the control points in the row or column beneath it.

Moving Patches

Moving Selected Curve Patch
These keys move the curve patch around the map in discrete map grid increments.
    Move Selection Down
    (Shortcut: Keypad MINUS)
    Each press moves the selected map component down along the Z-axis by one grid position (at current grid setting). Not affected by current 2D-map view.

    Move Selection Up

    (Shortcut: Keypad PLUS)
    Each press moves the selected map component up along the Z-axis by one grid position (at current grid setting). Not affected by current 2D-map view.

Nudging the Curve Patch
These keys move the curve patch around the map in discrete map grid increments. The movement is in terms of the selected window, not in terms of XYZ coordinates.
    Nudge Down
    (Shortcut: ALT + DOWN ARROW)
    Each press moves the selected map component "down" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Up

    (Shortcut: ALT + UP ARROW)
    Each press moves the selected map component "up" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Left

    (Shortcut: ALT + LEFT ARROW)
    Each press moves the selected map component "left" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Right

    (Shortcut: ALT + RIGHT ARROW)
    Each press moves the selected map component "right" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

Snap Selection To Grid
(Shortcut: CTRL + G)
If you are using the map grid to keep curve patches in alignment, this is a great tool. Rotated curve patches and curve patches that have had their vertices tweaked can have vertices that no longer lie on map grid intersections. This snaps the vertices to align with the grid. Be warned that snapping to large grids may be hazardous to the health of your curve patch (Snap and it's gone! But that's what UNDO is for).


Q3Radiant Editor Manual: Page 7.1

Q3Radiant Editor Manual

Tools 4: Working with Textures

There are three skill and knowledge components to working with textures as they regard Quake III Arena. They are Texture creation, Texture Manipulation, and Texture Application. Only the third, Texture Application, is absolutely necessary for making maps. You need not master all three.

Brush Primitives: A New Format

With the release of version 192, the Q3Radiant editor takes a new direction in the way textures are mapped to the surfaces of brushes. The texturing format will roughly be the same as the way textures are handled on curve patches. While there are no changes to the user interface within the editor, you should see a change in the way textures behave on brushes during transformation operations like move and rotate. Because textures are mapped to the S and T coordinates of a brush (as they are with curve patches), locked textures will now maintain their positions on brushes when they are moved or located. Even complex rotations should now be possible without the textures going askew.

Checking the Brush Primitives checkbox turns on this feature. (Menu: Project Settings… > Use brush primitives in map files). Once you change a map to Brush Primitives, you cannot go back to the earlier method of texture mapping with that map. The prudent mapper makes backups before making major changes to projects.

Texture Creation: Making new Assets

This is covered earlier in the manual.

Texture Manipulation: Shader Overview

Technically, each texture already has a default shader that passes it through the pipeline to appear much as it does in the graphic program that made it. A shader is a short script, separate from the texture file, that the game engine uses to make further adjustments to the texture's appearance or function. The shader is to Q3A what the surface properties flags were to Q2, only ever so much more powerful. If you plan on creating your own textures, you should get to know and understand how shaders work. The Q3A Shader Manual contains the information you need.

Shaders and Multi-Pass Texture Effects
(Drawn from an original essay by Small Pile of Gibs)

Shaders give the mapper control over special graphics effects that require multiple redrawing passes before they are finally displayed on the game screen. Every shader that changes the visual component of a texture uses these "Multitexture" effects. Multitexture is ON by default in Quake III Arena. It is turned off with the cvar, "set r_ext_multitexture 0 (entered in the console or bound to a key) - see the Debugging section in this document for more details.

To understand how multitexture works, you need to understand how the Quake III Arena graphic engine renders a scene. All the faces you see in Quake III Arena are made up of triangles - you can see this by using the cvar command "r_showtris 1." Initially, each triangle adds one to the "tris" number in r_speeds (the numbers that are used to estimate whether a scene is too complex). With every frame that Q3A "paints", it draws triangles onto the scene in layers, starting at the back of the scene and drawing every triangle visible until it reaches the front. It takes time to draw each triangle. If a triangle is painted with a texture that is "see through" in some way (either transluscent, transparent, or containing cut-outs), any triangles seen through that triangle must be redrawn one additional time for each stage in the the shader. If a single transparent triangle takes up the whole screen, for example, a glass window - The whole area of the screen has to be redrawn. Each triangle of glass takes an entire screen worth of "overdraw" and each extra stage on the glass adds another screenful, which is why glass can be such a big framerate hit.

The simplest form of multitexture is a Lightmap. In most cases, the Q3A engine first draws the lightmap (precalculated light and shadow information). Then, on top of that, it adds in the information from the texture art specified for that triangle using a special effect (blendfunc filter) - which blends the lightmap with the texture to make areas of the texture look light or dark. Using the cvar command "r_vertexlight 1" (Vertex Lighting instead of Lightmaps) stops Q3 from drawing the lightmap triangles (which is why many gamers use vertex lighting to gain additional playing speed).

Every extra stage in a shader is an extra triangle drawn over and blended with the first triangle in a special way. Like the lightmap example above, each additional stage requires an extra triangle to be drawn for each frame. On certain 3D accelerator cards (like the TNT - TwiN Texture), the multitexture effect cancels out the real cost of the first pass of blending. The blending for the first additional stage is done before the triangle is drawn. However, if the shader takes 3 stages (like all the shiny metal effects) it costs an extra triangle for every triangle it is used on. Every extra triangle used adds a triangle to the r_speeds triangle count. Because there are cards that don't automatically handle this first blending pass, the map maker needs to occasionally check his r_speeds with the multitexture turned off.

Texture Application: Texture Handling Tools

These tools manipulate textures within the editor. They do not create textures or shader scripts.

Escape (ESC)
This is the all-purpose deselect key. Use it to back out of operations you don't want to complete or to stop working on a brush face, a brush, a patch, or a group of brushes or patches.

View Textures
(Shortcut: T)
This is only used in the four-view and floating windows modes (as set in Preferences). It brings up the Texture selection window (also accessible from a folder tab). If the Entity window is open, you may need to click on a map view window first for the "T" command shortcut to work.

Show in Use
(Menu: Textures > Show in Use)
(Shortcut: U)
This command affects the content of the Textures window. It filters the contents so that only those textures currently in use in the map are displayed in the window.

Show All
(Menu: Textures > Show All)
(Shortcut: CTRL + A)
This command affects the content of the Textures window. It "un"-filters the contents so that all the texture directories previously loaded during the mapping session are re-displayed.

Surface Inspector
(Menu: Textures > Surface Inspector)

This brings up a pop-up dialogue box. This is one of the more complicated interfaces used during map development and may take some getting used to.

Texture
This is the path/name (beginning in Textures directory) for the texture. You can copy from this field or paste into it. If you know the pathname of a texture, you can enter it here. It will load without having to first load the entire directory that contains it.

The next five commands work on both patches and brushes. However, the results of applying a Horizontal Shift to a brush and to a patch may be substantially different. When working with patches, the numbers in the fields do not change … although the texture on the map component may be changing.

Design Note: When a curve patch butts flush up against a piece of solid geometry, as if it were an extension of that geometry, it may be difficult to align the textures exactly. In fact is often extremely difficult to align a texture on a patch with the texture on an adjacent geometry brush. It works best when the dimensions of the patch are an exact multiple of the dimensions of the texture being used. Otherwise, you may want to consider designing your architecture in such a way that it is logical for a new texture to begin at that point. Use your judgement.

Horizontal Shift
This allows you to change the Horizontal texture offset (position of texture on a surface). You can type an offset value into field or use the scroll buttons on the right to shift the texture. If "Snap T to Grid" is set in Preferences, the scroll increments will move a number of pixels equal to the grid size.

Vertical Shift This allows you to change the Vertical texture offset (position of texture on a surface). You can type an offset value into field or use the scroll buttons on the right to shift the texture. If "Snap T to Grid" is set in Preferences, the scroll increments will move a number of pixels equal to the grid size.

Horizontal Stretch This allows you to change the dimensions of textures as they are mapped into the world. You can type a size value into field or use the scroll buttons on the right to enlarge or reduce the texture. The default value is 0.5. This gives a presentation in the game world of two pixels for each game unit. A Horizontal Stretch value of 1.0 would double the amount of area covered by a single repeat of the texture. Of course, doing that also reduces the apparent resolution of the texture by half (can you say blurry?)! Making the stretch value a negative number horizontally flops the texture's normals (i.e.; flops the texture left to right).

Design note: Textures are "projected" onto brush surfaces. This means that if a surface is angled, the texture stretches to fit the space upon which it is projected. To make the texture look "unstretched" you need to change the dimension so that it looks correct when stretched. Example: If you want to map a texture on a 45-degree angle, it should be scaled to 0.35 along the direction perpendicular to the axis of the angle.

Vertical Stretch This is the same as for the Horizontal Stretch, but along the vertical axis. Making the stretch value a negative number vertically flops the texture's normals (i.e.; flops the texture up and down).

Rotate This rotates the texture around the center point of the brush (or patch). If the texture is not centered on the map component, the rotation will not necessarily look correct. The increment of rotation is set by the value given for the Rotation Inc field on the Preferences window. The default value is 45 (degrees), roughly 1/8 rotation around the axis.

Value (This Quake 2 function is not used by Quake III Arena)

Texturing

This next grouping of commands in the lower left corner of the window provides two separate sets of buttons. The top set deal with texturing geometry brushes. The lower set is for texturing curve patches.

    Axial (Brush)
    Realigns texture to the X and Y axes (removing the effects of rotation)

    Fit (Brush)
    The texture is stretched to fit the dimensions of the brush. The width and height fields to the right are the number of repetitions to be used in the S and T dimensions (S corresponds to X on the actual texture and T corresponds to Y on the actual texture). The default value for the height and width fields is 1. You can type a size value into field or use the scroll buttons on the right to enlarge or reduce the texture. Only integer values can be entered (meaning that you can't enlarge a texture 1.5 times).

    CAP (Patch)
    This function is most often applied to patches used to fill in the gaps between curves and solid geometry. It can also be applied to flat patches so that the texture doesn't appear to follow the arc of the patch. You may need to use the SHIFT + CTRL + N command to normalize the texture on the patch.

    Set… (Patch)
    This command functions almost like the "Fit" command above for brushes. The texture will be fit across the patch based on the X and Y values given. However, there is a notable difference. The X and Y fields will accept non-integer values (e.g. 6.4 x 3.8). It may take some experimentation to determine which dimension of your patch is considered to be "X" and which is thought to be "Y". If a value of 1x1 is given, the texture will be "fit" to the patch.

    Natural (Patch)
    The engine does its best to map the texture onto the patch in a "natural" appearing manner. This means that the texture will curve and flow with the curves and bends in the patch. Unless you are texturing a cap, this should be your first choice when applying a texture.

    Fit
    The texture's coordinates are mapped to fit the patch (with no repeats).

Find / Replace
(Menu: Textures > Find / Replace)
(Shortcut: none)
This feature allows the user to replace a texture within a single brush, a set of selected brushes or globally throughout the entire map. Selecting the command from the menu opens up a dialogue window. The top line is for the texture path and name of the texture to be replaced. The second line is for the texture to be used for replacement. Several checkboxes allow fine control over what, exactly, is to be changed. This command does not respond to UNDO. If you accidentally mistype a texture name in the replace line, you will need to enter it again (as mistyped) on the find line and then enter the correct texture on the replace line.

Texture replacement is global (throughout the map) unless the selected checkboxes state otherwise.

    Replace within selected brushes only. Only the hi-lighted brushes that contain the texture to be replaced will be affected.

    Force replacement (ignore current texture name). All textures in the map will be replaced. Best if used with Replace within selected brushes only. Be very careful with this one.

    Live Updates from Texture/Camera windows. Using Live Update the user can find and replace textures with a fully point and click interface.

    Texture Replacement using Live Updates
    Click on the Find box, then click on any texture in either the Camera window or the Texture window. The texture path/name for that texture appears in the box. Next click on the Replace box and click on the replacement texture. That texture's path/name appear in the Replace box. Select "OK" and the replacement will occur.

Step-by-step for replacing a texture on a brush face (if live update is not used).

  • In the Camera window, hi-light (CTRL+SHIFT+mouse1) the texture to be replaced.
  • Open Surface Inspector. If the name of the texture is not hi-lighted, then hi-light it.
  • Press CTRL+C to copy the texture name.
  • Open the Find/Replace window.
  • Paste (CTRL+V) the name into the find window.
  • Hit ESC to deselect the texture in the CAM winow.
  • Open the Textures Window. Find the texture you want to replace with and select it.
  • Open Surface Inspector again.
  • Copy the texture name there.
  • Open Find/Replace again and paste the new texture into the Replace box.
  • Select OK. Replacement occurs and the dialogue window closes.

Texture Lock
(Menu: Textures > Texture Lock)
(Shortcut: none)
Opens Pop-up window with two options for "locking" texture shifting during brush or patch movement. NOTE: If you have selected the BRUSH PRIMITIVES option under Project Settings… then Texture lock will always be on.
    Moves
    (Menu: Textures > Texture Lock > Moves)
    (Shortcut: SHIFT + T)
    When this option is checked, textures stay locked in position on the brush as brushes are moved around the map. If unchecked, the texture appears to shift across the brush, because they are fixed to the world, not the individual brush. On small brushes and small textures (such as the small square lights), some "creepage" may occur, with textures shifting 1 or 2 units off their locked position.

    Rotation

    (Menu: Textures > Texture Lock > Moves)
    (Shortcut: SHIFT + R)
    When this option is checked, textures stay locked in position on the brush or brushes as they are rotated around the map. If unchecked, the texture appears to shift across the brush, because they are fixed to the world, not the individual brush. On small brushes and small textures (such as the small square lights), some "creepage" may occur, with textures shifting 1 or 2 units off their locked position.

Load from List…
(Menu: Textures > Load from List…)
(Shortcut: none)
Opens a dialogue box listing all texture directories currently recognized by the editor. Hi-light a directory title then click on the "Load" button. The textures in the selected directory will be loaded into the Textures window.

Shaders
(Menu: Textures > Shaders)
(Shortcut: none)
This command pops up a Pop-up window with two shader-related commands.
    Load All (Reload)
    (Menu: Textures > Shaders > Load (All) Reload)
    (Shortcut: none)
    This command loads or reloads all the .shader scripts recognized by your shaderlist.txt file. When you change and save a shader script, execute this command, then reload the affected texture directory to see any changes.

    Show

    (Menu: Textures > Shaders > Show)
    (Shortcut: none)
    When checked, this command surrounds all shader-manipulated textures in the Texture window with a thin white border.

Flush
(Menu: Textures > Flush)
(Shortcut: none)
The flush command frees up texture memory and should improve editor performance. Exactly how much is flushed depends on your choice of commands.
    Flush All
    (Menu: Textures > Flush > Flush All)
    (Shortcut: none)
    This command flushes all the texture memory, restarts OpenGL and reloads the map from the last saved copy.

    Flush Unused

    (Menu: Textures > Flush > Flush Unused)
    (Shortcut: none)
    This command flushes all UNUSED textures from memory.

Texture Window Scale-
>(Menu > Textures > Texture Window Scale)
(Shortcut: none)
This affects the size of the texture images displayed in the Textures window. Clicking on the menu entry opens up a pop-up window with the following size selections: 200%, 100%, 50%, 25%, and 10%. Adjust it to suit your liking. If seeing the detail in the textures is important to you, set the size to 100% or larger. If you know your way around the textures without having to see each pixel, set it for smaller.

Texture Directories
(Menu: Textures)
This is not a command. The entries on the Textures Menu below "Texture Window Scale" are the names of the available texture directories (all whose filenames are listed in the shaderlist.txt script). Clicking on one loads the contents of the directory into the Texture window.

Texture Shift Key Shortcuts
A brush, brush surface, or curve patch must already be selected before using these shortcuts. This feature closely copies the function of the Texture Shift fields and scroll bars on Surface Inspector pop-up window. If Snap to T is selected in preferences, then the texture shifts in pixel increments equal to the current grid setting. Shifting textures on curve patches may produce unexpected results.

Texture Shift Down | (SHIFT + DOWN ARROW)
Texture Shift Up | (SHIFT + UP ARROW)
Texture Shift Left | (SHIFT + LEFT ARROW)
Texture Shift Right | (SHIFT + RIGHT ARROW)

Texture Rotate Key Shortcuts
A brush, brush surface, or curve patch must already be selected before using these shortcuts. This feature closely copies the function of the Texture Rotate field and scroll bar on Surface Inspector pop-up window. The texture rotates in degree increments set in Preferences. Rotating textures on curve patches may produce unexpected results.

Texture Rotate Clockwise | (SHIFT + PAGEDOWN)
Texture Rotate Counter-Clockwise | (SHIFT + PAGEUP)

Texture Scaling Shortcuts
A brush, brush surface, or curve patch must already be selected before using these shortcuts. This feature changes the scale of the texture (the amount of area that a single instance of the texture covers). The texture scale seems inconsistent, except that opposite directions appear to cancel each other out. The amount of increase delivered by the first use appears to be about a ratio of 1:15.

Texture Scale Down | (CTRL + DOWN ARROW)
Texture Scale Up | (CTRL + UP ARROW)
Texture Scale Left | (CTRL + LEFT ARROW)
Texture Scale Right | (CTRL + RIGHT ARROW)

Using Interactive Textures

Interactive textures are the shader-manipulated textures that have an effect on game play, not just the appearance of the map. There are two classes of Interactive Textures: Special Content Textures and Texture Entities. For more detail and instructions regarding shader manipulation of textures, refer to the Q3A Shader Manual.

Special Content Textures Special content textures are textures where the "surface" parameters of the texture actually change the physical nature of the geometry brush and in so doing, affects the play of the game.

Water
Water is a content parameter that allows a player to "swim" inside a geometry brush, causes a pulsing visual distortion of the underwater geometry, and prompts the game engine to draw bubbles as projectiles pass through it. A player can only remain under water for a short time (without a battlesuit) and then begins to drown.

Water usage rules:

  • A water texture is defined by the presence of surfaceparm water in the shader that creates it.
  • Because water is typically a "transparent" surface, the shader passes used to create surface effects on water are added to the shader passes of textures seen through the water surface. This can significantly increase the number of redraw passes necessary to draw the game world and may negatively affect performance.
  • If you place water brushes side by side, the touching sides must be marked with the common/nodraw texture.
  • Both the top and the bottom surfaces of a water brush must be water texture.
  • Water brushes cannot be stacked so they touch another water brush vertically, only set side by side.
  • If you want to be able to exit water easily, keep the distance from the top of the water brush to the adjacent "shore" or pool edge at no more than 16 game units. Somewhat less is actually better.
  • If fog is to be used as a part of a water volume, the water surface should not deform.

Fog Fog content is used to block or diminish player vision and provide "atmosphere" for a level. Like water, fog can affect game performance, especially if one can see additional shader effects within it. The following information is taken from the Q3A Shader Manual regarding fog creation and usage.

fogparms <red value> <green value> <blue value> <distance to Opaque>
This surface parameter (or "surfaceparm") defines the contents of the fog.
Note: you must also specify "surfaceparm fog" to cause q3map to identify the surfaces inside the volume. Fogparms only describes how to render the fog on the surfaces.

<red value> <green value> <blue value> These are normalized values (number range from 0 to 1). A good computer art program should give you the RGB values for a color. To obtain the values that define fog color for Quake III Arena, divide the desired color's Red, Green and Blue values by 255 to obtain three normalized numbers within the 0.0 to 1.0 range.

<distance to opaque> This is the distance, in game units, until the fog becomes totally opaque, as measured from the point of view of the observer. By making the height of the fog brush shorter than the distance to opaque, the apparent density of the fog can be reduced (because it never reaches the depth at which full opacity occurs).

Fog usage rules:

  • If a room (or rooms) is to be filled completely with a fog volume, it can only be entered through one surface (and still have the fog function correctly).
  • The fog volume can only have one surface visible (from outside the fog).
  • Fog must be made of one brush. It cannot be made of adjacent brushes.
  • Fog brushes must be axial. This means that only square or rectangular brushes may contain fog, and those must have their edges drawn along the axes of the map grid (all 90 degree angles).
  • If a water texture contains a fog parameter, it must be treated as if it were a fog texture when in use.
  • Additional shader passes may be placed on a fog brush, as with other brushes.
  • If a light-emitting fog brush is placed beneath normal brush geometry, the light may cause light artifacting on the solid brush surface. Use with care.
  • Brush models (trains, doors, rotating objects, etc.) within, or partially within fog volumes will have drawing priority problems against the fog. It is best not to place these entities in fog volumes.
  • There are unconfirmed reports of moving entities being made with fog shaders.

Lava
Lava content, for most practical purposes, is a variation of water content. The damage that it does to players in contact with it is defined by game code and cannot be directly affected by the map designer.

Slime
Slime content, for most practical purposes, is a variation of water content. The damage that it does to players in contact with it is defined by game code and cannot be directly affected by the map designer.

Texture Entities
There are a number of shader-manipulated textures that are used in an entity-like fashion. The shader files that manipulate the textures are what give them their game properties. These are the ones that id used and their relevant properties.

Areaportal
Color: Opaque Red Orange
Location: (textures/common/areaportal)
The bsp tool uses areaportals to create hard, visual breaks between areas in the map. Until triggered, the areaportal blocks geometry behind it from being drawn or seen. The area portal brush should be a thin (2 to 4 units thick) brush. It should touch all the brushes that form the hull of the opening being portalled. It must be placed inside a door. The opening of the door triggers the portal function. The closing of the door returns it to its former state. The areaportal texture must completely seal off a volume from another volume (although this can be in conjunction with other areaportals). If a door is being used to block off an area from view, consider placing an areaportal brush inside the door. Example in Quake III Arena: All the doors out of the central courtyard in Q3DM12, The Dredwerkz, are areaportalled.

Caulk
Location: (common/caulk)
Color: Opaque Pink
Game Function: Caulk, the miracle texture. It blocks vis. It seals the world off from the void. It doesn't draw (so it doesn't add to triangle counts). It keeps curves from competing with textures behind them. It looks like hell if you see it in your world. From the View menu (View > Show > Caulk), you can toggle on and off the display of caulk brush sides.

Design Tips: When you build a brush entity (a.k.a. b_model), mark all the brush sides that you will never see with caulk. Otherwise, the game draws every one of them. Even if you're only making a one-piece door, mark all the non-viewed sides with caulk. The same holds true for detail brushes. If you can't (or won't ever) see a brush face on a brush that's been marked as detail, paint it with caulk. Next, whenever you build a curve, try to build the brush geometry immediately behind it out of caulk. Finally, look around your map for brush faces that you suspect are being drawn, but are never seen: door pockets, bars, underneath bridges or very low railings and so on. It may sound like work, but attention to detail like this buys you both the appearance of greater geometric detail in the map AND faster game running speed.

More Design Tips: Finally, and this should be used with great care, a caulk brush can be used to create an invisible support for entities. If you place a very thin caulk brush floating above a surface that would otherwise not support an entity (example: a grate made of clip brush), the brush will not draw in the world, but will support the entity. The reason for this is that SUSPENDED entities are not "seen" by bots unless they can be reached by a jump pad.

Clip
Location: (textures/common/clip)
Color: Transparent Red
Game Function: If you look at a professionally made map, quite often you'll see that nearly every bit of wall surface is covered in a transparent red texture called "common/clip." Clip is a nondrawing texture that blocks player movement. Clip does not block weapon fire. Entities, such as ammo or weapons, are not supported by clip brushes. If placed or dropped on a clip brush, they will pass through them.

Design Tips: Place clip brushes to smooth the passage of players through the world. This could mean creating a slope that allows the player to slip past a piece of architectural trim, or filling a window to keep players from getting into it. It can be used to create an artificial ceiling that prevents players from flying or jumping too high.

Cluster Portal
Location: (textures/common/clip)
Color: Translucent lavender
Game Function: Works like an area portal, but for the bot navigation file only. Cluster portal is used by the bspc utility to subdivide the map into smaller areas for calculating bot navigation. Appendix C: Bot Navigation Files contains the specific details for using cluster portal texture entities.

Cushion
Location: (textures/common/clusterportal)
Color: Translucent pale aqua
Game Function: A player falling on this does not take damage. They also don't make a "landing" sound, so use with caution.

Do Not Enter
Location: (textures/common/donotenter)
Color: Transparent Pale Orange
Game Function: It is a tool used to solve bot navigation problems. Use it like a clip brush, but sparingly. When you observe bots doing stupid things in your map, try to block off the area with this texture. The Bot Navigation Files appendix contains the specific details for using the Do Not Enter texture entity.

Hint
Location: (textures/common/clusterportal)
Color: Transparent Yellow Green
Game Function: Helps determine the vis portals. It is used as a suggestion to the compiler during the vis phase, when the world is subdivided. Generally speaking, they are used to correct vis problems, whose chief symptom is the "hall of mirrors" effect seen during game play. These can often be corrected by careful placement of a hint brush. If you fill the volume where the error is seen or the volume adjacent to it, the problem may be corrected in the next compile. This is really more art than science.

Invisible
Location: (textures/common/noimpact)
Color:
Game Function: This was used to create a surface that would be marked by weapon fire, but would not be drawn in the world. This was created specifically to resolve a problem where func_static brushes were being used to replace floor textures that marked the location of weapons in Q3DM8. Because the rocket launcher was located in different places between the team and the deathmatch games, the designer wanted to make floor markers that would not only change between game types, but would be marked like adjacent floor pieces.

Nodrawnonsolid
Location: (textures/common/trigger)
Color: Opaque light yellow
Game Function: This is the same as nodraw.

Noimpact
Location: (textures/common/noimpact)
Color: black
Game Function: Used to create a surface which does not block weapon fire.
Weapon fire will pass through this. This usually used as a shader key on other textures.

Origin
Location: (textures/common/origin)
Color: Opaque Orange
Game Function: Used to create origin point in moving b_models, such as trains, plats, and rotating objects. This texture, applied to a square or rectangular brush, is used to create the point of origin for moving b_models, such as trains, plats, and rotating objects. It is used by func_trains as the point that passes through path entities and the source for sound attachment

Skip
Location: (textures/common/skip)
Color: Transparent yellow
Game Function: Do not use in Q3A. This texture was used in Quake 2 maps to discard sides of hint brushes. It is nonfunctional in Q3A.

Slick
Location: (textures/common/trigger)
Color: Translucent Pale Blue
Game Function: Not stick coating for map surfaces. Reduces friction. Use like a very thin clip brush over surfaces you want to be low friction.

Trigger
Location: (textures/common/trigger)
Color: Transparent Dark Yellow
Game Function: Used to make trigger brushes.

Weapon Clip
Location: (textures/common/weap_clip)
Color: Transparent Red
Game Function: This version of the clip brush only stops weapon projectiles from passing through it. No marks are left on the surface.
Design Tip: Use to create clip surfaces for map object models.


Q3Radiant Editor Manual: Page 8.1

Q3Radiant Editor Manual

Tools 5: Working with Entities

The entities in Quake III Arena are limited to those defined by the game code. The editor can draws entity information from the game code, or from special definition (.def) files. Version 192 of the editor comes with a .def file developed from an original supplied by EutecTic. Mods made to Quake III Arena can add to and/or subtract from the entities used by a game. If you plan to work on mods, you should create multiple project files (copy and rename your project file) with the changes required for the mod.

The Entity Window

You make game design decisions about entities and modify their features within the Entity Window. The definition file that you select on the Project Settings… window determines what entities will be shown in the Entity List and what, if any, property descriptions appear in the Key Descriptions and Check box Spawn Flags.

Entity List
The Entity List is the field on the Entity Window. It contains the "classnames" of all the entities defined by the definition file in alphabetical order.

You can use the scroll bar to scroll through the entities or, after clicking on the field, type in the first letter of the class you want to use (e.g.; type in "T" to select "target", or "A" for ammo, "W" for weapon).

Double-click on the classname to select it and enter it on the first line of the Active Properties field.

The Entities appendices of this document contain a complete listing of all the entities used in Quake III Arena.

Key Descriptions
The entries in the Key Description field are the "rules of use" for the hi-lighted classname in the Entity List field. You can use the scroll bar to scroll up and down through the lines, but the entries are not interactive. If you are using the .def file accompanying release version 192 of the editor (or Eutectic's original), all the key commands are described and their acceptable values (or value ranges) are listed. If you are using the descriptions in the .c game code file, they may be substantially less descriptive.

Check box Spawn Flags
Spawn flags are properties assigned to entities by use of check boxes. Check the box to set the feature for the selected entity. Many entities have only a single spawn flag property, while others have numerous ones. Note that the check boxes to the right are only relevant for Quake 2 single player games and will not work for Quake III Arena.

Active Properties
This field shows all the properties currently assigned to the selected (or newly-created) entity. Each property has two parts: key and value. Once created or assigned, they appear on the same line together. Only properties that are valid for an entity (that is, ones that appear in the Key Descriptions field) will function in game. Adding others may create error messages. You cannot directly affect the properties in this field.

Clicking on an active property hi-lights it and fills in the key and value fields below. You can edit both the key and the value in those fields, or use the Del Key/Pair button to delete it altogether.

Key & Value Fields
Keys (and their values) are assigned to entities by typing them into the fields. There is no spell check or auto-correction, so make sure that your typing is accurate. Start by typing in the name of the key. Then hit TAB or ENTER to change to the value field. This also clears the contents of the value field. Now type in the value for the key (the Key Descriptions list the acceptable value ranges for the keys). If you hit ENTER, the key and value appear in the Active Properties field. If you hit TAB, the cursor moves up to the key field. You can also click directly on a field to edit it. The cursor will appear after the last character in the field. Use arrow keys to position the cursor within the field.

Angle Buttons
The Angle Buttons (below the value field) are used to assign a facing direction (as is the case with player start spots or misc_models) or movement direction to entities (such as doors and buttons). Click on a button to create an Angle key with that button's value in the Active Properties field. Clicking on another key changes the angle value.

There are two clusters of angle buttons. The first cluster represents rotation around the Z-axis for entities like player start or spawn spots or misc_models. The entity will face in the selected direction. The buttons represent angle directions in 45 degree increments. There is a direct correspondance between the angle that the entity will face (or move) and the position of the button in the cluster. If you select the 90-degree button at the top center of the cluster, the entity will face "up" on the XY 2D Map. If you select the 180-degree button on the left side of the cluster, the entity will face left on the XY 2D Map.

For entities like doors or buttons, it represents the direction that entity will move when activated.

The second angle button cluster assigns an up (-1) or down (-2) direction to the entity. Note that an entity can only have one facing direction. It cannot face up and 45 degrees. It can only affect one or the other.

It is also possible to directly edit the angle value in the value field. This allows for a much more precise angle selection.

The Other Buttons

A third cluster of buttons sits to the right of the Angle buttons. Each has a unique function.

Reset
Clicking on this button will reset all properties from the entity to the default values.

Del Key/Pair
If you have selected an active property, clicking on this button will delete the property.

Sound…
This opens a Windows directory browser in the directory that contains the map sounds. Double clicking on a sound file name in the browser window creates an active property with the appropriate key and the value as the path/name for that sound.

Model…
This opens a Windows directory browser in the models/mapobjects directory. Double clicking on an .md3 file name in the browser window creates classname misc_model active property with the value as the path/name for that model.

Entity Handling Tools

These tools manipulate the in game entities. The map component handling tools that are described in the Working with Brushes section also work with entities.

Escape (ESC)
This is the all-purpose deselect key. Use it to back out of operations you don't want to complete or to stop working on an entity.

Connect Entities
(Menu: Selection > Connect Entities)
(Shortcut: CTRL+ K)
This targets one entity, typically an activating trigger, at another entity, usually a target of some kind. Some entities may be linked in multi-part chains, where each entity has some effect on the one(s) that follow it. To use, do the following:
  1. Hi-light the acting entity (usually a trigger, or a button).
  2. Hi-light the targeted entity (examples: target_position, target_relay, a door).
  3. Select Connect Entities (or press CTRL + k).
  4. A path is drawn between the two entities. The first entity selected always targets on the second.
Troubleshooting: If the connection is not made check the following:
  • Are both objects already entities? Sometimes it's easy to forget to make a trigger brush into a trigger.
  • Did you select ONLY two objects? If you accidentally click on something you don't intend to link, you have to start the linkage over.
  • Did you select the objects in the correct order?
  • Is the second object something that can be triggered remotely?

Ungroup Entity
(Menu: Selection > Ungroup Entity)
(Shortcut: none)
This unbinds an entity made of brushes, and/or patches, and md2 models back into separate map components. Once ungrouped, the entity is no longer an entity and loses any and all key value properties it may have had.

Design Note: If you intend to rebuild an entity after ungrouping it, write down its key properties and values first.

Moving Selected Entity
These keys move the Entity around the map in discrete map grid increments.
    Move Selection Down
    (Shortcut: Keypad MINUS)
    Each press moves the selected map component down along the Z-axis by one grid position (at current grid setting). Not affected by current 2D-map view.

    Move Selection Up

    (Shortcut: Keypad PLUS)
    Each press moves the selected map component up along the Z-axis by one grid position (at current grid setting). Not affected by current 2D-map view.

Nudging the Entity
These keys move the Entity around the map in discrete map grid increments. The movement is in terms of the selected window, not in terms of XYZ coordinates.
    Nudge Down
    (Shortcut: ALT + DOWN ARROW)
    Each press moves the selected map component "down" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Up

    (Shortcut: ALT + UP ARROW)
    Each press moves the selected map component "up" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Left

    (Shortcut: ALT + LEFT ARROW)
    Each press moves the selected map component "left" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

    Nudge Right

    (Shortcut: ALT + RIGHT ARROW)
    Each press moves the selected map component "right" the map view by one grid position (at the current grid setting). The movement is relative to the selected map view, not XYZ coordinates.

Rotating Entities = BAD!
All the commands that rotate brushes and patches will work on entities. Unfortunately, what they do to some entities is BAD! Don't use free rotate or menu rotation commands to rotate Misc_models or any entity model represented by a wireframe model in your map. The movement will separate the model wireframe from its bounding box and will not actually change the facing of the entity.

Changing Facing = GOOD!
To change the direction that a misc_model or entity with a facing (such as a player start or spawn spot) faces, use Angle keys and values. You should "rotate" (change facing) entities with either the Angle buttons on the Entity Window or by entering an Angle key and giving it a rotation value between 1 and 360 (inclusive).

Mass Rotations
If you are building a Capture the Flag map, or other map where you only build one portion and rotate it to make the others, consider doing the following. Change the display of all non-misc_model entities to bounding boxes only. Select the entities to be moved and clone them. Then rotate them using the menu rotating commands. Position them in the new map section. Next, move misc_models individually. Change their facing and set them in place.


Q3Radiant Editor Manual: Page 9.1

Q3Radiant Editor Manual

Tools 6: Lights & Lighting

Lighting a map is both an art and a science. For Quake III Arena, the id designers worked to create instances of dramatic lighting, while attempting to maintain a relatively consistent intensity of light throughout the maps. Other designers worked to create dark realms, full of shadows in which lurking assassins could hide.

Whatever style of lighting you strive for, remember one key rule: The bots don't use light information. In a pitch-black room, they would still see an opponent. Keep that in mind when designing your maps.

Entity Lights
There are several ways to create light emitting objects. The simplest is to place a light entity into your map. If you do nothing, it has a default value of 300 and emits white light. If you think of the light value as the wattage for an incandescent light bulb, you are not far off target. The section on the Light entity in the Entities Description Appendix contains specific information on using light entities.

Texture Lights
Textures can be made to emit light. The amount of light that they give off is determined by two factors: the size of the texture and the value given for its q3map_surfacelight parameter.

If you only plan on using id textures in your maps, simply use the textures surrounded by a white box in the texture window. Many of them have their light values as part of their names: Example: ceil22a_5k. This would be a small, square light with a light value of 5000. There is not a direct correspondence between the light value of a texture light and an entity light.

If you want to make your own lights, either with new, custom textures, or changing the light and/or color values of the emitted light in existing id textures, plan on learning your way around the shader files. The Shader Manual explains the light commands. Place the new lights in unique directories. Example: Mymapname_light\skull_light_2k. Use the q3map_editorimage key to make multiple light intensity versions of your new lights.

Generally speaking, very small lights need to have very large values to look right (a 32x32 pixel light could easily have a surfacelight value of 10,000 or more). As the surface area of the light becomes larger, the amount of light needs to be substantially reduced for it to look right in the world. A word of warning, though. Very large glowing surfaces (other than skies) can look odd in the game world, especially if they are made from a repeating texture. The light source will appear to be generated from the center of the brush with the glowing texture.

"Sky" Lights
Quake III Arena was designed so that sky textures could appear to emit light in a natural way. The q3map_sun parameter creates a single light source in the sky. The mapper can control the brightness, color, and position in the sky of this light source. Furthermore, the designer can add a q3map_surfacelight value to the sky, giving it an overall lighting value.

Ambient Light
Ambient light is a property of the map's worldspawn entity. By assigning a number value to the ambient key, the overall lighting level of the map is raised. This has the tendency to flatten the difference between light and shadow. The color of the light can also be modified. This technique is considered a "hack." It does not come recommended. You will find instructions that are more complete later in this manual under the worldspawn entity heading in the Entities Appendix.


Q3Radiant Editor Manual: Page 10.1

Q3Radiant Editor Manual

Tools 7: Miscellaneous Commands

Feedback & Read-outs

The bottom border of the map window holds four clusters of feedback information.

Z-Axis Layers
(Shortcut: SHIFT + Middle mouse click on 2D map window)
If you are using any window layout that includes the Z-axis scale, you can see the vertical relationships between components with this function.

Cursor Coordinates
These three coordinates, found to the left of center, report the xyz position of the cursor in the 2D map window.
    x:: 0.0 y:: 0.0 z:: 0.0

Brush & Entity Counter
This readout is located at roughly center position. It reports the number of brushes (including brushes forming brush entities) and the number of non-brush entities (items, spawn spots, lights, etc.)
    Brushes: 0 Entities: 0

Pushing the Limits This is a good place (as any) to talk about limits. Quake III Arena has an upper limit of 2048 entities (including entity lights!!) and while it's not an upper limit, staying under 8000 brushes is a pretty good idea.

Selection
This readout temporarily replaces the Brush & Entity counter when a map component is selected. The numbers represent the dimensions of the selection.
    Selection X:: 0.0 Y:: 0.0 Z:: 0.0

Origin
This readout temporarily replaces the Brush & Entity counter when a select map component is moved. The numbers represent the origin point of the selection (and track it as it moves).
    Origin X:: 0.0 Y:: 0.0 Z:: 0.0

Cursor Travel Distance
These three coordinates, found to the right of the brush and entity counter, report the distance that cursor has traveled from the point where the user has clicked on the 2D map window.
    Distance X:: 0.0 Y:: 0.0 Z:: 0.0

Control Settings
In the lower right corner of the editor window, you will see a string of letters and numbers that might look something like this:
    G:8 T:16 R:45 C:10 L:MR
Each of these letter/number combinations represents the setting for one of the commonly used tools.

G | Grid. Here, it's set to 8 units.
T | Texture Tweak. This the increment in pixels that a texture will shift. Here, it's set to 16 pixels.
R | Rotation. This is the amount of increment, in degrees that a texture or brush will rotate.
C | Cubic Clip depth of field. When cubic clip is set, this is how far, in terms of 64 unit blocks that you can see into the map. Here, the setting of 10 would allow you to see 640 units into the map.
L | Texture Lock. If M is showing, then it is locked for moves. If R is showing, then it is locked for rotations.

Viewing, Seeing, Not seeing, and Hiding

This group of commands all relates to what you see in the map and how you see it. Some are designed to reduce map clutter. Others are designed to improve editor performance.

Toggle…
    Camera View
    (Menu: View > Toggle > Camera View)
    (Shortcut: SHIFT + CTRL + C)
    Toggles (hides or shows) the Camera View (CAM) window.

    Console View

    (Menu: View > Toggle > Console View)
    (Shortcut: O)
    (Window: Click mouse button 1 on Console tab)
    Toggles (hides or shows) the Console window.

    Entity View

    (Menu: View > Toggle > Entity View)
    (Shortcut: N)
    (Window: Click mouse button 1 on Entity tab)
    Toggles (hides or shows) the Entity window.

    XY (Top)

    (Menu: View > Toggle > XY (Top))
    (Shortcut: SHIFT + CTRL + V)
    (Toolbar: XYZ button)
    Toggles (hides or shows) the XY map window.

    YZ (Side)

    (Menu: View > Toggle > YZ (Side))
    (Shortcut: SHIFT + CTRL + C)
    (Toolbar: XYZ button)
    Toggles (hides or shows) the YZ map window.

    XZ (Front)

    (Menu: View > Toggle > XZ (Front))
    (Shortcut: SHIFT + CTRL + C)
    (Toolbar: XYZ button)
    Toggles (hides or shows) the XZ map window.

    Z View

    (Menu: View > Toggle > Z View)
    (Shortcut: SHIFT + CTRL + Z)
    Toggles (hides or shows) the Z (height) window.

Center
(Menu: View > Center)
(Shortcut: END)
Centers the pitch (up and down) angle of the user view.

Up Floor
(Menu: View > Up Floor)
(Shortcut: PAGE UP)
This is a shortcut for moving up between "floors" in map. It changes the user's Z height in the camera and map views. The view moves to a point where it appears that the user is "standing" on a "floor" (a brush with "air" space directly above it) directly above the user's current position in the map.

Down Floor
(Menu: View > Down Floor)
(Shortcut: PAGE DOWN)
This is a shortcut for moving down between "floors" in map. It changes the user's Z height in the camera and map views. The view changes to a point where it appears the user is "standing" on a "floor" (a brush with "air" space directly above it) directly below the user's current position in the map.

Next (XY, YZ, XZ)
(Menu: View > Next (XY, YZ, XZ))
(Shortcut: CTRL+TAB)
(Toolbar: XYZ button)
Cycles the content of the XY map window with the other views (side and front).

Layout
(Menu: View > Layout)
    XY (Top)
    (Menu: View > Layout > XY (Top))
    (ALT + X when pop-up is held open, cycles with XZ, ENTER to select)
    This returns the main map view to XY Top view.

    YZ

    (Menu: View > Layout > YZ)
    (ALT + Y when pop-up is held open)
    Changes main (XY) map view to YZ Side view

    XZ

    (Menu: View > Layout > XZ)
    (ALT+ X when pop-up is held open, cycles with XY, ENTER to select)
    Changes main (XY) map view to XZ Side view

Zoom
(Menu: View > Zoom)
If the XY Top window is changed to display either XZ front or YZ side the XY commands below function the same way relative to the window, zooming in and out as commanded.
    XY 100%
    (Menu: View > Zoom > XY 100%)
    Changes zoom on main map view to full size.

    XY Zoom In

    (Menu: View > Zoom > XY Zoom In)
    (Shortcut: DELETE)
    Zooms closer to main map. Working in smaller grid scale becomes easier.

    XY Zoom Out

    (Menu: View > Zoom > Zoom Out)
    (Shortcut: INSERT)
    Zooms out away from the main map. Working in larger grid scale becomes easier.

    Z 100%

    (Menu: View > Zoom > Z 100%)
    Changes zoom on the z (height) scale to full size.

    Z Zoom In

    (Menu: View > Zoom > Z Zoom In)
    (Shortcut: CTRL + DELETE)
    Zooms in closer on the z (height) scale.

    Z Zoom Out

    (Menu: View > Zoom > Z Zoom Out)
    (Shortcut: CTRL + INSERT)
    Zooms out and away from the z (height) scale.

    Cubic Clip Zoom In

    (Menu: View > Zoom > Cubic Clip Zoom In)
    (Shortcut: CTRL + ] )
    This requires that the Cubic Clipping function be toggled on. It decreases the Depth of Field (distance in which map components are seen) in the Camera window. Less map components are seen at one time. Decreasing the distance seen in the Camera window can significantly improve editor performance when viewing large numbers of map components. See Cubic Clipping.

    Cubic Clip Zoom Out

    (Menu: View > Zoom > Cubic Clip Zoom Out)
    (Shortcut: CTRL + [ )
    This requires that the Cubic Clipping function be toggled on. It Increases the Depth of Field (distance in which map components are seen) in the Camera Window. Increasing the distance seen in the Camera window can significantly slow down speed at which your point of view moves in the camera window. Increase the zoom to maximum distance only if you have a relatively powerful editing system. See Cubic Clipping.

Show
(Menu: View > Show)
This is a pop-up menu with checked toggle functions for each of the features on the list. If a feature is checked, all map components of that type will show in both the Camera window and the Map windows. If the feature is not checked, all map components of that type will be hidden.
    Names
    (Menu: View > Show > Names)
    (Shortcut: none)
    Shows names of entities.

    Blocks

    (Menu: View > Show > Blocks)
    (Shortcut: none)
    Shows an additional grid over the Map window with subdivisions every 1024 units.

    Coordinates

    (Menu: View > Show > Coordinates)
    (Shortcut: none)
    Shows the Map window coordinates along the left and top edges of the Map window.

    Entities

    (Menu: View > Show > Entities)
    (Shortcut: none)
    Shows entities, including brush entities, lights, and models.

    Paths

    (Menu: View > Show > Paths)
    (Shortcut: none)
    Shows the linkage connections between entities. This includes triggers targeted at entities and path lines.

    Lights

    (Menu: View > Show > Lights)
    (Shortcut: none)
    Shows Light entities.

    Water

    (Menu: View > Show > Water)
    (Shortcut: none)
    Currently non-functional. Look for future fix. Shows brushes with water, lava, or slime content.

    Clip Brush

    (Menu: View > Show > Clip Brush)
    (Shortcut: none)
    This shows brushes with the common/clip content, including common/clip and common/weapon_clip. The entire brush is affected, not just clip brush texture sides.

    Hint Brush

    (Menu: View > Show > Hint Brush)
    (Shortcut: none)
    Shows brushes made with the hint texture.

    World

    (Menu: View > Show > World)
    (Shortcut: none)
    Shows all non-entity brushes.

    Detail

    (Menu: View > Show > Detail)
    (Shortcut: CTRL + D)
    Shows all brushes marked with a Detail setting.

    Curves

    (Menu: View > Show > Curves)
    (Shortcut: CTRL + P)
    Shows all curve patches.

    Caulk

    (Menu: View > Show > Caulk)
    (Shortcut: none)
    Shows brush sides containing the common/caulk texture (does not affect entire brush).

    Design Tip: When you optimize detail brushes by caulking unseen brush faces, isolate the detail brushes in a region then turn off Caulk. Brush faces that need caulking will show up clearly as you move around the brushes.

    Angles

    (Menu: View > Show > Angles)
    (Shortcut: none)
    Shows facing angle of player start spots by way of a white arrow.

Hide/Show
(Menu: View > Hide/Show)
This is an immensely powerful and useful tool. It lets the user temporarily hide map components that may be in the way of working on other brushes. Hidden components are not affected by CSG actions.
    Hide Selected
    (Shortcut: H)
    Selected map components are hidden from view (and CSG cutting operations) until the Show Hidden command is executed.

    Show Hidden

    (Menu: View > Hide/Show > Hide Selected)
    (Shortcut: SHIFT + H)
    Previously hidden map components are returned to view.

Entities as…
(Menu: View > Entities as…)
(Toolbar: Show Entities as, rightmost button on toolbar)
The editor can show model entities (referring at this point only to Misc_Model entities) in several formats. Note: More detail in a model shown in the Camera and map views will affect the ability of the editor to display the map. If the editor responds sluggishly, try reducing the level and/or type of detail shown for models.
    Bounding Box
    (Menu: View > Entities as… > Bounding Box)
    (Shortcut: none)
    This is the simplest form of display. A box defines the outer dimensions of the model. This is the least costly manner of display.

    Wireframe

    (Menu: View > Entities as… > Bounding Box)
    (Shortcut: none)
    Non-functioning.

    Selected Wireframe

    (Menu: View > Entities as… > Selected Wireframe)
    (Shortcut: none)
    The Model is displayed as a bounding box until selected, at which point the wireframe mesh for the model appears.

    Selected Skinned

    (Menu: View > Entities as… > Selected Skinned)
    (Shortcut: none)
    The Model is displayed as a bounding box until selected, at which point the skinned mesh for the model appears.

    Skinned

    (Menu: View > Entities as… > Skinned)
    (Shortcut: none)
    Only the skinned mesh for the model appears in the map and Camera views.

    Skinned and boxed

    (Menu: View > Entities as… > Skinned and boxed)
    (Shortcut: none)
    The skinned mesh for the model appears inside a wire frame of the bounding box in both the map and Camera views.

Cubic Clipping
(Menu: View > Cubic Clipping)
(Shortcut: CTRL + \ )
(Toolbar: Cubic Clipping button, to right of XYZ & Texture view mode buttons)
This command toggles on (checked) or off when selected. Cubic Clipping may be the most effective way to improve editor performance. When turned on, only those map components near the player are displayed in the Camera window. Any map components beyond a certain depth of field will not be displayed in the camera window (it has no effect on map windows). As the user moves through the map in camera view, map components will pop into being as the point-of-view (POV) draws closer and disappear as the POV moves farther away. The shorter the distance "seen" in the camera view, the better will be the editor performance when moving through the map. Use the Cubic Clip Zoom commands (see above) to modify the depth of field seen in the camera view.

Open GL Lighting
(Menu: View)
(Shortcut: none)
This feature is not fully implemented yet. It toggles on (checked) or off when selected. When it is finished, all planes facing a particular direction will shade the same way (curves will shade like brushes) and the overall quality of the camera view will be better. It will be slower however.
    Tip: As it currently is implemented, this lighting can be useful when working with irregular surfaces all covered with the same texture.

Show Brush/Patch Dimensions
(Shortcut to turn on: Q)
(Shortcut to turn off: SHIFT + Q or CTRL + Q)
When you select a brush, the hi-lighted image in the map window shows its dimensions, in game units. If multiple patches or brushes are selected, the size will be the dimensions of the grouping. If any kind of non-brush model entity is included in the grouping, the dimensions are not shown.

File Management Commands

New Map
(Menu: File > New Map)
(Shortcut: none)
This creates a new map file. If the current map file contains any unsaved changes, the editor will offer the option to cancel.

Open…
(Menu: File > Open…)
(Shortcut: CTRL + O)
(Toolbar: opening folder icon)
This opens up the Maps folder as defined in the preferences. It will show all valid map files in that directory. User may browse to other directories from here. Double clicking on a map file icon or hi-lighting that map and selecting Open will open the map. The user may also type in a map file name. Be sure to add the ".map" or ".reg" extensions or the editor will not find the file.

Save…
(Menu: File > Save…)
(Shortcut: CTRL + S)
(Toolbar: disk icon)
Saves a new map file to the default Maps directory. A reopened map file will be saved to its source directory. Note, that it is usually a good idea to save the map into the directory used by the compiler as the source of its map data. Remember to give the file a name. The compiler doesn't like to work with files called Unnamed Map.

Save As…
(Menu: File > Save As…)
(Shortcut: none)
Opens the default directory for maps and prompts the user to give the map a filename.

Save Selected…
(Menu: File > Save Selected…)
(Shortcut: none)
The selected brushes are saved as a map file. This is not the way to make prefabs, though.

Save Region
(Menu: File > Save Region)
(Shortcut: none)
If the user has "regioned off" a subset of the map, this command will save it as a separate file. It is grayed out unless the user has created a regioned area. The editor prompts the user to enter a file name before saving.

Reopening Maps
(Menu: File)
(Shortcut: none)
(ALT+1 to 6 when File menu is held open)
OK, There isn't actually a command called this. When you open the File Menu, you will see (after you've done some work on maps), the path/file names for the last six maps that you worked on. They are listed here for easy opening access).

Projects and Preferences

New project…
(Menu: File > New project…)
(Shortcut: none)
Make a new project file. This allows you to set up different preferences.

Load project…
(Menu: File > Load project…)
(Shortcut: none)
Make a new project file. This allows you to set up different preferences.

Project Settings…
(Menu: File > Project Settings…)
(Shortcut: none)
Change pathnames and add, remove or modify commands.

Miscellaneous Commands

Map info…
(Menu: Edit > Map info…)
(Shortcut: none)
This gives a readout of brushes (including curve patches) and entities in the map, including the total number of brushes that are not part of entities. There is also a breakdown, by type, showing the number of entities in the map.

Entity info…
(Menu: Edit > Entity info…)
(Shortcut: none)
This gives a read-out of the entities in a map by their type. It allows you to select an entity, which hi-lights it in the XY Map. Good for locating lost entities.

Preferences
(Menu: Edit > Preferences)
(Shortcut: P)
This opens the window for setting or modifying the parameters, paths and features of the editor. Preferences are discussed in the Installation & Set Up section earlier in this document.

Opening Menus from the Keyboard

These are the keyboard shortcuts that open up the menus. If you continue to hold down the ALT key, many of the commands in that menu may be activated with an ALT+ keystroke command.

File | (ALT + F)
Edit | (ALT + E)
View | (ALT + V)
Selection | (ALT + S)
Bsp | (ALT + B) | Note: Toggles between BSP & Brush. Hit enter to open selected.
Grid | (ALT + G)
Textures | (ALT + T)
Misc | (ALT + M)
Region | (ALT + R)
Brush | (ALT + B)
Curve | (ALT + C)
Plugins | (ALT + P)
Help | (ALT + H)


Q3Radiant Editor Manual: Page 11.1

Q3Radiant Editor Manual

Tools 8: Compiling Maps

To turn a map file from editor code into game code, it must be processed or "compiled". In Quake engine gaming, this is often referred to by the name "BSP", as in "I need to BSP my map before you can play it." The word "BSP" is actually an abbreviation for "binary space partition", the type of data organization procedure John Carmack used when creating the graphic engine for "DOOM".

The primary BSP process builds the game spaces, establishes the position of entities, and builds a lighting map of the arena. Altogether, there are four distinct processes that can be run together or separately. The first, the bsp process establishes the data organization of the map. The second phase, the vis process, builds the walls and internal spaces. The third process lights the map, calculating brightness and shadow and the color of the light that falls on every map surface. The fourth and final process is the Bot bsp, which creates the area (.aas) file that the bots use to navigate the map.

The size and complexity of a map and the computer's raw processing speed determine how long it will take a map to compile. Tiny one-room maps that lack detail or numerous lights will compile rapidly. As maps become larger, are broken up into more spaces and have more complex lighting, the speed of compile drops.

Generally speaking, if you have an older, slower processor, you may want to make very small maps.

The BSP Menu
The bsp menu contains a number of compile options. The process you choose will depend on what you are doing with the map at the time you choose to compile.

novis - Only the bsp function is performed. Checks for map leaks. No light information is created, so the map is seen at "fullbright". Because there are no shadows to get in the way, this mode is also good for looking for overlapping brushes, and texture misalignment.
fastvis - Performs a bsp and a quick version of the vis process. The entire world is made into a single bsp partition. It's fast, but when you look in a particular direction, you see every single detail in that direction. Nothing is blocked. A light map is created. This mode was used for space maps.
fullvis - the world is subdivided and broken up into smaller chunks so you can see only what is logically in your view. A light map is created. This is what is used to check polygon-in-view counts. Combined with light extra, it is the final compile for all maps.
entities only - When you add or subtract non-brush model entities from a map, use this compiler. It's very quick. If you change the brush components of a brush model entity (like a trigger or a door), you must do a compile that includes a vis stage (fast or full). If you are only changing the properties, an entities-only will do. However,, if a brush model entity also has a md3 model component, the map must be at least fastvis'd for that entity to appear in the map.
relight - Use only if no geometry (or light emitting textures) have been changed. It will rebuild the light map with the new information.
(nocurves) - This function is always a modifier to another bsp command. It does (or doesn't do) what it says. The map is compiled without curves.
(nowater) - This function is always a modifier to another bsp command. The map is compiled without water, lava, or slime.
(no light) - This function is always a modifier to another bsp command. No light map is generated. A fast way to check polycounts. Most often used in conjunction with the novis bsp command.
(-light extra) - This function is always a modifier to another bsp command. A finer degree of subdivision is used to create a more detailed light map. This is generally only done when the lighting is going through a final fine-tuning because it takes a long time. Instead of being calculated in 16 unit increments, the light is calculated in 8 unit increments. This has no effect on final map size, only on the time needed to compile.


Q3Radiant Editor Manual: Appendix A

Q3Radiant Editor Manual

Appendix A: Glossary of Terms

Alpha Channel: This is a fourth 8-bit grayscale channel that is used by the shaders to further manipulate the art. It is often used to create transparency and translucency.
Arena: A confined space in which Quake III Arena game play occurs. This is also called a "map" or a "level".
B_Model: An entity, such as a lift, train, door, or rotating object, made of geometry brushes. These models can also contain curve patches and md3 models as components.
Brush: A single piece of map geometry defined by four or more vertices that define a solid, convex volume.
Bot: A computer-controlled player. To the server, a bot is treated as if it were a player. Some entities can make a distinction between interaction with, or use by "live" players and/or bots.
Bsp: An abbreviation for Binary Space Partitioning. This is used as a name for the compiling process.
BSPC: The utility, which creates a bot navigation .aas file for a map. Currently, it is run from outside the editor.
Compile: A number crunching process that turns editor code into game code. This is also referred to as "bsp".
CTF: (g_gametype 4) Abbreviation for the team game type "Capture the Flag."
Delay: A keyword for the amount of time, expressed in seconds (value), between the moment when activation occurs and the moment when the event it triggers occurs.
DM: Abbreviation for "Death Match."
Editor: Usually refers to the tool, in this case, Q3Radiant, used to make game maps.
Entity: One of several classes of objects that are placed into game maps. Entities include miscellaneous models, ammo, weapons, point lights, doors, moving objects and so on.
Event: Something that happens during game play. Activating a trigger is an event.
FFA: (g_gametype 0) Abbreviation for "Free for All" a style of play in which every player is pitted against all other players.
FPS: This is Frames per Second, sometimes call frame rate. This number shows approximately how many times the screen is being redrawn each second. This number depends on many factors, including the complexity of the map, the number of players in the map (bots are worse than humans), the processing power of the computer and the processing power of the video accelerator card in that computer. It is not the best measure for determining the playability of a map.
FOV: Field of View how much of the game world can be see at one time, either in the game or the camera window of the editor.
Game Unit: The basic unit of measure in a game map. Eight game units are approximately equal to one foot (30.48 cm) in the "real" world. This measure is also referred to as simply a "unit."
Grid: In the Map Windows, this is a measuring tool, much like graph paper.
Key: A key is a property possessed by an entity in the game. Light entities have a default value of 300. See the Entity description appendix for details Entering in the key "light" with a "value" of 150 reduces that by half.
Map: Also called an arena or a game level. It is a self-contained game play area created by an editing tool like Q3Radiant. It can refer to both the map file and the final playable product.
Map Component: This is anything placed in the editor to create the map. It includes geometry brushes, curve patches, lights, entities, and models.
Md3: Shorthand for a mesh model created and textured outside of Q3Radiant. The acronym refers to the custom file format used for the models in Quake III Arena.
Patch: Any map component built from bezier curves. This includes bevels, caps, patches, and cylinders.
Pathname: The sequence of file folders/directories from a starting point to a game asset or executable.
Pixel: The smallest definable graphic component. This literally means, "Picture element". A game unit typically consists of a square cluster of 4 pixels (two pixels by two pixels).
POV: Point of View. This is essentially, where the eye sits in relation to the game world.
Project: A text file that contains the path designations for the various editor functions of Q3Radiant.
PVS: Potential Viewable Set. Refers to those world triangles that might be seen from a position in the game world.
R_Speeds: This is a set of numbers used to debug maps for visual complexity. They show the number of triangles that are being drawn in a given point of view. Lower numbers are better.
Region: A subset of the map. Selecting one or more map components and using a menu command to set them off temporarily from the rest of the map create regions.
Script: A text file that contains instructions for the game. Examples: arena.txt, base_floor.shader, debug.cfg.
Shader: A short script of program commands that define the way the graphic engine processes a texture.
Team DM: (g_gametype 3) A team of players takes on another team to get the most frags.
Texture: A graphic file designed to suggest a physical surface or a component for a graphic special effect.
T-Junction Cracks: A visual artifact resulting from patch vertices that are not properly matched to world geometry. This is characterized by 'sparkles' running along the edge of the patch.
Tournament: (g_gametype 1) This is a mode of game play characterized by a one on one match with other players watching as spectators while waiting their turns. The winner of the match plays the next opponent.
Trigger: A map component that activates events in the game world under the right conditions.
Unit: (See "Game Unit")
Value: A setting for a key possessed by an entity. Depending on the key, values can be numbers, pathnames, word strings, or word commands. See individual Entity descriptions for details.
Z-fighting: A visual artifact caused when two z-buffered surfaces share the same plane, resulting in the engine trying to draw both simultaneously.


Q3Radiant Editor Manual: Appendix B1

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

This Section owes much of the background and testing research to three dedicated Quake Engine editing supporters, Suicide20, inolen, and EuteTic. It is based on version 1.1 (12/22/99) of a document that they created and gave us permission to include with the official id editor documents.

"Keys" are keywords that represent the in-game properties of an entity. Some are flags that determine whether an entity will appear in a particular game play mode. Others define extents or rates for entity movement. Others establish how much of some game effect will occur (example: damage) or how long to wait until an event occurs or can reoccur.

With the exception of properties that can be set by checkboxes, the map maker will need to type in keys (names for game function properties) and their values (numbers or strings) into fields within the entities window.

Keys that are set by checkboxes in the editor are called "Spawnflags" and will be shown in All Caps. The rest are shown in lowercase, as they should be typed into the editor field.

Basic Key information

Angle: This is the direction of facing or direction of movement for an entity. Set this value with the Angle buttons on the entity window. The angle value can be typed in as any positive value between 1 and 360.

Color: This key only affects md3 models that are built into func_entities. The color is the color of light used to illuminate the model. It is expressed as a normalized three digit RGB formula.

Entity Dimensions: The minimum and maximum coordinate dimensions of the entity box.

Light: This key only affects md3 models that are built into func_entities.

Map Entity Color: This is the color of the generic entity box used to represent the entity in the map editor.

Ammo_* Entities

The properties for ammo entities are all very similar.

Map Entity Color: Blue
Entity Dimensions: (-16 -16 -16) (16 16 16)

These are ammunition boxes for weapons in the game. They can be represented by either a blue entity box, or the ammo box model itself. With the exception of the type and amount of ammo given to the player upon pick up, all ammo entities have the same properties.

ammo_bfg
Game Function: BFG ammo. Gives the player 15 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 15).

ammo_bullets
Game Function: Machine Gun ammo. Gives the player 50 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 50).

ammo_cells
Game Functions: Plasma Gun ammo. Gives the player 30 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 30).

ammo_grenades
Game Function: Grenade Launcher ammo. Gives the player 5 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 5).

ammo_lightning
Game Function: Lightning Gun ammo. Gives the player 60 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 60).

ammo_rockets
Game Function: Rocket Launcher ammo. Gives the player 5 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 5).

ammo_shells
Game Function: Shotgun ammo. Gives the player 10 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 10).

ammo_slugs
Game Function: Railgun ammo. Gives the player 10 shots by default.

Custom Keys
count: sets the amount of ammo given to the player when picked up (default 10).

Common Keys
wait: time in seconds before the item respawns after being picked up (default 40, -1 = never respawn).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
team: set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
target: picking up the item will trigger the entity this points to.
targetname: a target_give entity can point to this for respawn freebies.
notbot: when set to 1, a bot will never seek out this item
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
SUSPENDED: item will spawn where it was placed in map and won't drop to the floor. Set by Checkbox. Bots will only be attracted to suspended entities if they are reachable by way of a jump pad or launch pad (trigger_push).

Notes
The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.

When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).

Design Notes
An ammo item can be given a negative "count" value. Taking away ammo in combat would be a bad idea but in combination with a target_give entity, it can be used to set up games mods like Rocket Arena by removing the machinegun ammunition from a player when he spawns into the map.


Q3Radiant Editor Manual: Appendix B2

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Func_* Entities

Func_Entities include a wider variety of game purposes than other entity classes. They are sometimes represented by simple function boxes. But many are built out of brushes, patches and models. These constructions are sometimes called "b_models", though for many of them the word "mover" works as well, since they are made to be moving objects in the game world.

func_bobbing
Map Entity Color: N/A
Dimensions: size of map components used
Game Function: Solid entity that oscillates back and forth in a linear motion. By default, it will have an amount of displacement in either direction equal to the dimension of the brush in the axis in which it's bobbing. Entity bobs on the Z axis (up-down) by default. It can also emit sound if the "noise" key is set. Will crush the player when blocked.

Keys
speed: amount of time in seconds for one complete oscillation cycle (default 4).
height: sets the amount of travel of the oscillation movement (default 32).
phase: sets the start offset of the oscillation cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
noise: path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav - See Notes).
model2: path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
origin: alternate method of setting XYZ origin of sound and .md3 model included with entity (See Notes).
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
X_AXIS : entity will bob along the X axis.
Y_AXIS : entity will bob along the Y axis.

Notes
In order for the sound to be emitted from the location of the entity, it is recommended to include a brush with an origin shader at its center, otherwise the sound will not follow the entity as it moves. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. The movement of the func_bobbing follows a sinoid wave pattern.

func_button
Map Entity Color: N/A
Dimensions: size of map components used
Game Function: When a button is touched by a player, it moves in the direction set by the "angle" key, triggers all its targets, stays pressed by an amount of time set by the "wait" key, then returns to its original position where it can be operated again.

Keys
angle: determines the direction in which the button will move (up = -1, down = -2).
target: all entities with a matching targetname will be triggered.
speed: speed of button's displacement (default 40). Speed is in game units per second.
wait: number of seconds button stays pressed (default 1, -1 = return immediately).
lip: lip remaining at end of move (default 4 units).
health: if set to a non-zero value, the button must be damaged by "health" amount of points to operate.
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.

func_door
Map Entity Color: N/A
Dimensions: size of map components used
Game Function: Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted on it. Doors move a distance equal to their dimension along the selected angle of travel, minus the "lip" key value.

Keys
angle: determines the opening direction of door (up = -1, down = -2).
speed: determines how fast the door moves (default 100). Speed is in game units per second.
wait: number of seconds before door returns (default 2, -1 = return immediately - see Notes).
lip: lip remaining at end of move (default 8).
targetname: if set, a func_button or trigger is required to activate the door.
health: if set to a non-zero value, the door must be damaged by "health" amount of points to activate (default 0).
dmg: damage to inflict on player when he blocks operation of door (default 4). Door will reverse direction when blocked unless CRUSHER spawnflag is set.
team: assign the same team name to multiple doors that should operate together (see Notes).
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes. (default 1 1 1).
model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
START_OPEN: the door will spawn in the open state and operate in reverse.
CRUSHER: door will not reverse direction when blocked and will keep damaging player until he dies or gets out of the way.

Notes
Unlike in Quake 2, doors that touch are NOT automatically teamed. If you want doors to operate together, you have to team them manually by assigning the same team name to all of them. Setting wait =-1 for normal touch doors makes them work erratically. Use this only for damage-only ("health" key set to non-zero value) or targeted doors. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.

func_group
Map Entity Color: Light blue
Dimensions: Determined by dimensions of map components.
Game Function: This is not an entity. It is strictly an editor utility to group world brushes and patches together for convenience (selecting, moving, copying, etc). You cannot group entities with this.

Notes
The TAB key can be used to flip through the component pieces of a selected func_group entity, isolating individual components.

func_pendulum
Map Entity Color: Light blue
Dimensions: Determined by dimensions of map components.
Game Function: Solid entity that describes a pendulum back and forth rotation movement. Rotates on the X axis by default. Pendulum frequency is a physical constant based on the length of the beam and gravity. Contact with the pendulum instantly kills a player.

Keys
angle: angle offset of axis of rotation from default X axis (default 0/360).
speed: angle of swing arc in either direction from initial vertical position (default 30).
phase: sets the start offset of the swinging cycle. Values must be 0 < phase < 1. Any integer phase value is the same as no offset (default 0).
noise: path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
model2: path/name of model to include (eg: models/mapobjects/jets/jets01.md3).
origin: alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. Pendulum will rotate along the X axis by default. Pendulum cannot rotate along Z axis. The speed of swing (frequency) is not adjustable, and the "dmg" key (although set in the Q3A maps) has no effect whatsoever. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.

func_plat
Map Entity Color: Light blue
Dimensions: Determined by dimensions of map components.
Game Function: This is a rising platform that a player can ride to reach higher places. Plats must always be drawn in the raised position, so they will operate and be lighted correctly but they spawn in the lowered position. The plat will stay in the raised position until the player steps off. There are no proper sounds for this entity, only beep noises, so sound call paths must be adjusted (see Notes).

Keys
speed: determines how fast the plat moves (default 150) in game units per second.
lip: lip remaining at end of move (default 16). Has no effect if "height" is set.
height: if set, this will determine the total amount of vertical travel of the plat (see Design Notes).
dmg: damage to inflict on a player when he blocks operation of plat (default 4). Plat will reverse direction when blocked.
targetname: if set, the trigger that points to this will raise the plat each time it fires. The plat raises and comes back down a second later if no player is on it.
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
origin: alternate method of setting XYZ origin of .md3 model included with entity (See Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
By default, the total amount of vertical travel of a platform is implicitly determined by the overall vertical size of the brushes of which it's made minus the lip value. But if the "height" key is used, then the total amount of vertical travel of the plat will be exactly that value regardless of the shape and size of the plat and regardless of the value of the "lip" key. Using the "height" key is the best method for any kind of platforms and the only possible one for thin plats which need to travel vertical distances many times their own thickness. Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.

Design Notes:
Clip brushes can be used to create the additional size for "thin" plats. Func_plats were pulled from all maps in the final build of Quake 3 Arena due to some problems in their operation, particularly as it related to bot function. The id designers recommend using plats with care and that plats be built as "solid" pillar-like lifts (more like those in Doom).
There is a way to make plats play proper sounds. Just create a sound\movers\plats folder under baseq3 and put 2 sounds named pt1_start.wav and pt1_end.wav in it. Those can be the renamed sounds from the Q2 plats or renamed copies of the sound\movers\doors sounds you can extract from your pak0.pk3 file or new custom sounds if you're up to it. Thanks to Fragzilla for the tip.

func_rotating
Map Entity Color: Light blue
Dimensions: Determined by dimensions of map components.
Game Function: Solid entity that rotates continuously. Rotates on the Z axis by default and requires an origin brush. It will always start on in the game and is not targetable.

Keys
speed: determines how fast entity rotates (default 100).
noise: path/name of .wav file to play. Use looping sounds only (eg. sound/world/drone6.wav).
model2: path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
origin: alternate method of setting XYZ origin of entity's rotation axis and .md3 model included with entity (default "0 0 0" - See Notes).
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
X_AXIS: entity will rotate along the X axis.
Y_AXIS: entity will rotate along the Y axis.

Notes
You need to have an origin brush as part of this entity. The center of that brush will be the point through which the rotation axis passes. Setting the origin key is simply an alternate method to using an origin brush. It will rotate along the Z axis by default. You can check either the X_AXIS or Y_AXIS box to change that

func_static
Map Entity Color: N/A
Dimensions: Determined by components
Game Function: Static solid bspmodel. Can be used for conditional walls and models for different game types.

Keys
model2: path/name of model to include (eg: models/mapobjects/bitch/fembotbig.md3).
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value. Because the map has only a single bot navigation file, Func_Statics cannot be used to make significant changes in game play flow between differing game types.

func_timer
Map Entity Color: Dark blue (0.3 0.1 0.6)
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Time delay trigger that will continuously fire its targets after a preset time delay. The time delay can also be randomized. When triggered, the timer will toggle on/off.

Keys
wait: delay in seconds between each triggering of its targets (default 1).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
target: this points to the entities to trigger.
targetname: a func_button or trigger that points to this will toggle the timer on/off when activated.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
START_ON: timer will start on in the game and continuously fire its targets.

Notes
When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).

func_train
Map Entity Color: (0 .5 .8)
Dimensions: Determined by components
Game Function: Trains are moving solids that follow a string of path_corner entities. Trains in Q3A are very basic, they also require an origin brush (see Notes).

Keys
speed: speed of displacement of train (default 100 or overridden by speed value of path).
target: this points to the first path_corner of the path which is also the spawn location of the train's origin.
model2: path/name of model to include (eg: models/mapobjects/pipe/pipe02.md3).
origin: alternate method of setting XYZ origin of the train's brush(es) and .md3 model included with entity (See Notes).
light: constantLight radius of .md3 model included with entity. Has no effect on the entity's brushes (default 0).
color: constantLight color of .md3 model included with entity. Has no effect on the entity's brushes (default 1 1 1).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
1. Trains always start on in the game.
2. Trains do not damage the player when blocked.
3. Trains cannot emit sound.
4. Trains are not triggerable or toggle-able.
5. Trains cannot be block-stopped just by getting in their way, the player must be wedged between the train and another obstacle to block it.

Setting the origin key is simply an alternate method to using an origin brush. When using the model2 key, the origin point of the model will correspond to the origin point defined by either the origin brush or the origin coordinate value.


Q3Radiant Editor Manual: Appendix B3

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Holdable_* Entities

holdable_medkit
Map Entity Color: blue (.7 0 1)
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: This is a Medkit that can be picked up and used (once) later. Brings the player's health back to 100 when used. Player can only carry one holdable item at a time.

Keys
wait: time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
team: set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
target: picking up the item will trigger the entity this points to.
targetname: a target_give entity can point to this for respawn freebies.
notbot: when set to 1, a bot will never seek out this item
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
SUSPENDED: item will spawn where it was placed in map and won't drop to the floor. Bots will only be attracted to suspended entities if they are reachable by way of a jump pad or launch pad (trigger_push).

Notes
The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.

When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).*/

holdable_teleporter
Map Entity Color: blue (.7 0 1)
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Teleporter item that can be picked up and used (once) later. Teleports the player to a random player spawn point when used. Player can only carry one holdable item at a time.

Keys
wait: time in seconds before item respawns after being picked up (default 60, -1 = never respawn).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
team: set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
target: picking up the item will trigger the entity this points to.
targetname: a target_give entity can point to this for respawn freebies.
notbot: when set to 1, a bot will never seek out this item
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
SUSPENDED: item will spawn where it was placed in map and won't drop to the floor. Bots will only be attracted to suspended entities if they are reachable by way of a jump pad or launch pad (trigger_push).

Notes
The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has its "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.

When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).


Q3Radiant Editor Manual: Appendix B5

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Item_* Entities

Most of the properties for item entities are the same and are listed immediately below. Properties that are unique to specific entities follow those entries.

Shared Keys (for all item entities)
All the entities in this grouping can have the following keys.

team: set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
target: picking up the item will trigger the entity this points to.
targetname: a target_give entity can point to this for respawn freebies.
notbot: when set to 1, a bot will never seek out this item.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Two other keys, wait and count, do not apply to all entities and are described as they apply to individual entity types.

Check Boxes/Spawnflags
SUSPENDED: item will spawn where it was placed in map and won't drop to the floor. Bots will only be attracted to suspended entities if they are reachable by way of a jump pad or launch pad (trigger_push).

Notes
Team: Just as you would set doors to work together with the "team" key, you can do the same for item, weapon and ammo entities. Give each entity in the team the same key value (example: "team" "powerups"). The game randomly selects which team member respawns next. You can set your own wait times. You can skew the weighting towards a particular item by including multiple copies of it. Example: 1 quad and 2 hastes in a team mean a greater chance that a haste entity will appear next.

The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.

When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).

item_armor_body
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Red Armor - 100 points of protection. All armor can be cumulated up to a maximum of 200 points and slowly decays back to 100 points.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 25, -1 = never respawn).

item_armor_combat
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Yellow Armor - 50 points of protectiong. All armor can be cumulated up to a maximum of 200 points and slowly decays back to 100 points.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 25, -1 = never respawn).

item_armor_shard
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Green Armor Shard - 5 points of protection. All armor can be cumulated up to a maximum of 200 points and slowly decays back to 100 points.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 25, -1 = never respawn).

Item_botroam
Map Entity Color: orange
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: An invisible entity that attracts a bot to it. Used to move bots to parts of a map that might otherwise not be used.

Custom Keys
Weight: non-zero floating point value, most often in the range 0 to 400. Very low values are unlikely to attract a bot to that area, since most bots have "desires" that attract them to other game entities. (Higher values are allowed but keep in mind that the bot should also be attracted to normal items. Don't make the weight value too high.

Notes
The item_botroam entity can be used when a bot does not roam the whole level or prefers to go to only specific areas. But don't confuse these items with "way points". They are more like magnets. This (invisible) item can be placed in a map just like regular items. Nobody can actually pick up the item it's only used to attract bots to certain places of the map. The value is the weight of the roam_item is relative to the weight assigned other items in the map (each bot has its own weights). The bot character specific item weights are stored with the bot characters in the botfiles/bots/ sub-folder in the .pk3 file.

When a bot should never go for a specific item the key "notbot" with value "1" can be used for that item. This key with value can be used for every available item in Quake III Arena.

Design Tip: Wait to place these items until you've done a significant amount of live play testing on the final map against bots. Observe a bot-only match. See which parts of the map they DON'T use frequently. Use bot_roam entities to encourage the bots to follow more paths through the map. Example: In one of id's CTF maps, it was eventually observed that bots were most likely to use only one entrance when assaulting the base. Placement of item_botroam entities along the other entrance paths might have solved this.

item_enviro
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Battle Suit power-up. Lasts 30 seconds. Battle suit provides full protection against explosion radius damage, slime, and lava damage. It gives partial protection against falling, and direct rocket hits.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
count: time in seconds that power-up will last when picked up (default 30).

item_flight
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Flight power-up. Lasts 60 seconds. Will not appear in single player games. Bots do not understand its use.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
count: time in seconds power-up will last when picked up (default 60).

item_haste
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Speed power-up. Makes player run at double speed for 30 seconds.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
count: time in seconds power-up will last when picked up (default 30).

item_health
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Yellow cross bubble - 25 Health. Cannot be picked up over 100 health.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
count: sets the amount of health points given to the player when item is picked up (default 25).

item_health_large
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Gold cross bubble - 50 Health. Cannot be picked up over 100 health.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
count: sets the amount of health points given to the player when item is picked up (default 50).

item_health_mega
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Blue M bubble - 100 Health. Adds 100 health points to current health up to a maximum of 200.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 40, -1 = never respawn).
count: sets the amount of health points given to the player when item is picked up (default 100).

item_health_small

Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Green cross bubble - 5 Health. Can be picked up to give over 100 health but slowly decays back to 100.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 35, -1 = never respawn).
count: sets the amount of health points given to the player when item is picked up (default 5).

item_invis
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Invisibility power-up. Lasts 30 seconds.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
count: time in seconds power-up will last when picked up (default 30).
team : set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).

item_quad
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Quad Damage power-up (3 times damage). Lasts 30 seconds.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
count: time in seconds power-up will last when picked up (default 30).

item_regen
Map Entity Color: blue
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Health Regeneration power-up. This will boost your current health by 5 points every second up to a maximum of 200. The boost continues for a period of 30 seconds. Aftewards, any health points over 100 slowly decay back to 100.

Custom Keys
wait: time in seconds before item respawns after being picked up (default 120, -1 = never respawn).
count: time in seconds power-up will last when picked up (default 30).

Light Entity

light
Map Entity Color: bright green (see Notes)
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Non-displayed light entity. The default condition emits white light in all directions at a value of 300. The apparent brightness of the light is modeled on "real world" physics, so the falloff in brightness willl be an inverse square of distance from the source. It can be colored. It can be targeted on an info_null entity to make a spotlight.

Keys
light: value of light intensity (default 300).
_color: weighted RGB value of light color (default white - 1 1 1).
target: point this to an target_position, info_null or info_notnull to create a spotlight effect.
radius: sets radius of light cone for spotlights (default 64) in game units. Radius measurement is made at the targeted entity. Light must target an info_null entity (info_nulls are only used by the compiler and need not be "remembered" by the game engine during play).

Check Boxes/Spawnflags
LINEAR: light falloff will be linear instead of inverse square of distance from source.

Notes

  • Linear fall off will not make much difference on low value lights. Useful on high value lights where the light travels long distances.
  • If the "Light drawing" preference is selected (under Preferences), the editor shows the light entities as diamond shaped pieces the color of the light they cast. If not, they are light yellow green cubes.

Coloring Lights
To quickly change the color of a light entity, use on of the following methods.

  1. CTRL + k: With the entity window open, select a light entity in either the map or camera window. Press CTRL + k. This brings up the windows color selector. Select a color and choose "OK". The editor automatically normalizes the light colors.
  2. Sample Texture: Select the light entity. Select a texture in either the texture window or the camera window. Hit SHIFT + middle mouse button.
  3. Manual Entry: Type in the value for the key _color as a 3 numbers between 0 and 1 (inclusive).
  4. Copy Existing: Select another light entity whose color value the user would like to duplicate. In the editor window, lef click on the key "_color". Now select the light entity to be colored. Hit ENTER.


Q3Radiant Editor Manual: Appendix B6

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Misc_* Entities

misc_model
Map Entity Color: red
Dimensions: (-16 -16 -16) (16 16 16)
Game Function: Generic, one-size-fits-all placeholder for inserting .md3 models in game. Requires compilation of map geometry to be added to level.

Keys
angle: direction in which model will be oriented.
model : path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3).*/

Notes
This is a premade mesh model, created in a program like Kinetix's 3d Studio Max. It is a static (non-animating) model. Shaders can give it the appearance of motion, but no animation. The models should be stored in a directory with the pathname: models/mapobjects. The process by which models are made is not a part of this document. Currently, models only have rotation on the Z axis.

Models do not "clip" against players or weapon hits. They are entirely non-solid. If clipping is important, The user will need to build clip brushes that are roughly the size and shape of the models.

Do not use the flip or rotate tools on models. Only use the entity facing buttons or manually change the angle value. The purple "3d crosshair" is the origin point of the model.

Make it: Right mouse press on a map window to bring up the floating entity selector. Select misc_model. A selection dialogue box will open giving access to available .md3 files. Select the one you want and it will load into the map. Now, hit "n" to open the entity window. Click on the "model" key in the key list box. Now edit the value field to remove part of the line.

Example: "c://program files/quake III arena/baseq3/models/mapobjects/storch.md3"

… should be edited to read:

"models/mapobjects/storch.md3"

misc_portal_camera
Map Entity Color: light orange
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Portal camera. This camera is used to project its view onto a portal surface in the level through the intermediary of a misc_portal_surface entity. Use the "angles" key or target a target_position or info_notnull entity to set the camera's pointing direction.

Keys
angles: this sets the pitch and yaw aiming angles of the portal camera (default 0 0). Use "roll" key to set roll angle.
target: point this to a target_position entity to set the camera's pointing direction.
targetname: a misc_portal_surface portal surface indicator must point to this.
roll: roll angle of camera. A value of 0 is upside down and 180 is the same as the player's view.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
SLOWROTATE : makes the portal camera rotate slowly along the axis of camera to target or (selected direction).
FASTROTATE : makes the portal camera rotate faster along the axis of camera to target or (selected direction)..

Notes

  • Both the setting "angles" key or "targeting a target_position" methods can be used to aim the camera. However, the target_position method is simpler. In both cases, the "roll" key must be used to set the roll angle. Generally, this is adjusted after compiling the map at least once.
  • If either the SLOWROTATE or FASTROTATE spawnflag is set, then the "roll" value is irrelevant.

misc_portal_surface
Map Entity Color: light orange
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Portal surface indicator. This will "lock on" the brush face closest to it and identify as a portal. The view displayed on the portal surface is the view of the misc_portal_camera that this entity targets. Also used for mirrors (see Notes).

Keys
target: point this to a misc_portal_camera that "sees" the view you want to display on the portal.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • The entity must be no farther than 64 units away from the portal surface to lock onto it.
  • To make a mirror, apply the common/mirror shader to the surface, place this entity near it but don't target a misc_portal_camera.
  • When used as a mirror, the mirror surface will display what the entity can "see."

misc_teleporter_dest
Map Entity Color: red
Dimensions: (-32 -32 -24) (32 32 -16)
Game Function: Teleport destination location point for trigger_teleporter entities. A "target_position" can also be used for this.

Keys
angle: direction in which player will look when teleported.
targetname: make the trigger_teleporter point to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
In most cases, this is replaced by the "target_position" entity.

Path_* Entities

path_corner
Map Entity Color: brown
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Path corner entity that define the routes that func_trains can be made to follow.

Keys
target: point to next path_corner in the path.
targetname: the train following the path or the previous path_corner in the path points to this.
speed: speed of func_train (in game units per second) while moving to the next path corner. This will override the speed value of the train.
wait: number of seconds func_train will pause on path corner before moving to next path corner (default 0 - see Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • Setting the wait key to -1 will not make the train stop on the path corner, it will simply default to 0.
  • The center of the origin brush in the func_train follows the path.

Shooter_* Entities

shooter_grenade
Map Entity Color: red-violet
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This will shoot a grenade each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.

shooter_plasma
Map Entity Color: red-violet
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This will shoot a plasma ball each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.

shooter_rocket
Map Entity Color: red-violet
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This will shoot a rocket each time it's triggered. Aiming is done by setting the "angles" key or by targeting an info_notnull or target_position entity.

Keys
angles: this sets the pitch and yaw aiming angles of shooter (default 0 0). The roll angle does not apply.
targetname: activating trigger points to this.
target: this points to a target_position entity for aiming the grenades.
random: random aiming variance in degrees from the straight line to the targeted entity (default 0 - see Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • When the random key is set, its value is used to calculate a maximum angle deviation from the normal trajectory formed by a straight line between the shooter and the aiming entity it targets. The final trajectory will be a random value anywhere between no deviation at all (0) to maximum deviation (value of the random key).
  • Both the setting "angles" key or "targeting a target_position" methods can be used to aim the shooter. However, the target_position method is simpler.*/


Q3Radiant Editor Manual: Appendix B7

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Target_* Entities

target_delay
Map Entity Color: aqua
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: The target_delay trigger is an intermediary time delay trigger. Like a target_relay (see below), this can only be fired by other triggers which will, in turn, cause it to fire its own targets

Keys
targetname: activating trigger points to this.
target: this points to entities to activate when this entity is triggered.
wait: delay in seconds from when this gets triggered to when it fires its own targets (default approx. 1).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).

target_give
Map Entity Color: red
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This is used to give ammo, weapons, health or items to the player who activates it.

Keys
target: this points to the item(s) to give when activated.
targetname: activating trigger or spawn entity points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • There are 2 ways to use this entity.
    1. To automatically give items to players when they spawn in the game: make a spawn location entity like info_player_deathmatch or CTF respawn points target this entity, then make it target the item(s) to give to the player upon respawn.
    2. To give items to players during the game: make a trigger_multiple target this entity, then make it target the item(s) to give to the player when the trigger is touched. This is how the column of health and armor in Q3DM10 works.
  • Items targeted to be given are not seen in the map.

target_kill
Map Entity Color: gray
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This will kill the player who activates the trigger that fires this target.

Keys
targetname: the activating trigger points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).*/

target_laser

Map Entity Color: red
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Generates a red laser beam. I think this can somehow spawn in the game, I saw it once but it's too inconsistent to be usable. Commented out.

Keys
angles: alternate "pitch, yaw, roll" angles method of aiming laser (default 0 0 0).
target: point this to a target_position entity to set the laser's aiming direction.
targetname: the activating trigger points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
START_ON: when set, the laser will start on in the game.

Notes
Since none of the game maps in Quake III Arena used this function, it is not likely to be a functioning entity.

target_location
Map Entity Color: Dark Green
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Location marker used by bots and players for team orders and team chat in the course of Teamplay games. The closest target_location in sight is used for the location. If none is in sight, the closest in distance is used.

Keys
Message: name of the location (text string). Displayed in parentheses in front of all team chat and order messages. Shorter is better.
count: color of the location text displayed in parentheses during team chat. Set to 0-7 for color.

    0 : white (default)
    1 : red
    2 : green
    3 : yellow
    4 : blue
    5 : cyan
    6 : magenta
    7 : white
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Design Tips: The target locations are "line-of-sight." If a player can "see" it, and that target is the closest to the player, then that location message is displayed. Be conservative in placing location markers. Because of the way the location code is implemented, it causes a large amount of data to be transmitted regularly. It has been explained that the game serrver has to constantly keep track of, and update to the clients, a data table equal to all the location markers multiplied by all the players. Not only that, but it must calculate line of sight from players to location markers and calculate the distance from the location marker.
Place the target locations in such a way that the entity can be "seen" from most, if not all, the positions that a player can stand in when it is inside that area. Fewer are better, even if it means that occasionally, a team mate is in an unknown location.

target_position
Map Entity Color: Dark Green
Dimensions: (-4 -4 -4) (4 4 4)
Game Function: This is an aiming target for entities like light, misc_portal_camera, and trigger_push (jump pads and launch pads) in particular.

Keys
Targetname: the entity that requires an aiming direction points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
Use this as the target for any entity that must be actively targeted during the game (do not use it as a target for spotlights).
See Tips, Tricks and Tutorials for the method used to make jump pads.

target_print

Map Entity Color: dark green
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This will print a message on the center of the screen when triggered. By default, all the clients will see the message.

Keys
message: text string to print on screen.
targetname: the activating trigger points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
REDTEAM : only the red team players will see the message.
BLUETEAM : only the blue team players will see the message.
PRIVATE : only the player that activates the target will see the message.

target_push
Map Entity Color: gray
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This is not recommended for creating jump pads and launch ramps. The direction of push can be set by the "angles" key or pointing to a target_position or info_notnull entity. Unlike trigger_push, this is NOT client side predicted and must be activated by a trigger.

Keys
angles: this sets the pitch and yaw aiming angles of push entity (default 0 0). The roll angle does not apply.
speed: speed of push (default 1000 game units per second). Has no effect if entity targets an aiming entity.
targetname: the activating trigger points to this. Push originates from the location of the trigger.
target: this points to the aiming entity to which the player will jump.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
BOUNCEPAD : if set, trigger will play bounce noise instead of beep noise when activated (see notes).

Notes

  • The player will first move from the trigger to the target_push and then on towards the target_position.
  • To make a jump pad or launch ramp, create a trigger_multiple where the jump must originate. Place the target_push directly above the trigger_multiple and place the target_position entity at the highest point of the jump. Target the trigger_multiple to the target_push and target the target_push to the target_position/info_notnull (or set the target_push's "angles" key).
  • Note that the "angle" key also works.
  • A target_push can be used to make a wind tunnel push effect (as opposed to the jump pad effect of a trigger_push). It pushes the activator in the direction of the angle value or towards its apex, a targeted target_position entity.
  • The default speed is 1000.
  • If bouncepad is checked, it will play the bouncepad sound instead of windfly.

Design Tip:
There is a way to make the target push play proper sounds. Just create a sound\movers\plats folder under baseq3 and put a sounds windfly.wav in it. It can be the sound from the Q2 or your own custom looping if you're up to it.

target_relay
Map Entity Color: aqua
Map Entity Color: (-8 -8 -8) (8 8 8)
Game Function: This can only be activated by other triggers, which will, in turn, cause it to activate its own targets.

Keys
targetname: activating trigger points to this.
target: this points to entities to activate when this entity is triggered.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
RED_ONLY : only red team players can activate trigger.
BLUE_ONLY : only red team players can activate trigger.
RANDOM: one of the targeted entities will be triggered at random.

Notes
Use this when you need to split off targeting functions along separate paths.

target_remove_powerups

Map Entity Color: blue
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This takes away all item_* type powerups from player except health and armor (holdable_* items are not taken away either). This must be activated by a button or trigger_multiple entity. The player that activates the trigger will lose any powerup(s) currently in his possession.

Keys
targetname: activating trigger points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).*/

target_score
Map Entity Color: bright green
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: This is used to automatically give frag points to the player who activates this. A spawn location entity like info_player_* or CTF respawn points can target this entity to give points to the player when he spawns in the game. Or a trigger can also be used to activate this. The activator of the trigger will get the points.

Keys
targetname: activating entity points to this.
count: number of frag points to give to player (default 1).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).*/

target_speaker

Map Entity Color: bright green
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Sound generating entity that plays .wav files. Normal non-looping sounds play each time the target_speaker is triggered. Looping sounds can be set to play by themselves (no activating trigger) or be toggled on/off by a trigger.

Keys
noise: path/name of .wav file to play (eg. sound/world/growl1.wav - see Notes).
wait: delay in seconds between each time the sound is played ("random" key must be set - see Notes).
Random: random time variance in seconds added or subtracted from "wait" delay ("wait" key must be set - see Notes).
targetname: the activating button or trigger points to this.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
LOOPED_ON: sound will loop and initially start on in level (will toggle on/off when triggered).
LOOPED_OFF: sound will loop and initially start off in level (will toggle on/off when triggered).
GLOBAL: sound will play full volume throughout the level.
ACTIVATOR: sound will play only for the player that activated the target.

Notes

  • The path portion value of the "noise" key can be replaced by the implicit folder character "*" for triggered sounds that belong to a particular player model. For example, if you want to create a "bottomless pit" in which the player screams and dies when he falls into, you would place a trigger_multiple over the floor of the pit and target a target_speaker with it. Then, you would set the "noise" key to "*falling1.wav". The * character means the current player model's sound folder. So if your current player model is Visor, * = sound/player/visor, if your current player model is Sarge, * = sound/player/sarge, etc. This cool feature provides an excellent way to create "player-specific" triggered sounds in your levels.
  • The combination of the "wait" and "random" keys can be used to play non-looping sounds without requiring an activating trigger but both keys must be used together. The value of the "random" key is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).

target_teleporter
Map Entity Color: red
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Activating this will teleport players to the location of the targeted misc_teleporter_dest entity (target_position can also be used). Unlike trigger_teleport, this entity must be activated by a trigger and does NOT allow client prediction of events.

Keys
targetname: activating trigger points to this.
target: this must point to a misc_teleporter_dest entity.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
When you give multiple targets the same target name, the teleporter will randomly select from one each time it is used.


Q3Radiant Editor Manual: Appendix B8

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Team_* Entities

These entities only function when a team style game is being played. Most are for Capture the Flag. They do not need to be marked with notfree, since that is part of their nature.

team_CTF_blueflag
Map Entity Color: blue
Dimensions: (-16 -16 -24) (16 16 32)
Game Function: Blue team flag for CTF games.

Notes
This cannot be suspended (or the bots won't find it). It must be reachable by players of both teams, since it is where a player must return an opponent's flag.

team_CTF_blueplayer
Map Entity Color: blue
Dimensions: (-16 -16 -24) (16 16 32)
Game Function: Initial Blue team spawning position for CTF games. This is where players spawn when they join the Blue team (at the start of a game or upon entering a game in progress).

Keys
target: this can point at a target_give entity for respawn freebies.

team_CTF_bluespawn
Map Entity Color: blue
Dimensions: (-16 -16 -24) (16 16 32)
Game Function: Blue team respawning position for CTF games. This is where Blue team players respawn after they get fragged.

Keys
target: this can point at a target_give entity for respawn freebies.

team_CTF_redflag
Map Entity Color: red
Dimensions: (-16 -16 -24) (16 16 32)
Game Function: Blue team flag for CTF games.

Notes
This cannot be suspended (or the bots won't find it). It must be reachable by players of both teams, since it is where a player must return an opponent's flag.

team_CTF_redplayer
Map Entity Color: red
Dimensions: (-16 -16 -24) (16 16 32)
Game Function: Initial Red team spawning position for CTF games. This is where players spawn when they join the red team (at the start of a game or upon entering a game in progress).

Keys
target: this can point at a target_give entity for respawn freebies.

team_CTF_redspawn
Map Entity Color: red
Dimensions: (-16 -16 -24) (16 16 32)
Game Function: Red team respawning position for CTF games. This is where red team players respawn after they get fragged.

Keys
target: this can point at a target_give entity for respawn freebies.

Trigger_* Entities

trigger_always
Map Entity Color: gray
Dimensions: (-8 -8 -8) (8 8 8)
Game Function: Automatic trigger. It will fire the entities it targets as soon as it spawns in the game.

Keys
target: this points to the entity to activate.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes
For reliable internet play, make any trigger which can be passed through at least 32 game units deep.

trigger_hurt
Map Entity Color: gray
Dimensions: size of brush used
Game Function: Any player that touches this will be hurt by "dmg" points of damage once per server frame (very fast). A sizzling sound is also played while the player is being hurt.

Keys
dmg: number of points of damage inflicted to player per server frame (default 5 - integer values only).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
START_OFF: if set, the trigger will initially start off in the game.
SILENT: supresses the sizzling sound while player is being hurt.
NO_PROTECTION: player will be hurt regardless of protection (see Notes).
SLOW: changes the damage rate to once per second.

Notes

  • The invulnerability power-up (item_enviro) does not protect the player from damage caused by this entity regardless of whether the NO_PROTECTION spawnflag is set or not.
  • A trigger_hurt always starts on in the game.
  • For reliable Internet play, make any trigger which can be passed through at least 32 game units deep.

trigger_multiple
Map Entity Color: gray
Dimensions: size of brush used
Game Function: Variable size repeatable trigger. It will fire the entities it targets when touched by player. Can be made to operate like a trigger_once entity by setting the "wait" key to -1. It can also be activated by another trigger that targets it.

Keys
target: this points to the entity to activate.
targetname: activating trigger points to this.
wait: time in seconds until trigger becomes re-triggerable after it's been touched (default 0.2, -1 = trigger once).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).
  • For reliable Internet play, make any trigger which can be passed through at least 32 game units deep.

trigger_push
Map Entity Color: gray
Dimensions: size of brush used
Game Function: This is used to create jump pads and launch ramps. It MUST point to a target_position or info_notnull entity to work. Unlike target_push, this is client side predicted.

Keys
target: this points to the target_position to which the player will jump.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • To make a jump pad or launch ramp, place the target_position/info_notnull entity at the highest point of the jump and target it with this entity.
  • This trigger automatically makes the bouncepad sound.
  • Speed of travel is determined by the distance needed to reach the target entity. Longer = faster.
  • For reliable Internet play, make any trigger which can be passed through at least 32 game units deep.

trigger_teleport
Map Entity Color: gray
Dimensions: size of brush used
Game Function: Touching this will teleport players to the location of the targeted misc_teleporter_dest or target_position entities. This entity allows client prediction of events. It is the preferred method.

Keys
target: this must point to a misc_teleporter_dest entity or a target_position entity.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Notes

  • For reliable Internet play, make any trigger which can be passed through at least 32 game units deep.
  • When you give multiple targets the same target name, the teleporter will randomly select from one each time it is used.


Q3Radiant Editor Manual: Appendix B9

Q3Radiant Editor Manual

Appendix B: Entity Descriptions

Weapon Entities

weapon_bfg
Map Entity Color: blue
Dimensions: 32x32
Game Function: Big Freaking Gun. Default ammo load is 20.

weapon_gauntlet
Map Entity Color: blue
Dimensions: 32x32
Game Function: Melee weapon. No ammo. There is no reason to place this entity in a map.

weapon_ grapplinghook
Map Entity Color: blue
Dimensions: 32x32
Game Function: Grappling Hook. Spawns in the game and works but is unskinned. Does not use ammo.

weapon_grenadelauncher
Map Entity Color: blue
Dimensions: 32x32
Game Function: Lobs bouncing grenades. Comes with 10 grenades.

weapon_lightning
Map Entity Color: blue
Dimensions: 32x32
Game Function: Also called the "shaft" by some. Comes with 100 "shocks"

weapon_machinegun
Map Entity Color: blue
Dimensions: 32x32
Game Function: Player automatically starts with this. Comes with a default load of 100 "shots."

Design Tip: For a "Rocket Arena" type game, the designer may wish to use the target_give entity to "give" the player an ammo_bullets entity with a count of -100 to remove the machinegun from play.

weapon_plasmagun
Map Entity Color: blue
Dimensions: 32x32
Game Function: Comes with 50 shots.

weapon_railgun
Map Entity Color: blue
Dimensions: 32x32
Game Function: Comes with 10 slugs.

weapon_rocketlauncher
Map Entity Color: blue
Dimensions: 32x32
Game Function: Comes with 10 rockets.

weapon_shotgun
Map Entity Color: blue
Dimensions: 32x32
Game Function: Also called the "shaft" by some. Comes with 10 rockets.

Keys
wait: time in seconds before item respawns after being picked up (default 5, -1 = never respawn).
random: random time variance in seconds added or subtracted from "wait" delay (default 0 - see Notes).
count: sets the amount of ammo given to the player when weapon is picked up.
team: set this to team items. Teamed items will respawn randomly after team master is picked up (see Notes).
target: picking up the item will trigger the entity this points to.
targetname: a target_give entity can point to this for respawn freebies.
notfree: when set to 1, entity will not spawn in "Free for all" and "Tournament" modes.
notteam: when set to 1, entity will not spawn in "Teamplay" and "CTF" modes.
notsingle: when set to 1, entity will not spawn in Single Player mode (bot play mode).

Check Boxes/Spawnflags
SUSPENDED : item will spawn where it was placed in map and won't drop to the floor. Bots will only be attracted to suspended entities if they are reachable by way of a jump pad or launch pad (trigger_push).

Notes
The amount of time it takes for an item in the team to respawn is determined by the "wait" value of the item that was picked up previously. So if one of the items in the team has it's "wait" key set to -1 (never respawn), the random respawning cycle of the teamed items will stop after that item is picked up.

When the random key is set, its value is used to calculate a minimum and a maximum delay. The final time delay will be a random value anywhere between the minimum and maximum values: (min delay = wait - random) (max delay = wait + random).

Worldspawn Entity

Worldspawn
Only used for the world. You access the worldspawn entity by selecting any non-entity brush in your map.

Keys
message: text to print at user logon. Used for name of level.
music: path/name of looping .wav file used for level's music (eg. music/sonic5.wav). This is for a piece of music with only one part. To make a song play with both an intro and a looping portion, the following is the correct form for the music value:

    music/intro.wav music/loop.wav

ambient: Adds a constant value to overall lighting. Use not recommended. Ambient light will have a tendency to flatten out variations in light and shade.
_color: This is the normalized formula for RGB values for ambient light. A value is considered normalized when it fits in a range between 0 and 1. If you are using a tool like the Windows color picker, divide the value for each component of the RGB values by 255. The result will be a normalized value.
gravity: gravity of level (default is normal gravity: 800).


Q3Radiant Editor Manual: Appendix C

Q3Radiant Editor Manual

Appendix C: Bot Navigation Files

(Original Document Title: BSP Converter)
Version: | = 1.8
Date: | = 2000-01-11
Author: | = Mr. Elusive

Introduction

This appendix is based on documentation that has been released and updated by Mr. Elusive. It deals with the Navigation file that must be created in order for the Quake III Arena bots to be able to navigate and play in game maps. It is not a manual for the creation of bots.

Description

The BSPC tool is used to create AAS files from BSP files. An AAS file is a file with areas used by the Quake III Arena bot in order to navigate and understand a map.

Installation

Place the BSPC program in your Quake III Arena folder.

Usage

Unless you are using a front-end utility, which gives you check-button access to compiler functions, you will need to run this program from the command line of your DOS Command Prompt program. If the command line is not already pointing the Quake III Arena directory, change directories (cd\quake III arena).

The command line should be formatted as follows:

    bspc [-<switch> [-<switch> ...]]

Example 1: bspc -bsp2aas d:\quake3\baseq3\maps\mymap?.bsp
Example 2: bspc -bsp2aas d:\quake3\baseq3\pak0.pk3\maps/q3dm*.bsp

In the first example a "?" is used as a metacharacter variable to indicate any single keyboard character. This allows you to compile the latest version of a map ("mymap1" or "mymapb").

In the second example a "*" is used as a metacharacter variable to indicate any string of keyboard characters. This allows you to compile the latest version of a map ("mymap1" or "mymapb").

The bot navigation compile process can be further modified by the use of "switches" that change some of the parmeters used in compilation. Some of these can be used to compile only certain features, such as reachability. Others allow the compiler to use more than a single processor, as is the case with "threads."

Switches:
bsp2aas <[pakfilter/]filter.bsp> | = convert BSP to AAS
reach <filter.bsp> | = compute reachability & clusters
cluster <filter.aas> | = compute clusters
aasopt <filter.aas> | = optimize aas file
output <output path> | = set output path
threads <X> | = set number of threads to X
cfg <filename> | = use this cfg file
optimize | = enable optimization
noverbose | = disable verbose output
breathfirst | = breath first bsp building
nobrushmerge | = don't merge brushes
freetree | = free the bsp tree
nocsg | = disables brush chopping
forcesidesvisible | = force all sides to be visible
grapplereach | = calculate grapple reachabilities

Several metacharacters may be used in the filter and pakfilter.

* | Match any string of zero or more characters
? | Match any single character
[abc...] | Match any of the enclosed characters; a hyphen can be used to specify a range (e.g. a-z, A-Z, 0-9)

.pk3 files are accessed as if they are normal folders (whether they are compressed or not).

For instance, use "d:\quake3\baseq3\pak0.pk3\maps/q3dm1.bsp" to access the map q3dm1.bsp from the pak0.pk3 file.

Multiple files may be listed after the switches bsp2map, bsp2aas, reach, cluster and aasopt.

If a BSP file is being converted to an AAS file and no output path is entered on the command line then the AAS file will automatically be stored in the same folder as the BSP file. However if the BSP file was stored in a .pk3 file then the AAS file will be stored in a folder with the name 'maps' outside the .pk3 file.

Updating the Entity Lump

If an AAS file is already available for a BSP file and you ONLY change the entities inside this BSP file then you only have to recalculate the reachabilities. This way you can move items, platforms etc. around without the need to recalculate the whole AAS file -- which can save quite some compile time. You can recalculate the reachabilities as follows:
    bspc -reach mymap.bsp

Where mymap.bsp is the BSP file. The mymap.aas file has to be in the same folder as mymap.bsp or should be in the output folder specified with the -output option.

Keep in mind that as soon as ANY geometry in the map changes (including b_models and trigger brushes) the whole AAS file HAS to be recalculated in order to play with bots.

Leaks

Just like there can be vis "leaks" in a map there can also be clipping leaks. Two things can be wrong when the BSPC tool outputs that a map leaks.
  1. There are no entities in the map at all, or all entities that are actually in the map are placed in solid locations (see Test Solid below). In this case the BSPC tool outputs: "WARNING: no entities inside." The map must contain at least one player start entity to load in the game.
  2. There is a spot in the map where players can go outside the map into the void. This is bad, players should never be able to fall out of a level. In this case the BSPC tool outputs: "WARNING: entity reached from outside." The BSPC tool also writes a mymap.lin file that can be loaded in the Q3Radiant editor to show lines that go through the actual leak.

Make sure the .lin file is stored in the same folder as where q3radiant stores the .bsp file. Load the map in q3radiant and use the menu > File > Pointfile... to load the .lin file. A thick red line will be shown in the map. Follow this line to find the leak.

Useful Map Information

The following information is given as a reference for bot capabilities. The area file information is used by bots. It tells them when and where they can make jumps. Human players don't have this information readily available to them, so you may want to be more forgiving when designing tricky jumps.

Map Boundaries
Currently all the contained area of a Quake III Arena map should fall within the bounds (8192, 8192, 8192) - (-8192, -8192, -8192) for the bspc tool to compile. These are the same bounds as the Q3Map compilers.

Game Physics
Player Dimensions
Model size: The player model's actual size is a bounding box 30 units by 30 units square with a height of 56 units. In the game world, eight units roughly equal one foot (30.5 cm). From this, we deduce that the characters are a heroic 7 feet tall (2.13 meters).

Step Heights
For scale purposes, "normal" steps should be no higher than 8 units. However, the maximum value that a player may step up is 18 units (just keep steps 16 units or lower).

Normal Jumps
The maximum height for barriers the bots will jump on is 32 units.

Water Jump Heights (or "Everyone, out of the pool!")
The maximum distance that a bot may jump to exit water is 18 units. This is the height difference between the water surface and the adjacent floor that the bot is jumping onto. If the water jump height is made higher, human players will have a hard time getting out of the water.

Rocket Jumps
With normal gravity and without the quad, the maximum rocket jump height is around 280 units (you can sometimes jump a few units higher but this is a safe value for reference). In practice, except for especially tricky jumps, this value should be substantially lower. Test rocket jumps repeatedly before settling on a final height.

Math for Map Makers
Here's some math to calculate some other values of interest:

Gravity = 800;
Jump velocity = 270;
Max vertical rocketjump velocity = 670;
Max run velocity = 320;
Max step height = 18;
Max jump height = 0.5 * gravity * (jumpvelocity/gravity)*(jumpvelocity/gravity);
Max normal jump height = 45 units
NOTE: even though this is the mathematical maximum jump height always keep the the 32 units maximum barrier height for bots in mind when building maps.
Maximum horizontal jump distance over a gap from one spot to another when both are at the same height:

    t = sqrt((maxjumpheight + maxstep) / (0.5 * gravity));
    t = 0.3986 seconds;
    dist = maxrunvelocity * (t + jumpvelocity / gravity);
    dist = 235 units;

Because players use a bounding box we can jump a full bounding box width further in the ideal case. (15 units at the jump starting position and 15 at the landing place).

    235 + 15 + 15 = 265 units.

Again, remember that this is the mathematical maximum which players can only reach under ideal circumstances.

Optimizing a Map for bspc Compiling

The area file is the tool that the bots use to understand the map. If it is overly complex, it can cause navigation problems. With careful attention to detail, many of these problems can be eliminated, or avoided altogether.

First, understand that hint brushes, which are of great use to the bsp compiler, have no effect on the bspc tool that creates area files. Only solid, clip and liquid brushes and curve patches are used by the bspc tool. Using these mapcomponents, the bspc tool outputs how many "areas" will be created for a map. Having fewer areas in a map is better than having more.

Quite often, map trim and detail create many of these small areas. For the most part, these small areas are too small to enter and are thus useless to the bots. Brushes that project out into the map's floor cut it up and create additional areas. Often the number of areas can be greatly reduced by adding additional clip brushes. Take a look at Q3DM7 in the map editor, and you will see the walls are literally covered with clip brushes. This not only smooths out passage for human players, but also has the added benefit of eliminating unnecesary navigation areas. This is also why, as many "camping style" players have found, many areas above door and window trim have also been clipped off.

Another way to reduce complexity is to use clip brushes to simplify the collision area around complex objects. For exmple, the map maker can add clip brushes with simple shapes (axial or "square" brushes are prefered) around (small) detail brushes. Simple shaped clip brushes can also be added around curves to reduce the collision complexity (for instance, place an axial clip brush around a small cylinder). It is better to place the clip brushes around the whole curve (not just part of the curve). The map maker should also use shader scripts to make the textures on brushes or curve patches non-solid (surfaceparm nonsolid) when they are enclosed by (full) clip brushes. This will also speed up bspc calculations.

Always try to align your geometry to the grids. Always use the largest grid possible for alignment of your geometry. Also try to align the backsides of brushes which may not be visible. The more brush sides are aligned the better. This will also speed up bspc calculations.

Align adjacent brushes as much as possible. Make sure that badly aligned brushes create no tiny faces.

Quite often there are also places in a map that are visible to players but where players can never go (even determined, rocket-jumping players). If a player could reach that area, they would be able to walk around upon it. If the mapmaker decides not to allow that, he or she should use large clip brushes to enclose the entire unreachable space. This will also speed up bspc calculations and reduce the number of areas created by the bspc tool.

Note: the number of areas relative to the map size tells something about the navigation complexity for players in general (also human players). Reducing the collision complexity for bots also makes the map easier to navigate for human players

Entities & the Navigation File

There are specific rules and guidelines for using a number of entities and entity-like textures with the bspc tool.

Func_plat and Func_bobbing
When func_plat or func_bobbing entities are placed in a map, the bots will use them if possible. The bots assume they can stand on top of the bounding box (xy extents of all components used to create the entity) of the model used for the func_plat or func_bobbing entity. As a result, creating complex-shaped func_plat or func_bobbing models is mostly a bad idea. You have to make sure the bots (and players) can actually stand everywhere on top of the bounding box of the model. The basic rule: If a bot is going to use a func_plat or a func_bobbing, make sure the top surface is a solid, rectilinear rectangle or square.

Cluster Portals
Cluster portals are one of the several "texture entities" used by the game engine. These are textures, which as used by the game engine, function like entities. The bspc tool divides the map into many, much smaller areas, which are essentially the surfaces a bot can move upon during play. Several of these areas can be grouped together to create a cluster. The clusters are seperated by cluster portals, which are also areas themselves. One of the things the bot uses these clusters for is to create a multi-level routing algorithm. When a map is efficiently divided up into clusters bot calculations (in run time) will be faster.

Guidelines to Consider When Placing Cluster Portals:

  • The BSPC tool creates cluster portals automatically, but placing "clusterportal" brushes can create additional cluster portals.
  • Placing "clusterportal" brushes inside the map manually creates cluster portals.
  • The "clusterportal" brushes should not be used outside the world hull.
  • The cluster portals do not have any effect on map vis.
  • If a door is already sealed with an areaportal brush, a clusterportal is not necessary there. (areaportals are used by the bspc tool as if they were cluster portals).
  • Just like the areaportals, the cluster portals must seal a space off entirely from other areas.
  • The cluster portal areas should seal off a cluster in a way that the only path towards another cluster is through a cluster portal area.
  • Only create cluster portals where people can walk or swim through.
  • Don't create cluster portals in gaps in the floor. (people would fall through)
  • Cluster portals must separate no more and no less than two (2) clusters.
  • Try to create clusters with all the same number of "reachability" areas. For instance if the map has 5,400 areas try to create 10 clusters with 540 areas each, or 12 clusters with 450 areas each, etc. The BSPC tool lists the number of reachability areas in each cluster.
  • Avoid creating clusters with only a few (less than 10) areas.
  • When adding "cluster portal" brushes, try to place them in places with minimal geometric complexity. For instance place them inside convex door openings or small hallways (not in front of door openings). Ideally, the shape of the face through which a player walks or swims into the cluster portal is the same as the shape of the face through which a player leaves the cluster portal. Also ideally, the open space inside the cluster portal brush is convex.
  • Make cluster portals about 16 or 32 units thick.

"Do Not Enter" Areas
The Do Not Enter texture is another one of the "texture entities" that the game engine uses as if they were entities. In some regards, it is like a clip brush, intended to prevent a bot from moving into or through it. However, this works more as a "strong suggestion" and is, in reality, not a physical barrier to the bot. A simple example of how a bot may enter a "Do Not Enter" area is knockback. If an explosion tosses a bot about, it may end up inside a prohibited area. Bots may pass out of such areas, but they will not actively try to enter them.

When bot navigation problems show up or you want to make sure a bot never tries to go to a certain place use a "do not enter" brush.

Guidelines to consider when placing "Do Not Enter" brushes:

  • The "do not enter" brushes should not be used outside the world hull.
  • The "do not enter" brush is Not a clip brush for the bot.
  • The "do not enter" brush is a tool of last resort. Do not use it unless there are serious navigation problems.
  • The number of "do not enter" brushes should be minimized because these brushes create additional areas for the bots.
  • The "do not enter" brush will create a new area that the bot will try to avoid. However if the bot somehow ends up inside a "do not enter" area or there is a valid goal (game entity or item_botroam entity) inside the "do not enter" area then the bot is allowed to go into and out of that area. So if the bot somehow gets in a "do not enter" area the bot will be able to get out.

Bot Control Entities
These entities encourage a bot to move about and use more parts of the map.

Item_botroam
The item_botroam entity can be used when a bot does not roam the whole level or prefers to go to only specific areas. This (invisible) item can be placed in a map just like regular items. Nobody can actually pick up the item. It's only used to attract bots to certain places of the map.

The item_botroam has a key "origin" that is set by Q3Radiant automatically.

The item_botroam also has a key "weight." The value is the weight of the roam item and is relative to the weight of other items in the map, which are individual to each bot. The bot character-specific item weights are stored with the bot characters in the botfiles/bots/ sub-folder in the .pk3 file. The value of the weight is a non-zero floating-point value, most often in the range 0 to 400. Higher values are allowed but keep in mind that the bot should also still go for normal items, so don't make the item_botroam weight too high.

"Notbot" Means "Don't Touch"
When a bot should never go for a specific item, the key "notbot" with a value of "1" can be used for that item. This notbot key and its value can be used for every available item in Quake III Arena.

Info_Camp
This entity suggests locations where the bot can wait for enemies to come into view.

Suspended
The suspended checkbox flag can be used on all items (item_botroam included). However keep in mind that when a suspended item is not anywhere near the ground the bot will ONLY try to go for this suspended item using jump pads.

Testing .AAS files

Solid Areas
A solid area in the map is an area that looks empty to the human player, but is solid, like a wall, to a bot player. One of the easiest ways to test the AAS file for solid areas is to load the map in Quake III Arena in teamplay mode (type /set g_gametype 3 on the console before loading the map). Enter a team and add a bot to your team. Use the team order menu (by default bound to the F3 key) to command the bot to follow you. Walk around the map and see if the bot is able to follow you everywhere. If a bot stops at any point, it may have encountered an area of the map that appears to be unblocked to you, but to the bot, it is like it has encountered a solid wall.

Test Solid
In most cases, solid areas are the result of careless design. But, if you insist on making maps that are not axial in layout (say, your average cave), they can result from brushes meeting at non-axial angles. These "map bugs" can sometimes cause certain places in the map to show up solid in the AAS file. To test for these solid places set the cvar bot_testsolid to "1" on the console. (type /set bot_testsolid 1)

As you walk through the map, either "empty area" or "SOLID area" will be printed on the screen while traveling through a map.

The Culprits: What May Cause Map Bugs
Several map bugs can cause these solid places in the AAS file.

  • Sometimes microscopic brushes are created by CSG subtraction on one or more brushes. Search for such brushes in the problem area and delete them.
  • Tiny brush faces (not curves) can also cause problems. Due to vertex snapping in the q3map tool, those tiny brush faces can be snapped out of existence. Such faces will not show up in Quake III Arena and you'll see tiny peek holes or slits where you can view through the geometry (often into other rooms). Align vertexes of adjacent brushes to remove and avoid such tiny faces. Placing a clip brush in front of the face that is snapped out of existence will also remove the "solid area" but of course it's preferred to remove the peek hole or slit. Another cause could be a brush with a collapsed side. Check how many sides a brush has and how many sides actually have a surface. Rebuild brushes with collapsed sides.
  • Lava creates a solid area. All faces contained within liquid brushes using a shader without "surfaceparm trans" set will be removed (this includes some lava textures). Those contained surfaces will not be visible and can cause the liquid to appear "solid" in the aas file.

Hacking Away the Problem
If you insist creating an .AAS file for a map with bugs, then the BSPC compile option -forcesidesvisible can be used. This should fix all the problems with areas showing up solid in the .AAS file. However creating an .AAS file with this option takes a lot longer (often more than twice the normal compile time). This is not recommended as a default option for compiling.

Testing Jump and Launch Pads
Jumppads can also be tested. Type the following on the Quake III Arena console, before loading your map:

/set bot_maxdebugpolys 1024
/set bot_visualizejumppads 1
/set bot_forcereachability 1

Now load the map. A counter will be shown and goes from 0% to 100%. When the counter has reached 100% type /set r_debugSurface 2 on the console. For every jumppad the default arc of travel (without using air control) will be visualized.

Version Changes

1.8 (2000-01-08)
- increased max points on winding
- made "HashVec: point x y z outside valid range" non-fatal
- fixed rocket jump reachabilities
- added force sides visible option
- increased simulated stack size for area traces

1.7 (1999-12-22)
- fixed ducked bounding box size
- fixed sv_maxsteepness being zero in aas configuration
- AAS files are now automatically stored in BSP file folder
- fixed crash bug caused by overflow of a simulated stack


Q3Radiant Editor Manual: Appendix D

Q3Radiant Editor Manual

Appendix D: Tricks, Tips, and Tutorials

Making the death fall sound…

The death yell that occurs when a player or bot falls into the void or fog of death is triggered by the falling character passing through a trigger multiple (should be no less than 32 units thick) that is targeted on a target_speaker. If you look at q3DM17 and find a target speaker, you will see that it plays the falling to death sound of the player who activates the trigger. Put that sound in your own target_speaker.

Making a Mirror …

Apply a mirror texture to brush (it will only work on brushes, not curve patches). Next, place a misc_portal_surface entity within 64 units of the mirror and at roughly eye level for the character. Because a mirror shows all that it can "see" the mapmaker needs to take special care that his mirror doesn't see so much of the map that it affects game performance.
    Rules: A mirror should not be able to see another mirror or portal surface. This means no mirror mazes or mirror facing each other to produce infinite reflections.

Making a Jump Pad

  1. Make the brush that contains your pulsing pad texture. It can be set in the floor or raised up on separate brush.
  2. Make a trigger_push brush entity that is smaller than the pad (the id triggers are usually octagonal).
  3. Create a target_position entity and move it to the height and location you want. The target position is both the aiming point for the trigger_push and the highest point (apex) of the assisted jump.
  4. Hi-light the trigger first, then the target_position (order is important).
  5. Press CTRL + k to connect the two entities (pointing the first at the second).
  6. Compile and test it. The first compile needs to be a full or fast vis. If you need to make adjustments to the target_position, you only need to use an entities compile.

Lining Up the Pad Texture
The combination of shader keys that make the jump pad pulsing texture work can be tricky to line up. Try the following methods if your own attempts bring no joy.
  1. Make the brush that will be your pad (128x128 units).
  2. Apply the pad texture. If it doesn't line up, turn off the lock texture feature and move the pad until it lines up perfectly.
  3. Lock the texture and move the brush into position.

If that doesn't work:

  1. Build your brush in place.
  2. Apply the pad texture so that several corners of the pad circle are visible.
  3. Compile a regioned area with the jump pad in it.
  4. At least one of the pad circles should have a pulsing circle in it.
  5. Back in the editor, slide the pad circle with the active pulse so it fills the pad.
  6. Recompile. It should work now.

Making a Launch Pad

Target the trigger_push that you put above the pad at a target_position. The player will accelerate until he reaches the target. Physics does the rest.

Note: The center point of the target must be higher than the center point of the trigger_push.

Making a "Rocket Arena" style map

  1. Create all the entities you want the player to spawn with when he enters the arena, and make sure they are somewhere within the enclosed space of the map.
  2. Add a "target_give" entity somewhere in the world.
  3. Create all the spawn spots you want to be in your map.
  4. Select the "target_give" entity.
  5. Select one of the "give on spawn in" entities.
  6. Hit Ctrl-K in the editor to link the two items together.
  7. Repeat steps 4 through 6 until the target_give is linked to all the entities you wish the player to spawn into the world with.
  8. Select a spawn spot
  9. Select the target_give entity
  10. Hit Ctrl-K in the editor to link the two entities together.
  11. Repeat steps 8 through 10 until all the spawn spots are linked to the target_give entity.
  12. Compile the map
  13. Set g_gametype to tournament mode and set fraglimit of 1.
  14. Get a bunch of your friends to connect into your server and have fun playing a "Rocket Arena" style game =)

An alternate use of target_give is how I used it in q3dm10 to create the "power tube" that gives you health and armour. The tube has a trigger_multiple with a wait of 0.5, linked to a target_give which is linked to a small health and an armour shard.

Making an Environment Box …

This is the shader script taken from the sky.shader that I used to make a test sky box months and months ago.

In baseq3, make an 'env' folder.

Put your skybox art in here and use this naming convention:

[skyname]_lf.tga
[skyname]_rt.tga
[skyname]_ft.tga
[skyname]_bk.tga
[skyname]_up.tga
[skyname]_dn.tga

  • Make a directory in your quake3 folder with the following path:
      quake3/baseq3/textures/[mymapname]
  • Make a directory in your quake3 folder with the following path:
      quake3/baseq3/scripts
  • Make a script document called [mymapname].shader
  • Make a script document called shaderlist.txt

In shaderlist.txt put [mymapname] on the first line and close the document.

//*******************************************************
//*	    Sample environment box shader
//*******************************************************

textures/[mymapname]/[skyname]01

{
    qer_editorimage textures/[mymapname]/[skyname]

    surfaceparm noimpact
    surfaceparm nolightmap
    surfaceparm sky
    q3map_sun 0.933333 0.541176 03.13725 60 160 11
    q3map_surfacelight 100 //lots of diffuse light
    skyparms - 512 -
    sky env/[skyname]

// the following stuff lays clouds over the skybox map which you may not want with a city skyline
    //{
    // map textures/skies/dimclouds.tga
    //
    // tcMod turb 0 0.001 0.5 0.001
    // tcMod scale 3 3
    // tcMod scroll 0.01 0.01
    // blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR
    // depthWrite
    //}
    //{
    // map textures/skies/pjbasesky.tga
    // blendfunc GL_ONE GL_ONE
    // tcMod scroll -0.01 -0.01
    // tcMod scale 5 5
    //}
//}

Making a Shooter

The shooters; shooter_rocket, shooter_grenade, and shooter_plasma all fire a single projectile when they are triggered by an event.
  • Make a shooter entity (rocket, grenade or plasma)
  • Give it a facing (1 to 360 degrees), or,
  • Target it at a target_position.
  • Give it a random value (potential degrees off target)
  • Create an Activator. Make a trigger multiple or target an entity at the shooter. When the trigger is entered or the entity is taken, the, shooter is activated.
  • If you want a shooter to fire multiple times, target the activator on two or more target_delays. Set the delay time to a different value for each (if using a trigger multiple, the WAIT value on the trigger should be greater than the longest delay on the target_delay). Target each target_delay on the shooter.


Q3Radiant Editor Manual: Appendix D

Q3Radiant Editor Manual

Appendix E: Online Resources

The Internet is an excellent source for information about Quake engine editing. The sites listed here provide a variety of useful editing resources.

Disclaimer: Most of these sites are established, heavily trafficked web pages with a history of stability. But, because these sites are not maintained by id Software, we make no claims that they will be there when you go looking for them or that they will still have the information of the type you are seeking.

News about the Editor

QeRadiant.Com
Qeradiant.com is the official site for the id editing tool that was the predecessor of Q3Radiant.
http://www.qeradiant.com/

Quake3World.com
http://www.quake3world.com/

Looking for a heavily trafficked message board where questions often get answered by the id designers? Look no further than the community section of Mplayer's Quake3World.com.

Editing Tutorials

These tutorials are located at several sites that have been around for a while, and may continue to be around.

Astrocreep's Map Diary
http://www.organicfusion.com/astrocrp/
Astrocreep has made a presence helping others on Quake3World's editing forum. In addition to letting you see his own design progress, his site is worth the visit just for the quick links to valuable editing resource sites.

Claudec's Lair of Shaders
http://www.claudec.com/lair_of_shaders/
Numerous tutorials on editing subjects.

QeRadiant.Com
http://www.qeradiant.com/
Qeradiant.com is the official site for the predecessor of Q3Radiant. You'll find useful information and links here to other editing sites.

Q3Workshop
http://qw3.stomped.com/
Some more good Quake 3 Arena specific design tutorials.

RiceBug.Com
http://ricebug.qeradiant.com/
Some good tutorials on Q3Radiant and QeRadiant (the Quake 2 editor). Don't ignore the the Quake 2 editing tutorials because many of the editor features are the same.

Rungy's Metropolis
http://quake3mods.net/rungy/
http://www.quake3mods.net/rungy/lorimar/contents.html
Rungy has a bit of everything. Highly recommended!

RUST - Game Design.net
http://www.gamedesign.net/
RUST has been a prime source for Quake engine editing for some time.

Editing Tools

GenSurf
http://tarot.telefragged.com/gensurf/index.shtml
GenSurf is a "natural" terrain creation tool that converts a grayscale bitmap into a web of triangular brushes or curve patches. Used with care, it can make some very interesting irregular surfaces.

Milkshape 3D
http://www.swissquake.ch/chumbalum-soft/home.html
This is a shareware editor for 3D models. Support for Quake III Arena's native md3 format is forthcoming.

Quake 3 Arena Shader Editor

http://www.larian.com/rat/q3ase.html
This is a tool for editing shaders. It allows you to construct the shader in realtime, seeing what works you build it.

Prefab Sources

Gamedesign.net Prefabs
http://prefabs.gamedesign.net/game.php3?game_id=13&num=0
This Rust's source for prefabricated map plug-ins. These here are in the form of .map files instead of Quake III Arena's native .pfb format.

Rungy's Metropolis
http://quake3mods.net/rungy/
Rungy has a bit of everything. Highly recommended!

Quake Prefab Park 2
http://www.planetquake.com/qpp/qpp2/
These are prefabs designed for use with Quake and Quake 2, which means the ones with movement or action gimmicks most likely will not work. And of course, you'll need to retexture anything you find here if it's not a Quake III Arena prefab.

Texture Sources

The following sites include shader documents, downloadable textures, tutorials or links to tutorials on making your own.

Alex d.g.
http://www.alexdg.com/tips.php3
This guy's web page is a great source for Adobe PhotoShop tutorials, including one on working with channels.

Freetextures.com
http://www.freetextures.com/
This site isn't as active as it once was (it keeps promising to return), but it has a lot of high quality texture source material in it. Use is free, but they do require written acknowledgement in your projects.

Graphitallica
http://graphtallica.ingava.com/
The folks at Graphitallica are creating paks of textures for use by game mod makers.

Mean Arena
http://www.planetquake.com/meanarena/Q3_textures.html
This site had a large (100+)-texture pak in the works, but not released yet.

Quake III Arena Shader Manual
http://www.planetquake.com/polycount/resources/quake3/tutorials.shtml
http://www.quake3world.com/files/Q3Ashader_manual.doc
This is the official id documentation of Quake III Arena shaders. The second source is a download.

Rungy's Metropolis
http://quake3mods.net/rungy/
Rungy has a bit of everything. Highly recommended!

Texture Forest
http://www.planetunreal.com/forest/main1.html
It is possible to learn some tricks from artists who work for that "other" game engine.

Map Object Model Sources

Polycount
http://www.planetquake.com/polycount/resources/quake3/index.shtml
This link takes you to the resource page for Quake III Arena modeling.

Rungy's Metropolis
http://quake3mods.net/rungy/
Rungy has a bit of everything. Highly recommended!
Milkshape 3D Modeling Tutorial
http://www.quake3mods.net/rungy/lorimar/contents.html
This is a tutorial on making map object models with Milkshape 3D

Sounds

None found.

Frequently Asked Questions (FAQ)

Developer's FAQ (Quake3mods)
http://www.q3seek.com/edit.php3
This site answers a lot of questions about map making, model making, texturing and skinning. Mod makers appear to have submitted much of the information.

Official Quake III Arena FAQ (Quake3world.com)
http://www.quake3arena.com/faq/
This is the official FAQ, created and maintained by id Software. Most of the information pertains to general problems players encounter with Quake III Arena, and doesn't have a lot to do with map making.

RUST - Game Design.net
http://www.gamedesign.net/quake3/faq/
This development-oriented site has a Quake III Arena FAQ though at the moment it's not particularly helpful.

Map Reviews, General Information

Z-Axis
http://q3a.stomped.com/
This is a more general Quake III Arena site devoted to map reviews, mod development.


Q3Radiant Editor Manual: Appendix F

Q3Radiant Editor Manual

Appendix F: Default Key Shortcuts

On the odd chance that you (like the author of this manual) might seriously mess up your default key bindings when making an .ini file, here are the default assignments to correct your mistake. Copy these below the [commands] line of your .ini file.

HideSelected			H
ShowHidden			Shift + H
BendMode			B
FitFace				Control + B
FitBrush			Shift + B
FreezePatchVertices		F
UnFreezePatchVertices		Control + F
UnFreezeAllPatchVertices	Shift + Control + F
ViewTextures			T
ThickenPatch			Control + T
MakeOverlayPatch		Y
ClearPatchOverlays		Control + Y
SurfaceInspector		S
PatchInspector			Shift + S
ToggleShowPatches		Shift + Control + P
ToggleShowPatches		Control + P
RedisperseRows			Control + E
RedisperseCols			Shift + Control + E
InvertCurveTextureX		Shift + Control + I
InvertCurveTextureY		Shift + I
InvertCurve			Control + I
IncPatchColumn			Shift + Control + PLUS
IncPatchRow			Control + PLUS
DecPatchColumn			Shift + Control + SUBTRACT
DecPatchRow			Control + SUBTRACT
Patch TAB			TAB
Patch TAB			Shift + TAB
SelectNudgeDown			Alt + DOWN
EntityColor			K
CameraForward			UP
CameraBack			DOWN
CameraLeft			LEFT
CameraRight			RIGHT
CameraUp			D
CameraDown			C
CameraAngleUp			A
CameraAngleDown			Z
CameraStrafeRight		PERIOD
CameraStrafeLeft		COMMA
ToggleGrid			0
SetGrid1			1
SetGrid2			2
SetGrid4			3
SetGrid8			4
SetGrid16			5
SetGrid32			6
SetGrid64			7
DragEdges			E
DragVertices			V
ViewEntityInfo			N
ViewConsole			O
CloneSelection			SPACE
DeleteSelection			BACKSPACE
UnSelectSelection		ESCAPE
CenterView			END
ZoomOut				INSERT
ZoomIn				DELETE
UpFloor				PAGEUP
DownFloor			PAGEDOWN
ToggleClipper			X
ToggleCrosshairs		Shift + X
TogTexLock			Shift + T
TogTexRotLock			Shift + R
ToggleRealtime			Control + R
EntityList			L
Preferences			P
ToggleCamera			Shift + Control + C
ToggleConsole			O
ToggleView			Shift + Control + V
ToggleZ				Shift + Control + Z
ConnectSelection		Control + K
Brush3Sided			Control + 3
Brush4Sided			Control + 4
Brush5Sided			Control + 5
Brush6Sided			Control + 6
Brush7Sided			Control + 7
Brush8Sided			Control + 8
Brush9Sided			Control + 9
ShowDetail			Control + D
MakeDetail			Shift + Control + M
MakeDetail			Control + M
MapInfo				M
NextLeakSpot			Shift + Control + K
PrevLeakSpot			Shift + Control + L
FileOpen			Control + O
FileSave			Control + S
Exit				Control + X
NextView			Control + TAB
ClipSelected			RETURN
SplitSelected			Shift + RETURN
FlipClip			Control + RETURN
MouseRotate			R
Copy				Control + C
Paste				Control + V
Undo				Control + Z
ZZoomOut			Control + INSERT
ZZoomIn				Control + DELETE
TexDecrement			Shift + SUBTRACT
TexIncrement			Shift + PLUS
TextureFit			Shift + 5
TexRotateClock			Shift + PAGEDOWN
TexRotateCounter		Shift + PAGEUP
TexScaleUp			Control + UP
TexScaleDown			Control + DOWN
TexShiftLeft			Shift + LEFT
TexShiftRight			Shift + RIGHT
TexShiftUp			Shift + UP
TexShiftDown			Shift + DOWN
GridDown			[
GridUp				]
TexScaleLeft			Control + LEFT
TexScaleRight			Control + RIGHT
CubicClipZoomOut		Control + [
CubicClipZoomIn			Control + ]
ToggleCubicClip			Control + \
MoveSelectionDOWN		SUBTRACT
MoveSelectionUP			PLUS
DumpSelectedBrush		Shift + D
ToggleSizePaint			Q
SelectNudgeLeft			Alt + LEFT
SelectNudgeRight		Alt + RIGHT
SelectNudgeUp			Alt + UP
CycleCapTexturePatch		Shift + Control + N
NaturalizePatch			Control + N
SnapPatchToGrid			Control + G
ShowAllTextures			Control + A
SelectAllOfType			Shift + A
CapCurrentCurve			Shift + C


Q3Radiant Editor Manual: New functionality in GtkRadiant

Better movement in camera window

Q3Radiant Editor Manual

Better movement in camera window

By enabling "Freelook in 3D window" in the preferences screen you can use a noclip style of movement in the camera window. Rightclick in your camera window (or shift+rightclick if you are in 2 mouse button mode) to start freelook mode. The mouse can be used to look around, up arrow is forward, down arrow is backwards, left and right are strafing. You can control the sensitivity of the camera controls in the preferences screen, directional velocity is for movement (forward/back/strafe) and angular velocity is mouse sensitivity. Also you can enable inversed mouse mode here.

Another way of moving backward and forward in the camera window is by using your mousewheel, scroll up is forward, scroll down is backwards. This works in all camera modes, classic as well as freelook.

Mod support

1.1-TA was the first version to add builting support for mod directories, bringing easy editing capabilities for Quake III: Team Arena. This has been extended to support any mod developement. Simply open the project settings dialog to set the mod directory (among several builtins, Quake III Arena, Quake III: Team Arena and custom mods).

Misc functionalities

The mousewheel has gotten another new option for the 2D windows. Scroll up is zoom in, scroll down is zoom out.

It is possible to texture faces simply by selecting a texture in the texturewindow and dragging it into the 3D (Cam) window onto the face you want to texture with it.

More GtkRadiant tips and tricks have been gathered on the qeradiant.com FAQ.

Known issues

Current known issues for GtkRadiant releases are listed in the qeradiant.com FAQ.

Back | Home | Next


Shortcut keys and Mouse functions in QeRadiant & Q3Radiant

Q3Radiant Editor Manual

Appendix G: Shortcut keys and Mouse functions
in QeRadiant/Q3Radiant

By Eutectic

1. Introduction

This is a list of all the command shortcut keys and key-mouse functions in QeRadiant and Q3Radiant. Please note that there are some commands that work in QeRadiant and not in Q3Radiant and vice versa. This is mainly because those are actually 2 different map editors for 2 very different game engines (Quake II and Quake III Arena) even though they share a common interface. But unless otherwise specified, the commands in this list work for both editors. Also note that in QeRadiant, there are some functions that work when selected from the menus but for which the shortcut key doesn't work. Whenever this is the case, this is clearly indicated with a color coded table cell.

This revised version of this list reflects all the changes and additions in Q3Radiant Build 189.

2. Shortcut key list

The commands are sorted by category and color coding was implemented in the table boxes:

  • Red background:

    This denotes shortcut keys which are listed in the Help command list but don't work.

  • Green background:

    This denotes shortcut keys or mouse functions which apply only to QeRadiant.

  • Orange background:

    This denotes shortcut keys or mouse functions which apply only to Q3Radiant.

  • Purple background:

    This denotes shortcut keys which are assigned to different features in QeRadiant and Q3Radiant.

Action | Description | Shortcut Key
2D view and Z view navigation & control keys
Toggle View | Only used in free window mode. Toggles the 2D view on/off. | CTRL+SHIFT+V
Next View | Cycles the 2D view through all 3 views (top, front, side). Not used in 4 view mode. | CTRL+TAB
Zoom In | Zooms 2D view in. | DELETE
Zoom Out | Zooms 2D view out. | INSERT
Center On Camera | Centers the 2D view on the camera's current location. | G
Toggle Z | Only used in free window mode. Toggles the Z view on/off. | CTRL+SHIFT+Z
Z Zoom In | Zooms Z checker window in. | CTRL+DELETE
Z Zoom Out | Zooms Z checker window out. | CTRL+INSERT
3D view navigation & control keys
Camera Back | Makes the POV in the 3D view move backwards. | DOWN ARROW
Camera Forward | Makes the POV in the 3D view move forward. | UP ARROW
Camera Left | Makes the POV in the 3D view look left. | LEFT ARROW
Camera Right | Makes the POV in the 3D view look right. | RIGHT ARROW
Camera Strafe Left | Makes the POV in the 3D view move left. | COMMA ( , )
Camera Strafe Right | Makes the POV in the 3D view move right. | PERIOD ( . )
Camera Down | Makes the POV in the 3D view move down. | C
Camera Up | Makes the POV in the 3D view move up. | D
Camera Angle Down | Makes the POV in the 3D view look down. | Z
Camera Angle Up | Makes the POV in the 3D view look up. | A
Center View | Centers the POV in the 3D view. | END
Down Floor | Moves the POV in the 3D view down by one floor. | PAGE DOWN
Up Floor | Moves the POV in the 3D view up by one floor. | PAGE UP
Toggle Camera | Only used in free window mode. Toggles the 3D view on/off. | CTRL+SHIFT+C
Toggle Cubic Clip | Toggles 3D view clipping on/off. This feature works in both editors but shortcut key only works in Q3Radiant. | CTRL+\
Cubic Clip Zoom In | Makes the cubic clipping plane come in closer. Best used for speed optimizations. | CTRL+ ]
Cubic Clip Zoom Out | Makes the cubic clipping plane move further out. | CTRL+ [
Toggle Realtime | Toggles on/off real time 3D view camera updates. Feature doesn't work. | CTRL+R
Grid control keys
Toggle Grid | Turns grid view on/off. | 0
Set Grid 1 | Sets the grid to 1 unit. | 1
Set Grid 2 | Sets the grid to 2 units. | 2
Set Grid 4 | Sets the grid to 4 units. | 3
Set Grid 8 | Sets the grid to 8 units. | 4
Set Grid 16 | Sets the grid to 16 units. | 5
Set Grid 32 | Sets the grid to 32 units. | 6
Set Grid 64 | Sets the grid to 64 units. | 7
Grid Down | Decreases the size of the grid. | [
Grid Up | Increases the size of the grid. | ]
Brush & entity creation and manipulation keys
Brush (3 sided) | Creates a 3 sided brush. | CTRL+3
Brush (4 sided) | Creates a 4 sided brush. | CTRL+4
Brush (5 sided) | Creates a 5 sided brush. | CTRL+5
Brush (6 sided) | Creates a 6 sided brush. | CTRL+6
Brush (7 sided) | Creates a 7 sided brush | CTRL+7
Brush (8 sided) | Creates a 8 sided brush. | CTRL+8
Brush (9 sided) | Creates a 9 sided brush. | CTRL+9
Unselect Selection | Deselects all currently selected objects. | ESC
Delete Selection | Deletes all currently selected objects. | BACKSPACE
Clone Selection | Creates a duplicate of the currently selected objects. | SPACEBAR
Drag Edges Mode | Toggles edge manipulation mode on/off. Edges are represented by blue dots on the brush. | E
Drag Vertex Mode | Toggles vertex manipulation mode on/off. Vertices are represented by green dots on the brush. | V
Brush Clip mode | Toggles brush clipping mode on/off. | X
Flip Clip | Switches which part of the brush is going to be clipped away on the set clip plane points while in clipping mode. | CTRL+ENTER
Clip Selected | Clips the selected brush/brushs on the set clip plane points while in clipping mode. | ENTER
Split Selected | Splits the selected brush/brushs on the set clip plane points while in clipping mode. | SHIFT+ENTER
Move Selection Down | Moves the selected object down in Z axis by units equal to the grid size (independent of current 2D view). | KEYPAD MINUS
Move Selection Up | Moves the selected object up in Z axis by units equal to the grid size (independent of current 2D view). | KEYPAD PLUS
Select Nudge Down | Moves the selected object down in current 2D view by units equal to the grid size. | ALT+DOWN ARROW
Select Nudge Up | Moves the selected object up in current 2D view by units equal to the grid size. | ALT+UP ARROW
Select Nudge Left | Moves the selected object left in current 2D view by units equal to the grid size. | ALT+LEFT ARROW
Select Nudge Right | Moves the selected object right in current 2D view by units equal to the grid size. | ALT+RIGHT ARROW
Snap Selection To Grid | Snaps the vertices of the currently selected brush or patch mesh to the grid. | CTRL+G
Make Detail | Turns selected structural brush into a detail brush. | CTRL+M
Make Structural | Turns selected detail brush into a structural brush. | CTRL+SHIFT+S
Dump Selected Brush | Dumps a list of the plane point coordinates of all the faces of the currently selected brush to the console view. | SHIFT+D
View Entity Info | Brings up the entity dialog window. | N
Select Whole Entities | QeRadiant only: Toggles feature on/off. When feature is on, selecting any single brush of a multiple brush entity automatically selects all the brushes that belong to that entity (This shortcut key does a Redisperse Rows in Q3Radiant). | CTRL+E
Cycle Group Selection | Cycle selects each individual brush of currently selected bsp-model entity (Select Whole Entities must not be on in QeRadiant). This command was renamed Patch Tab in Q3Radiant but it's function is unchanged. | TAB
Connect Selection | Connect entities target to targetname. | CTRL+K
Entity Color | Use this to set the "_color" key of a entity by bringing up the standard Windows RGB color selector. Used for choosing the color of lights for example. | K
Texture manipulation keys
View Textures | Only used in 4 view and free window modes. Brings up the texture selection window (toggle in 4 view mode). | T
Surface Inspector | Brings up the surface properties dialog (only used to align textures in Q3Radiant). | S
Texture Shift Down | Moves texture on currently selected brush face(s) downwards. Also works for patches but might sometimes give unexpected results. | SHIFT+DOWN ARROW
Texture Shift Up | Moves texture on currently selected brush face(s) upwards. Also works for patches but might sometimes give unexpected results. | SHIFT+UP ARROW
Texture Shift Left | Moves texture on currently selected brush face(s) to the left. Also works for patches but might sometimes give unexpected results. | SHIFT+LEFT ARROW
Texture Shift Right | Moves texture on currently selected brush face(s) to the right. Also works for patches but might sometimes give unexpected results. | SHIFT+RIGHT ARROW
Texture Rotate Clockwise | Rotates texture clockwise on currently selected brush face(s). Also works for patches but might sometimes give unexpected results. | SHIFT+PAGE DOWN
Texture Rotate Counter-Clockwise | Rotates texture counter-clockwise on currently selected brush face(s). Also works for patches but might sometimes give unexpected results. | SHIFT+PAGE UP
Texture Scale Down | Decreases vertical scale of texture on currently selected brush face(s). Also works for patches but might sometimes give unexpected results. | CTRL+DOWN ARROW
Texture Scale Up | Increases vertical scale of texture on currently selected brush face(s). Also works for patches but might sometimes give unexpected results. | CTRL+UP ARROW
Texture Scale Left | Decreases horizontal scale of texture on currently selected brush face(s). Also works for patches but might sometimes give unexpected results. | CTRL+LEFT ARROW
Texture Scale Right | Increases horizontal scale of texture on currently selected brush face(s). Also works for patches but might sometimes give unexpected results. | CTRL+RIGHT ARROW
Texture Fit | Automatically fits the texture to the size of the currently selected brush face by scaling it vertically and horizontally. This shortcut only works in QeRadiant. | SHIFT+5
Texture Fit To Face | Same as Texture Fit. This shortcut only works in QeRadiant. | CTRL+F
Toggle Texture Lock | Toggles brush move texture alignment locking on/off. This feature works in both editors but shortcut key only works in Q3Radiant. | SHIFT+T
Toggle Texture Rotate Lock | Toggles brush rotation texture alignment locking on/off. This feature works in both editors but shortcut key only works in Q3Radiant. | SHIFT+R
Dialogs and special features keys
View Console | Only used in 4 view and free window modes. Brings up the console (this is a toggle function in 4 view mode). | O
Preferences | Brings up the user preferences dialog. | P
Entity List | Brings up the entity list "tree view" window. This feature works in both editors but shortcut key only works in Q3Radiant. | L
Map Info | Brings up the map info status window. This feature works in both editors but shortcut key only works in Q3Radiant. | M
Filter Settings | Brings up the filters dialog window. This feature only works in QeRadiant. | F
Show Detail | Toggles display of detail brushes on/off. | CTRL+D
Animate Selected Entities | Toggles animation of selected mover entities (doors, buttons, etc.) on/off. This feature only works in QeRadiant. | CTRL+A
Previous Leak Spot | Takes POV in the 3D view to the previous leak spot (pointfile must be loaded). | CTRL+SHIFT+L
Next Leak Spot | Takes POV in the 3D view to the next leak spot (pointfile must be loaded). This feature works in both editors but shortcut key only works in Q3Radiant. | CTRL+SHIFT+K
Misc utility keys
File Open | Opens a file. | CTRL+O
File Save | Saves a file. | CTRL+S
Exit | Closes the editor. | CTRL+X
Copy | Copies whatever is currently selected. | CTRL+C
Paste | Pastes what ever is in the clip board. Only works with text and Radiant's stuff. | CTRL+V
Undo | Undo. Doesn't work in all cases. | CTRL+Z
Redo | Redo. Doesn't work in all cases. | CTRL+Y
Q3Radiant miscellaneous features keys
View Groups | Brings up the groups dialog window. | G
Toggle Size Paint | Momentarily displays the position + dimensions of currently selected brush(es) in the 2D view. | Q
Mouse Rotate | Toggles mouse free rotation mode on/off for currently selected objects. | R
Select Type All | Selects all "identical" based on type of "currently selected". If type is a surface, all solids with the same texture are selected. If type is an entity, all the other entities of its classname are selected. | SHIFT+A
CSG Merge | Will merge all currently selected brushes into a single brush. If the shape and size of any one of the selected brushes would cause the merge to produce a concave solid, the merge operation is not performed. | SHIFT+M
Toggle Crosshairs | Toggles between the regular mouse pointer and a large crosshair style pointer in the 2D view. | CTRL+SHIFT+X
Fit Texture | This will automatically scale the texture on the currently selected faces so one texture tile will fit exactly on the faces by default. It also brings up Surface Inspector so the texture can be fit to the faces by a different number of texture tiles than 1. | SHIFT+B
Hide Selected | Hides all currently selected objects from the 2D/3D views. | H
Show Hidden | Un-hides all objects currently hidden from the 2D/3D views. | SHIFT+H
Show All Textures | Shows all the textures currently loaded in Q3radiant's texture window. Use this to un-set Show In Use in the textures menu. | CTRL+A
Patch Tab | Cycle selects each individual brush or patch of currently selected bsp-model entity. This command was called Cycle Group Selection in QeRadiant but it's function is unchanged. | TAB or SHIFT+TAB
Q3Radiant patch manipulation keys
Bend Mode | Toggles bend mode on/off. This is used to bend patch meshes. Follow the instructions that come up in the dialog box when you use this. Best used for making arches and such. | B
Cap Current Curve | Automatically creates cap patches for the currently selected patch if it's a cylinder. For bevels and endcaps, it will bring up the cap dialog instead. The patch and its caps will then automatically be grouped in a func_group. | SHIFT+C
Cycle Cap Texture Patch | This cycles the cap texturing type on the currently selected patch. | CTRL+SHIFT+N
Cycle Cap Texture Axis | This cycles the cap texturing axis on the currently selected patch. | CTRL+SHIFT+P
Naturalize Patch | Makes the texture natural on the patch mesh (sometimes the textures are stretched to fit the patch, this will make the texture fit normal instead of streching it). | CTRL+N
Increase Patch Row | Adds 3 rows to currently selected patch. | CTRL+KEYPAD PLUS
Decrease Patch Row | Removes 3 rows from currently selected patch (assuming patch currently has more than 3 rows). | CTRL+KEYPAD MINUS
Increase Patch Column | Adds 3 columns to currently selected patch. | CTRL+SHIFT+KEYPAD PLUS
Decrease Patch Column | Removes 3 columns from currently selected patch (assuming patch currently has more than 3 columns). | CTRL+SHIFT+KEYPAD MINUS
Redisperse Columns | Evenly re-disperses all the columns of the currently selected patch. Useful after adding new columns. | CTRL+SHIFT+E
Redisperse Rows | Evenly re-disperses all the rows of the currently selected patch. Useful after adding new rows (this shortcut key does a Select Whole Entities in QeRadiant). | CTRL+E
Invert Curve | This inverts the patch mesh's matrix. IOW, it changes which side of the patch the texture is applied to. | CTRL+I
Invert Curve Texture X | Inverts the X value of the texture on the matrix. Use this to mirror the texture vertically on a patch. | SHIFT+I
Invert Curve Texture Y | Inverts the Y value of the texture on the matrix. Use this to mirror the texture horizontally on a patch. | CTRL+SHIFT+I
Matrix Transpose | Swaps the rows and columns on a patch. There is no physical change on the patch as such: rows become columns and vice versa. Use this to change the natural texture orientation axis on patches. | CTRL+SHIFT+M
Make Overlay Patch | Turns on display of the currently selected patches control points. The display of the patches control points will remain on until turned off by Clear Patch Overlays. | Y
Clear Patch Overlays | Turns off display of the currently displayed patches control points previously turned on by Make Overlay Patch. | CTRL+L
Patch Inspector | Brings up the patch inspector dialog. | SHIFT+S
Thicken Patch | Creates a copy of current patch and spaces it by X amount of units (as per value entered in dialog box) then caps off the mesh. | CTRL+T
Toggle Show Patches | Toggles display of patch meshes from 2D/3D views on/off. | CTRL+P

3. Mouse Function list

This is the list of all the Mouse Functions in QeRadiant and Q3Radiant. Note that these are not shortcuts. The tasks accomplished by the mouse cannot be found in the menus. They provide much of the essential functionality in QeRadiant/Q3Radiant when designing maps.

Radiant's user interface includes many productivity features and is a very powerful tool. It's no wonder that it's the editor of choice for professional and amateur map designers alike. But it's true power is unleashed when you use a 3-Button mouse. Several extremely useful power features, especially when it comes to texturing, are only accessible if you use a 3-Button mouse. Many people own one nowadays and if you use QeRadiant regularly, I strongly recommend you get one.

The commands were sorted by category and abbreviations were used to make it easier for me to fit the shortcut names in the table boxes:

  • LEFT-SIDE BUTTON or LEFT-CLICK = LEFTBUT

  • MIDDLE BUTTON or MIDDLE-CLICK = MIDBUT

  • RIGHT-SIDE BUTTON or RIGHT-CLICK = RIGHTBUT

    The action of these 3 abbreviations mean: click once

  • LEFT-CLICK & DRAG = LEFTBUT+DRAG

  • MIDDLE-CLICK & DRAG = MIDBUT+DRAG

  • RIGHT-CLICK & DRAG = RIGHTBUT+DRAG

    The action of these last 3 abbreviations mean: click once, hold down button and drag mouse.

Also, as with most applications, the action of the mouse is context-sensitive meaning that the same Mouse shortcut might do a different thing depending in what view you click. This is why the categories below are sorted more by context than type.

Action | Description | Mouse Function
2D view mouse functions
Scroll View | Scroll or pan the 2D view. Also works in the Z view. | RIGHTBUT+DRAG
Move Z Checker | Moves the location of the Z Checker box icon in the 2D view to where you click. Dragging the mouse makes it follow around. | SHIFT+MIDBUT; SHIFT+MIDBUT+DRAG
Move Camera | Moves the location of the Camera eye icon in the 2D view to where you click. Dragging the mouse makes it follow around. Also works in the Z view. | CTRL+MIDBUT; CTRL+MIDBUT+DRAG
Point Camera | Points the Camera eye icon in the 2D view to where you click. Dragging the mouse makes it follow around. | MIDBUT; MIDBUT+DRAG
Create/Modify Brush | This will create a new brush if no object is currently selected. If one or more brushes are selected, this will: 1. Resize the brush when click-dragging outside. 2. Move the brush when click-dragging inside. If one or more point entities are currently selected, this will just move them. Also works in the Z view but for brushes, only move and vertical resize are possible. In the 3D view, only move and resize work. | LEFTBUT+DRAG
Select Object | Selects/Deselects brush or entity under cursor. Entities have priority over brushes. This also works in the Z and 3D views. | SHIFT+LEFTBUT
Cycle Select Object | Cycle selects all brushes or entities under cursor in order of depth. This only works in the 2D view in QeRadiant but works in all views in Q3Radiant. | SHIFT+ALT+LEFTBUT
Drag Brush Face | Drags the face of the currently selected brush. The face nearest to the cursor is dragged. Brushes can also be sheared by using this. This also works in the 3D view. | CTRL+LEFTBUT+DRAG
Entity Menu | Brings up the entity pop-up menu. You can then select the entity to create. For solid entities (doors, buttons, triggers, etc.), at least one brush must be selected beforehand. | RIGHTBUT
3D view mouse navigation functions
Drive Camera | Makes the POV in the 3D view move forward/backwards and turn left/right when mouse is dragged. | RIGHTBUT+DRAG
Strafe Camera | Makes the POV in the 3D view strafe up/down and sideways when mouse is dragged. | CTRL+RIGHTBUT+DRAG
3D view mouse texturing functions
Select Brush Face | Selects brush face under cursor. Only one face at a time can be selected. Will automatically deselect any currently selected objects. Also grabs the face's current texture + alignment + flags into Surf Inspector. | CTRL+SHIFT+LEFTBUT
Select Multiple Brush Faces | Selects brush faces under cursor. Any number of faces at a time can be selected. Will automatically deselect any currently selected objects. Also grabs the face's current texture + alignment + flags into Surf Inspector. This feature only works in Q3Radiant. | CTRL+SHIFT+ALT; +LEFTBUT
Grab Texture | Grabs the texture + alignment + flags of the brush face under the cursor into Surf Inspector. Any currently selected face or brushes will automatically be assigned the grabbed values. | MIDBUT
Apply Texture To Brush | Applies the current texture + alignment + flags in Surf Inspector to the whole brush under the cursor. | CTRL+MIDBUT
Apply Texture To Face | Applies the current texture + alignment + flags in Surf Inspector to the single brush face under the cursor. | CTRL+SHIFT+MIDBUT
Apply Texture Only To Face | Applies the current texture in Surf Inspector to the single brush face under the cursor but face retains its current alignment + flags. | SHIFT+MIDBUT
Shift Texture | Shifts the texture's vertical and horizontal alignment on the currently selected face or brushes. This feature only works in QeRadiant. | ALT+RIGHTBUT+DRAG
Scale Texture | Stretches up/down the texture's vertical and horizontal scale on the currently selected face or brushes. This feature only works in QeRadiant. | SHIFT+ALT+RIGHTBUT; +DRAG
Rotate Texture | Rotates the texture on the currently selected face or brushes. This feature only works in QeRadiant. | CTRL+ALT+RIGHTBUT; +DRAG
Set Light To Average Texture Color | Grabs the average color of the current texture in Surf Inspector and sets the "_color" key of the light entity under the cursor to that RGB color value. This feature only works in Q3Radiant. | SHIFT+MIDBUT
Texture window mouse functions
Select Texture | Selects the texture under the cursor and pastes the texture + default flags into Surf Inspector. All currently selected brushes or face will automatically be assigned the selected texture. | LEFTBUT
Select Texture + Surf Inspector | Same as above but also automatically brings up the Surf Inspector window. This feature only works in QeRadiant but shortcut key does a Apply Texture Angled in Q3Radiant. | CTRL+LEFTBUT
Scroll Texture Window | Scrolls up/down through the texture window (same as scrollbar or mouse wheel). | RIGHTBUT+DRAG
Scroll Texture Window Fast | Same as above but will scroll much faster. Useful for browsing through very large texture folders. | SHIFT+RIGHTBUT+DRAG
Edit Shader | Shader window function. Shift-click on a shader opens the proper shader file in EditPad and automatically places the cursor at the beginning of the shader. This feature only works in Q3Radiant. | SHIFT+LEFTBUT
Apply Texture Angled | Automatically applies and scales the texture under the cursor on currently selected angled faces so it will fit on those faces by exactly one texture tile. This feature only works in Q3Radiant but shortcut key does a Select Texture + Surf Inspector in QeRadiant. | CTRL+LEFTBUT
Entity dialog mouse functions
Create Entity | Double-clicking on an entity name in the dialog's list will create an entity at the location of the currently selected brush (mandatory). 1. If a point entity is chosen from the list, it will automatically replace the selected brush(es). 2. If a solid entity is chosen from the list, the selected brush(es) will belong to the entity. 3. If an entity or nothing is selected beforehand, you will get an error dialog: "Failed to create entity". | DOUBLE-LEFTBUT


Q3Radiant Editor Manual: Page 2.1

Q3Radiant Editor Manual

Entities and Assets

What are Entities?

Quake III Arena divides map components into two classes: World Geometry and Entities. World Geometry represents the brushes (the Q3A term for the blocks of geometry used to build the physical game world) and patches (anything built with calculated curves). Entities are a broad category that not only includes simplistic editor representations of game play objects like weapons and ammo, but also includes diverse things like player start spots, and lights. Typically, they are displayed as brightly colored cubes (for those entities not constructed of brushes). The following are the general category of entity types. The actual entities and the rules and tips for their use are listed in Appendix B.

Brush entities. The “brush” is the basic building block of Quake engine games (including Quake, Quake 2, Quake III Arena, and a host of games using the engine licenses). In its most basic form, it’s a block, a solid rectangular volume defined by the coordinates of its corner vertices. A single brush or a linked grouping of brushes can be turned into a brush entity. Brush entities include the movers (see below), triggers, and func_statics.

Movers. Most moving objects or "Movers" are built from brushes. These include doors, lifts or “plats”, rotating objects, buttons, pendulums and trains (objects following pre-defined paths), and bobbers (platforms that are constantly in motion, up and down or side to side).

Triggers. Triggers are brush entities that cause an event to occur when a player’s bounding box moves inside the volume of the trigger. Triggers can be targeted on many other entities, including most movers and targets. Some triggers also have more specialized functions. There are triggers that cause injury, activate other entities, and push or teleport the players.

Targets. Targets are the entities that are activated to cause events to happen in Q3A, or to redirect activations, insert time delays, mark locations for team play, or act as destination points for teleportation or pushing.

Lights. These are point lights, disembodied (read as no visible source) sources of illumination. They ca n be targeted at info_nulls to create spotlights. They can be turned into colored lights. Usually, they are used to create unfocused fill light in a large area or placed near glowing surface textures to create an effect.

Info. This category includes non-team player spawn spots, targets for lights, and camera locators for intermission shots.

Items. With the exception of ammo and weapons, these are things in the map that the players grab to use during play. Included are armor, power ups like the quad, and one-use items like the personal teleporter.

Ammo. Locations for ammo boxes. Each weapon type in Q3A has its own unique ammo entity.

Weapons. Each of the weapons that can be picked up has an entity that can be placed.

Miscellaneous. This is another catchall category. It includes things like the misc_model which links into the models directory when placed, func_timers which are automated repeating triggers, shooters which fire one of three different weapon fire types, camera and portal surfaces, and path corners.

What are Assets?

Assets are the textures, sounds, and models that are used to flesh out the appearance and ambience of a game map. The editor is designed to use the assets stored in the pak0.pk3 file in your quake3 directory. Using Q3Radiant, the mapmaker can work with the assets in the Quake III Arena pak0.pk3 file or create new ones.

What are Textures?
The art appearing on the walls of maps are generally referred to as “textures.” Textures are created and stored as true color targa (.tga) or jpeg (.jpg) graphic files. The textures do not use a pre-defined color palette (as was the case with both Quake and Quake 2). Shader scripts can further combine textures and/or modify them in numerous ways. This document will briefly touch on shaders. For an in-depth treatment of shaders, refer to the accompanying Shader Manual.

What are Sounds?
Quake III Arena world sounds are played by target_speaker entities in the maps. They are stored as 22 khz, 16-bit, mono format .wav files.

What are Models?
The statues and lights in Q3A are models, just like the player characters. They are placed with the misc_model entity.

Creating New Assets

If you are familiar with the required tools, creating new assets for use in Quake III Arena is not particularly difficult. As a rule, you should create new directories for each map with names different from the names used by id. If you are making a map that will be called “H4x0r_D00M”, every directory containing new assets for that map should be titled H4x0r_D00M. This is to try and avoid asset directories overwriting each other as the editor and the game load in assets.

Creating Textures
Any combination of graphic programs and plug-ins that can output a 24 bit MS windows compatible Targa (.tga) or JPEG (.jpg) graphic file. If you plan to make textures that will have an alpha channel component (see glossary for definition), you must have a program that can create 32-bit art with that fourth channel.

Adobe PhotoShop has the ability to easily create alpha channels. Paint Shop Pro from JASC (v5.0+) can also make an alpha channel by creating a mask and naming it “alpha”.

Generally speaking, regardless of the program used, we found it best to do most of the art manipulation of the alpha channel in a separate layer or file and then paste it into the alpha channel before saving.

Setting up Files
The editor and the game program look for assets to be located along the paths set up in your project file. Start by creating a directory for you new textures by creating file folders to make a directory path as follows: quake3\baseq3\textures\[mymapname]

The installation of Q3Radiant will create a text document called “shaderlist.txt” in the following path:

    Quake3\baseq3\scripts\shaderlist.txt

Q3Radiant will use the contents of this script to grab your new textures for inclusion in the game. The contents of shaderlist.txt document will contain a listing of all the shader documents that were used by id Software to create Quake III Arena.

Since you will obviously want to create your own shaders, you need to put them in separate folders and create a new shader script for them.

If you plan to work on several maps at once and want to distinguish between textures used in each map, simply add additional map names here. For map and mod makers, we STRONGLY recommend that any new shader scripts created use the name of the map or mod in the shader file name. We know we can’t avoid every incident of files overwriting each other, but we certainly can advise you how to try.

Now, create another text file within the scripts directory and call it:

    [mymapname].shader

This file will contain the shader scripts you write to modify a particular texture.

Rules
Follow these rules when creating textures for the Quake III Arena engine:

  • Save your textures into your new [map name] directories.
  • Don’t use the same names that id used for textures. It will cause problems.
  • For best quality, save textures without an alpha channel as 24 bit TARGA files. Using JPEG files can save memory space, but at the risk of losing detail and depth in the texture. JPEG files cannot be used for textures requiring an alpha channel.
  • Textures containing an alpha channel must be saved as 32 bit TARGA files.
  • If a new texture requires no further manipulation, it does not need a shader script.
  • Size textures in powers of 2. Example: 8x8, 16x16, 32x32, 64x64 pixels and so on.
  • Textures don’t need to be square. A 32x256-pixel texture is perfectly acceptable.

Guidelines
The following are some things the id designers learned about textures.

  • Create textures in “suites” built around one or two large textures with a number of much smaller supporting detail or accent textures.
  • Very large textures are possible, but some video cards compress textures larger than 256x256 pixels.
  • Textures are grouped alphabetically by name in the texture display window, so you may want to give suites of textures similar names.
  • Use the shader function qe3_editorimage to conserve memory when making multiple versions of a single texture (as in the case of a glowing texture with several light values).
  • Unless you are creating special effects or textures designed to draw the player’s eye to a specific spot, muted, middle value colors work best with the game engine.
  • Extremely busy (a lot of fussy detail) textures can break up or form visually unpleasant patterns when seen at distances.

Creating Sounds
Tools needed: Any sound editing program that can create and save out sound files as 22 khz, 16-bit, mono format .wav files.

Set up: The editor and the game program look for assets to be located along the paths set up in your project file. Start by creating a directory for you new textures by creating file folders to make a directory path as follows: quake3\baseq3\sounds\world\[map name]

Place your completed .wav files in the [map name] folder. You can access (and play) this file from within the editor (see instructions for Target_Speaker).

Creating Models
Map models need to be converted from their native file format into Quake III Arena’s native md3 file format. The modeling program, Milkshape 3D supports the file format needed to create map models for Quake III Arena (a link for this program is in the On-line Resources appendix). The compiling process merges the models into the bsp file. If you want other mappers to be able to use your models, you will need to include the md3 and supporting texture files within your pk3.

Making the .pk3 File

When you go to distribute your creation to the gaming world, you need to put your newly created map, textures, bot area files, and shader documents into an archive format called a “pk3” file. You do not need to include the shaderlist.txt file, since only the Q3Radiant editor uses that. Start by creating folders/directories in your root drive (C: for most of us). The game assumes that these folders are placed in the baseq3 directory, so you need to write your path names accordingly. You will need to keep the paths to the various assets the same as they are for the rest of the assets in the game. So your paths should be something like this:
    Textures: textures/[mymapnamefolder]
    New Models: models/mapobjects/[mymodelnamefolder]
    Map, bsp & aas: maps/mymapname.bsp , mymapname.aas
    Shader scripts: scripts/mymapname.shader
    Server scripts: scripts/mymapname.arena

Move or copy all your new game assets in their folders.

We used an archiving program call Winzip to make the pk3 file. Get Winzip from WinZip.com

NOTE: Do not include or redistribute any game assets that are not your own (at least without permission). This specifically refers to id-copyrighted material that came with the original game or subsequent id released patches.

Make a zip archive called “map-mymapname.zip”

If you plan on distributing other resources separately, we strongly recommend the following naming conventions:

md3-xxx.pk3 | User Model with original associated skin files and sound files
bot-xxx.pk3 | User bot files. May contain additional model or skin and texture files
skin-xxx.pk3 | User skin with associated skin and texture files
map-xxx.pk3 | User created map(s) and supporting files (arena, texture, sound, music)
tex-xxx.pk3 | User texture and shader files
snd-xxx.pk3 | Sounds only
mus-xxx.pk3 | Music only
pfb-xxx.pk3 | Map prefabs

(special thanks to Rogue13 of http://www.polycount.com/ for this naming convention)

When you go to add a resource to the archive, click on options to “Recurse Folders” and “Save Extra Folder Info”

Zip all the required assets into a zip archive file (Quake III Arena DOES support compressed pk3 files).

Rename the zip archive to mymapname.pk3

Put it where the Quake III Arena community can find it.

My .pk3 File is Huge! No One is downloading it!
Large pak files are daunting as downloads. And as specified by the Quake III Arena End User License Agreement, that is the only way those new game assets may be distributed. Be kind and remember that not everyone has access to DSL, ADSL, ISDN, Satellite, Cable Modem or other high speed internet connections. Before packing up your resources, you may want to look into some dieting tricks to make it smaller.

  • First, resave all your new non-alpha channel textures in JPG format. That will give you some significant art size savings.
  • Streamline your map’s art package. Id designers had to go on a rip ‘n strip rampage through their levels to cut down on unique texture usage. Do you really need all that additional art? Can you substitute more of the original Q3A art, or get more duty out of some of your new work?
  • Recompile your area files with the optomize switch. That will reduce their size. That's why it's in there as a command. This is also one of the biggest savings that you can make.
  • Turn up the level of compression when archiving into the pk3 file.
  • Compress again when zipping up the files.
  • Take a SERIOUS look at any new sound resources you've created. Sounds, especially long sounds can be HUGE! Can short sounds be cleverly used to replace longer sounds in your map? The id designers did a bunch of that for Q3A. Very short sounds, played off sync against each other were made to sound like longer, more expensive sound files.


Q3Radiant Editor Manual: Page 3.1

Q3Radiant Editor Manual

Map Building Basics

Once you have the editor installed and the preferences set, open the map and let’s get started.

Moving Around

There are a number of ways to move your point of view around in the map and camera windows. Some are easy to master. Others are a bit trickier. Find one that works for you and master it.

Moving in All Directions
All movement directions are given relative to directions in the XY map. When other map views are shown, movement is still calculated in terms of the XY view. Key press movement occurs in discrete increments.

Forward (in facing direction) | (Up Arrow Key) or (Keypad 8)
Turn left | (Left Arrow Key) or (Keypad 4)
Turn right | (Right Arrow Key) or (Keypad 6)
Backward | (Down Arrow Key) or (Keypad 2)
Move up | (D)
Move down | (C)
Look up | (A)
Look down | (Z)
Level View | (END)

Flying … through the Map (and other 3D commands)
Some mappers prefer using mouse-fly to move around their map. Mousefly works by clicking and pressing with the Mouse button 2 (Right mouse button) on the Camera window. This takes a lot of practice to master. Clicking farther away from the window center increases the speed of movement.

Forward (in facing direction) | (Right Mouse click above of window center)
Turn left | (Right Mouse click left of window center)
Turn right | (Right Mouse click right window center)
Backward | (Right Mouse click below window center)
Move up | (D)
Move down | (C)
Look up | (A)
Look down | (Z)
Level View | (END)

Zoom with a View
The zoom keys increase or decrease the visual scale of the map, letting you move in close to work with small details or move away to see the entire map at once. Currently, there are 24 steps of zoom, from most distant to closest. If Quad view is used (XY, YZ, and XZ views simultaneously), all three windows may zoomed at different scales. The Z-axis scale window is also zoomed separately

Zoom in
(DELETE)

Zoom out
(INSERT)

Z-axis Zoom in
(CTRL + DELETE)

Z-axis Zoom out
(CTRL + INSERT)

Jump to Location
(CTRL + Middle Mouse Button)
Click on a 2D map or the Z-axis window and your point of view immediately moves to that location. In the 2D map windows, neither the facing, nor the “height” of the point of view changes.

Moving the Maps Around
A right-mouse-button click and drag on a 2D Map window will cause the map to be dragged, allowing you to easily reposition what is being viewed.

Basic Construction Tutorial

This is a simple, step-by-step guide to making your first room. Before attempting it, you may want to familiarize yourself with some of the Brush selecting and handling tools. A Quake III Arena aficionado who goes by the handle “The Dog!” posted this simple tutorial on a Quake III Arena on-line message board. It appears here with his permission. It will walk you through creating a new map file, making your first “brush,” adding a start spot and a light and then compiling the map.

The Dog!’s Ten Quick-n-Dirty steps to a SIMPLE room:

  1. Create new map:
    1. Click file, new map

  2. Create a small hollow room (make a box and hollow it out):
    1. Make a box. In the XY Top window, click/hold your left mouse button at coordinates 256,-256 (upper left) - then drag your mouse to the -256,256 (lower right) [you should see a red square appear in grid].

    2. Make the box taller. In the Z Window (this is also called the height bar): This brush appears as a red box. Click/hold your left mouse button above the upper edge of the box and drag that bar up to about 256. [you have just raised the height of the box]

    3. Make it hollow. On your Toolbar below the Menu bar, locate the 'Make Hollow' Button (should be a red box with a dotted box inside of it )located under the M in Misc). Press that button. This breaks the box up into six pieces: four walls, a ceiling and a floor. [you should now see a hollow room in the texture view window]

  3. Press Escape to deselect the box (you are finished with room/box for now).

  4. Add a player starting point:
    1. Bring up the Easy Entity Menu. With your pointer over the room in the XY Top window, right mouse click INSIDE the newly created room box to open up the easy entity menu.

    2. Place a Start Spot. Select info, then select info_player_deathmatch. [you should see a small pink box appear - this is where you will start in this map anytime its loaded]

    3. Is it in there? Make sure that your new starting point is 'really inside' the room that you have created.
      1. Click the xyz button on your toolbar so that you can toggle through each 'view' of that coordinate (XY top, XZ front, or YZ side).

      2. Watch the red box (info_player_deathmatch) as you toggle through each view to make sure the red box is inside room

      3. If there is a view it is not located inside - simply stop and drag it inside the box. (You can learn how to put it in optimal places later), until it is totally inside the room.

  5. Press Escape to deselect the info_player_deathmatch item.
    The box now turns into a solid pink, box outline.

  6. Now add some textures:
    1. Load up Textures. Click on the texture menu and drag down to select the gothic_wall texture directory.
    2. Open Texture window. Press “T” to open the texture window. It should be full of wall textures.
    3. That wall will do just fine. Then decide what wall surface you want to apply the texture to. Hold the left-CTRL and the left-SHIFT key down and then left click on a wall. The wall will turn red.
    4. Pick a Texture, any Texture. in the 'texture view' window, left mouse click on any wall texture. A red border will now surround this texture. And presto, the wall becomes that texture too.
    5. Repeat this step for all the walls that you want to apply textures to.

  7. Save your map.
    The editor doesn’t like to work with “unnamed” map files. From the menu, select File > Save. Name the map “test1”. Always use lower case for your map names.

  8. Add a light.
    1. Bring up the Easy Entity Menu Again. With your pointer over the room in the XY Top window, right-mouse-click INSIDE the newly created room box to open up the easy entity menu.
    2. Place a Light. Select info, and then select light. [You should see a small red box appear (smaller than the player start).]
    3. Move it into place. Do the same procedure you did for the player start spot, making sure that this light is inside the room.
    4. Deselect the light. It will become a green box.

  9. Compile it.
    In the BSP menu, select “bsp_fastvis”. Wait patiently for the program to finish three phases of compile: bsp, vis, light.

  10. Start ‘er up.
    Start your Quake III Arena game. When the menu appears, hit the tilda key (~). On most American keyboards, this is in the upper left corner of the keyboard, below ESC.
    1. Set your game to run the map. In the console, type "/sv_pure 0"
    2. Enter the Devmap. In the console, type “\devmap test1” and then ENTER.
    3. Play it for all it’s worth. The map should start and you will be standing in the center of your first room.

Now go make something more complicated on your own!


QERadiant.com | Tips and Tutorials

Click Here!

QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Qeradiant Tutorials-

Tutorial 1 - Your First QERadiant Map

Tutorial 2 - Adding A Hall And Door

Tutorial 3 - Platforms

Tutorial 4 - Elevators

Tutorial 5 - Linking Entities

Tutorial 6 - Edge Manipulation

Tutorial 7 - The Basics of 2 Point Clipping

Tutorial 8 - Exploding Objects

Tutorial 9 - Regions

Tutorial 10 - 1,2,3, and 4 Way Hall Set Creation

Tutorial 11 - Water and All Its Glory

Tutorial 12 - Build Menu Tutorial

Tutorial 13 - Plugins

Tutorial 14 - details, Details, DETAILS and other build speed boost

Misc. Usefull info-

Shortcut Keys - Listing of shortcut keys and there functions.

Main

Tutorials / Tips

Plugins / Coding

Hosted Sites

Bug Report

FAQ

Reviews

Interviews

Forums

Files

Gamedesign.net

Links

Credits / Staff

The "[" and "]" keys change the grid sizes up and down.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

1. Creating the "New Project"
First thing you want to do is create a new project. So click on the menu item "File" and then select New Project. It will then bring up a prompt for you to name the new project. You can name it whatever you like. I chose "tutorial" as the name of this project.

After the new project is created it will load in a default map which will have a room and some entities and the likes in it and it will be called tutorial.map. Lets ignore this map for now and go on to making our own map.

2. Preparing Other Things
Next step to making your own map is to just click on "File" on the menu and then select new map. This will then bring up a prompt stating "All changes to map will be lost". Go ahead and click ok.

Now we need to do a couple more things before we start making our first map.

What we need to do now is click on "Texture's" on the menu. You should now have a pop down menu with a list of the available textures to use. Commonly you will see E1U1, E1U2,E1U3, and so on. Lets go ahead and click on E1U1 for now. These are the textures from Episode 1 Unit 1.

If you do not see a list like described as above then you need to check your preferences to make sure that the pak file support is on and the path to the pak file is correct. Also if you do not want to use the pak file then make sure the textures you want to use are extracted from the pak file and our located in your baseq2\textures directory e.i. c:\quake2\baseq2\textures\e1u1.

Now QERadiant will read the textures and then display them depending on the view you are using that you selected in the Preferences. If you selected the original QE4 or the new QERadiant view then the textures will be displayed with out having to use any toggle buttons. If you selected the 4 view mode then you will have to toggle the textures by hitting the "T" on your keyboard.

3. Select A Texture
Ok now that the textures are loaded we can actually start on our map now.

First look around in the textures for a texture you want to use. To scroll through the textures you need to hold down the "right" mouse button and move the mouse up and down. Once you have found a texture you want you need to "Left" click the mouse button on it so that a red outline has appeared around the texture you want. (See fig1_1)
Figure 1_1
4. Now we create a brush.
To do this go into a 2/d view preferably xy. Hold down the left mouse button and drag the mouse. You should see a red box appear (see fig1_2). That is the brush being drawn. Lets make the brush in the xy (top) view to be 256x256, and in the xz (side) view a 192 in height. If you need to adjust the zoom factor just hit the "insert" key to zoom out and the "delete" key to zoom in.

If you go into any view (xy, xz, or yz) and you want to move your view of the brush you can hold down the right mouse button in that view and move the mouse at the same time and that will move the view around so that you can center the object you are working with.

Figure 1_2
5. The Hollowing
We have now just finished creating a solid brush. Of course we cant move around in a solid brush so we need to make this brush hollow. QERadiant has a "hollow" feature which will turn a solid brush into multiple solid brush's so that it will be a hollow area where the player can move around in. This is also known as the player space.

So to make this brush solid you want to either click on "Selection" on the menu and scroll down to "CSG" and then select "Make Hollow", or you can click on the "Hollow" button on the toolbar which looks like this Hollow Button.

Once you have done one of those 2 options your single solid brush will now be turned into 6 solid brush's grouped together to form a hollow room which is now an area for the player to be able to play in. Also you will notice in the 3/d view you can see the room from the inside now.

6. The Player Start
Of course we cant play in a room with out a player start position.

What we need to do now is left click in the 2/d view to make sure that the 2/d area is the current active window. Also you want to deselect the new room we made so now you also have to hold down the ctrl+shift+left mouse button and release. Now the room is unselected.

Now inside the 2/d view click the "right" mouse button. A little list should pop up. This list is a list of all the entities that you can use with out brush's and is known as the "Drop Entity" list (see fig1_3). So right now we just want a player start position, so move the mouse down the menu until you get to "Info" and another menu should pop up out of that with another small list of entities. Go ahead and click on the info_player_start.

This should have put a info_player_start entity into your map where you had your curser located at. If the entity did not show up in the spot you wanted it to then go ahead and click the "left" mouse button while holding down the "shift" key inside this new entity. Now the entity should be selected. Go ahead and release the "left" mouse button and the "shift" key. Now while holding down the "left" mouse button with the cursor inside the box area of the entity we just selected just move the curser around and the entity will follow it. Move the entity to where ever you like for now. Also be sure to go to the xz or the yz view of the map and make sure the player is above the floor a little bit.

Ok now we want to adjust where the player is facing. So with the player entity selected still hit the "n" key which will bring up the entity list and show the current information on the currently selected entity (see fig1_4). In this menu we want to change the current position of the player. To do this you can click on the direction in the bottom left corner of this menu which should have "135, 90, 45, 0, 315, 270, 225, and 180. I set it to "90" in this example, which has the player facing to the north of our current map we are making. Once you have selected the direction you want the player to face just hit the "n" key again to remove this window from the current view.

Figure 1_3

Figure 1_4

7. Putting in a Light
Ok. Now....I am sure we want a little bit of lighting in this room just for the fun of it. So deselect the info_player_start by hitting the "ESC" key.

Now that nothing is currently selected go to the 2/d view and "right" click somewhere in the room we created to bring up the "drop entity" menu again. This time we want to select the first "light" in the menu. The one we want is the one that does not have an arrow to the right of it. It should just be "light" all by its self (see fig1_5). So just click on that "light" and it should place a new entity in the map for us. This entity should be a green colored entity in the shape of a box. Go ahead and select the entity (shift+left mouse button inside the entity) and move it to the position you want. Do not forget to check the xz and yz views for its height above the floor and below the ceiling. I moved this light entity close to the ceiling and near the center of the room for this tutorial.

Now we probably want to adjust the brightness and of course the color of this light. Why? Just because we can hehe.

To adjust the brightness of this light we need to select the light and hit the "n" key to bring up the entity's information. In this information window we should see an edit box that says key and below that value (see fig1_6). In key we want to type in "light" and in value we want to put the light level in numbers such as 300. Then just hit enter and it will insert that information into the entity's properties. I put 300 for this light.

Go ahead and close that window now by hitting the "n" key again.

Now we want to give the light some color. This is the real easy part. All you have to do for this is select the light entity and hit the "k" key which will bring up the standard windows palette and color adjustment (see fig1_7). Just select a basic color from the one of the box's so its highlighted and click "ok" and then the information is automatically added to the entity's information. Keep in mind also that you can define your own custom colors as well if you choose to do so.

Figure 1_5

Figure 1_6

Figure 1_7

8. Playing Your First Map
Now we are all set to look at your first room with a colored light and a player start.

Ok so now click on "File" and then select "save as" and save the map as any name you like and save it in the tutorial/maps directory that was created by QERadiant when it made this project. Example dir would be: c:/quake2/tutorial/maps

So now to look at it all we need to do is compile the map. So click on "Bsp" on the menu. Go ahead and select the option that says "Bsp_FullVis (qrad -extra)". Now the level will compile. Once the level is done compiling if you selected to have the editor load your map after compiling in the preferences menu your map will automatically load. If this is not the case then you just need to drop to dos and load quake2 like this: quake2 +set game tutorial +map mymap where mymap is replaced with the name of what you saved this map as.

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

You can make custome .ini files and specify them in the preferences.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Tutorial 2:
Adding a hall and door.

Ok. Here we are at Tutorial2. In this tutorial we are going to learn how to add another room and add a hallway to connect the 2 rooms. We will also learn how to put in a standard door that opens when you walk near in it and put it into the new hallway.

Before we start lets go over "real quick" what we learned in the 1st tutorial.

We learned the following things:
How to create a solid brush.
How to turn a solid brush into a hollow room.
How to add a Player start position.
How to change the players direction.
How to add a normal light entity.
How to change the light entity's brightness.
How to change the light entity's color.

That about covers that.

*note: this tutorial is a continuation of tutorial 1. If you have not yet read tutorial1 please do so before continuing.

1. Lets Get Ready
First lets load up QERadiant. Now if you had chosen to have QERadiant load the last project you were using in your preferences then there is no need to worry. If you did not then you need to go to the menu item "File" and select "Load Project" and then locate your project script in your /quake2/tutorial/scripts directory and select the tutorial.qe4 file.

Ok. Now we also need to load the map we used in the last tutorial. To do so just click on the "File" menu item again and select "Load" and then locate your tutorial.map file in the /quake2/tutorial/maps directory and select that file.

*note: as of QERadiant build 038 you can set the preferences to load last map on load up as well which makes this whole process a lot simpler.

Ok now we want to load in our textures (you learned this in tutorial1). Make sure its the E1u1 textures again.

2. Adding A New Room
Now that everything is loaded and ready to go lets make our new room. Go into the xy view and move your view around so you can see more open area to put a new brush in. Do this by holding down the right mouse button and moving the mouse around. Get it so that it looks like fig1_1.

Now that we can see the area we want to put the new brush in lets go ahead and put the new brush into the map. To do this you need to hold down the left mouse button and drag the mouse so that the red box appears. Lets make this brush the same size as the other room (256x256 width and 192 in height). Now lets make the room hollow. Use the hollow button like you learned in Tutorial1. You should now have something that looks like fig1_2.
Fig1_1

Fig1_2

3. Adding the Hall Brush
Ok now we need to make the brush that is going to be the hallway between these 2 rooms. Deselect your new room by hitting the "ESC" key on your keyboard.

Now create a new brush between these 2 rooms and adjust the brush to the aproximate size you want the hall to be. See fig1_3.
Fig1_3
4. Make the Hall Accessable
What you want to do now is deselect the brush we just created by hitting the "esc" key.

Now create a another brush inside that brush and make it smaller then the roof and floor and the walls.

Also make it extend outwords into the 2 rooms like in fig1_4.

Now with the smaller brush selected goto the menu and click on "Selection" and then choose "CSG" and within that new drop down menu select "CSG Subtract".

Now with the small brush still seletcted hit the "Backspace" key to delete the brush we used to subtract with.

After doing that you should now be able to see into the other room from the 3/d preview view.

We have now just completed making a new room and a hallway to our map.

Why don't you add a light to the other room and compile the map and take a look at it now.

Fig1_4

5. Make the door.
Now that you have seen your new room and hallway lets make that door in the hallway shall we?

First find a good a texture for your door and select it. Now draw a brush in the xy view in the hallway somewhere and be sure to make it the same size as the hallway in the xz view.

The texture you chose may not look the way you want it to and that will involve "face editing" and I will cover that in a different tutorial.

Right now lets make this new brush into a actual door. With the door brush selected hit the "n" key to bring up the entity info for this brush. It should say "worldspawn". We want to scroll through the list of entity's in there and select the one called "func_door". Double click on that func_door and it should change the brushes properties to a func_door and remove the worldspawn. Now the door opens to the 0 degree angle by default. If you want to change the direction you need to go edit the "key" and "value" box's for what direction you want it to open. In "key" you would put angle and "value" you would put the angle number (like that players angle settings) in.

Well there you have it. A new hallway room and door for your tutorial map. I will dig deeper into the door's possible angles and the likes in a misc. type tutorial.

Tutorial3 has been done by Noel Wade and he will be your guide through platforms/lifts and the likes.

Enjoy the editor and cya at the next tutorial.

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Change the textures|render quality to a lower setting to speed things up.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Tutorial 3

Platforms

NOTE: I'm making my tutorials to build upon the first one. If you haven't completed it, please do so; or download the map from the "Ravages of Radiant" pages. Keywords:

Brush - A solid, 3-D shape in the level. Walls, floors, boxes, and machinery are all made of brushes.

Entity - An interactive object in a level. Doors, player start-points, and ammo-boxes are all entities.

func_plat - This is the actual name for the platform entity.

*Keywords will be highlighted in bold text wherever applicable; and tasks will be in italics.

Okay, today we'll be discussing Platforms. They're a very useful part of levels; as they provide great ways not only to have multiple floors in a level; but break up the PVS as well. (The PVS is the "potentially visible set". The PVS controls how many polygons are drawn in each frame of the game. Therefore, you need to be careful about how much of the level can be seen from any one point - as large PVS's can cause slowing in your level. Ramps and stairs are one way; but a more complete method of breaking up the PVS is with platforms and elevators.)

Platforms are entities that, when triggered (usually by passing over them), raise up to a new height. They ONLY go up when triggered; and then return to a lower position after a certain time. By default, if a player remains on a lift it WON'T go down (this can be modified; but I'll explain after we make it)! This is important to remember when creating a level. If you want a moving platform that can be triggered to go both up AND down, see the elevator tutorial. I'll explain more along the way. For now, open up QERadiant. Open up the map of the first tutorial. We don't want to erase the work you did the first time around; so save it as a different name using the "File | Save As..." option from the menu bar.

Now, along the north wall (this would be the wall at the TOP of the XY view) we want to create a thin brush and place it mid-way up on the wall. To do this: make sure no brushes are selected, hold the left mouse button and drag the mouse from the upper left corner of the room (in XY view) to the far right side of the room, and part-way down. We need to make sure its a thin brush. Check in the Z axis window and adjust the size by holding down the left mouse button OUTSIDE (above or below) the new brush. Drag the mouse up or down to re-size the brush. When it's one or two grid-squares thick, you can release the left mouse button. Then, hold the left mouse button down INSIDE the thin brush and move it up or down so that it rests on coordinate 80 (in the Z-axis window). This should allow enough space for a player to stand both above and below the new brush (a player is about 64 units tall and 32 units wide).

[See fig1_1]

Next, we'll create our platform entity. It is important to note that there are two types of entities: one type is fixed in size (lights, monsters, players, etc.), and the other type is variable in size (doors, platforms, elevators, buttons, and some others fall into this one). Platforms fall into the "variable-size" category, so we must first create a brush that defines how big one is, and what texture to use. Also, platforms are always drawn in the level editor in their EXTENDED position - so lighting will be done properly on them. So, deselect everything by holding CTRL-SHIFT and left-clicking on the XY view.

Now, in your XY view create another brush in the same manner as the first (hold down the left mouse button and drag it out). This one can be smaller; around 64 units wide by 64 units long is fine - it just needs to be big enough for the player to stand on. Hold the left mouse button while the cursor is INSIDE the new brush and move it into the room so that it is right next to the "second-floor" brush we created earlier (but "south" of it). Now, in the Z-axis window we need to re-size the brush some. This is so that the lift will raise up to be even with the "second-floor" brush. To do this, (in the XY view) hold shift and the right mouse button - and drag the Z-checker INTO the "second floor" brush. (There should be three blocks - one is the floor, one is the ceiling, and one in the middle is the "second-floor" brush... The Z-Checker highlights all of the brushes and entities it is "inside" of).

You should see a new colored block (probably black) in the z-axis appear . This is the "second-floor" brush. Position the mouse cursor above the new brush (which will be our platform), and hold the left mouse button down (in the Z-axis window). Drag the mouse up or down until the new brush is level with the top of the "second-floor" brush. Align the bottom of the brush with the floor. Do this by holding the left mouse button down when the cursor is BELOW the "platform" brush (in the Z-axis window)- and drag the mouse up or down until the bottom of the "platform" brush is resting on top of the floor (the bottom-most black block in the Z-axis window). It is VERY IMPORTANT that this brush be COMPLETELY INSIDE of the room. If it is not, there will be errors with the level when it compiles; and it may not run correctly!

[See fig1_2]

Okay, now the only thing left to do is to make this brush into a platform entity... So, make sure it is selected (and only it). Position the cursor over it in the XY view and press the right mouse button. The "entity" list should pop up. Select "Func" and another menu should appear. Select "func_plat" (if you do not have the brush selected, a default-size platform will be created near the cursor). Re-select our platform and bring up the "entity" window by pressing "N" on the keyboard (In the top half of the entity window, you could scroll up or down to find the "func_plat" entity and double-click on it as an alternative to using the right mouse button; but why go to all that trouble?). Down in the lower half of the entity window screen you should see the flags and keys area. FLAGS are properties or behaviors that you can toggle on or off; and KEYS are properties you can assign more than one setting to. For instance, in this case we need to define how fast the platform will move. The default is 150. This is fine; but for our tutorial let's say we want a speed of 200. In the "key" box, type "speed" (without the quotes). Then, in the "value" box, type "200" (without the quotes). Press enter, and you should see that this key/value pair has been added to the current entity (our platform). Now, close the entity window again by pressing "N".

[See fig1_3]

All that is left now is to check this out in Quake 2! Go up to "Bsp" on the member, and select "bsp_FullVis (qrad -extra)". This will completely compile our level. If you have selected "run Q2 after compiling" in the preferences, Quake 2 will start up. If not, then load quake2 like this: quake2 +set game tutorial +map mymap
Where mymap is replaced with the name of what you saved this map as. The easiest way to do this in Windows 95 is from the "Start" menu - via the "Run..." command. Hopefully everything will work on it! You should enter the level and be able to walk on to the lowered platform (should be sticking up just a bit from the floor) - and it will raise up.

Notice that it doesn't lower until you step off of it! We can modify this slightly. When you're done experimenting around, quit Quake 2 and come back to QERadiant.

You may have a "phantom" entity window pop up - this bug is being worked on. To get rid of it, simply press "N" on the keyboard - MAKE SURE YOU DO THIS IF IT APPEARS. Now, de-select everything by pressing the "ESC" key. Then shift-left click on the platform to select it. Bring up the entity window again by pressing "N" on the keyboard. Notice that there's a FLAG called "PLAT_LOW_TRIGGER". What this does is change the trigger-effect of the platform. Normally, the platform will raise any time a player passes over it (you don't have to touch it - try jumping over it in Quake 2 and notice how it raises!). With this flag checked, the platform will only raise if a player TOUCHES the platform - and ONLY when the platform is lowered all the way. Try selecting this flag, then closing the entity window and re-compiling your map. Notice how the behavior of the platform changes in Quake 2.

This concludes the PLATFORM tutorial. In the next tutorial, we'll be working on elevators - for lifts that go up or down, depending on how you trigger them. Have fun editing!

[See fig1_4]

--HellBringer
Questions or comments? email: hbringer@pacbell.net
This is my first tutorial ever, so any info or feedback would be appreciated!
Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Use a 3 button mouse in radiant for faster editing shortcuts with the mouse.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Tutorial #4 - Elevators

Well, here we go again with another QERadiant tutorial!! I'm your host, HellBringer... I just got back from a nice Q2 LAN party - and I've got the necessary fatigue and caffeine/sugar levels to do this. :)

Today we'll be covering Elevators. Now, this is actually going to be a part of a double-tutorial. You see, there are 3 types of vertically-moving objects. Platforms (func_plat was covered in Tutorial 3), Elevators (using the trigger_elevator entity), and Doors that act as elevators (using the func_door entity). This tutorial will make the last of those three. NOTE: this tutorial builds upon Tutorial #3! Please complete that tutorial first; or at least download the map! Also, this assumes you are using the "default" windowing scheme with a large top-down (XY) view and the Z-axis off to one side. This whole elevators thing is getting pretty complex; but that's just because of the sheer number of options that the ID software team gave us... I promise to wrap it all up in my next tutorial by covering the "trigger_elevator" - but I warn you that it is an advanced subject!!

Doors as elevators.

This was pioneered in the days of Quake1; and as far as I know, its still applicable. The basic idea is to create a door (see tutorial #2 and "func_door" entities) out of a thin / platform-shaped brush; and have it "open" upwards when triggered. Normally, a door triggers when a player touches it. Thus, if a player walks on top of our "door" - it will raise up just like a platform (in this instance, a func_plat still works better). BUT, this opens up the possibility for buttons as triggers; and all the other tricks you can do with a door. What we are going to do with this today is make a brush that moves between two "floors" by pushing buttons.

BONUS: You get to learn the basics of using the "func_button" entity!!

REMEMBER: A key is a variable you type into the "key" box in the entity window - and must also have a numeric "value" typed into the value box!

To start, open up the map you created with Tutorial #3 (the "func_plat" tutorial). Save it as a new name (i.e. tutorial4)!! I assume by now you've gone through three tutorials and are familiar with the basics of how to get around in QERadiant; so I will be a bit more brief this time. First, we need to get rid of the "func_plat" entity - but we can still use the brush. So, press shift left-click on the "func_plat" to select it. Then go to "Selection | Ungroup entity" on the menu bar. This should turn the "func_plat" into a normal solid brush.
Next, we'll make this brush a moving "func_door" entity. To do this, make sure the brush is still selected (it should be), and right-click the mouse on it. When the pop-up menu appears, choose "func" and then "func_door". You should now see the brush labeled "func_door" in the top (XY) view.

We need to edit the properties of this door so that it moves correctly. The "func_door" works opposite the "func_plat" in that the "func_door" entity starts at its "lowered" or "closed" position when drawn - while the "func_plat" starts at its "raised" position when drawn. This is important to keep in mind!! Since our brush currently is tall, we want it to "open" (move) downward. So, type "N" to bring up the entity window. In the angle selection area (bottom left corner), choose "Dn" (down). Now, this will move the "func_door" down to the "first-floor" brush when activated; but if you were to compile this right now - it wouldn't work quite right. The reason for this is as follows: a "func_door" entity defaults to activating by touch (just like a "func_plat") - so if you were to go into Q2 and run up to your "func_door" elevator, it would lower down - but then just sit there. You see, by standing on top of it, you are constantly touching it; and therefore you are constantly triggering the door to lower! To avoid this, we can do two things. First off, try selecting the "start_open" flag in the entity window. This "reverses" the behavior of the "func_door". Instead of "opening" downward, this will start low and "close" (move upward) when triggered. Go ahead and try it out!

Here's what my map looked like so far.

Hit "N" to close the entity window. Choose "Bsp | Bsp_FullVis (qrad -extra)" from the menu bar (if you have chosen not to run Q2 automatically, you will need to start Q2 with your map. See earlier tutorials for how to do this). Watch and try out your new level. Notice how the door still stays "triggered" when you are touching it! By the way, did you notice how it activates BEFORE you actually touch it?? The guys at ID didn't want doors slowing you down, so they activate when you get within a small distance to them. But we can change this totally. :)

Back in QERadiant, we're going to link this door with buttons ("func_button" entities). When a "func_door" is targeted by a button or other object, it no longer activates when you touch it. So, we're going to start by making one button. Let's start by making a wall to mount the button into. This isn't necessary; but makes things look nice...
Create a brush (still on a grid setting of 8 units) that is 1 grid square wide (left to right in the XY "top" view), and as long (up and down on the screen in the XY "top" view) as the "func_door". Make it as high as the space between top of the "first-floor" brush and the bottom of the "second-floor" brush. Remember to use the Z-checker if needed. Move this brush so that it sits to the "east" (to the right in the XY "top" view) of the "func_door" by one grid-square (that is, one empty grid-square between the edge of the "func_door" and the edge of the new brush).

Here's what my map looked like so far.

Now we'll make our button. Make another brush that is 8 units (one grid-square) "wide" (again, right or left in the XY view), 24 units "long" (up or down in the XY view), and 24 units "high" (Z-axis). Move this brush so that it sits in between the "func_door" and wall-brush you created a moment ago (that's why we left the one-grid-square gap!). Also, don't forget to check the Z-axis!! A normal player is 64 units tall... so make the brush close enough to the ground for the player to be able to get to it. I positioned the button-brush so that the bottom of it was at the Z-axis coordinate 32. Let's make this brush a "func_button", shall we? Make sure it is the only thing selected (Shift-Ctrl left-button-click in the XY view, then Shift left-button- click on the brush in any view that you can see the brush in. Probably easiest to select it in the 3D window). Right-button-click on it to bring up the pop-up entity menu. Choose "func" and then "func_button". Go to our handy little entity window by pressing the "N" key - we need to set the angle that the button will move. To do this, we choose the appropriate "angle" setting in the bottom left corner. If you've made the level correctly so far, the button should get an angle of "0": This is "towards" the "small wall" brush that the button is next to. Close the entity window.

Now its time to "link" the button to the "func_door" - in other editors this involves making sure the "target" (on the button) and "targetname" (on the "func_door") keys and values were the same (In the entity window: "target" or "targetname" is put in the key box, and a name would be typed into the value box. This can still be done manually if the following method doesn't work). In QERadiant, we can use the "connect entities" feature! This greatly simplifies things - and actually draws out the connections for us! To link the button with the "func_door" entity, make sure the button is still selected. The first selected object is always the "trigger" or activator; while the second object selected is always the target. So, select the "func_door" by shift left-button-clicking on it. Now both entities should be selected - and in the proper order (nothing appears to tell you the order, its up to you to remember which ones you selected first). Press Ctrl-K (or "Selection | Connect entities" from the menu bar), and you should see the screen change. Its hard to see since the entities are so small; but there should now be a colored arrow pointing from the button to the "func_door" (There will actually be two arrows, a small one indicating the direction that the "func_door" moves, and a much larger one showing the connection between the button and the "func_door"). Before we run with this, let's make sure we can tell what our button is. To do this, we can change the texture on the surface of the button.
Deselect everything, and then select only your button. Go up to the menu bar and select "Textures | e1u1". When the program gets done loading the textures for that level, go over to the texture window and scroll down (hold the right mouse button and move the mouse up or down) until you find a texture you like. Left-clicking on the texture should change the surface of your button automatically. Try running this map (Choose "Bsp | Bsp_FullVis (qrad -extra)" from the menu bar). Notice how everything behaves. When we continue, we'll be adding a second button and changing a few things around. This might be a good time to take a break and relax. Let the info. you've learned soak in for a while. There's a LOT to this whole elevator stuff...

Here's what my map looked like so far.

Back with me?? Okay, great! Hope you're ready to continue; 'cause there's a lot more we can do.

Side Note: Did you notice how your door automatically goes back down after a time, and how the button resets after a certain amount of time?? We can adjust the amount of time before something resets with the "wait" key. Typing this into the key box in the entity window, and specifying a number in the value box changes the number of seconds before an entity can be triggered again.

On to a new experiment: adding another button. Unfortunately, QERadiant won't allow us to copy entities yet - so we'll have to make another button manually. Make a brush with the following dimensions (hint: look at the status bar at the bottom of the screen) - X:24 Y:24 Z:8
Move the brush so that it rests on top of the "second-floor" brush (on top of Z-coordinate 88 in my example map). Position it in the XY window so that it is on the "second-floor brush" and close to where the "func_door" raises up to - but NOT IN FRONT OF IT (where the player steps off the "func_door" and onto the "second-floor"). It should have been created with the last texture you selected - so it should be the same texture as your first button (this is for looks only). Make it into another button by selecting it and using the right-mouse-button. Again choose "func" and "func_button". Use the "N" key to bring up the entity window; and choose an angle of "Dn". Close the entity window and select the "func_door" again. You should now have two things selected - the button first and the "func_door" second. We can again connect the entities using the Ctrl-K function.

Here's what my map looked like so far.

Side Note: More than one entity can target the same object.

Now, we're almost ready to try this - except for one thing. Each time we trigger the "func_door", it always moves back and resets itself after a while! We can change this, however. Deselect everything and then re-select the "func_door". Use the "N" key to bring up the entity window and look at the flags. There should be one called "toggle". What this does is makes the door "open" when it is triggered the first time, "close" the second time it is triggered, and so on... Check this flag. Now close the entity window and re- compile your map to try it out! (Choose "Bsp | Bsp_FullVis (qrad -extra)" from the menu bar). Notice again how behaviors change. Its a little tricky with the button being mounted in the floor - it would work better if there was another wall to mount it on (above the "func_door" though, so it isn't covered up when the "func_door" moves up) - but this is simply for demonstration purposes.

The last part we are going to cover is the "func_door" equivalent to the "height" key. The "height" key is used on the "func_plat" entity, and can be used to change how far the "func_plat" moves. Unfortunately, the "func_door" does not have this key. Both entities do have a key called "lip", though. The "lip" value is a number that is subtracted from the movement amount of a button, platform, or door. This allows for that "little bit left sticking out" effect (the equation is: [brush height] - [lip value] = movement amount). Normally Q2 automatically sets a certain lip amount; but we can change this with the "lip" key. And not only can we change the "lip" amount, but we can change it both positively and negatively - and in large numbers if necessary. Let's get back to editing, and I'll explain as we go. This is sort of an abstract idea, so its gonna take some thinking. Go slowly!
Select ONLY the "func_door". In the Z-axis, stretch/shrink the "func_door" so that it is thin (1 grid square high). Move it up in the Z-axis so that it is level with the "second-floor" brush. Now, remember that a "func_door" only normally moves as far as it is high - so in this case it is only going to lower/raise 8 units. This is hardly enough to bring it down to the first floor!! (You can compile and check this out if you want) We can alter this, however, by using the "lip" key. First, look at how far it is from the top of the "first-floor" brush to the bottom of the "func_door". This is the distance we need to change by. Remember those algebra classes?? Here's the REAL WORLD application for them (*grin*).
The equation is: [brush height] - [lip value] = [total movement]
By reversing this, we get: [brush height] - [total movement] = [lip value]
So, in our case we start at the floor with a Z-coordinate of "8" and end at the Z-coordinate of "80" (the bottom of the "func_door"). The difference between them is our [total movement] value. In this case, its "72". Plugging this into our equation, we get:

[brush height] - 72 = [lip value]

We know our brush is 8 units tall, so:

8 - 72 = [lip value]

So:
-64 = [lip value]

Now that we know the value, let's open the entity window (make sure that just the "func_door" is selected). In the key box, type "lip" (without the quotes). In the value box, type "-64" (again, without the quotes). Press [enter] and you should see the key/value pair get added to the list in the middle of the entity window. Now close the entity window and re-compile your map. Experiment in the game and see how this works. It should function just the same as before; but the "func_door" brush now is thin.

Here's what my map looked like in the end.

Extra credit: Try changing the lip amount and see how it affects the movement of the "func_door".

Extra credit 2: Try making a "speed" key for the "func_door" or "func_button"s and see how that affects their movement!

There's lots more you can do with this - keep in mind that a "func_door" moves between two points (along an "angle" key); it doesn't have to be up and down - it could be side to side (changing the "angle" key)! Versatility is the name of the game; just make sure you understand how each entity works, and then tinker with changing that behavior. Good luck, and as always - contact me via email if you have any questions or comments!

--HellBringer
hbringer@pacbell.net

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Change the textures|render quality to a lower setting to speed things up.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Linking Entities

Keywords:

TARGET - Set this to activate targetname. (Usage: target name)

TARGETNAME - This is to be used with Target. (Usage: targetname name_of_a_target)

(example: a button with targetname of "trgt1" and door of a targetname of "trgt1", When you push the
Button the door will open. :o)

DMG - Means damage, Set the amount of damage a player (or monster) will take
when the door, Platform, or spacific entity will take when the player gets hit by it. (Usage: dmg #)

SPEED - Sets how fast the door, button, platform, etc... will move. (Usage: speed #)

WAIT - Sets how long the the wait is, before the entity returns to it's original position.(Usage: wait #)

MESSAGE - Sets a message to the player when activated. (The door will only say the message if it's set as a targetname.) (Usage: message then a message :o) )

SOUNDS - This one is Neat...The sounds I'm going to show are for the DOOR, BUTTON, PLATFORMS, and WORLDSPAWN (Usage: sounds #)
DOOR 1) silent 2) light 3) medium 4) heavy BUTTON 1) silent 2) steam metal 3) wooden clunk 4) metallic click 5) in-out 1) base fast 2) chain slow WORLDSPAWN Just select a track number (eg. 10) Most of this is in the infobox on there already. So you can basicly get the jist of it all. :o)

Now on with the tutorial. :o)

Okay what we need to do is select the door that is there, You can do that by holding SHIFT and clicking on the door. You can click on the door in the GRID VIEW or the GRAPHIC VIEW. Then after we have done that hit N for the ENTITY window to popup. The func_door should already be slected. What we need to do now is set the TARGETNAME KEY of the door. :o) So click in the KEY text box and type in "targetname" w/o quotes, Then hit enter. Then you will be in the VALUE box, just type in a name, let's use targetdoor1 as a name for now then hit enter then hit N again the entity window should be gone then hit ESC to DESELECT the door.:o) Figure 1.0 next lets make a button! (See how exciting this is!!) Select the FRONT view (XZ) Okay make a brush with the height and Width of 4 minor grid squares(the smaller squares). Figure 1.1a then select the SIDE view and set the height of about 4 minor grid squares. Do the same for the TOP view (XY) DO NOT HIT ESC JUST YET! Figure 1.1b Then just align it with the wall as shown in Figbure 1.2 After you have it aligned, then RIGHT CLICK on the button to bring up the entity's then Select func -> func_button after you do that, hit N then click in the KEY edit box and type in target hit enter then type in "targetdoor1" w/o quotes. Figure 1.2 after you do that, then hit N again you will see a blue line from the button to the door. (unless you changed the editors colors.) Figure 1.3 Okay, you will need to make a button for the other side also, the easiest thing I found is to have the button selected and then click on SELECTION -> CLONE that way it will clone the button and drag it to the other room and put it on the wall...floor...or wherever you want it. (as long as it is accessable by the players) then hit ESC to Unselect it. Figure 1.4 Then you will need to change the angle of the buttons. (What way it moves) I set the botton one to 90 and the top one to 270 so that way they look like buttons going into the wall :o) that is looking from the TOP View. But basicly that is it, that is how you link entities You can do that for most things, Monsters, platforms, lights, etc... Also there is health that you can put on the buttons and doors (Basicly kill the button) shoot it untill it is dead so that it will activate. :o) Try your own combinations and see how they work. :o) ::sighs:: I think that about covers it. Same as # Tutorail 3, This is my 1st tutorial so let me know how I did. if you have any question about it e-mail me. I would love to know how I did! :o) Thanks for reading! :o) MoRbiD

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Textures|Texture window scale lets you view the textures in various sizes.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Edge Manipulation

Today I am going to discuss Edge Manipulation for you. There is not to much to it in fact so this is going to be pretty easy.

1. Create a Brush
First we want to create a simple square brush. We are not going to build any rooms or anything of that nature since edge manipulation is usually done with a single brush for details.

2. Turning on the Edge Manipulation
This is really simple. All you have to do is hit the "E" key to turn on edge manipulation. When you hit the "E" key you should see some dots appear on different areas of the brush we created. Click here to see an image of what you should see.

3. Lets Manipulate Some Edges
Ok lets get down to the dirty stuff. Make sure you are in the top view (xy view). Now put your mouse curser over the top most center blue dot. Now with the cursor over the blue dot hold down the "left mouse button" and "drag" the cursor to the center of the brush. Look at this image to see an example of what it should look like.

Now what we have done is dragged that edge of the brush to the center therefore creating a semi wedge shaped brush.

4. Other Sides
Now it seems pretty obvious that, that is not the only spot to use edge manipulation. So now click on that center blue dot that should now be in the center of the brush and drag it back to where it was so that your brush looks like a square again.

Ok now that it is a square brush again switch to any side view. Ok now look at the bottom left mouse blue dot. This time "left click" and "drag" the blue dot to the center of the brush again. You just now made a perfect wedge that should look something like this example shot.

Keep in mind that if you do make a perfect wedge like that usually you will not be able to move the blue dot back to form a square again.

5. Thats About How it Goes
Well it is as simple as that. You can also alter the edges (blue dots) in the 3d view but this can prove to be hard at times to get exactly what you want because, well the 3d view is a tad different and the possibilities of getting exactly what you want is rare but it is nice to have that feature if you want to use it.

Other then that, all i can say is to experiment with other shapes and size's of brushs and see what you come up with. If brush clipping is a god, then edge manipulation is a demi-god in my book.

Now you know the basics of edge manipulation and how to use it. Hope this helped you out in some manner.

If you have questions or comments please email me. I will try to get back to you as soon as I can.
Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Check out the bspmenu tutorial so you can make your own bsp menu items.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

The Basics of 2-Point Clipping

Todays lesson is in 2-Point Clipping. Though Edge manipulation is a good tool and I do use it a lot, 2-point clipping I do tend to use a whole lot more. This is one handy tool and I am going to show those of you who do not know what it is or how to use it what you need to know to get your self started using this wonderful tool.

1. Create A Brush
Ok first we want to start a new map because we are once again just going to play with a single brush. So once you have started your new map, lets make a fairly well sized brush to play with, lets make it 256x256x256 in size. Also in case you are wondering it does not matter which texture set we use. Do not un select your brush because it has to be selected in order to do clipping.

2. Lets Make A Wedge
First I want to start with a commonly used object and a fairly simple object to make with 2 point clipping. This object happens to be a wedge or slanted surface.

First what we want to do is select our brush if we did not leave it selected when we created it. To do this just hold your cursor over the brush and press "shift +left mouse click" and it should be selected again. Now we want to turn on clipping mode. There is about 3 ways to do this.

1. You can hit the "x" key
2. You can click on the button on the tool bar that looks like 3 little blue dots and and lines forming a angled triangle.
3. By going to the menu and selecting "Selection" then in its drop down menu select "Clipper" and from there select "Toggle clipper".

Ok once you have done either one of those to turn on the clipper everything still looks the same except for the button on the toolbar is now pushed in.

Now, take your mouse cursor and click on the top left most part of the brush, and make sure it is exactly on it at this point. You should see a blue dot appear with the number "1" next to it. It should look like this.

Now click on the bottom right most part of the brush, making sure it is exactly on the corner. Once again a blue dot should appear but this time it should have the number "2" next to it and a yellow line should have appeared as well connecting the two dots and going along the brush on two lines. It should look like this.

Ok now we have the points selected where we want to clip the brush. All we have to do now is hit the "Enter" key. What this should have done is cut out the area of the brush that was surrounded in the yellow lines. So you should now have a brush that looks like this.

Now you can do whatever you want to the brush, just make sure you are out of clipping mode simply by hitting the "esc" once. Please do experiment with this 2 point clipping because you can place those blue dots where ever you like on the brush for different shapes.

3. I Say We Split It 50/50
Another nice thing about brush clipping is you do not always have to make the part of the brush surrounded in yellow disappear. You can also Split the brush between those points. Let me show you how.

First lets get rid of that brush we just clipped by hitting the "backspace" key to delete it. There should no longer be any brushs in the map. Now just create another 256x256x256 brush that is square.

Ok now just do what we did before, make sure the brush is selected, turn on the clipper, put a blue dot on the top left corner and a blue dot on the bottom right corner. Should look like this.

Ok this time do "NOT" hit the enter key. This time to split the brush so that you the other side surrounded in yellow does not disappear and you end up with 2 brushs all you have to do is hold down the "shift" key and hit the "return" key all at the same time. Now the brush should have been split and should now look something like this.

These are now 2 seperate brushs and act that way as well. So now you know the basics of brush clipping in QERadiant. Very simple and very usefull. Dont forget you can do a whole lot of stuff with clipping and this was just a lesson to get you started, please experiment by all means and learn the many things you can do with clipping. 3-point clipping is going to come in another lesson and I do not know when because to be frankly honest with you its a hard part of clipping to understand.

So untill next time if you have any questions or comments feel free to email me.
Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Check out the bspmenu tutorial so you can make your own bsp menu items.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Exploding objects

This tutorial will show you how to make an exploding object, it looks difficult to do but it's very simple really :)

1. Getting started
Firstly create to good sized rooms each with the sizes of 300x300x300 and place in there your 'info_player_start' and a light entity.

2. Make a door.
Next, create another brush which will be your door and make it 128x128.

3. Prepare to cut.
Now we need to cut a hole in the wall for the door to fit into so using the door brush extend it so it's wider than the wall's thickness. (see shot)

4. Cut the hole.
Now to cut a hole through the wall press the CSG subtract button, once this is done you can resize the thickness of the brush so it resembles a door again (see shot), don't de-select the brush just yet though

5. Associate the brush to explode.
With the brush still selected bring up the entity box by pressing 'N' and find the entity for 'func_explosive' and double-click it, this will associate the door with the 'func_explosive', don't close the entity box just yet.

6. Giving the explosion life.
We need to fill in a few values for the door to explode properly, Enter these as shown below

mass 800
health 10
dmg 50

7. This may need more now.
To make the door explode with more realism we'll throw in a few explosions.

8. Give it a little more boom.
Near the door place a 'target_explosion' and de-select it.

9. Select a couple of important things.
Now select your door and then select the 'target_explosion' and make sure there both selected. (it's important that you select the door first)

10. Make that boom happen.
With them both selected hold down CTRL and then press K, this will tie the 2 entities together so that when the door blows up an explosion effect is created as well.

11. Go play with the exploding door.
Compile your map and see your door blow up!

LaRd
Thanks Lard!

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Use a 3 button mouse in radiant for faster editing shortcuts with the mouse.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.
Tutorial 9 Regions

Hey hey, GrrandMaMa here. I've seen quite a few questions in various places about how use the regioning features of QERadiant, so here's the basic "how and why" of it. Regions are pretty handy, and can save you mounds of time and hair-pulling, especially as your maps get more and more complex.

1. A Little Bit About Regions

First off, I should probably explain what a region is. A region is just a set area of your map, or a group of brushes that you work on, without other brushes in the way. There are two major reasons for using regions:

  • Simplicity: If you're working on a specific area, you don't want a bunch of extra brushes getting in the way of selections in the 2d views. This includes skies, and ceilings in the top-down, and walls or supports in the side, and front views. You also don't have lines all over the place confusing the structures.
  • Focus: It's just plain easier to concentrate on one area if that's all you're looking at.

2. Load up the map

Lets load up the map. As you can see (Fig 1), there are some layers going on, and some brushes that can be hard to get to from the 2D views (the light fixtures, and supports). This is where the regions come in.

There are a few different types of regions, and they all have different uses, so let's go over them one by one.

         Fig-1:

3. Set XY

"Set XY" is used just as it says. It takes the brushes in the XY View, and makes a region out of them. This is a pretty small map, so let's zoom in ("del" key, on default configuration) so we can see how it works.

Zoom in fairly closely, and select "set XY" from the "region" menu. Now, if you zoom back out ("insert" key) you'll notice that the grid only covers that area that you were zoomed into, and the brushes that weren't in the view are gone. That grid is your region. (we'll get back to the grid in a few...)

Another thing you might notice, is that, while the grid is smaller in the XY view, it still extends to +/-4096 in the side and front views. This is because you've set a "tall" region. Tall regions are best for isolating whole areas of a map, such as a room that has no other rooms above or below it.

Select "Off" from the "Region" menu to clear your region, and go back to a full view of your map.

         Fig-2:

Fig-3:

4. Set Tall Brush

Okay.. now lets say you don't want to zoom in, but you still want to set a tall region. Simple. Create a brush that covers the area you want to region off, (the height of the brush doesn't matter, only the XY size) and select "Set Tall Brush" from the "Region" menu (make sure the brush, and only that brush is selected.) Pretty much the same as "Set XY", but with more control over where your region will be.

Select "Off" from the "Region" menu to clear your region, and go back to a full view of your map.

         Fig-4:

Fig-5:

5. Set Brush

Now, let's say we want to select an area, but don't want the whole vertical range included in our region. Make a brush that covers the area you want to select. Make sure it covers everything in all three views, and that it's the only brush selected. Now select "Set Brush" from the "region" menu.

This is especially handy when you want to work inside of a room without the ceiling and/or walls in the way.

Select "Off" from the "Region" menu to clear your region, and go back to a full view of your map.

Fig-6:

Fig-7:

6. Set Selected Brushes

This is an especially handy one, allowing you to specify particular brushes in your map to region off. Let's try using two regioning methods at once.

First, make a tall selection that doesn't include the walls. (fig. 5)

Now that the walls are out of the way, lets switch to one of the side views, and select two of the lights. (fig. 6)

Now, select "Set selected brushes" from the "Region" menu.

Voila. two lights, and nothing else.

Select "Off" from the "Region" menu to clear your region, and go back to a full view of your map.

(WolfeN here)I just wanted to put my 2 cents into this section here. When using this particular form of region I like to create a large brush around a particular room I want to work on and leave the the large brush selected. I then goto "Selection" on the menu and then to "Selected" and I choose "Select inside". This will select all brushs that are inside the currently selected brush and then I goto "Region" and select "Set Selected". This is a good way as you can then just work room by room.

Fig-8:

Fig-9:

Fig-10:

7. Compiling Regions

Now a quick note. If you compile from a region, QERadiant will save the brushes in the region to a *.reg file (makes sense, don't it?) and compiles only the brushes and entities in that region. Simply put, this kicks the proverbial ass over compiling a whole map every time you want to look at something.

There are, however a few things you should know:

  • There doesn't need to be an info_player_start in the region. QERadiant will use the location of the camera, so if the camera is outside of the region, you'll get a leak.
  • Compiling regions are calculated on a tall brush basis. What this means is, if you don't have a roof and floor in the region, you get a leak. It also means that if the region passes outside of the walls, and the floor on the other side of the wall is not included in the region, you'll get a leak.

Basically, when you compile from regions, you have to be very aware of where your regions are defined, where your camera is located, and what brushes are included.

Once you get the hang of it though, it will save you hours upon hours of compile time during the process.

That's it...have fun

-GrrandMaMa

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Hit the "F" key to bring up a filter menu to make mapping easier. =)

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

1,2,3, and 4 way hall set creation.

Opening Statements.
Ok folks. Here we are at are 10th tutorial. Considering its been a long time (to long in fact) since my last tutorial and there is now prefab support for Radiant I figured I would finally do this tutorial.

We are going to learn how to create hallway prefabs. What I mean by hallway prefabs is basically well explained by saying its a set of brushs you create that connect together like a puzzle. Except you know how they go together because you created the puzzle.

So we are going to go over how to make hallways that you can just connect simply by dragging them together piece by piece for a 2 way (corner or single turn) a 3 way (also known as T- section or 3 way intersection) and a 4 way which is the same as a 3 way just with another opening.

Now this is going to be easier then you think. Its just a matter of knowing a basic scheme or structure you want for your hallway and a matter of knowing how to use 2 way clipping points. Thats all there is to it. Its really simple and of course I am going to show you how. But before i get started if you dont understand or know how to use radiant, go read all the other tutorials. If you dont know how to use clipping then just go read my tutorial on clipping. I am under the impression anyone reading this tutorial knows there general way around Radiant and knows the basics of Radiant so please do not expect extreme newbie talk going on in here.

Copy What?
Ok, Im going to assume you have a hall like in figure1_1. Please note that this technique can be done for any kind of hall for the most part. So this hall in figure1_1 is a basic 4 sided hall, 2 walls one roof and one floor . The brushs are all 64 units because I believe in the theory of thicker is better which there is an article about it at Quake WorkShop2 I believe.

Ok so we have this basic hall way sitting here and we want to make a bunch of different intersections that we can just slap next to it with out this crazy carving and stuff. This is great for prefabs as well if your working with a continued theme.

So lets get started with this thing. Select all the brushs that make this hall. Once you have them all selected load up the entity window (done by hitting the "N" key) and select func_group. This will make it so all the brushs are always together when your selecting them and will generally make the whole process here easier.

Ok now that it is grouped together we need to make at least 4 copies of it. So select the hallway which should take one single select now instead of each one at a time and while its red or highlighted hit the "space bar" and it will spawn a copy of the group. Move the copy off out of the way some where. Now just keep doing that untill you make at the least 4 copies.
figure1_1

Duh which "way" did he go goerge?
Now that we have our 4 copies, take one copy and rotate it by 90 degrees and then place it directly over another copy, as seen in figure1_2. Now turn on the clipping tool while the brush group is still selected and cut in a diagonal manner like seen in figure1_3. Make sure the yellow outline where the brush is going to be cut out is on the bottom half of this cut. Now hit enter to cut the brush as it apears.

You should now have a diagonal cut version of the hall and its rotated by 90 degrees. It should look like figure1_4. Just put it at the end of your hall like it is seen in figure 1_4 as well.

Now we need to grab another one of those copies we made. So one of the other copies we made and place it over the new diagonal cut brush we made, from here you should be able to see where we are going with this, take a look at figure1_5. Once the brush is over the diagonal brush you need to turn clipping mode on again and cut diagonally on this group down the same line as the cut on the other brush. Take a look figure1_6 if you dont know what I mean. You want the yellow area on this new cut to be covering that of the already diagonally cut brush we have. Once again scope out figure1_6 to see what I mean. Now just cut it by hitting enter.

Now we have just finished making the turn brush prefab. You may want to ungroup these brushs now and re select all the brushs for this corner and then regroup them as the new turn or corner brush. It should have turned out to look like figure1_7.

As you can see it connects to the end of a hallway perfectly and turns with a perfect 90 degree turn and now all you gotta do is just place it there anytime you want a 90 degree turn. You can even rotate the brush so that it turns the other way instead of the way we just made it go.

Now move that new hall out of the way cause we are gonna make the 3 way intersection hall.
figure1_2

figure1_3

figure1_4

figure1_5

figure1_6

figure1_7

3 Way? Thats perverted man!
Ok to make the the 3 way hall you need to do the same type of cutting you did to get the first diagonal cut. That will be our first piece of the 3 way. So do that now. (see figure1_4 for the piece I am speaking of)

Once that is done you want to spawn a copy of that diagonal brush and rotate it to the opposite direction. So if your piece is facing left then rotate it to face right. See figure1_8.

Now we want to cut this newly spawned copy at an angle once again so this time its gonna look like a triangle like it does in figure1_9.

Now take that new triangle looking brush and spawn a copy of it. Rotate it till it fits right in the new little slot that you see. Like I said, its like making your own puzzle. Just look at figure1_10 to see what I mean.

Now you have yourself a 3 way intersection. Easy as that. Next we do the 4 way, which is just as easy if not easier considering we already know how all this cutting is being done.
figure1_8

figure1_9

figure1_10

4 Way? Now that sounds kinky.
So to make the 4 way (boy this part is easy) grab another copy of the original hallway and all you do is cut up the brush the same as you have before all the way down to where it looks like the triangle piece we saw in figure1_10.

Once you have that little triangle, spawn 3 copies of it and place them off to the side a tad so you can grab them easy. Now just put the puzzle together. Basically you want each point of the triangle to be touching so your going to have to rotate the pieces to fit in together correctly. It should look like figure1_11. Its really simple and your pretty much always in the top view.

Man I hope you all got that. Its kinda tough to write tutorials considering I really dont like them but I only do them because they have always been a great help to me and others and I want to see some cool maps. So keep the mapping going. And please feel free to email me anytime about anything Radiant or Ravages of Radiant related.

Signing off, WolfeN
figure1_11

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

If you think you got a leak then check file|pointfile to see the way.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Water and All It's Glory

Opening Statements.
Hi None-1a here (the message board FAQ guy). Are you ready to get wet?

1: The creation of static water, and some things to avoid while useing it. .
2: How to make water that flows, (and pushes the player along)
3: Creation of water that flows out of an area when a button is pressed, (actually lava but its the same thing)
4: How to make water that looks like it has waves in it. (it's not very convinsing but it works)

Water, Lava, Slime = water in this tutorial.
When this tutorial is over you will have that option to download my version of it, this version will show you some things you should all ways avoid (not all ways problems can be used to make neat tricks but I'll leave your creative mind to find out how)

Static water, No not tv static
Static water refers to water that doesn't go anywhere. It's actually very simple, but there has been a lot of confusion on how its done.

First lets make a new project and map, name them what ever you like. Now create a room to hold every thing in, so we can see it latter in quake. Texture it how you like, the roof should have a light emitting texture.

Right here where going to make a fish tank, and a simple ladder you can use to get in it. So First make a brush out of glass (this brush should be just large enough for the player to move in), and hallow it. Give the bottom brush a new texture, should be some thing different then the floor Also delete the top brush. Make a brush that covers all the area in the newly made tank, give this brush a water texture. Now make a brush right next to the tank, hit "s" and check ladder now hit 'ok'(You might want make this a non-transparent texture so it's easy to see) See figure 11-1 to see what my area looks like, see figure 11-2 to see what happens when your texture doesn't touched the brush next to it.

Figure 11-1
(What my fish tank looked like)

Figure 11-2
(This clearly shows why you should make sure you water brushes touched the sides of its container, the same effect happens from with in the tank)

Feel the Flow
Now where going to add a long ride like thing to two edges of the map, you might need to make yours bigger (get your mind out of the gutter)

Make a track ruing around two sides of the map (see figure 11-2 to see how mine looks) Now fill the area in with a water texture (do not use a transparent texture, if you do remove trans-33 or trans-66.) not hit "s" and check flowing and one of the current flags (what flag you check will depend on where you put the water brush, current-270 can be thought of as flowing down the screen, current-180 to the left of the screen, current-90 up, current-0 right, current-up popping out of the screen, current-down going into the screen. These are all useing the top view.) There should be two water brushes over lapping in the corner. Now build and jump in to the water, you should be carried around the corner and to the end of the second water brush. (note: flowing only goes in one direction relative to the brush, so you may have to rotate/flip the brush around to get it going in the right direction.)

On a side now if you use current down make sure you allow the player a way to get out, or they will drowned.

Figure 11-3
(larger arrows show the direction of the flow, brushes must over lap for the player to be transported around the corner)

Remember to Flush
Now were going to make a simple lava brush that flows out of its container when a button is pressed, this effect was used in one of the id levels.

Again make your world bigger if you need to. Were going to use a little CGI subtracting to make the container. Our subtracting brush will then become the container. Make a 128x128x128 unit brush, use CGI subtraction to make a 128x128 unit wide hole in the floor. Now put the top of this brush level with the floor, and hollow it, deleting the top brush. (not to add some realism to the flush you can put a small area in the bottom of the lava container, you should be able to see into this area form above, but not get into it. This would make it look like that lava went some where, I'll leave this up to you)

Now make the lava brush, full the whole container with it, leave only a small lip at the top with our lava. Now hit "n" and find func_water and apply it to the brush. Give it a targetname of flush1, and an angle of down.

Now make a function button and give it a target of flush1, here I've use a floor button but you could use what ever kind of trigger you want.

Figure 11-4
(this is a little distorted, but gives you an idea on how the lava flush looks)

Ride the wave dude.
This ones a bit complicated.

Make an angled section, (I've used rock textures here but it really doesn't matter) also make a floor to this beach, for some walls, se figure 11-5 to see what I've done. next add a water section that covers, the angled area, make sure this water isn't transparent, I'll explane why in the traps section.

Next apply the func_water entity, to this wave brush, set the angle to down, and give it a targetname of wave1.

Now this is the hard part, make a func_timer. Give it a target of wave1, a random setting of 10 and a wait of 5. Also click start_on.

You'll now have a water brush that move up and down. Now we've got one thing to fix, it shouldn't go all the way down should it? Click the water brush, and add a lip, mines set to 100 yours may be different, also go to the func_timer and delete the random key, and change the wait time to .5.

The same up and down effect can be made with non-water brushes, to make a pump, you can also use a func_door to make something that can move in directions other then just up and down.

Figure 11-5
(this is the beach section, the three walls and roof around ti re sky for effect)

Traps
Water brushes aren't prefect there are some problems with them, mostly just limitations.

First never ever make a transparent water brush (or any thing) move, The effects on the player will move but the brush will appear to stand still.

Second, if you use a func_water on a water brush like that in the fish tank the edges of the water brush will be visible form and out side on all sides, not just when the water side doesn't touched the sides of other brushes.

func_water is only suppose to go up and down but some playing has lead me to believe this is untrue.

More Informative work form None-1a.

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

You can change the default color scheme by going to misc|colors.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Build Menu Tutorial

This will cover what the commands on the build menu are, what each of them does, and how to add your own to the list. I'm going to give you the full option list for the Id build tools (this is what the DLL tools are made form)

Part 1: - Standered build menu items

Many people have asked what all the commands on the build menu do, (I would have put this in the FAQ but there is more information you must know about) This is only that standard command included with all new projects, you will learn latter how to make you own/and how to include them in new projects.

Bsp_FastVis (-nowater) - Runs qbsp3 ignoring any brush with water/slim/lava content set.

Very fast vising of the level, normal qrad3 operation.

Comments - This can be use full if lava and slime are annoying you while you test the level,

other then that it's useless.

Bsp_Fastvis - Qbsp3 runs normal, Vary Fast Vising of the level, Qrad3 runs normal.

Comments - You'll run this most often, this raises r_speeds (because not all the vising is done)

Bsp_FullVis (nodetail, qrad -extra) - runs qbsp3 ignoring all brushes set as detail, QVis3 runs normally,

qrad3 uses 5 samples instead of 1.

Comments - detail brushes aren't vised in the first place so this will not increase speed at all

using qrad -extra increase qrad time. This is another mostly useless one.

Bsp_FullVis (qrad -maxlt -extra) - Runs qbsp3 and qvis normally, qrad uses 5 samples and maxlight value is set at 1

Comments - With the value of 1 this doesn't seam to do much, changing the value might help,

I'll cover that latter.

Bsp_FullVis (qrad -extra) - Runs qbsp2 and qvis normally, qrad takes 5 samples.

Comments - you should always run this on your finished levels

Bsp_FullVis (no qrad) - Runs qbsp and qvis normality but doesn't run qrad.

Comments - This is totaly useless, it can prevent high r_speeds of only using qbsp but with none

of the lighting information form qrad there are no lights.

Bsp_FullVis - all tools are run normally

Comments - This is the bear minimum that must be used on a finished level, I recommend useing qrad -extra

Bsp_FullVis (nowater) - Brushes set as lava/slime/water aren't placed. every thing else is normal

Comments - I can't think of one good reason to use this. Anyone?

Bsp_Enities - entities will be added to the bsp file

Comments - lights and any entities that need brushes will not work with this, other then that this is very

usefull for changing monsters, weapons, and ammo after the final build.

Bsp_novis - Bsp is run normally, qvis and qrad are not ran.

Comments - use this to test the basic layout of an area.

Bsp_Relight_Qrad - adds new enmities, and redoes texture lights (run qrad)

Comments - this can be used to adjust light emitted be textures
That's it, that all the statndered commands.

Part II: - Editing the menu commands

Now I'm going to tell you how to add and change the commands (and what all that cryptic stuff means in the project settings)

First the basics.

Never edit and of the command settings using the project settings dialog box in qer, this will chop and commands that don't fit in the text box off. All ways edit them using wordpad or any other things that can edit txt files.

The project settings are in a file call quak.qe4 in the scripts directory of you project directory.

All commands must start with qbsp as the first thing run (it must also be the first thing in the command heading)

Now let's brake down one of the standard commands: my comments are in []

"bsp_FullVis (qrad -maxlt -extra)[this is the header, this is use as the build command under the build menu"

"! [ that ! get replaced with <rshcmd> don't know what it is but you need it]

__QERPATH\qbsp3 [this gets replaced with the path to your qeradiant directory]

$ [this get replaced project file/maps/currentmap.map

&& [this simbolises the end of the command, for this build tool]

Now lets edit on of these to be a little more use full. (we're going to add ambient lights, and change the maxlight value)

1:Open up quake.qe4 in a text editor, (wordpad or the DOS command edit will work)

2: look for, "bsp_FullVis (qrad -maxlt -extra)"

3: Go through that and look for -maxlight 1 change max light to 255 (this will allow you to use lights with a

value of up to 255 instead of the normal 196 limit set now, and change the value set by qer to some thing more

use full)

4: Add the following, -ambient .3 after that -maxlight 255 (this will light all area of the map a little)

5: Now go back and change bsp_FullVis (qrad -maxlt -extra) to bsp_FullVis (qrad -maxlt -ambient .3 -extra)

6: now restart qer and marvel and what you've just done.

Hum why don't we add a use full thing to that list

1: Open up quake.qe4 in a text editor, (wordpad or the DOS command edit will work)

2: Copy and Paste the commands form bsp_fullvis to a new line at the bottom of the list (but before the })

This is the easiest way to make new commands.

3: Add these commands, after the __QERPATH\qbsp3 but before the $, -notjunc -noopt

4: Add this, after the __QERPATH\qvis3 but before the $, -fast

5: Add this, after the __QERPATH\qrad3 but before the $, -bounce 0 -chop -nopvs

6: Change the header to read bsp_fastvis (fastest build)

This add a new command to the list for the fastest build possible with the stranded tools.

Setting for new projects can be change by editing the defult.qe4 file in the qer directory

NOTE: On you system __QERPATH may have been replace with the path to you qer directory. This will not cause any problems, and is in fact much easers to read.

You can get a list of all the command line argument for this page on Rust

another informative piece of information form None-1a, I would like to thank Orbital for telling me how to work around the problem with editing the settings in qer chopping off some of my typing.
Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

If you know a trouble brush number or entity then use misc|find brush.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

Plug How?

Mission Statements.
Hi In this installment I'm going to show you where to place those new plugs your just go and how to use the two plugin sets available at this time.

So where do this go?
After installing Build 135+ you will see a directory called plugins under your Radiant directory.

C:/Program File/QERadiant/plugins

All of your plugs go in there. NOTE: Some plugs like MGS are zipped with a directory structure and contain this plugins directory in the zip, these plugs should be unzipped to the radiant directory. (for your convenience plugins can be downloaded form this site on the same page you download radiant, Robert also keeps a list on the QERadiant HomePage)

Rouge Shapes.
The Rouge Shapes plugin is found in the Rogue Plugins zip file.

This plugin has the ability to make ramps and stairs with ease.
First the Ramp.
The ramp plugin makes a ramp that runs form the highest point on the selected brush to the lowest place on the brush. (think of it as clipping the brush from corner to corner) These are a few options that control how the ramp will look.
First is style, this controls how the ends of the ramp will look. Horizontal make the ends run along xy plane (north, south, east, and west), Vertical runs along the yz plane (up, down).
Next is Orientation, this controls what axis the ramp will be made on. Try out the two settings to get a feel for them.
Next is face size, this controls how large the edges of the ramp will be. 64 should be use for brushes that touch the void, others should be as big as needed, you can allways resize latter, if you need to.
Click in Ok will make the ramp. Play around with the settings for a while to get a feel for them.
Second the stairs.
The stairs plugins makes a set of stairs. You make a brush that determines the dimensions of the finished set of stairs.
The first option is how the stairs will look. Filled, or platform looks.
The Second is how many steps you want, more steps will scale down the step highest so that they all fit in your original brush.
The next option is what axis the steps should be made on. x and y will make steps that run in different directions, z will make the steps upside down (should be used to make layered ceilings, pillars or other objects)

Both ramp and stairs require that you have one brush selected, and that the brush be at lest 16x16x16 units.
Just because there called ramp and stairs doesn't mean the player must walk on them, they can easily be used to make angled walls, even grating work by making a 16 unit high brush and running the stairs plug and deleting every other brush, that is created. I'll leave other uses up to you.

Rouge Brush Repair.
This plug is included in the Rouge Plugins download.
This plug is used to get rid of some common errors that have been problems in the past.

First is Purge Evil Brushes, A.K.A bad brushes. This will get rid of a ton of build errors that have ben in the pat a pain to track down, (should be run before each build)
Next comes remove duplicate planes, this while not giving a build error does slowdown the build times. This should be run if your getting warnings about duplicate planes while you build.
Next is count mixed contents, this counts the number of brushes that contain mixed content flags.
Find mixed face contact find the brushes that have mixed content flags set so you can easily fix the problem.

MGS
MGS has it's own set of tutorial on it's use that can be found at the MGS WebSite
I have had using the MGA options for brush scripting, corridor generation, and ground generation, other have reported problems, but it might just be our settings.

Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

You can make custome .ini files and specify them in the preferences.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


QERadiant.com

Click Here!
QERadiant is FREE. It is based on the source code released by id software for QE4 (the editor they used to make Quake2). Do NOT send me or ask to send me money or compensation of any kind. If you have extra money laying around, give it to a good abused children's charity.

details, Details, DETAILS and other build speed boost

Mission Statement
This tutorial has been a long time coming, I lost my note over it 5 times sorry. Anyway this covers some topics that novices and pros alike tend to over look. Mostly because all tutorial on speeding up build times where made with a technical perspective. This tutorial is different (you don't need to know what a winding it to get better build speed) I'm going to tell you what the techniques are and how to use them, I'll also try to give you situations that they work best in. One last note my example map can't be downloaded at the current time (it's a mod map on mine that will not be distributed until it's done.) However stats on my example map and some screens can be found to the right of each section.

Detail Brushes
Detail brushes with there detail property set. In Radiant setting this is as simple as selecting the brushes you want, going to the selection menu and click Make Detail (Clicking Make Structural will turn the detail option off)

On the other hand it is difficult to make direct rules on where detail brushes should be used. How every the following tips have worked form me in my map (See left)

Light fixtures, Crates, and other objects that the player can see over all ways work well. Transparent and entity brushes are automatically set as detail when you build (AKA, the do not emit planes to carve up the empty space See Technical note at the end of this tutorial) Other objects that tend to work well are rocks, ladders, computers, and thin brushes that extend to higher highest. Detail should never be used on void brushes (brushes that touch the void) Never ever simply make all brushes in a room detail with our at least thinking about it first.

The Area in the example uses detail brushes for the Crates, rocks on the walls, and the light post. As you can see details will ad in reducing build times dramaticly.

-Normal-

This image is looking fomr the
higest r_speed point. It counts in
at 561 visable triangles.

Portal Clusters: 490
Num Portals: 1970
Vis Speeds: 6329
Also Reported: Warning: Leaf portals saw into leaf
And Duplicate Plane.

-Using Details-

Portal Clusters: 141
Num Portals: 341
Vis Speed: 11
Also Reported: Duplicate Plane.
r_speed in oringinals highest spot: 563

Hint Brushes
Hint brushes (Brushes with the hint texture) are one of the hardest things to get used to using in the Quake II mapper arsenal. The reason for this is that they perform a function normally handled by qbsp3 automatically (See Technical note). Hints how ever can be used very efficiently by just about every Quake II mapper.

First and simplest they can be used as detail brushes, simple enclose the object in a hint brush, this works well on brushes that are to large to be made into detail brushes. These are objects that block the playes view form a standing position but not form a jumping positing or objects the player can climb on. (smaller objects work better as details)

The second use it a lot more complicated (Read Technical Note at the end of the document before you read this) Hints can be used to slowly reveal an area to the player. Under normal Quake II operation the entire area is drawn as the player walks around a corner, all though not all of it will be in site at that time. You can use hints to make cross sections of the area around the corner so that only what the player sees is being drawn.

-Using Only Hints-
-around odjects-

Portal Clusters: 594
Num Portals: 2356
Vis Speeds: To damn long
Also Reported: Duplicate plane

-Using Details + Hints-
-To contral planes-
Portal Clusters: 165
Num Portals: 399
Vis Speeds: 600
Also Reported: Duplicate Plane
It must be noted that this area was
farly well designed from a plane contral prespective.

Area Design
Yes your areas can be designed so that they allow form maximum qbsp efficiency (or even make better use of other build speed boost and have a much lower effect on r_speeds) First off make sure all doors have a func_areaprotal used with them, This will close off the areas on either side of the door so they can be treated separately when your trying to bring r_speeds down. you should also be testing r_speeds the whole time your making the level (I build after each an hour of editing testing every thing). Also be creative with how your handle r_speeds, (one of the feature not shown in the screens of my level is a semitrailer siting at the entrance to the warehouse, this trailer what placed there because the r_speeds where still to high even with the func_areportail there, the trailer was to make sure the outside area was not visible while the door was open. It allow adds a bit of atmosphere to the level. You might also want to try making the walls touching the void 64 units wide or larger, for some reason this actually works don't know why but it does. All Warning and Errors should be eliminated for maximum speed.

Lastly your areas can either be small and detailed or large with little detail not both, trying to make a large detailed area causes a ton of problems (although it can be done but it is a pain in the ass) Also software mode is the only place you should be checking r_speeds, there are several reasons for this. (the biggest is that software's r_speeds read out it much more detailed then that of the opengl modes, it will also let you see every clearly when your r_speeds are too high as things will begin to blink in and out of view)

Working with Area Portals
Area Portals while normally used in doors only can also be use in other places.

Fallow These steps to make an area portal.

  1. 1 Make a Brush larger then the door.
  2. 2 Make sure you give the func_areaportal a target name (commonly ap#)
  3. 3 Give the door a target that is the same as of aps targetname
  4. 4 If the door is a multipart door only one part the target, give every part a team key with the same value.
The first problem you'll have it ap's is that they don't like windows, water, or other transparent brushes around them here's a quick fix to that problem. Make ap's in the windows to, give them a targetname of what ever you want, now make a trigger multiple with no sound or message that triggers the ap before they come into the players view. (However this trick will not work in muiltiplayer modes, as one player could trip the aps while they are in another players view. To stop this click the not deathmatch and not co-op options in the entity list, hit 'n' to bring it up.

Technical Note
Under normal operation qbsp3 divides the empty space in your map in to portals (Or player visible areas) Detail Brushes are brushes that do not make portals (the less portals or the better organized the portals the faster qvis3 can work.) Hint brushes do the opposite of details hints are manual dividing planes and a new portal will be created along each side and inside of it, it will also stop any other portals form going any father. For the best build speeds you can use hints to stop portal form intersecting each other and thus lower the number of portals and portal clusters your maps will have.

Final Word On How future bsp/vis utilities, and editors should work
I believe it time to remove the portal creation engine form bsp utilities and place it in the editor. This way mappers could have a level of control over the portal creation that only exist in theory at this time. In theory if portals where created with maximum efficiency only a fast vis would be necessary for the best performance, however with auto portal creation used today this is impossible to achieve with all but the simplest of areas.

This could work like this the editor would be similar to UnrealED after an area is created that area is loaded up into a special subtraction type editor (all brush used in the area would be displayed in say a dark gray, to set them a part form the complex work your about to do) The mapper would then build player visible by clipping the empty space. This whole process could still be done in an auto portal mode for mappers that don't want to bother with it. The process of loading the areas in the portal editor could also be automated by having areas on the map marked as done and under construction parts that the mapper has marked as done are uneditable unless they are remarked as under construction. When a mapper marks an area as done that area is loaded into the portal editor and the empty space volume is calculated, and the clipping is ready to begin. Areas that are marked as under construction use auto portal creation for test purposes.

These are just ideas and given the look of the .ptr file used with quake II editing it is possible to modify the tools to work in this way, al though it might be pointless with quake III under development. Quake III however could have users created tools that work on these ideas, with quake III so far along in development at this time id created portal tools are unlikely but you never know.

None-1a
Main
Tutorials / Tips
Plugins / Coding
Hosted Sites
Bug Report
FAQ
Reviews
Interviews
Forums
Files
Gamedesign.net
Links
Credits / Staff

Regioning is your freind. Check out the regions tutorial.

Main - Tutorials / Tips - Plugins / Coding - Hosted Sites - Bug Report - Reviews - Interviews - Forums - Files - Gamedesign.net - Links - Credits / Staff


Quake III Arena

Shader Manual

Revision #12

By Paul Jaquays and Brian Hook

(with additional material by John Carmack, Christian Antkow, Kevin Cloud, & Adrian Carmack)

1. Preface: Making Your Own Shaders

2. Introduction

3. General Shader Keywords

4. Q3MAP Specific Shader Keywords

5. Editor specific shader instructions

6. Stage Specific Keywords

7. Notes on Alpha Channels

8. Troubleshooting Shaders

9. Creating New Textures


Quake III Arena

Shader Manual

Revision #12

By Paul Jaquays and Brian Hook

(with additional material by John Carmack, Christian Antkow, Kevin Cloud, & Adrian Carmack)

1 Preface: Making Your Own Shaders

The Manual for the Q3Radiant editor program contains a section called Creating New Assets that has the necessary information for setting up the files to create your own custom Quake III Arena shaders. It is recommended that you study the scripts in this document and in the individual shader scripts. Pay careful attention to syntax and punctuation. This is where you are most likely to make mistakes.

2 Introduction

The graphic engine for Quake III Arena has taken a step forward by putting much more direct control over the surface qualities of textures into the hands of designers and artists. In writing this manual, we have tried to define the concepts and tools that are used to modify textures in a way that, it is hoped, will be graspable by users who already have basic knowledge of computer graphics but are not necessarily computer programmers. It is not a tutorial, nor was it intended to be one.

2.1 What is a Shader?

Shaders are short text scripts that define the properties of a surface as it appears and functions in a game world (or compatible editing tool). By convention, the documents that contain these scripts usually has the same name as the texture set which contains the textures being modified (e.g; base, hell, castle, etc,). Several specific script documents have also been created to handle special cases, like liquids, sky and special effects.

For Quake III Arena, Shader scripts are located in quake3/baseq3/scripts.

A Quake III Arena shader file consists of a series of surface attribute and rendering instructions formatted within braces (“{“ and “}”). Below you can see a simple example of syntax and format for a single process, including the Q3MAP keywords or “Surface Parameters”, which follow the first bracket and a single bracketed “stage”:

textures/liquids/lava

{

deformVertexes wave sin 0 3 0 0.1

tessSize 64

{

map textures/common/lava.tga

}

}

2.2 Shader Name & File Conventions

The first line is the shader name. Shader names can be up to 63 characters long. The names are often a mirror of a pathname to a .tga file without the extension or basedir (/quake3/baseq3 in our case), but they do not need to be.

Shaders that are only going to be referenced by the game code, not modeling tools, often are just a single world, like “projectionShadow” or “viewBlood”.

Shaders that are used on characters or other polygon models need to mirror a .tga file, which allows the modelers to build with normal textures, then have the special effects show up when the model is loaded into the game.

Shaders that are placed on surfaces in the map editor commonly mirror a .tga file, but the “qer_editorimage” shader parameter can force the editor to use an arbitrary image for display.

Shader pathnames have a case sensitivity issue – on windows, they aren’t case sensitive, but on unix they are. Try to always use lowercase for filenames, and always use forward slashes “/” for directory separators.

2.3 Shader Types

The keywords that affect shaders are divided into two classes. The first class of keywords are global parameters. Some global parameters ( “surfaceparms.” And all “q3map_” keywords) are processed by Q3MAP, and change physical attributes of the surface that uses the shader. These attributes can affect the player. To see changes in these parameters one must re-bsp the map.

The remaining global keywords, and all Stage Specific Keywords are processed by the renderer. They are appearance changes only and have no effect on game play or game mechanics. Changes to any of these attributes will take effect as soon as the game goes to another level or vid_restarts (type command vid_restart in the game console).

Shader keywords are not case sensitive.

IMPORTANT NOTE: some of the shader commands may be order dependent, so it’s good practice to place all global shader commands (keywords defined in this section) at the very beginning of the shader and to place shader stages at the end (see various examples).

2.4 Key Concepts

Ideally, a designer or artist who is manipulating textures with shader files has a basic understanding of wave forms and knows about mixing colored light (high school physics sort of stuff). If not, there are some concepts you need to have a grasp on to make shaders work for you.

2.4.1 Surface Effects vs. Content Effects vs. Deformation Effects

Shaders not only modify the visible aspect of textures on a geometry brush, curve, patch or mesh model, but they can also have an effect on both the content, “shape,” and apparent movement of those things. A surface effect does nothing to modify the shape or content of the brush. Surface effects include glows, transparencies and rgb (red, green, blue) value changes. Content shaders affect the way the brush operates in the game world. Examples include water, fog, nonsolid, and structural. Deformation effects change the actual shape of the affected brush or curve, and may make it appear to move.

2.4.2 Power Has a Price

The shader script gives the designer, artist and programmer a great deal of easily accessible power over the appearance of and potential special effects that may be applied to surfaces in the game world. But it is power that comes with a price tag attached, and the cost is measured in performance speed. Each shader phase that affects the appearance of a texture causes the Q3:A engine to make another processing pass and redraw the world. Think of it as if you were adding all the shader-affected triangles to the total r_speed count for each stage in the shader script. A shader-manipulated texture that is seen through another shader manipulated texture (e.g.; a light in fog) has the effect of adding the total number of passes together for the affected triangles. A light that required two passes seen through a fog that requires one pass will be treated as having to redraw that part of the world three times.

2.4.3 RGB Color

RGB means “Red, Green, Blue.” Mixing red, green and blue light in differing intensities creates the colors in computers and television monitors. This is called additive color (as opposed to the mixing of pigments in paint or colored ink in the printing process, which is subtractive color). In Quake III Arena and most higher-end computer art programs (and the color selector in Windows), the intensities of the individual Red, Green and Blue components are expressed as number values. When mixed together on a screen, number values of equal intensity in each component color create a completely neutral (gray) color. The lower the number value (towards 0), the darker the shade. The higher the value, the lighter the shade or the more saturated the color until it reaches a maximum value of 255 (in the art programs). All colors possible on the computer can be expressed as a formula of three numbers. The value for complete black is 0 0 0. The value for complete white is 255 255 255. However, the Quake III Arena graphics engine requires that the color range be “normalized” into a range between 0.0 and 1.0.

2.4.4 Normalization: a Scale of 0 to 1

The mathematics in Quake III Arena use a scale of 0.0 to 1.0 instead of 0 to 255. Most computer art programs that can express RGB values as numbers use the 0 to 255 scale. To convert numbers, divide each of the art program’s values for the component colors by 255. The resulting three values are your Quake III Arena formula for that color component. The same holds true for texture coordinates.

2.4.5 Texture Sizes

TGA texture files are measured in pixels (picture elements). Textures are measured in powers of 2, with 16 x16 pixels being the smallest (typically) texture in use. Most will be larger. Textures need not be square, so long as both dimensions are powers of 2. Examples include: 32x256, 16x32, 128x16.

2.4.6 Color Math

In Quake III Arena , colors are changed by mathematical equations worked on the textures by way of the scripts or “programlets” in the shader file. An equation that adds to or multiplies the number values in a texture causes it to become darker. Equations that subtract from or modulate number values in a texture cause it to become lighter. Either equation can change the hue and saturation of a color.

2.4.7 Measurements

The measurements used in the shaders are in either game units, color units, or texture units.

· Game unit: A game unit is used by deformations to specify sizes relative to the world. Game units are the same scale we have had since way back in the Wolfenstein days – 8 units equals one foot. The default texture scale used by the Q3Radiant map editor results in two texels for each game unit, but that can be freely changed.

· Color units: Colors scale the values generated by the texture units to produce lighting effects. A value of 0.0 will be completely black, and a value of 1.0 will leave the texture unchanged. Colors are sometimes specified with a single value to be used across all red, green, and blue channels, or sometimes as separate values for each channel.

· Texture units: This is the normalized (see above) dimensions of the original texture image (or a previously modified texture at a given stage in the shader pipeline). A full texture, regardless of its original size in texels, has a normalized measurement of 1.0 x 1.0. For normal repeating textures, it is possible to have value greater than 1.0 or less than 0.0, resulting in repeating of the texture. The coordinates are usually assigned by the level editor or modeling tools, but you still need to be aware of this for scrolling or turbulent movement of the texture at runtime.

2.4.8 Waveform Functions

Many of the shader functions use waveforms to modulate measurements over time. Where appropriate, additional information is provided with wave modulated keyword functions to describe the effect of a particular waveform on that process. Currently there are five waveforms in use in Q3A shaders:

Sin: Sin stands for sine wave, a regular smoothly flowing wave ranging from –1 to 1.

Triangle: Triangle is a wave with a sharp ascent and a sharp decay, ranging from 0 to 1. It will make a choppy looking wave forms.

Square: A square wave simply switches from –1 to 1 with no in-between.

Sawtooth: In the sawtooth wave, the ascent is like a triangle wave from 0 to 1, but the decay cuts off sharply back to 0.

Inversesawtooth: This is the reverse of the sawtooth … instant ascent to the peak value (1), then a triangle wave descent to the valley value (0). The phase on this goes from 1.0 to 0.0 instead of 0.0 to 1.0. This wave is particularly useful for additive cross-fades.

Waveforms all have the following properties:

<base> Where the wave form begins. Amplitude is measured from this base value.

<amplitude> This is the height of the wave created, measured from the base. You will probably need to test and tweak this value to get it correct for each new shader stage. The greater the amplitude, the higher the wave peaks and the deeper the valleys.

<phase> This is a normalized value between 0.0 and 1.0. Changing phase to a non-zero value affects the point on the wave at which the wave form initially begins to be plotted. Example: In Sin or Triangle wave, a phase of 0.25 means it begins one fourth (25%) of the way along the curve, or more simply put, it begins at the peak of the wave. A phase of 0.5 would begin at the point the wave re-crosses the base line. A phase of 0.75 would be at the lowest point of the valley. If only one wave form is being used in a shader, a phase shift will probably not be noticed and phase should have a value of zero (0). However, including two or more stages of the same process in a single shader, but with the phases shifted can be used to create interesting visual effects. Example: using rgbGen in two stages with different colors and a 0.5 difference in phase would cause the manipulated texture to modulate between two distinct colors. Phase changes can also be used when you have two uses of the same effect near each other, and you don’t want them to be synchronized. You would write a separate shader for each, changing only the phase value.

<freq> Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of 1 would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10 seconds.


3

3 General Shader Keywords

IMPORTANT NOTE: Once again, be aware that some of the shader commands may be order dependent, so it’s good practice to place all global shader commands (keywords defined in this section) at the very beginning of the shader and to place shader stages at the end (see various examples).

These Keywords are global to a shader and affect all stages. They are also ignored by Q3MAP.

3.1 skyParms <farbox> <cloudheight> <nearbox>

Specifies how to use the surface as a sky, including an optional far box (stars, moon, etc), optional cloud layers with any shader attributes, and an optional near box (mountains in front of the clouds, etc).

<Farbox> Specifies a set of files to use as an environment box behind all cloud layers. Specify “-“ for no farbox, or a file base name. A base name of “env/test” would look for files “env/test_rt.tga”, “env/test_lf.tga”, “env/test_ft.tga”, “env/test_bk.tga”, “env/test_up.tga”, “env/test_dn.tga” to use as the right / left / front / back / up / down sides.

<cloudheight> controls apparent curvature of the cloud layers – lower numbers mean more curvature (and thus more distortion at the horizons). Higher height values create “flatter” skies with less horizon distortion. Think of height as the radius of a sphere on which the clouds are mapped. Good ranges are 64 to 256. The default value is 128.

<nearbox> Specified as farbox, to be alpha blended on top of the clouds. This has not been tested in a long time, so it probably doesn’t actually work. Set to “-“ to ignore.

Design Notes:

· If you are making a map where the sky is seen by looking up most of the time, use a lower cloudheight value. Under those circumstances the tighter curve looks more dynamic. If you are making a map where the sky is seen by looking out windows most of the time or has a map area that is open to the sky on one or more sides, use a higher height to make the clouds seem more natural.

· It is possible to create a sky with up to 8 cloud layers, but that also means 8 processing passes and a potentially large processing hit.

· Be aware that the skybox does not wrap around the entire world. The “floor” or bottom face of the skybox is not drawn by the game. If a player in the game can see that face, they will see the “hall of mirrors” effect.

Example: Sky script

textures/skies/xtoxicsky_dm9

{

qer_editorimage textures/skies/toxicsky.tga

surfaceparm noimpact

surfaceparm nolightmap

q3map_globaltexture

q3map_lightsubdivide 256

q3map_surfacelight 400

surfaceparm sky

q3map_sun 1 1 0.5 150 30 60

skyparms full 512 -

{

map textures/skies/inteldimclouds.tga

tcMod scroll 0.1 0.1

tcMod scale 3 2

}

{

map textures/skies/intelredclouds.tga

blendFunc add

tcMod scroll 0.05 0.05

tcMod scale 3 3

}

}

3.2 cull <side>

Every surface of a polygon has two sides, a front and a back. Typically, we only see the front or “out” side. For example, a solid block you only show the front side. In many applications we see both. For example, in water, you can see both front and a back. The same is true for things like grates and screens.

To “cull” means to remove. The value parameter determines the type of face culling to apply. The default value is cull front if this keyword is not specified. However for items that should be inverted then the value back should be used. To disable culling, the value disable or none should be used. Only one cull instruction can be set for the shader.

3.2.1 cull front

The front or “outside” of the polygon is not drawn in the world. This is the default value. It is used if the keyword “cull” appears in the content instructions without a <side> value or if the keyword cull does not appear at all in the shader.

3.2.2 cull back

Cull back removes the back or “inside” of a polygon from being drawn in the world.

3.2.3 cull disable, cull none

Neither side of the polygon is removed. Both sides are drawn in the game. Very useful for making panels or barriers that have no depth, such as grates, screens, metal wire fences and so on and for liquid volumes that the player can see from within. Also used for energy fields, sprites, and weapon effects (e.g.; plasma).

Design Notes: For things like grates and screens, put the texture with the cull none property on one face only. On the other faces, use a non-drawing texture.

3.3 deformVertexes

This function performs a general deformation on the surface’s vertexes, changing the actual shape of the surface before drawing the shader passes. You can stack multiple deformVertexes commands to modify positions in more complex ways, making an object move in two dimensions, for instance.

3.3.1 deformVertexes wave <div> <func> <base> <amplitude> <phase> <freq>

Designed for water surfaces, modifying the values differently at each point. It accepts the standard wave functions of the type sin, triangle, square, sawtooth or inversesawtooth. The “div” parameter is used to control the wave “spread” – a value equal to the tessSize of the surface is a good default value (tessSize is subdivision size, in game units, used for the shader when seen in the game world) .

3.3.2 deformVertexes normal <div> <func> <base> <amplitude ~0.1-~0.5> <frequency ~1.0-~4.0>

This deformation affects the normals of a vertex without actually moving it, which will effect later shader options like lighting and especially environment mapping. If the shader stages don’t use normals in any of their calculations, there will be no visible effect.

Design Notes: Putting values of 0.1 t o 0.5 in Amplitude and 1.0 to 4.0 in the Frequency can produce some satisfying results. Some things that have been done with it: A small fluttering bat, falling leaves, rain, flags.

3.3.3 deformVertexes bulge <bulgeWidth> <bulgeHeight> <bulgeSpeed>

This forces a bulge to move along the given s and t directions. Designed for use on curved pipes.

Specific parameter definitions for deform keywords:

<div> This is roughly defined as the size of the waves that occur. It is measured in game units. Smaller values create a greater density of smaller wave forms occurring in a given area. Larger values create a lesser density of waves, or otherwise put, the appearance of larger waves. To look correct this value should closely correspond to the value (in pixels) set for tessSize (tessellation size) of the texture. A value of 100.0 is a good default value (which means your tessSize should be close to that for things to look “wavelike”).

<func> This is the type of wave form being created. Sin stands for sine wave, a regular smoothly flowing wave. Triangle is a wave with a sharp ascent and a sharp decay. It will make a choppy looking wave forms. A square wave is simply on or off for the period of the frequency with no in between. The sawtooth wave has the ascent of a triangle wave, but has the decay cut off sharply like a square wave. An inversesawtooth wave reverses this.

<base> This is the distance, in game units that the apparent surface of the texture is displaced from the actual surface of the brush as placed in the editor. A positive value appears above the brush surface. A negative value appears below the brush surface. An example of this is the Quad effect, which essentially is a shell with a positive base value to stand it away from the model surface and a 0 (zero) value for amplitude.

<amplitude> The distance that the deformation moves away from the base value. See Wave Forms in the introduction for a description of amplitude.

<phase> See Wave Forms in the introduction for a description of phase)

<frequency> See Wave Forms in the introduction for a description of frequency)

Design Note: The div and amplitude parameters, when used in conjunction with liquid volumes like water should take into consideration how much the water will be moving. A large ocean area would have have massive swells (big div values) that rose and fell dramatically (big amplitude values). While a small, quiet pool may move very little.

3.3.4 deformVertexes move <x> <y> <z> <func> <base> <amplitude> <phase> <freq>

This keyword is used to make a brush, curve patch or md3 model appear to move together as a unit. The <x> <y> and <z> values are the distance and direction in game units the object appears to move relative to it’s point of origin in the map.

The <func> <base> <amplitude> <phase> and <freq> values are the same as found in other wave form manipulations.

The product of the function modifies the values x, y, and z. Therefore, if you have an amplitude of 5 and an x value of 2, the object will travel 10 units from its point of origin along the x axis. This results in a total of 20 units of motion along the x axis, since the amplitude is the variation both above and below the base.

It must be noted that an object made with this shader does not actually change position, it only appears to.

Design Note: If an object is made up of surfaces with different shaders, all must have matching deformVertexes move values or the object will appear to tear itself apart.

3.3.5 DeformVertexes autosprite

This function can be used to make any given triangle quad (pair of triangles that form a square rectangle) automatically behave like a sprite without having to make it a separate entity. This means that the “sprite” on which the texture is placed will rotate to always appear at right angles to the player’s view as a sprite would. Any four-sided brush side, flat patch, or pair of triangles in an .md3 model can have the autosprite effect on it. The brush face containing a texture with this shader keyword must be square.

Design Note: This is best used on objects that would appear the same regardless of viewing angle. An example might be a glowing light flare.

3.3.6 DeformVertexes autosprite2

Is a slightly modified “sprite” that only rotates around the middle of its longest axis. This allows you to make a pillar of fire that you can walk around, or an energy beam stretched across the room.

3.4 fogparms <red value> <green value> <blue value> <distance to Opaque>

Note: you must also specify “surfaceparm fog” to cause q3map to identify the surfaces inside the volume. Fogparms only describes how to render the fog on the surfaces.

<red value> <green value> <blue value> These are normalized values. A good computer art program should give you the RGB values for a color. To obtain the values that define fog color for Quake III Arena , divide the desired color’s Red, Green and Blue values by 255 to obtain three normalized numbers within the 0.0 to 1.0 range.

<distance to opaque> This is the distance, in game units, until the fog becomes totally opaque, as measured from the point of view of the observer. By making the height of the fog brush shorter than the distance to opaque , the apparent density of the fog can be reduced (because it never reaches the depth at which full opacity occurs)..

· The fog volume can only have one surface visible (from outside the fog).

· Fog must be made of one brush. It cannot be made of adjacent brushes.

· Fog brushes must be axial. This means that only square or rectangular brushes may contain fog, and those must have their edges drawn along the axes of the map grid (all 90 degree angles).

·

Design Notes:

· If a water texture contains a fog parameter, it must be treated as if it were a fog texture when in use.

· If a room is to be filled completely with a fog volume, it can only be entered through one surface (and still have the fog function correctly).

· Additional shader passes may be placed on a fog brush, as with other brushes.

3.5 nopicmip

This causes the texture to ignore user-set values for the r_picmip cvar command. The image will always be high resolution. Example: Used to keep images and text in the heads up display from blurring when user optimizes the game graphics.

3.6 nomipmap:

This implies nopicmip, but also prevents the generation of any lower resolution mipmaps for use by the 3d card. This will cause the texture to alias when it gets smaller, but there are some cases where you would rather have this than a blurry image. Sometimes thin slivers of triangles force things to very low mipmap levels, which leave a few constant pixels on otherwise scrolling special effects.

3.7 polygonOffset

Surfaces rendered with the polygonOffset keyword are rendered slightly off the polygon’s surface. This is typically used for wall markings and “decals.” The distance between the offset and the polygon is fixed. It is not a variable in Quake III Arena.

3.8 portal

Specifies that this texture is the surface for a portal or mirror. In the game map, a portal entity must be placed directly in front of the texture (within 64 game units). All this does is set “sort portal”, so it isn’t needed if you specify that explicitly.

3.9 sort <value>

Use this keyword to fine-tune the depth sorting of shaders as they are compared against other shaders in the game world. The basic concept is that if there is a question or a problem with shaders drawing in the wrong order against each other, this allows the designer to create a hierarchy of which shader draws in what order.

The default behavior is to put all blended shaders in sort “additive” and all other shaders in sort “opaque”, so you only need to specify this when you are trying to work around a sorting problem with multiple transparent surfaces in a scene.

The value here can be either a numerical value or one of the keywords in the following list (listed in order of ascending priority):

portal (1): This surface is a portal, it draws over every other shader seen inside the portal, but before anything in the main view.

Sky (2): Typically, the sky is the farthest surface in the game world. Drawing this after other opaque surfaces can be an optimization on some cards. This currently has the wrong value for this purpose, so it doesn’t do much of anything.

Opaque (3): This surface is opaque (rarely needed since this is the default with no blendfunc)

Banner (6) : Transparent, but very close to walls.

Underwater (8): Draw behind normal transparent surfaces.

Additive (9): normal transparent surface (default for shaders with blendfuncs)

nearest (16): this shader should always sort closest to the viewer, e.g. muzzle flashes and blend blobs


4

4 Q3MAP Specific Shader Keywords

These keywords change the physical nature of the textures and the brushes that are marked with them. Changing any of these values will require the map to be re-compiled. These are global and affect the entire shader.

4.1 tessSize <amount>

For consistency’s sake, this really should have been called q3map_tessSize. But it wasn’t. The tessSize shader controls the tessellation size (how finely a surface is chopped up in to triangles), in game units, of the surface. This is only applicable to solid brushes, not curves, and is generally only used on surfaces that are flagged with the deformVertexes keyword. Abuse of this can create a huge number of triangles. This happens during q3map processing, so maps must be reprocessed for changes to take effect.

Design Note: It can also be used on tesselating surfaces to make sure that tesselations are large, and thus, less costly in terms of triangles created.

4.2 q3map_backshader <shadername>

This allows a brush to use a different shader when you are inside it looking out. By way of example, this would allow a water brush (or other) surfaces to have a different sort order (see sort above) or appearance when seen from the inside.

4.3 q3map_globaltexture

Use this shader in the global keyword commands whenever the tcMod scale function is used in one of the later render stages. Many problems with getting shader effects to work across multiple adjacent brushes are a result of the way q3map optimizes texture precision. This option resolves that, but at the expense of some precision of the textures when they are far away from the origin of the map.

4.4 q3map_sun <red> <green> <blue> <intensity> <degrees> <elevation>

This keyword in a sky shader will create the illusion of light cast into a map by a single, infinitely distance light source (sun, moon, hellish fire, etc.). This is only processed during the lighting phase of q3map.

<red> <green> <blue> Color is described by three normalized rgb values. Color will be normalized to a 0.0 to 1.0 range, so it doesn’t matter what range you use.

<intensity> is the brightness of the generated light. A value of 100 is a fairly bright sun. The intensity of the light falls off with angle but not distance.

<degrees> is the angle relative to the directions on the map file. A setting of 0 degrees equals east. 90 is north, 180 is west and 270 is south.

<elevation> is the distance, measured in degrees from the horizon (z value of zero in the map file). An elevation of 0 is sunrise/sunset. An elevation of 90 is noon

DESIGN NOTE: Sky shaders should probably still have a q3map_surfacelight value. The “sun” gives a strong directional light, but doesn’t necessarily give the fill light needed to soften and illuminate shadows. Skies with clouds should probably have a weaker q3map_sun value and a higher q3map_surfacelight value. Heavy clouds diffuse light and weaken shadows. The opposite is true of a cloudless or nearly cloudless sky. In such cases, the “sun” or “moon” will cast stronger, shadows that have a greater degree of contrast.

Design Trick: Not certain what color formula you want to use for the sun’s light? Try this. Create a light entity. Use the Q3Radiant editor’s color selection tools to pick a color. The light’s _color key’s value will be the normalized RGB formula. Copy it from the value line in the editor (CTRL+c) and paste it into your shader.

4.5 q3map_surfaceLight <light value>

The texture gives off light equal to the <light value> set for it. The relative surface area of the texture in the world affects the actual amount of light that appears to be radiated. To give off what appears to be the same amount of light, a smaller texture must be significantly brighter than a larger texture. Unless the qer_lightimage keyword is used to select a different source for the texture’s light color information, the color of the light will be the averaged color of the texture.

4.6 q3map_lightimage < texturepath/texturename>

The keyword q3map_lightimage generates lighting from the average color of the TGA image specified by the q3map_lightimage.

The keyword sequence for generating light on a q3map_surfacelight should be ordered as follows:

1) q3map_lightimage ; (the texture providing the light and the color of the light)

2) qer_editorimage ; (the editor-only image used to select the source map for the texture)

3) the average color of the light emitted from the shader is calculated from the lightimage.)

The reason q3map_lightimage is specified for the light in the example below, is because the blend map is predominantly yellow, and the designer wanted more yellow light to be emitted from the light.

Example: Taking light from another source texture

textures/eerie/ironcrosslt2_10000

{

q3map_lightimage textures/gothic_light/ironcrosslt2.blend.tga

// this TGA is the source for the color of the blended light

qer_editorimage textures/gothic_light/ironcrosslt2.tga

//base TGA (used because the shader is used with several

// different light values

q3map_surfacelight 10000

//emitted light value of 10,000

{

map $lightmap

//source texture is affected by the lightmap

rgbGen identity

// this command handles the overbright bits created by “sunlight”

// in the game

}

{

map textures/gothic_light/ironcrosslt2.tga

blendFunc filter

rgbGen identity

}

{

map textures/gothic_light/ironcrosslt2.blend.tga

blendFunc add

}

}

4.7 q3map_lightsubdivide <value>

This allows the user to define how large, or small to make the subdivisions (triangles) in a textured surface, particularly aimed at light-emitting textures like skies. It defaults to 120 game units, but can be made larger (256 or 512) for sky boxes or smaller for light surfaces at the bottoms of cracks. This can be a dominant factor in processing time for q3map lighting.

4.8 surfaceparm <parm>

All surfaceparm keywords are preceded by the word surfaceparm as follows: surfaceparm fog or surfaceparm noimpact.

4.8.1 alphashadow

This keyword applied to a texture on a brush, patch or model will cause the lighting phase of the q3map process to use the texture’s alpha channel as a mask for casting static shadows in the game world.

Design Note: Alphashadow does not work well with fine line detail on a texture. Fine lines may not cast acceptable shadows. It appears to work best with well-defined silhouettes and wider lines within the texture. Most of our tattered banners use this to cast tattered shadows.

4.8.2 areaportal

A brush marked with this keyword functions as an area portal, a break in the Q3MAP tree. It is typically placed on a very thin brush placed inside a door entity (but is not a part of that entity). The intent is to block the game from processing surface triangles located behind it when the door is closed. It is also used by the BSPC (bot area file creation compiler) in the same manner as a cluster portal. The brush must touch all the structural brushes surrounding the areaportal.

4.8.3 clusterportal

A brush marked with this keyword function creates a subdivision of the area file (.aas) used by the bots for navigation. It is typically placed in locations that are natural breaks in a map, such as entrances to halls, doors, tunnels, etc. The intent is keep the bot from having to process the entire map at once. As with the the areaportal parameter, the affected brush must touch all the structural brushes surrounding the areaportal.

4.8.4 donotenter

Read as “do not enter.” Like clusterportal, this is a bot-only property. A brush marked with donotenter will not affect non-bot players, but bots will not enter it. It should be used only when bots appear to have difficulty navigating around some map features.

4.8.5 flesh

This will cue different sounds (in a similar manner to metalsteps ) and cause blood to appear instead of bullet impact flashes.

4.8.6 fog

Fog defines the brush as being a “fog” brush. This is a Q3MAP function that chops and identifies all geometry inside the brush. The General shader keyword fogparms must also be specified to tell how to draw the fog.

4.8.7 lava

Assigns to the texture the game properties set for lava. This affects both the surface and the content of a brush.

4.8.8 metalsteps

The player sounds as if he is walking on clanging metal steps or gratings. Other than specifiying flesh, metalsteps, nosteps, or default (i.e.; specify nothing) it is currently not possible for a designer to create or assign a specific sound routine to a texture. Note: If no sound is set for a texture, then the default footsteps sound routines are heard.

4.8.9 nodamage

The player takes no damage if he falls onto a texture with this surfaceparm

4.8.10 nodlight

Read as “No Dee Light”. A texture containing this parameter will not be affected or lit by dynamic lights, such as weapon effects. And example in Quake III Arena would be solid lava.

4.8.11 nodraw

A texture marked with nodraw will not visually appear in the game world. Most often used for triggers, clip brushes, origin brushes, and so on.

4.8.12 nodrop

When a player dies inside a volume (brush) marked nodrop, no weapon is dropped. The intend use is for “Pits of Death.” Have a kill trigger inside a nodrop volume, and when the players die here, they won't drop their weapons. The intent is to prevent unnecessary polygon pileups on the floors of pits.

4.8.13 noimpact

World entities will not impact on this texture. No explosions occur when projectiles strike this surface and no marks will be left on it. Sky textures are usually marked with this texture so those projectiles will not hit the sky and leave marks.

4.8.14 nomarks

Projectiles will explode upon contact with this surface, but will not leave marks. Blood will also not mark this surface. This is useful to keep lights from being temporarily obscured by battle damage.

Design Note: Use this on any surface with a deformVertexes keyword. Otherwise, the marks will appear on the unmodified surface location of the texture with the surface wriggles and squirms through the marks.

4.8.15 nolightmap

This texture does not have a lightmap phase. It is not affected by the ambient lighting of the world around it. It does not require the addition of an rgbGen identity keyword in that stage.

4.8.16 nosteps

The player makes no sound when walking on this texture.

4.8.17 nonsolid

This attribute indicates a brush, which does not block the movement of entities in the game world. It applied to triggers, hint brushes and similar brushes. This affects the content of a brush.

4.8.18 origin

Used on the “origin” texture. Rotating entities need to contain an origin brush in their construction. The brush must be rectangular (or square). The origin point is the exact center of the origin brush.

4.8.19 playerclip

Blocks player movement through a nonsolid texture. Other game world entities can pass through a brush marked playerclip. The intended use for this is to block the player but not block projectiles like rockets.

4.8.20 slick

This surfaceparm included in a texture should give it significantly reduced friction.

4.8.21 slime

Assigns to the texture the game properties for slime. This affects both the surface and the content of a brush.

4.8.22 structural

This surface attribute causes a brush to be seen by the Q3MAP process as a possible break-point in a BSP tree. It is used as a part of the shader for the “hint” texture. Generally speaking, any opaque texture not marked as “detail” is by default, structural, so you shouldn’t need to specify this.

4.8.23 trans

Tells q3map that pre-computed visibility should not be blocked by this surface. Generally, any shaders that have blendfuncs should be marked as surfaceparm trans.

4.8.24 water

Assigns to the texture the game properties for water.


5

5 Editor specific shader instructions

These instructions only affect the texture when it is seen in the Q3Radiant editor. They should be grouped with the surface parameters but ahead of them in sequence.

5.1 qer_editorimage < texture path/texturename>

This keyword creates a shader name in memory, but in the editor, it displays the TGA art image specified in qer_editorimage (in the example below this is textures/eerie/lavahell.tga).

The editor maps a texture using the size attributes of the TGA file used for the editor image. When that editor image represents a shader, any texture used in any of the shader stages will be scaled up or down to the dimensions of the editor image. If a 128x128 pixel image is used to represent the shader in the editor, then a 256x256 image used in a later stage will be shrunk to fit. A 64x64 image would be stretched to fit. Be sure to check this on bouncy, acceleration, and power-up pads placed on surfaces other than 256 x 256. Use tcMod scale to change the size of the stretched texture. Remember that tcMod scale 0.5 0.5 will double your image, while tcMod scale 2 2 will halve it.

Design Notes: The base_light and gothic_light shaders contain numerous uses of this. It can be very useful for making different light styles (mostly to change the light brightnesses) without having to create a new piece of TGA art for each new shader.

textures/liquids/lavahell2 //path and name of new texture

{

qer_editorimage textures/eerie/lavahell.tga

//based on this

qer_nocarve

//cannot be cut by CSG subtract

surfaceparm noimpact

//projectiles do not hit it

surfaceparm lava

//has the game properties of lava

surfaceparm nolightmap

//environment lighting does not affect

q3map_surfacelight 3000

//light is emitted

tessSize 256

//relatively large triangles

cull disable

//no sides are removed

deformVertexes wave 100 sin 5 5 .5 0.02

fogparms 0.8519142 0.309723 0.0 128 128

{

map textures/eerie/lavahell.tga

//base texture artwork

tcMod turb .25 0.2 1 0.02

//texture is subjected to turbulence

tcMod scroll 0.1 0.1

//the turbulence is scrolled

}

}

5.2 qer_nocarve

A brush marked with this instruction will not be affected by CSG subtract functions. It is especially useful for water and fog textures.

5.3 qer_trans <value>

This parameter defines the percentage of transparency that a brush will have when seen in the editor (no effect on game rendering at all). It can have a positive value between 0 and 1. The higher the value, the less transparent the texture. Example: qer_trans 0.2 means the brush is 20% opaque and nearly invisible.


6

6 Stage Specific Keywords

Stage specifications only affect rendering. Changing any keywords or values within a stage will usually take effect as soon as a vid_restart is executed. Q3MAP ignores stage specific keywords entirely.

A stage can specify a texture map, a color function, an alpha function, a texture coordinate function, a blend function, and a few other rasterization options.

6.1 Texture map specification

6.1.1 map <texturepath/texturename>

Specifies the source texture map (a 24 or 32-bit TGA file) used for this stage. The texture may or may not contain alpha channel information. The special keywords $lightmap and $whiteimage may be substituted in lieu of an actual texture map name. In those cases, the texture named in the first line of the shader becomes the texture that supplies the light mapping data for the process.

$lightmap

This is the overall lightmap for the game world. It is calculated during the Q3MAP process. It is the initial color data found in the framebuffer. Note: due to the use of overbright bits in light calculation, the keyword rgbGen identity must accompany all $lightmap instructions.

$whiteimage

This is used for specular lighting on MD3 models. This is is a white image generated internally by the game. This image can be used in lieu of $lightmap or an actual texture map if, for example, you wish for the vertex colors to come through unaltered.

6.1.2 Clampmap <texturepath>

Dictates that this stage should clamp texture coordinates instead of wrapping them. During a stretch function, the area, which the texture must cover during a wave cycle, enlarges and decreases. Instead of repeating a texture multiple times during enlargement (or seeing only a portion of the texture during shrinking) the texture dimensions increase or contract accordingly. This is only relevant when using something like deformTexCoordParms to stretch/compress texture coordinates for a specific special effect. Remember that the Quake III Arena engine normalizes all texture coordinates (regardless of actual texture size) into a scale of 0.0 to 1.0.

Proper Alignment: When using clampTexCoords be make sure the texture is properly aligned on the brush. The clampTexCoords function keeps the image from tiling. However, the editor doesn’t represent this properly and shows a tiled image. Therefore, what appears to be the correct position may be offset. This is very apparent on anything with a tcMod rotate and clampTexCoords function.

Avoiding Distortion: When seen at a given distance (which can vary, depending on hardware and the size of the texture), the compression phase of a stretch function will cause a “cross”-like visual artifact to form on the modified texture due to the way that textures are reduced. This occurs because the texture undergoing modification lacks sufficient “empty space” around the displayed (non-black) part of the texture (see figure 2a). To compensate for this, make the non-zero portion of the texture substantially smaller (50% of maximum stretched size -- see figure 2b) than the dimensions of the texture. Then, write a scaling function (tcScale) into the appropriate shader phase, to enlarge the image to the desired proportion.

The shaders for the bouncy pads (in the sfx.shader file) show the stretch function in use, including the scaling of the stretched texture:

Example: Using clampTexCoords to control a stretching texture

textures/sfx/metalbridge06_bounce

{

//q3map_surfacelight 2000

surfaceparm nodamage

q3map_lightimage textures/sfx/jumppadsmall.tga

q3map_surfacelight 400

{

map textures/sfx/metalbridge06_bounce.tga

rgbGen identity

}

{

map $lightmap

rgbGen identity

blendfunc gl_dst_color gl_zero

}

{

map textures/sfx/bouncepad01b_layer1.tga

blendfunc gl_one gl_one

rgbGen wave sin .5 .5 0 1.5

}

{

clampmap textures/sfx/jumppadsmall.tga

blendfunc gl_one gl_one

tcMod stretch sin 1.2 .8 0 1.5

rgbGen wave square .5 .5 .25 1.5

}

// END

}

6.1.3 AnimMap <frequency> <texture1> … <texture8>

The surfaces in the game can be animated by displaying a sequence of 1 to 8 frames (separate texture maps). These animations are affected by other keyword effects in the same and later shader stages.

<Frequency>: the number of times that the animation cycle will repeat within a one second time period. The larger the value, the more repeats within a second. Animations that should last for more than a second need to be expressed as decimal values.

<texture1> … <texture8>: the texturepath/texture name for each animation frame must be explicitly listed. Up to eight frames (eight separate .tga files) can be used to make an animated sequence. Each frame is displayed for an equal subdivision of the frequency value.

Example: AnimMap 0.25 animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga would be a 4 frame animated sequence, calling each frame in sequence over a cycle length of 4 seconds. Each frame would be displayed for 1 seconds before the next one is displayed. The cycle repeats after the last frame in sequence is shown.

Design Notes: To make a texture image appear for an unequal (longer) amount of time (compared to other frames), repeat that frame more than once in the sequence.

textures/sfx/flameanim_blue

{

// *************************************************

// * Blue Flame *

// * July 20, 1999 Surface Light 1800 *

// * Please Comment Changes *

// *************************************************

qer_editorimage textures/sfx/b_flame7.tga

q3map_lightimage textures/sfx/b_flame7.tga

surfaceparm trans

surfaceparm nomarks

surfaceparm nolightmap

cull none

q3map_surfacelight 1800

// texture changed to blue flame.... PAJ

{

animMap 10 textures/sfx/b_flame1.tga textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga

blendFunc GL_ONE GL_ONE

rgbGen wave inverseSawtooth 0 1 0 10

}

{

animMap 10 textures/sfx/b_flame2.tga textures/sfx/b_flame3.tga textures/sfx/b_flame4.tga textures/sfx/b_flame5.tga textures/sfx/b_flame6.tga textures/sfx/b_flame7.tga textures/sfx/b_flame8.tga textures/sfx/b_flame1.tga

blendFunc GL_ONE GL_ONE

rgbGen wave sawtooth 0 1 0 10

}

{

map textures/sfx/b_flameball.tga

blendFunc GL_ONE GL_ONE

rgbGen wave sin .6 .2 0 .6

}

}

6.2 Blend Functions

Blend functions are the keyword commands that tell the Quake III Arena graphic engine’s renderer how graphic layers are to be mixed together.

6.2.1 Simplified blend functions:

The most common blend functions are set up here as simple commands, and should be used unless you really know what you are doing.

6.2.1.1 blendfunc add

This is a shorthand command for blendfunc gl_one gl_one. Effects like fire and energy are additive.

6.2.1.2 blendfunc filter

This is a shorthand command that can be substituted for either blendfunc gl_dst_color gl_zero or blendfunc gl_zero gl_src_color. A filter will always result in darker pixels than what is behind it, but it can also remove color selectively. Lightmaps are filters.

6.2.1.3 blendfunc blend

Shorthand for blendfunc gl_src_alpha gl_one_minus_src_alpha. This is conventional transparency, where part of the background is mixed with part of the texture.

6.2.2 Explicit blend functions:

Getting a handle on this concept is absolutely key to understanding all shader manipulation of graphics.

BlendFunc or “Blend Function” is the equation at the core of processing shader graphics. The formula reads as follows:

[Source * <srcBlend>] + [Destination * <dstBlend>]

Source is usually the RGB color data in a texture TGA file (remember it’s all numbers) modified by any rgbgen and alphagen. In the shader, the source is generally identified by command MAP, followed by the name of the image.

Destination is the color data currently existing in the frame buffer.

Rather than think of the entire texture as a whole, it may be easier to think of the number values that correspond to a single pixel, because that is essentially what the computer is processing … one pixel of the bit map at a time.

The process for calculating the final look of a texture in place in the game world begins with the precalculated lightmap for the area where the texture will be located. This data is in the frame buffer. That is to say, it is the initial data in the Destination. In an unmanipulated texture (i.e.; one without a special shader script), color information from the texture is combined with the lightmap. In a shader-modified texture, the $lightmap stage must be present for the lightmap to be included in the calculation of the final texture appearance.

Each pass or “stage” of blending is combined (in a cumulative manner) with the color data passed onto it by the previous stage. How that data combines together depends on the values chosen for the Source Blends and Destination Blends at each stage. Remember it’s numbers that are being mathematically combined together that are ultimately interpreted as colors.

A general rule is that any Source Blend other than GL_ONE (or GL_SRC_ALPHA where the alpha channel is entirely white) will cause the Source to become darker.

6.2.3 Source Blend <srcBlend>

The following values are valid for the Source Blend part of the equation.

GL_ONE This is the value 1. When multiplied by the Source, the value stays the same the value of the color information does not change.

GL_ZERO This is the value 0. When multiplied by the Source, all RGB data in the Source becomes Zero (essentially black).

GL_DST_COLOR This is the value of color data currently in the Destination (frame buffer). The value of that information depends on the information supplied by previous stages.

GL_ONE_MINUS_DST_COLOR This is nearly the same as GL_DST_COLOR except that the value for each component color is inverted by subtracting it from one. (,i.e.; R = 1.0 – DST.R, G = 1.0 – DST.G, B = 1.0 – DST.B, etc.)

GL_SRC_ALPHA The TGA file being used for the Source data must have an alpha channel in addition to its RGB channels (for a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the Source.

GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e.; A=1.0 – SRC.A)

6.2.4 Destination Blend <dstBlend>

The following values are valid for the Destination Blend part of the equation.

GL_ONE This is the value 1. When multiplied by the Destination, the value stays the same the value of the color information does not change.

GL_ZERO This is the value 0. When multiplied by the Destination, all RGB data in the Destination becomes Zero (essentially black).

GL_SRC_COLOR This is the value of color data currently in the Source (which is the texture being manipulated here).

GL_ONE_MINUS_SRC_COLOR This is the value of color data currently in Source, but subtracted from one (i.e.; inverted).

GL_SRC_ALPHA The TGA file being used for the Source data must have an alpha channel in addition to its RGB channels (four a total of four channels). The alpha channel is an 8-bit black and white only channel. An entirely white alpha channel will not darken the Source.

GL_ONE_MINUS_SRC_ALPHA This is the same as GL_SRC_ALPHA except that the value in the alpha channel is inverted by subtracting it from one. (i.e.; A=1.0 – SRC.A).

Doing the Math: The Final Result

The product of the Source side of the equation is added to the product of the Destination side of the equation. The sum is then placed into the frame buffer to become the Destination information for the next stage. Ultimately, the equation creates a modified color value that is used by other functions to define what happens in the texture when it is displayed in the game world.

6.2.5 Default Blend Function

If no blendFunc is specified then no blending will take place. A warning is generated if any stage after the first stage does not have a blendFunc specified.

6.2.6 Technical Information/Limitations Regarding Blend Modes:

The Riva 128 graphics card supports ONLY the following blend modes:

GL_ONE, GL_ONE

GL_DST_COLOR, GL_ZERO

GL_ZERO, GL_SRC_COLOR

GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA

GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA

Cards running in 16 bit color cannot use any GL_DST_ALPHA blends.

6.3 rgbGen <func>

There are two color sources for any given shader, the texture file and the vertex colors. Output at any given time will be equal to TEXTURE multiplied by VERTEXCOLOR. Most of the time VERTEXCOLOR will default to white (which is a normalized value of 1.0), so output will be TEXTURE (this usually lands in the Source side of the shader equation). Sometimes you do the opposite and use TEXTURE = WHITE, but this is only commonly used when doing specular lighting on entities (i.e.; shaders that level designers will probably never create

The most common reason to use rgbGen is to pulsate something. This means that the VERTEXCOLOR will oscillate between two values, and that value will be multiplied (darkening) the texture.

If no rgbGen is specified, either “identityLighting” or “identity” will be selected, depending on which blend modes are used.

Valid <func> parameters are wave, identity, identityLighting, entity, oneMinusEntity, fromVertex, and lightingDiffuse.

6.3.1 RgbGen identityLighting

Colors will be (1.0,1.0,1.0) if running without overbright bits (NT, linux, windowed modes), or (0.5, 0.5, 0.5) if running with overbright. Overbright allows a greater color range at the expense of a loss of precision. Additive and blended stages will get this by default.

6.3.2 rgbGen identity

Colors are assumed to be all white (1.0,1.0,1.0). All filters stages (lightmaps, etc) will get this by default.

6.3.3 rgbGen wave <func> <base> <amp> <phase> <freq>

Colors are generated using the specified waveform. An affected texture with become darker and lighter, but will not change hue. Hue stays constant. Note that the rgb values for color will not go below 0 (black) or above 1 (white). Valid waveforms are sin, triangle, square, sawtooth and inversesawtooth.

<func> Wave forms and their effects:

Sin: color flows smoothly through changes.

Triangle: color changes at a constant rate and spends no appreciable time at peaks and valleys.

Square: color alternates instantly between its peak and valley values.

Sawtooth: With a positive frequency value, the color changes at a constant rate to the peak then instantly drops to its valley value.

Inversesawtooth: An inverse sawtooth wave will reverse this, making the ascent immediate (like a square wave) and the decay fall off like a triangle wave.

<base> Baseline value. The initial RGB formula of a color (normalilzed.

<amp> Amplitude. This is the degree of change from the baseline value. In some cases you will want values outside the 0.0 to 1.0 range, but it will induce clamping (holding at the maximum or minimum value for a time period) instead of continuous change.

<phase> See the explanation for phase under the waveforms heading of Key Concepts.

<freq> Frequency. This is a value (NOT normalized) that indicates peaks per second.

6.3.4 RgbGen entity

Colors are grabbed from the entity’s modulate field. This is used for things like explosions.

Design Note: This keyword would probably not be used by a level designer.

6.3.5 rgbGen oneMinusEntity

Colors are grabbed from 1.0 minus the entity’s modulate field.

Design Note: This keyword would probably not be used by a level designer.

6.3.6 rgbGen Vertex

Colors are filled in directly by the data from the map or model files.

Design Note: rgbGen vertex should be used when you want the RGB values to be computed

for a static model (i.e. mapobject) in the world using precomputed static

lighting from Q3BSP. This would be used on things like the gargoyles, the portal frame,

skulls, and other decorative MD3s put into the Quake III Arena world.

6.3.7 rgbGen oneMinusVertex

As rgbGen vertex, but inverted.

Design Note: This keyword would probably not be used by a level designer

6.3.8 rgbGen lightingDiffuse

Colors are computed using a standard diffuse lighting equation. It uses the vertex normals to illuminate the object correctly.

Design Note: - rgbGen lightingDiffuse is used when you want the RGB values to be

computed for a dynamic model (i.e. non-map object) in the world using

regular in-game lighting. For example, you would specify on shaders for

items, characters, weapons, etc.

6.4 AlphaGen <func>

The alpha channel can be specified like the rgb channels. If not specified, it defaults to 1.0.

6.4.1 AlphaGen portal

This rendering stage keyword is used in conjunction with the surface parameter keyword portal. The function accomplishes the “fade” that causes the scene in the portal to fade from view. Specifically, it means “Generate alpha values based on the distance from the viewer to the portal.” Use alphaGen portal on the last rendering pass.

6.5 tcGen <coordinate source>

Specifies how texture coordinates are generated and where they come from. Valid functions are base, lightmap and environment.

<base> = base texture coordinates from the original art.

<lightmap> = lightmap texture coordinates

<environment> = Make this object environment mapped.

6.5.1 tcGen vector (<sx> <sy> <sz>) (<tx> <ty> <tz>)

New texcoord generation by world projection. This allows you to project a

texture onto a surface in a fixed way, regardless of its orientation.

S coordinates correspond to the “x” coordinates on the texture itself.

T coordinates correspond to the “y” coordinates on the texture itself.

The measurements are in game units.

Example: tcGen vector (0.01 0 0) (0 0.01 0)

This would project a texture with a repeat every 100 units across the X/Y plane.

6.6 tcMod <func> <…>

Specifies how texture coordinates are modified after they are generated. The valid functions for tcMod are rotate, scale, scroll, stretch and transform. Transform is a function generally reserved for use by programmers who suggest that designers leave it alone. When using multiple tcMod functions during a stage, place the scroll command last in order, because it performs a mod operation to save precision, and that can disturb other operations. Texture coordinates are modified in the order in which tcMods are specified. In other words, if you see:

tcMod scale 0.5 0.5

tcMod scroll 1 1

Then the texture coordinates will be scaled then scrolled.

6.6.1 tcMod rotate <degrees per per second>

This keyword causes the texture coordinates to rotate. The value is expressed in degrees rotated each second. A positive value means clockwise rotation. A negative value means counterclockwise rotation. For example “tcMod rotate 5” would rotate texture coordinates 5 degrees each second in a clockwise direction. The texture rotates around the center point of the texture map, so you are rotating a texture with a single repetition, be careful to center it on the brush (unless off-center rotation is desired).

6.6.2 tcMod scale <sScale> <tScale>

Resizes (enlarges or shrinks) the texture coordinates by multiplying them against the given factors of <sScale> and <tScale). The values “s” and “t” conform to the “x” and “y” values (respectively) as they are found in the original texture TGA. The values for sScale and tScale are NOT normalized. This means that a value greater than 1.0 will increase the size of the texture. A positive value less than one will reduce the texture to a fraction of its size and cause it to repeat within the same area as the original texture (Note: see clampTexCoords for ways to control this).;

Example: tcMod scale 0.5 2 would cause the texture to repeat twice along its width, but expand to twice its height (in which case half of the texture would be seen in the same area as the original)

6.6.3 tcMod scroll <sSpeed> <tSpeed>

Scrolls the texture coordinates with the given speeds. ). The values “s” and “t” conform to the “x” and “y” values (respectively) as they are found in the original texture TGA, The scroll speed is measured in “textures” per second. A “texture” is the dimension of the texture being modified and includes any previous shader modifications to the original TGA). A negative s value would scroll the texture to the left. A negative t value would scroll the texture down.

Example: tcMod scroll 0.5 -0.5 moves the texture down and right (relative to the TGA files original coordinates) at the rate of a half texture each second of travel.

This should be the LAST tcMod in a stage. Otherwise there may be popping or snapping visual effects in some shaders.

6.6.4 tcMod stretch <func> <base> <amplitude> <phase> <frequency>

Stretches the texture coordinates with the given function. Stretching is defined as stretching the texture coordinate away from the center of the polygon and then compressing it towards the center of the polygon

<base>: A base value of one is the original dimension of the texture when it reaches the stretch stage. Inserting other values positive or negative in this variable will produce unknown effects.

<amplitude>: This is the measurement of distance the texture will stretch from the base size. It is measured, like scroll, in textures. A value of 1 here will double the size of the texture at its peak.

<phase>: See the explanation for phase under the deform vertexes keyword.

<frequency>: this is wave peaks per second.

Wave Functions <func>

Sin wave: the texture expands smoothly to its peak dimension and then shrinks smoothly to its valley dimension in a flowing manner.

Triangle wave: The textures stretch at a constant rate and spend no appreciable time at the peak or valley points.

Square wave: The texture is shown at its peak for the duration of the frequency and then at its valley for the duration of the frequency.

Sawtooth: the texture stretches like a triangle wave until it reaches a peak, then instantly drops to the valley, as in a square wave.

Inversesawtooth: this is the reverse of the sawtooth wave.

6.6.5 tcMod <transform> <m00> <m01> <m10> <m11> <t0> <t1>

Transforms each texture coordinate as follows:

S’ = s * m00 + t * m10 + t0

T’ = t * m01 + s * m11 + t1

This is for use by programmers.

6.6.6 tcMod turb <base> <amplitude> <phase> <freq>

Applies turbulence to the texture coordinate. Turbulence is a back and forth churning and swirling effect on the texture.

The parameters for this shader are defined as follows:

<base> Currently undefined.

<amplitude> This is essentially the intensity of the disturbance or twisting and squiggling of the texture.

<phase> See the explanation for phase under the deform vertexes keyword.

<freq> Frequency. This value is expressed as repetitions or cycles of the wave per second. A value of one would cycle once per second. A value of 10 would cycle 10 times per second. A value of 0.1 would cycle once every 10 seconds.

6.7 depthFunc <func>

This controls the depth comparison function used while rendering. The default is “lequal” (Less than or equal to) where any surface that is at the same depth or closer of an existing surface is drawn. This is used for textures with transparency or translucency. Under some circumstances you may wish to use “equal”, e.g. for lightmapped grates that are alpha tested (it is also used for mirrors).

6.8 depthWrite

By default, writes to the depth buffer when depthFunc passes will happen for opaque surfaces and not for translucent surfaces. Blended surfaces can have the depth writes forced with this function.

6.9 Detail

This feature was not used in Quake III Arena maps, but should still function.

Designates this stage as a detail texture stage, which means that if the c_var, r_detailtextures, is set to 0 then this stage will be ignored (detail will not be displayed). This keyword, by itself, does not affect rendering at all. If you do put in a detail texture, it has to conform to very specific rules. Specifically, the blendFunc:

blendFunc GL_DST_COLOR GL_SRC_COLOR

This is also the simple blend function: blendfunc filter

And the average intensity of the detail texture itself must be around 127.

Detail is used to blend fine pixel detail back into a base texture whose scale has been increased significantly. When detail is written into a set of stage instructions, it allows the stage to be disabled by the c_var console command setting "r_detailtextures 0".

A texture whose scale has been increased beyond a 1:1 ratio tends not to have very high frequency content. In other words, one texel can cover a lot of real estate. Frequency is also known as “detail.” Lack of detail can appear acceptable if the player never has the opportunity to see the texture at close range. But seen close up, such textures look glaringly wrong within the sharp detail of the Quake III Arena environment. A detail texture solves this problem by taking a noisy "detail" pattern (a tiling texture that appears to have a great deal of surface roughness) and applying it to the base texture at a very densely packed scale (that is, reduced from its normal size). This is done programmatically in the shader, and does not require modification of the base texture. Note that if the detail texture is the same size and scale as the base texture that you may as well just add the detail directly to the base texture. The theory is that the detail texture's scale will be so high compared to the base texture (e.g.; 9 detail texels fitting into 1 base texel) that it is literally impossible to fit that detail into the base texture directly.

For this to work, the rules are as

follows:

A.) the lightmap must be rendered first. This is because the subsequent detail texture will be modifying the lightmap in the framebuffer directly;

B.) the detail texture must be rendered next since it modifies the lightmap in the framebuffer

C.) the base texture must be rendered last ;

D.) the detail texture MUST have a mean intensity around 127-129. If it does not then it will modify the displayed texture’s perceived brightness in the world

E.) the detail shader stage MUST have the "detail" keyword or it will not

be disabled if the user uses the "r_detailtextures 0" setting ;

F.) the detail stage MUST use "blendFunc GL_DST_COLOR GL_SRC_COLOR". Any

other BlendFunc will cause mismatches in brightness between detail and non-detail views.;

G.) the detail stage should scale its textures by some amount (usually between 3 and 12) using "tcMod" to control density. This roughly corresponds to coarseness. A very large number, such as 12, will give very fine detail, however that detail will disappear VERY quickly as the viewer moves away from the wall since it will be MIP mapped away. A very small number, e.g. 3, gives diminishing returns since not enough is brought in when the user gets very close. I'm currently using values between 6 and 9.5. You should use non-integral numbers as much as possible to avoid seeing repeating patterns.

H.) detail textures add one pass of overdraw, so there is a definite performance hit .

I.) detail textures can be shared, so designers may wish to define only a very

small handful of detail textures for common surfaces such as rocks, etc.

An example (non-existent) detail shader is as follows:

Example: Texture with Detail

textures/bwhtest/foo

{

// draw the lightmap first

{

map $lightmap

rgbGen identity

}

// modify the lightmap in the framebuffer by

// a highly compressed detail texture

{

map textures/details/detail01.tga

blendFunc GL_DST_COLOR GL_SRC_COLOR

// YOU MUST USE THIS!!

detail

// for the detail to be disabled, this must be present

tcMod scale 9.1 9.2

}

// now slap on the base texture

{

map textures/castle/blocks11b.tga

blendFunc filter

}

}

6.10 alphaFunc <func>

Determines the alpha test function used when rendering this map. Valid values are GT0, LT128, and GE128. These correspond to “GREATER THAN 0”, “LESS THAN 128”, and “GREATER THAN OR EQUAL TO 128”. This function is used when determining if a pixel should be written to the framebuffer. For example, if GT0 is specified, the only the portions of the texture map with corresponding alpha values greater than zero will be written to the framebuffer. By default alpha testing is disabled.

Both alpha testing and normal alpha blending can be used to get textures that have see-through parts. The difference is that alphaFunc is an all-or-nothing test, while blending smoothly blends between opaque and translucent at pixel edges. Alpha test can also be used with depthwrite, allowing other effects to be conditionally layered on top of just the opaque pixels by setting depthFunc to equal.


7

7 Notes on Alpha Channels

To use some blend modes of alphaFunc, you must add an alpha channel to your texture files. Photoshop can do this. Paintshop Pro has the ability to make an alpha channel cannot work directly in to it. In Photoshop you want to set the type to Mask. Black has a value of 255. White has a value of 0. The darkness of a pixel’s alpha value determines the transparency of the corresponding RGB value in the game world. Darker = more transparent.

Care must be taken when reworking textures with alpha channels. Textures without alpha channels are saved as 24 bit images while textures with alpha channels are saved as 32 bit. If you save them out as 24 bit, the alpha channel is erased. Note: Adobe Photoshop will prompt you to save as 32, 24 or 16 bit. Choose wisely. If you save a texture as 32 bit and you don’t actually have anything in the alpha channel, Quake III Arena may still be forced to use a lower quality texture format (when in 16 bit rendering) than if you had saved it as 24 bit.

To create a texture that has “open” areas, make those areas black in the alpha channel and make white the areas that are to be opaque. Using gray shades can create varying degrees of opacity/transparency.

Example: An opaque texture with see-through holes knocked in it.

textures/base_floor/pjgrate1

{

surfaceparm metalsteps

cull none

// A GRATE OR GRILL THAT CAN BE SEEN FROM BOTH SIDES

{

map textures/base_floor/pjgrate1.tga

blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA

alphaFunc GT0

depthWrite

rgbGen identity

}

{

map $lightmap

rgbGen identity

blendFunc GL_DST_COLOR GL_ZERO

depthFunc equal

}

}

The alpha channel can also be used to merge a texture (including one that contains black) into another image so that the merged art appears to be and opaque decal on a solid surface (unaffected by the surface it appears to sit on), without actually using an alpha function. The following is a very simple example:

Figure 1

Start with a TGA file image. In this case, a pentagram on a plain white field (figure 1A). The color of the field surrrounding the image to be merged is not relevant to this process (although having a hard-edged break between the image to be isolated and the field makes the mask making process easier). Make an alpha channel. The area of the image to be merged with another image is masked off in white. The area to be masked out (not used) is pure black (figure 1B). The image to be merged into is greenfloor.tga (figure 1C).

Make a qer_editorimage of greenfloor.tga. This is placed in the frame buffer as the map image for the texture. By using GL_SRC_ALPHA as the source part of the blend equation, the shader adds in only the non-black parts of the pentagram. Using GL_MINUS_ONE_SRC_ALPHA, the shader inverts the pentagram’s alpha channel and adds in only the non-black parts of the green floor.

In a like manner, the alpha channel can be used to blend the textures more evenly. A simple experiment involves using a linear gradiant in the alpha channel (white to black) and merging two textures so they appear to cross fade into each other.

A more complicated experiment would be to take the pentagram in the first example and give it an aliased edge so that the pentagram appeared to fade or blend into the floor.


8

8 Troubleshooting Shaders

If a shader is not working, look first for syntax errors.

Are the brackets correctly set?

Do you have too many parameter values on a line?

Are you using a word in a parameter that wants a numerical value?

Are you using a numerical value in a parameter that wants a word?

Are the path names to your textures correct?

Are your texture names correct? There is a chance that the texture name is too long or too complex. Try renaming a texture with a shorter, simpler name.


Creating New Textures

9 Creating New Textures

If you are familiar with the required tools, creating new assets for use in Quake III Arena is not particularly difficult. As a general rule, you should create new directories for each map with names different from the names used by id. If you are making a map that will be called “H4x0r_D00M”, every directory containing new assets for that map should be titled H4x0r_D00M. This is to try and avoid asset directories overwriting each other as the editor and the game load in assets.

9.1 Tools Needed

Any combination of graphic programs and plug-ins that can output a 24 bit MS windows compatible Targa (.tga) or JPEG (.jpg) graphic file. If you plan to make textures that will have an alpha channel component (a 4th 8-bit greyscale channel that is used by the shaders to further manipulate the art), you must have a program that can create 32-bit art with that fourth channel.

Adobe Photoshop has the ability to easily create alpha channels. Paint Shop Pro from JASC (v5.0+) can also make an alpha channel by creating a mask and naming it “alpha”.

Generally speaking, regardless of the program used, we found it best to do most of the art manipulation of the alpha channel in a separate layer or file and then paste it into the alpha channel before saving.

9.2 Setting up Files

The editor and the game program look for assets to be located along the paths set up in your project file. Start by creating a directory for you new textures by creating file folders to make a directory path as follows: quake3\baseq3\textures\[mymapname]

The installation of Q3Radiant will create a text document called “shaderlist.txt” in the following path:

quake3\baseq3\scripts\shaderlist.txt

Q3Radiant will use the contents of this script to grab your new textures for inclusion in the game. The contents of shaderlist.txt document will contain a listing of all the shader documents that were used by id Software to create Quake III Arena.

Since you will obviously want to create your own shaders, you need to put them in separate folders and create a new shader script for them.

If you plan to work on several maps at once and want to distinguish between textures used in each map, simply add additional map names here. For map and mod makers, we STRONGLY recommend that any new shader scripts created use the name of the map or mod in the shader file name. We know we can’t avoid every incident of files overwriting each other, but we certainly can advise you how to try.

Now, in the scripts directory that you just created, create another text file and call it:

[mymapname].shader

This file will contain the shader scripts you write to modify a particular texture.

9.3 Rules and Guidelines

9.3.1 Rules

Follow these rules when creating textures for the Quake III Arena engine:

· Save your textures into your new [map name] directories.

· Don’t use the same names that id used for textures. It will cause problems.

· For best quality, save textures without an alpha channel as 24 bit TARGA files. Using JPEG files can save memory space, but at the risk of losing detail and depth in the texture. JPEG files cannot be used for textures requiring an alpha channel.

· Textures containing an alpha channel must be saved as 32 bit TARGA files.

· If a new texture requires no further manipulation, it does not need a shader script.

· Size textures in powers of 2. Example: 8x8, 16x16, 32x32, 64x64 pixels and so on.

· Textures don’t need to be square. A 32x256 pixel texture is perfectly acceptable.

9.3.2 Guidelines

The following are some things the id designers learned about textures.

· Create textures in “suites” built around one or two large textures with a number of much smaller supporting detail or accent textures.

· Very large textures are possible, but some video cards compress textures larger than 256x256 pixels.

· Textures are grouped alphabetically by name in the texture display window, so you may want to give suites of textures similar names.

· Use the shader function qe3_editorimage to conserve memory when making multiple versions of a single texture (as in the case of a glowing texture with several light values).

· Unless you are creating special effects or textures designed to draw the player’s eye to a specific spot, muted, middle value colors work best with the game engine.

· Extremely busy (a lot of fussy detail) textures can break up or form visually unpleasant patterns when seen at distances.

9.4 Making the .pk3 File

When you go to distribute your creation to the gaming world, you need to put your newly created map, textures, bot area files, and shader documents into an archive format called a “pk3” file. You do not need to include the shaderlist.txt file, since that is only used by the editor. You will need to keep the paths to the various assets the same. So your paths should be something like this:

Textures: baseq3/textures/[mymapnamefolder]

Bsp & aas: baseq3/maps/mymapname.bsp , mymapname.aas

Shader scripts: baseq3/scripts/mymapname.shader

You need to use an archiving program call Winzip to make the pk3 file. Get Winzip from http://www.winzip.com/winzip/winzip.htm

Make a zip archive called mymapname.zip

Zip all the required assets into a zip archive file (Quake III Arena DOES support compressed pk3 files).

Rename the zip archive to mymapname.pk3

Put it where the Quake III Arena community can find it.


Terrain Construction for Quake 3 Engine Games

By Paul Jaquays

Special Thanks to Jim Dosé and Jan Paul van Waveren for their assistance and review (and making this all work in the first place).

The material here is for use in conjunction with the Q3Radiant manual for the Quake 3 Engine and presumes familiarity with that tool and game engine. Although compiling switches and shader commands are included here, this is not intended to be a general update or revision to the Q3Radiant manual

1. Introduction

2. The Terrain Entity

3. Boxing in the World

4. Entity Keys and Values

5. The Terrain Texture

6. Blocking Vis

7. Clipping the Terrain

8. Mapping the Textures

9. The Meta-shader

10. Lighting the Terrain

11. Terrain-related WorldSpawn Features

12. Adding Bots

13. Glossary

14. New or Revised Q3map Shader Commands


Terrain Construction for Quake 3 Engine Games

By Paul Jaquays

Special Thanks to Jim Dosé and Jan Paul van Waveren for their assistance and review (and making this all work in the first place).

The material here is for use in conjunction with the Q3Radiant manual for the Quake 3 Engine and presumes familiarity with that tool and game engine. Although compiling switches and shader commands are included here, this is not intended to be a general update or revision to the Q3Radiant manual

Introduction

The “terrain” style maps in Quake III : Team Arena do not represent a change to the Quake 3 Engine. The power to make them work has always been there, unrealized and untapped. What has changed is the way map files are created and processed. These construction techniques rely on changes in the Q3Radiant editor and the q3map program that processes the map files into game files.

Key changes that have been made include:

  • A variant of the func_group entity has been added to the game. When a func_group of brushes (only) is give a terrain key and a numerical value (an ID number for that terrain) and several other key attributes, it becomes a terrain entity and is treated differently than other brushes during the compile.
  • The map area has been expanded to 128,000 units in all extents (256,000 units on any edge of the map volume). While this does not mean that a map that large could actually run on current game hardware, it does give the designer room to explore what the actual limits may be. As a point of reference, mpterra2.bsp is roughly 12K x 16K x 3K units in size … the largest map in the game by far.
  • A terrain texture mapping system plots textures across the terrain entity using a specially created .pcx or .tga art file as a map for planar projecting and blending shaders.
  • A “meta-shader” is used to organize and calculate blends between the shaders that are mapped onto the terrain.

Textures designed for use under vertex lighting can be substituted at map load time for more complex shader-manipulated textures that may not look correct in a vertex light only situation.


The Terrain Entity

The terrain in Team Arena is nothing more than a func_group (brushes only) with a number of special key/value combinations that define it as a Terrain Entity. Q3Map compiles and textures the entity based on the parameters specified in the keys. It is possible to have multiple terrain entities in a map (see Terrain Entities below). Once you learn the method and the techniques, terrain is relatively easy to create. One warning though … easy to create does not mean easy to compile. Large maps take a much longer time to compile. And huge maps are likely to take what seems like forever. However, there are some lighting and shader options that can significantly cut down on lighting time – as will be noted later.

Creating the Terrain “Mesh”

Creating workable terrain style maps for the Q3A engine takes some reorganizing of thought, but in many ways is not substantially different from making a halls and rooms type of map. The designer still has to be concerned about how much can be seen at one time and give thought to map flow and play. The rules and restrictions that guide conventional map design are still there … it just occurs on a much grander scale. You still have to think about poly counts, that hasn’t changed; but generally speaking, the polies that you will use to make your game terrain are VERY large and less are likely to be seen all at once during a game.

Height Maps

The terrain maps in Quake III : Team Arena began as grayscale bitmap height maps imported into David Hyde’s “GenSurf” tool, a Q3Radiant plug-in. We used Adobe Photoshop and JASC’s Paint Shop Pro to create and adjust our height maps … but any art program that can output a .bmp format file can be used to create the height map.

The key to understanding how the height map works is that the color values of the art represent the height of mesh vertexes and not triangle quads. When you work on a piece of art where each pixel corresponds to a vertex, it is easy to imagine the pixels (usually large square blocks) as squares of terrain. But that’s not how it works.

Start by giving some thought to the eventual size and proportions of the final terrain area in your map. How many rows and columns of triangles do you want in the map? The finer you subdivide the map, the more triangles will appear in any given view, but the terrain can be made less blocky by including more.

GenSurf can generate a terrain mesh of up to 64 triangles on a side. If you don’t decimate (an option that optimizes and reduces the number of triangles used to create the mesh) the GenSurf output (and we really recommend that you don’t), it generates a mesh of triangles in neat rows and columns. By way of reference, mpterra2 (the largest Team Arena map) is “only” 48x64 columns and rows of triangles. Since Q3Radiant and q3map tend to like things that end up in neat powers of 2 or units of 64 subdivisions, consider having your map extents fall into neat units. In mpterra2, the extents were set up to make the mesh triangles have sides of 256 units.

Just as you would plan out a game map, give thought to the layout and flow of your terrain map. Will it be all-open in one view? Can you use natural terrain features to block vis? How complicated will your buildings (if any) be?

Begin the creation of your height map by making a new grayscale file. If your program doesn’t allow you to easily modify a .bmp format file, work in another format and then convert it when you save. You can make the dimensions of your height map art whatever you want. The extents you set in GenSurf for the map dimensions are what determine the final size of the terrain piece. Some may find it easier to work with a large file initially, using their favorite painting tools to lay in the shades of gray.

However, when you get down to making final and precise changes in your height map you should (and this is STRONGLY recommended), change the size of the art file such that the pixel dimensions of the map are 1 pixel larger than the number of divisions (rows and columns) in the terrain mesh you want to create. If you are making a 64 x 64 division map, then you want to create a 65 x 65 pixel height map.

If there is not a one-to-one match between the number of vertexes in the mesh (one more than the number of divisions) and the number of pixels in the height map, then GenSurf interpolates the number values (0 to 255 range) of the pixels to get an averaged value instead of an exact value for the height of the vertex at that point.

Tips and things to consider for making Height Maps

  • Read through the section on blocking vis later in the document. Plan your vis blocking terrain structures in advance instead of having to start over when you discover that too much of your world is in view.
  • Consider what type of geometry will form the edges of your map. The terrain maps in Q3:TA resolve the issue by creating canyon-like settings … valleys bordered by high canyon or mountain walls.
  • Start by filling your map with a neutral gray (value 127 or 128). Paint the high areas lighter and the low areas darker.
  • Keep your terrain shapes simple when you start. You can add greater complexity as your map develops.
  • You will probably want to keep the “playable” area of your map within a fairly close or “narrow” range of gray values close to the middle range of values. This allows you to use very dark shades of gray to create deep chasms and very light shades of gray to create high mountains, canyon walls or visual barriers.
  • Extreme jumps between the gray values in adjacent areas means steep slopes.
  • Avoid making vertical or near vertical terrain surfaces … unless you don’t mind the resulting textured surface looking like barcode. Q3Map planar projects the textures onto the terrain entity’s surface (Normal brushes are box mapped). The pixels will stretch and stretch to fill the space. The farther the surface is from horizontal, the greater the stretching.
  • Use the roughness feature of GenSurf to add a little, um … roughness to your map … so flat areas aren’t completely flat. If you are using a 1 to 1 scale height map, adding “noise” to the file will also accomplish this.
  • If you want an area, such as a path, to be flat, you need to make the gray value affecting two adjacent vertexes the same value.
  • You can create gentle slopes by changing the gray values between adjacent areas by very small amounts.
  • Slopes greater than 45 degrees are close to becoming unplayable barriers.

If you are building a symmetrical team style map, only create one side of the terrain. Create a new piece of art that has the dimensions of the final piece. Paste the map half into the new file and move it into position. If the map will have an even number of vertexes, paste the map again and then rotate or mirror (as you choose) the selection and move it into position. If the number of vertexes is odd, after you paste the first half of the map, select all but the row or column of pixels along which the two halves of the map will face and copy it. Paste it, rotate or mirror it, then position it. Now, select and copy half the row or column of pixels you didn’t copy in the last operation. Paste it, transform it as you did in the last operation, and then position it so that it is in the same row or column, but on the opposite side of the piece you copied.

When you make significant changes to a height map, consider saving it as version rather than over-writing the older file. Always nice to have a back up when you realize that you’ve messed up more than you’ve fixed.

Other Possible Height Map Tools

There are even some editors for other (non-fps) games that can be used to manipulate a surface in 3D and then output a .bmp format file. It is worth noting that we found it particularly challenging to use them … possibly more challenging than the benefits of working in 3D.

SC3K Map Editor

The first of these programs was a terrain editor for SimCity3000 called the SC3K Map Editor from Tenermerx. It is a free download available here: http://www.tenermerx.com/sc3maped/

Loathing

The other editor we tried was the “Loathing” terrain editor that comes with Bungie’s Myth II game. If you’ve a copy of Myth II, this is something you could play around with. Both of these programs could output a .bmp format file. If you’ve used it to make some Myth II maps you may have some idea of how it works already. It is my opinion that if you use an editor for either of these two games to create your height map, you may still want to or need to manipulate it in an art program. If you can visualize the relationship between shades of gray and relative heights and slopes, the art program is probably the easier way to go.

Pencils, paintbrushes and a scanner

You can also make your heightmap by painting it by traditional methods and then scanning in the file and saving it as a .bmp. Though at some point you’ll probably want to switch over to digital manipulation.

Height Map into Terrain Mesh

This is not intended to be a tutorial on using GenSurf, but it will include some pointers on getting the most out of the tool. You can download the standalone tool and find tutorials for GenSuf at this site: http://tarot.telefragged.com/gensurf/

This page, in particular, contains tips for using GenSurf, most of which to apply to Q3A terrain creation. http://tarot.telefragged.com/gensurf/appendix.htm#problems

Suggested GenSurf settings (by Tab)

The General TAB:

  • Select Quake 3 Arena under Game.
  • Select From Bitmap under Waveform. Of course, you may want to play around with some of the other wave forms. But bitmaps give you the greatest degree of control.
  • Orientation: as appropriate
  • If you don’t want GenSurf to add any “noise” or randomization to the height of the mesh, set the Roughness to zero. The preview window gives you a good representation of what roughness does to your surface. The random seed changes the distribution of the noise. Adjust both fields accordingly.

The Extents TAB:

  • Under Extents, you should chose number values that are even multiples of your number of Divisions so that the grid rectangles are all the same size (this produces better texturing results). It also makes extra work for the compiler. Furthermore, use the Extents to position the terrain entity on the map (XY only). You will want to make sure that the terrain locates exactly where you want it each time you revise it. Repositioning a terrain file can be time consuming.
  • Set your X and Y divisions to equal the number of rows and columns of triangles you want. You may want to strongly consider playing with the numbers so that your triangle sides end up be large powers of two (64, 128, 256 units etc.).
  • Do not check Use Bezier Patches.
  • Do not Decimate (keep it set to 0%). The process that applies textures to the surfaces and blends textures between vertexes works best if the size of the triangles is consistent and constant.

The Bitmap TAB:

  • Filename should point to the .bmp file you are using as a height map. Reload will bring in any changes you have made to the art file without having to restart the program.
  • GenSurf assigns an integer value to each of 256 shades of gray. The value is based on the position of the color in the palette. In a grayscale palette, the values typically range from 0 (black) to 255 (white). Map Color 0 corresponds (usually) to the lowest point on the height map and Map Color 255 to the highest. If you set Map Color 0 to 0 and Map Color 255 to 2048, each increase in color value adds 8 units to the height of the vertex. When you increase the difference between to the two values, the height changes are steeper. Decrease the difference and the height changes are more global. You can control the “Z” location at which the terrain draws by adding any extra height above (or below) zero to the height values for both numbers.

The Fix Points TAB:

The general recommendation for this TAB is to leave it alone. You should either modify the height map or directly manipulate vertexes inside the Q3Radiant editor.

Texture TAB:

  • Set the main texture to common/terrain. The “Steep” angle is irrelevant for terrain texture mapping.
  • Make sure that the Use detail brushes setting is checked.

Once you’ve tweaked all your settings, do a Save as. If you make changes to the settings, consider saving again as a new file. It’s nice to have a back up if you screw things up.

GenSurf Tips

  • Setting extents to correspond exactly with the desired map location is important. You want to be able to drop revised terrain into a map without a lot of repositioning.

Manipulating the Terrain Mesh

Once the terrain mesh has been generated, it’s very likely that you will want to fine-tune the triangles inside the editor. Do this by pulling vertexes up and down along the Z axis. Once you start fine-tuning in this manner, the height map no longer exactly represents the map. If you revise and convert the height map, your manipulations here are lost.

Terrain Mesh into Terrain Entity

GenSurf outputs its terrain as a func_group entity. If you create a terrain mesh by any other means, you need to group it as a func_group entity.

Make certain that all the non-visible surfaces of the func_group brushes are textured with common/caulk.

Texture the visible surfaces with common/terrain or common/terrain2.

Select the func_group and turn it to detail content (CTRL M) or use the Selection menu.

It is possible to map terrain onto something that is not a “terrain” mesh. Keep in mind that textures will be planar projected onto all surfaces in the terrain entity and that brush vertexes will be used to determine where blends start and end.


Boxing in the World

It may not need mentioning here, but … the terrain entity needs to be contained inside a sealed world. For the terrain maps in Q3:TA, we build huge boxes. Any portion of the box that could be seen while playing the game, or flying around in spectator mode was covered in sky texture. Any portion of the box that could not be seen was made out of common/caulk. If mountains or canyon walls surround your map, plan to bring the caulk portion of the wall up as high as you can. This can reduce the number of triangles seen in the map. Generally speaking, you will see ALL the sky triangles inside the map at all times.

Finally, and this is a part of vis blocking, but it should also be noted here. Don’t forget to place large caulk structures that rise up from the bottom of the world box to near the ground surfaces of terrain entity. If the ground level rises and falls substantially, these can be a part of the vis blocking process. Otherwise they serve to reduce the size of the map’s total volume (generally speaker … a good thing).


Entity Keys and Values

Once you’ve created the func_group that will become the terrain entity, you need to add the various keys and key values that make it a terrain entity.

A word to the wise: WRITE YOUR KEYS AND VALUES ON SOMETHING YOU CAN EASILY REFER TO DURING DEVELOPMENT!! During the creation, testing and tweaking of the heightmap, you will have to reenter these key/value pairs for the terrain entity every time you recreate it. One thing that can make things easier is before replacing the terrain entity with a new mesh, open the entity window and click on the most complicated of the key/value pairs (usually the alphamap). When the new terrain func_group is in place, click on the value line and hit return. That’s one less thing to retype.

Key: Alphamap

Value: a pathname, beginning in the missionpack directory, which includes the name of the filename.

The Q3Map compiler applies and blends the textures (all shaders) on the terrain entity using a “metashader” (see Texturing the Terrain below) that references an art file called the alphamap.

File type: The alphamap can be a .pcx file, a .bmp file or a .tga file. With .pcx and .bmp (8 bit color formats) each color in your palette corresponds directly to a root shader used to create the smooth texture blends on the terrain. With a 32 bit tga file, only the color values in the red channel are used. The program assumes that a gray scale of equal values is being used. The program divides the colors by the number of levels into equal-sized ranges. When assigning textures, q3map looks at what range the color falls in and chooses the appropriate shader to blend.

File size: The size of the alphamap should be one-to-one with the number of vertexes in the map. If you have 64 divisions x 32 divisions in your terrain mesh (65x33 vertexes), you should use a 65 by 33 alphamap.

Colors: If an 8-bit texture is used, q3map links a color’s position on the palette to an identifying number in the name of a shader. The color in position 0 would reference a root shader named <metashadername>_0. The color in position 1 would reference a root shader named <metashadername>_1. <metashadername> refers to the value of the Shader key (see Key: Shader below). In theory, you could probably have 256 different root shaders assigned to the terrain entity. In practice, you’d probably want to bite your arm off at the elbow before doing as complicated as that.

Photoshop has it’s palette arranged from bottom to top, from right to left. The color in the bottom right of palette is color 0. Paint Shop Pro is arranged exactly opposite and has color 0 in the upper left hand corner.

Controlling Texture Blends: Each triangle on the mesh can only have two root shaders blending across it. Another way to say this is that there should be only two different colors on the three vertexes that form any given triangle in the mesh. Any more, and a sharp, unblended edge appears on the terrain surface. This can take some trial and error to correct. A bsp –switch command called –showseams can help the map maker find these errors. Create a new bsp command in your project file that includes this option. We recommend doing it with a novis only operation.

Alphamap Creation Tips:

  • The alphamaps for the team arena maps are included with this document, both as reference and as files that you can modify to work with your own maps. You may want to compare the alphamaps against the heightmaps for the same maps, just to see how id resolved mapping issues.
  • You can create a quick (though not necessarily good) alphamap by saving your height map as a new file. Then use the “posterize” filter that can be found in some art tools. Reduce the number of colors in the art to equal the layers (number of unique root shaders) in the terrain.
  • If you are creating a new alphamap from scratch, use colors that are easily distinguished from each other.
  • If you are making an alphamap for a team style map where both sides of the map are identical (mirrored or rotated), you only need to design the map for one side. Copy and position it as described above for the heightmap.
  • The id maps used simple color schemes that were homogenous throughout the maps. That is not the only way of doing things. It would be quite reasonable to use many more terrain textures (particularly if you weren’t going to build complicated, multi-texture architecture on top of them). Consider a map where one part of the terrain used red-themed textures and the other side blue themed textures. Have them blend into a few simple neutral colors near the map center.
  • Try doing terrain style texture mapping on non-terrain geometry. Results will definitely vary, but some could be interesting.

Samples: The last height map and the alphamap used to create each of the terrain maps in Team Arena is included in the Mapping Support folder. Note that the designers made vertex manipulations to the final terrain meshes that are not reflected in these height maps.

Key: Layers

Value: A positive integer, equal to the number of unique or root textures to be blended on the map. Each color on the alphamap’s palette corresponds to a “layer.” If you plan to blend 4 textures, you need a layer value of 4.

Key: Shader

Value: A pathname, beginning in the missionpack/scripts directory, which includes the name of the filename and the name of the metashader. Example: The shader value for mpterra2 is “terrain/mpterra2”. “terrain” is the name of the script and mpterra2 is the name of the metashader used to apply texture to this terrain.

Key: Terrain

Value: Set this to 1 to indicate that the func_group is a terrain entity. It’s essentially a yes/no flag.

Key: Min

Value: Map coordinates of the minimum XY extents (lowest left extent) of a component piece of a multi-part terrain entity. This is optional, only used if you are texturing a subset of the total terrain area.

The Min and Max extents (both must be in the entity) establish where a subsection of terrain fits into the overall terrain map. It lets q3map assign a subset of the alphamap to the entity, instead of referencing the entire alphamap. It could also be used on a separate terrain entity to use the same alphamap, but reference a different shader.

Key: Max

Value: Map coordinates of the maximum XY extents (uppermost right extent) of a component piece of a multi-part terrain entity. This is optional, only used if you are texturing a subset of the total terrain area.

The Min and Max extents (both must be in the entity) establish where a subsection of terrain fits into the overall terrain map. It lets q3map assign a subset of the alphamap to the entity, instead of referencing the entire alphamap. It could also be used on a separate terrain entity to use the same alphamap, but reference a different shader.


The Terrain Texture

In Q3:TA, there are two “terrain” textures in the common shader script. One handles all the uses of terrain where the designer does not want “dust” to rise up as the player jumps onto the terrain (common/terrain). The second (common/terrain2) has an enable_dust surface parameter. The terrain texture should be applied to all visible (in game) surfaces of the terrain entity.

Q3map looks for the word “terrain” in the name of the shader when texturing terrain entities. If a shader is used without the word "terrain" in it, and it’s not marked as nodraw, q3map will still do a planar projection, but using that texture. It will not blend between textures, however. This can be used to create hard edge texture transitions, or in cases where you want to apply textures manually, and aren’t concerned about blending.

If the terrain texture is applied to a non-terrain entity brush, the surface will not draw. The projected terrain surface textures only work on surfaces that are a part of entities with the proper terrain entity keys and values.

Their scripts for terrain are as follows:

textures/common/terrain

{

      surfaceparm nodraw

      surfaceparm nomarks

      surfaceparm nolightmap

}

textures/common/terrain2

{

      qer_editorimage textures/common/terrain.tga

      surfaceparm dust

      surfaceparm nodraw

      surfaceparm nomarks

      surfaceparm nolightmap

}


Blocking Vis

Terrain maps still have to follow the rules that apply to all Q3A engine maps. There’s only so much that you can allow to be seen at one time, or the game starts slowing down. The good news is that the engine will only draw the terrain triangles that are in the player’s PVS (potential visable set). It doesn’t have to draw all the triangles in the terrain entity just because part of the entity is in view.

At first, most of the usual bag of tricks that mappers use to create vis blocking structures in architectural maps don’t seem to apply to terrain. But that is not the case. If anything, you NEED to think of terrain in much the same way as you think of buildings. You are still dealing with open spaces that could be considered corridors and large rooms … even though they look like large valleys.

In fact, it would be best to plan out the layout of your terrain BEFORE creating your height map. If you know you want to block vis, you can design your terrain to work with vis blocking techniques and avoid the agony of having to go all the way back to the start when you discover that your killer terrain map lets you see too much at once.

If you want the player, even in spectator mode, to be able to fly everywhere and see the whole world laid out below him … an unrestricted vista, so to speak, you’re going to be much more limited. Every single triangle in the map will essentially be viewable at any moment in time. However, if you’re willing to place restrictions on your players – limit how high they can fly or climb, you suddenly have more options for blocking player visibility.

First, the terrain entity is entirely detail content, so it doesn’t block vis. That’s a key part of how this whole process works. Otherwise, vis time would be measured in eras (not minutes or hours) and visdata size would be very, very large.

To block vis in the terrain, start by creating simple vis-blocking structures out of caulk texture inside the forms of the terrain (they are not part of the terrain entity). You can try to match the silhouette of the terrain, but in the end, you may only end up complicating the visdata without gaining any real benefit.

Next, and this is going to sound strange, build thin walls of caulk that follow the divide line (where the terrain falls away on both sides) of the highest mountains, buttes or hills. Only do this where you know that you will not allow the player to move over or see over that part of the terrain (we’ll talk about clipping real soon).

Other Tips:

  • Sky Texture in Place of Caulk: You sometimes want to apply the sky texture to some of the surfaces of the thin walls used as vis blockers. This can remove some HOM effects. The caulk brushes that block the vis around the bases in mpterra2 have sky texture painted on the surfaces facing the base.
  • Hint Brushes: Use these extremely sparingly and only after trying to solve the problem in other ways. Hint brushes can add hours to vis compile times. Even so, they can make a difference. One trick you can try is to put a horizontal hint brush at a point about midway up the slopes of your terrain. It can add some additional vis break points.

· Adjusting Terrain: Vis times totally depend on the placement of your vis blockers. Vis times are not affected by modifying the terrain surfaces (terrain entities are detail content, remember?). With that being said, you may want to modify the terrain to allow you to more effectively position the vis-blockers.


Clipping the Terrain

The terrain entity uses its triangle surfaces as clipping planes. No additional clipping is required to allow characters to run on the terrain’s surface. As the initial terrain maps developed in house, we discovered that to control and guide play flow, we needed to clip many of our mountain and canyon slopes with vertical walls. Done right (as the slopes start becoming too steep to climb), players don’t notice (as much).

Next, decide how far up in the sky you are willing to let your player’s fly. If the map is entirely open you might want to keep it that way. If you’ve placed caulk barriers as described above, then the low point on the ridgeline (or lower) will likely be your celing height.

Clipping Tips

  • Make sure your “ceiling” clip brushes extend all the way up the sky brush.
  • Keep your clip brushes simple.
  • Right angles are rarely found in nature. Use the clipper tool to take the corners off your vertical clips.


Mapping the Textures

The key to making this stuff look good is the q3map routine that works with alphamap and the metashader (see below) to smoothly blends textures across the terrain entity.

Texturing Overview

As noted earlier, Q3Map assigns textures, or more correctly, shader manipulated textures, to each triangle used to create the terrain map. The shaders used are part of a group of shaders called a metashader. The metashader is the family name for the shader. Individidual shaders within it are identified by a suffix, either an underline character followed by a number, or an underline character followed by a string indicating a blend between two other shaders.

Within the body of the metashader, there are two types of shaders used. The first, is the root shader. A root shader represents a terrain texture in its unblended state. The naming convention for a root shader is <metashader>_#. The second type is the blended shader. The blended shader creates a crossfade between two root shaders across the face of a single geometry triangle. The naming convention for a blended shader is <metashader>_#to#. The map maker does not need to make a blend between each root shader, but for a blend to occur, there must be a blend shader for the two root shaders.

Q3map will map a shader (root or blended) once and only once across the face of the triangle. The shaders will not tile or repeat across the triangle face.

As noted earlier, the textures are planar mapped or projected on the surface of terrain texture. The angle of any individual triangle does not affect the angle or direction at which the texture lies on the brush surface. The angle, however, does affect the apparent stretching of the texture on the surface. The steeper the angle of the brush surface, the greater will be the stretch of the shader on that surface.

Q3map looks at the pixel on the alphamap that corresponds to a given vertex. It uses the color of that pixel (or more correctly the identification number of the position that color occupies in the palette) to determine which root shader will be applied. That root shader is applied to triangles that have one vertex located at the given vertex. It then examines the alphamap color of the vertexes adjacent to the given vertex. If an adjacent vertex has the same color as the given vertex, the root shader is applied to the surface. If an adjacent vertex has a different alphamap color, the blended shader that crossfades between the two.


The Meta-shader

The shader is the group or family of related shaders used to texture a terrain entity. The shader key/value pair in the entity identifies the metashader to be used. The suffix (either “_#” for a root shader or “#to#” for a blended shader.

For each root shader that you want to blend, you need a blend shader. Note that you only need to make the blend once. If you have mpterra2_0to2, you don’t need mpterra2_2to0.

Example Terrain Shader

This was the shader used to map textures on mpterra2 (hence the metashader name)

//****************************************************

//    *************************************************

//    *

//    *   MPTerra2 terrain shaders

//    *

//    *************************************************

textures/terrain/mpterra2_0

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock9b_2.tga

            rgbGen vertex

            tcmod scale 0.125 0.125

      }

      {

          map textures/skies2/clouds.tga

            blendfunc filter

          detail

            tcmod scale 0.01 0.01

          tcMod scroll -0.05 0.05

          tcmod transform 1 0 1 1 1 1

      }

}

textures/terrain/mpterra2_1

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock12b_2.tga

            rgbGen vertex

          tcmod scale 0.1 0.1

      }

      {

          map textures/skies2/clouds.tga

            blendfunc filter

            detail

            tcmod scale 0.01 0.01

          tcMod scroll -0.05 0.05

            tcmod transform 1 0 1 1 1 1

     }

}

textures/terrain/mpterra2_2

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock10b_2.tga

            tcmod scale 0.05 0.05

            rgbGen vertex

      }

      {

          map textures/skies2/clouds.tga

            blendfunc filter

          detail

            tcmod scale 0.01 0.01

          tcMod scroll -0.05 0.05

            tcmod transform 1 0 1 1 1 1

      }

}

textures/terrain/mpterra2_0to1

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock9b_2.tga

            rgbGen vertex

            alphaGen vertex

            tcmod scale 0.125 0.125

      }

      {

            map textures/stone/pjrock12b_2.tga

            tcmod scale 0.1 0.1

            rgbGen vertex

            alphaGen vertex

          blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA

      }

      {

          map textures/skies2/clouds.tga

            blendfunc filter

            detail

            tcmod scale 0.01 0.01

          tcMod scroll -0.05 0.05

            tcmod transform 1 0 1 1 1 1

      }

}

textures/terrain/mpterra2_0to2

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock9b_2.tga

            rgbGen vertex

            alphaGen vertex

            tcmod scale 0.125 0.125

      }

      {

            map textures/stone/pjrock10b_2.tga

            rgbGen vertex

            alphaGen vertex

          tcmod scale 0.05 0.05

            blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA

      }

      {

                map textures/skies2/clouds.tga

            blendfunc filter

          detail

            tcmod scale 0.01 0.01

                tcMod scroll -0.05 0.05

            tcmod transform 1 0 1 1 1 1

      }

}

textures/terrain/mpterra2_1to2

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock12b_2.tga

            rgbGen vertex

            alphaGen vertex

            tcmod scale 0.1 0.1

      }

      {

            map textures/stone/pjrock10b_2.tga

            tcmod scale 0.05 0.05

            rgbGen vertex

            alphaGen vertex

            blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA

      }

      {

                map textures/skies2/clouds.tga

            blendfunc filter

            detail

            tcmod scale 0.01 0.01

                tcMod scroll -0.05 0.05

            tcmod transform 1 0 1 1 1 1

      }

}


Lighting the Terrain

Terrain maps also require some rethinking about the way you light maps.

Vertex Only

If you are making a large terrain map, you should plan on making your terrain textures be lit by vertex lighting only. Lightmaps can quickly become far too large for the game to handle.

Make sure your large terrain textures contain the following parameters:

Surfaceparm nolightmap //signifies vertex lighting only.

Q3map_novertexshadows //this is what keeps those caulk vis blockers from causing ugly shadows to form on your terrain.

If you are using q3map_sun in your sky …

Q3map_forcesunlight //this makes the light emitted by a q3map_sun parameter affect the vertex lit surface.

Light Sources

For outdoor maps, the obvious source of lighting ought to be the sky. The skies in the mpterra maps began with skies used in more conventional Team Arena maps, but were modified to better suit the needs of the terrain worlds.

  • Slow Down Those Clouds. One thing to consider is slowing down the rate of cloud movement. What looks OK in smaller maps looks wrong in vast panoramas.
  • Strong Sunlight is Good. For team maps, you want to try and keep the light relatively the same in both base areas, so if you have mountains or large base structures, having the light come in at a nearly vertical angle is good, but less dramatic.
  • Ambient Light is Not So Bad. Since the beginning of Q3A map development we’ve said things like “Ambient Lighting is bad”. Well, the problems caused by ambient lighting are still there (flattening of shadows and colors), but with the distance of the play areas from the sky surface (in some maps), adding an ambient really helps bring up the overall light value in the map. Start low, maybe around an ambient value of 5 and creep upwards until the map looks right. It is VERY IMPORTANT that you give your ambient light a color. If you leave it white, you get ugly pink light instead of white. Even specifying white makes it look wrong. Best suggestion is to sample the sky texture color and translate that into an rgb formula for your ambient. One warning though … if you include “interior spaces” in your maps, the ambient light will affect those areas too. You will not get the deep dark shadows you may want in there.
  • Sky Shader Trick #1: Lose the Backsplash. The attributes of the sky shader can have a significant effect on the amount of time it takes to perform a light compile on a map. You have to think of the sky as a huge area light. However, unlike light emitting textures (like your average light fixture), the sky doesn’t need to be illuminated itself. Therefore, you can eliminate the backsplash light feature which is the default status of the q3map_surfacelight parameter. Your sky shader should have the parameter q3map_backsplash with a value of –1. Removing backsplash light doesn’t affect the appearance of the sky, but does remove a significant amount of compiling overhead when the –light algorithm is used (the normal way you light things).
  • Sky Shader Trick#2: Big Subdivisions. Q3Map automatically subdivides the sky into triangle quads. The more triangle quads, the more light emitting surfaces you have on your sky (if q3map_surfacelight is used). The light compile calculates for every one of these light emitting surfaces. Increase the size of the subdivision and you get less light emitters and a faster compile.
  • Sky Shader Trick #3: -V-light. This is a fast lighting algorithm. It’s especially fast for calculating sky lighting. It loses a little precision, but it can greatly speed up the time it takes to light a map. Even if you decide to use a normal light operation for your final map, using –vlight for interim compiles can mean a lot less time spent waiting on the compiler to see your results.

The Light Grid

This is discussed in detail under terrain-related Worldspawn features. One of the things that can add enough memory complexity to a large terrain map, enough to make it unplayable (read crash the game), is the light grid. Think of the light grid as a map for determining how to light entities in the world. It’s what makes player models appear to move in and out of shadows as they move through the world. It’s a nice effect, but costly in memory terms. For the largest maps in Q3:TA, we “traded down” to a less detailed light grid. Increasing the size of grid subdivisions from 32 units to 256 units did this. We experimented with smaller and larger grids and settled on 256 x 256 x 256 as the best size. Smaller and the grid became large and unwieldy. Larger (especially on the z dimension) and not enough light reached some of the entities.

The details of this feature are noted below under Terrain-Related WorldSpawn Features.


Terrain-related WorldSpawn Features

A number of worldspawn key/value pairs were created to deal with issues arising out of terrain creation.

Cold Breath and Hot Dust

The following two features need not be directly related to terrain, although they first appear in the Q3:TA maps. Each key/value pair needs to be the worldspawn for that particular feature to work.

Key/value pairs:

Key: enableBreath

Value: 1

When written into the worldspawn, this enables the appearance of “frosty breath” in the air in front of players. The frosty break does not appear in a player’s first person view, but will be seen in front of other players and in 3rd person view.

Key/value pair:

Key: enableDust

Value: 1

When written into the worldspawn, this enables the appearance of dust puffs at the player’s feet when he lands on or run on a “dusty” surface. Adding the surface parameter “surfaceparm dust” to the shader for that surface creates a dusty surface. The common/terrain2 texture already contains the enableDust parameter.

Texture Remapping: Shaders for vertex light mode in Q3A

One thing we quickly discovered when mapping the metatexture onto the terrain world was that it didn’t work if a player chose to run in the game’s vertex lighting only mode. That mode compresses shaders into a single pass. Usually, the engine makes a reasonable choice for which pass is mapped, but with the metashaders, that wasn’t the case. The solution: allow the mapper to choose a substitute texture that only is used in the game’s vertex lighting mode.

For each shader that will be remapped a key/value pair must be entered in the map’s worldspawn.

Key: vertexremapshader

Value: normal_shader;vertexlighting_shader

The normal_shader is the shader normally used on the terrain. The vertexlighting_shader is the shader to be used when people run the map in Q3 in vertex lit mode. The normal_shader and the vertexlighting_shader are seperated by a semi-colon ;

As many shaders can be remapped as needed by using the key. However, if more than one shader is remapped in a map, each one must have a unique identifier … either a number or a letter after the Key word, as shown by “vertexremapshaderX”, where X is a number or any character set. Examples, vertexremapshader01, vertexremapshader02, vertexremapshaderA, vertexremapshaderB, vertexremapshadermpterra2_1, etc.

In mpterra2, the key/value pair for one of the replaced shaders looked like this:

Key: vertexremapshader1

Value: textures/terrain/mpterra2_0to1;textures/terrain/vxmpterra2

Each of the three root shaders and the two blend shaders had to replaced in this manner.

The following is a sample of the shader used to replace ALL the terrain shaders in mpterra2:

//    *************************************************

//    *

//    *   Vertex Lighting Replacement Shaders

//    *

//    *************************************************

textures/terrain/vxmpterra2

{

      surfaceparm nolightmap

      q3map_novertexshadows

      q3map_forcesunlight

      {

            map textures/stone/pjrock10b_2.tga

            rgbGen vertex

            tcmod scale 0.125 0.125

      }

}

GridSize

The Light Grid Size (as noted earlier) is the map that the Q3A engine uses to light entities. It’s what gives the illusion of players moving in and out of shadowed areas on the game levels. We decided, that for large terrain maps, it should not be as detailed (and therefore nowhere near as large) as we had done for smaller, interior maps. After experimenting with placing controls for the grid size on the bsp command line, we finally settled on putting the command information in the map’s world spawn. In that way, the grid size could be easily tailored to the individual map.

Key/value pair:

Key: gridsize

Value: X Y Z

Note that the values are the dimensions of those coordinates. It’s best to keep them to power of 2 values. The default value for the gridsize (if left unchanged) is 64 64 128. Setting higher x y and z values reduces the size of the light grid data in both the .bsp file and in the Q3A game, but it also creates less accurate dynamic model lighting.

Errors

Definitely set the x y and z values higher if you get:

************ ERROR ************

MAX_MAP_LIGHTGRID

when compiling your map with q3map.

Adding Buildings to Terrain

This is really best addressed as a number of semi-related building tips:

  • Plan Ahead. If you know you want buildings in your map, plan their locations from the first. Very complicated buildings (lots of geometry and surface detail) should be isolated away from long views. One reason for this is to control in view polygon counts. The second (and really obscure one) is to reduce the amount of z-compression that will affect the structures.
  • Build to Support Game play. Each of the structures in the Q3:TA terrain maps was built to support a game play need. Quite often, less is better than more.
  • Build Simply. Simple, uncomplicated architecture may be best. The more complicated you make your buildings, the less complicated the terrain around them can be. Depends on what you want to play up. The busy look of many Q3A maps doesn’t translate well to large terrain. Details are lost at great distances and only add to the triangle complexity of maps containing them.
  • Detail Content. With few exceptions ALL the geometry inside the terrain map is detail content, not just the terrain entity. The walls forming the corridor in mpterra2 may be the only non-detail structures in that map. Making geometry into detail makes a map far easier and faster to compile. If you want to block vis inside your structures, create simple caulk structures … much the same way as described for vis blocking the terrain.
  • Z-Compression Problems. Review the the map in 16 bit mode during development. This brings out z-fighting issues that occur at long distances. This z-fighting is created by detail brushes being compressed into each other (The Q3A engine does a significant amount of “z compression” as geometry becomes farther away from the viewer). This z-compression is far less apparent in 32 bit modes, but we have to remember that many people turn down graphic features in order to simply play Q3A on their systems (not just to get ridiculously high frame rates).
  • Fit Structures to the Terrain. Don’t just set structures on terrain and expect them to look right. Make your buildings look like they belong where you put them. Accommodate the rise and fall of terrain in your floor plans … or “dig” into the terrain brushes to create basements, tunnels and whatever you need. You can also adjust the height map to better arrange the geometry around structures, or manually tweak the triangles once the structures are in place. History is full of examples of really interesting buildings that have been built to accommodate difficult terrain like hills, cliffs and mountains.


Adding Bots

Despite their massive size, terrain maps can support enjoyable bot play. The key is careful placement of cluster portals, which is true of any map. Study the bspc documentation for details. The documents accompanying the tools are more up to date than those in the Q3Radiant manual. Your goal should be to keep the number of areas in each cluster roughly equal and reasonably low (hundreds, not thousands).


Glossary

Root Shader: a shader that is part of a family of related shaders used to texture a terrain entity. It represents a terrain texture in its unblended state. The naming convention for a root shader is <metashadername>_#.

Blend Shader: a shader that is part of a family of related shaders used to texture a terrain entity. It represents a terrain texture in its blended state, two textures that crossfade across each other. The naming convention for a blend shader is <metashadername>_#to#.

Metashader: the identifying name of a group of related shaders used to texture a terrain entity. By way of example, the metashader name used to texture mpterra2 was … mpterra2. Its root shaders had names like mpterra2_0, mpterra2_1, and mpterra2_2. Its blend shaders were named mpterra2_0to1, mpterra2_1to2, and mpterra2_0to2.


New or Revised Q3map Shader Commands

************************************************************

These commands are listed here as an update to the original shader manual. A revision to the entire manual will be forthcoming that will include these options, and other clarifications and corrections.

The q3map options are a subset of the shader instructions that require recompiling of the map.

q3map_tracelight

[NEW] Surfaces using a shader with this option will always be lit with the original "-light" light algorithm. Patches will not cast shadows on this surface unless the shader option q3map_patchshadows is used.

q3map_patchshadows

[NEW] When this option is used in conjunction with the original (-light) lighting algorithm, surfaces with textures modified by this option will will show shadows cast by curve patches (under normal circumstances, curve patches do not cast shadows).

q3map_vertexshadows

[NEW] By default, no shadows are cast on vertex-only lit surfaces (see surfaceparm pointlight). Also when running Quake III Arena in vertex lighting mode, no shadows are cast upon any surfaces (shadows are part of the light map). When using this shader option shadows *will* be cast on the surface when vertex lit. However sharp shadow edges won't be seen on the surface because light values are only calculated at the vertexes.

q3map_novertexshadows

[NEW] Shaders used for misc_models and terrain can now use q3map_novertexshadows to disable shadows to be cast at the vertex lit surfaces. Shadows being cast at small misc_model objects often makes sense. However shadows on large vertex lit terrain surfaces often look bad. By default no shadows are cast at forced vertex list surfaces ( shaders with "pointlight" ).

q3map_forcesunlight

[NEW]No sunlight is cast at vertex lit md3 models and terrain by default. Using this option sunlight (overbright bits created by q3map_sun option) will be cast on these surfaces.

q3map_vertexscale <scale>

[NEW] The light value at the vertexes of a surface using a shader with this option is multiplied by the scale value. This is a way to lighten or darken a vertex light only surface in comparison to other, light-map lit surfaces around it.

q3map_notjunc

[NEW] Surfaces modified by a shader with this option are not used for tjunction fixing.

q3map_vlight

[NEW] Surfaces modified by a shader with this option will always be lit with the "-vlight" algorithm when q3map is used with the options "-vlight -tracelight".

q3map_lightmapsamplesize <S>

[NEW] Surfaces using a shader with this shader option will use lightmaps with pixel size SxS. This option can be used to produce high resolution shadows on certain surfaces or can be used to reduce the size of lightmap data where high resolution shadows are not required.

q3map_lightimage <image>

Image to use for the light color of a surface light instead of the image(s) used by the shader. Color is averaged from the texture. Texture must be the same size as the base image map.

q3map_surfacelight <value>

Sets the amount of light this surface emits.

q3map_lightsubdivide <value>

A surface light is subdivided into a bunch of point lights for the actual lighting of the world. This parameter controls the space between those point lights. Default value is 120.

q3map_backsplash <percent> <distance>

A surface light is also lit by itself using back splash point lights with a lower intensity. The <percent> parameter specifies the intensity percentage they use from the q3map_surfacelight <value> parameter. The <distance> parameter controls the distance of these back splash lights from the surface. You can set the <percent> to zero or a negative value to disable the back splash lights.

q3map_globaltexture

When this option is set the texture is not aligned to the world.

q3map_backshader <shader>

<shader> is the path/name of the shader or texture to be used at the back side of the surface.

q3map_flare <shader>

Creates a flare using the specified <shader> at the center of the surface using a shader with this option.

light <value>

Old style flare specification always using the shader "flareshader". The <value> parameter is unused.

q3map_sun <red> <green> <blue> <intensity> <degrees> <elevation>

Color will be normalized, so it doesn't matter what range you use. The intensity falls off with angle but not distance. A value of 100 is a fairly bright sun.

degree of 0 = from the east, 90 = north, etc.

elevation of 0 = sunrise/set, 90 = noon

surfaceparm pointlight

Surfaces using a shader with this parameter will always be vertex lit

This option can be used to reduce the lightmap data. Often used on surfaces

that don't need any shadows.

Surfaceparm dust

If a player lands (jumps onto) on a surfaces using a shader with this parameter, a put of dust will appear at the player’s feet. Note that the worldspawn entity of that map must have an enableDust key set to a value of 1.


Camera Def Editing for DOOM, Wolf3D, Quake 3 Arena and Quake 3: Team Arena

Camera definitions are simply a position, view direction, and FOV which can be defined and obtained over a set amount of time. A camera definition is made up of a camera path and at least one target path. Paths can be one of three different types.

1. Fixed – Does not move.

2. Interpolated – The position is interpolated between two points over a given amount of time.

3. Spline – The position is interpolated between the two nearest pre-computed time segments along the derived spline path.

Camera definitions are stored in “.camera” files which can be loaded anywhere from the base path. DOOM will soon integrate the information as a piece of map media but currently they are saved and loaded externally.

You can associate events along the timeline of the base camera path.

· Wait – causes the camera to pause for a period of time

· Target wait – causes the target to pause for a period of time

· Speed – produces a velocity change in the camera path

· Change target – causes the camera to start looking at the described target

· Snap target – same as change target for now

· FOV – changes the FOV

· Run Script – runs a particular script

· Trigger – triggers and entity

· Stop – stop

Current the only events that work are Wait, Change Target, Trigger and Stop. DOOM is currently the only thing that supports Trigger but will soon be added to Wolf3D and Q3A.

Waits only work on interpolated paths at the moment. They will work on spline based paths within a few days.

To make a camera path, load up the editor, load the map in question and start a new camera. You can choose which type you want from the camera button.

For this example choose “Interpolated”.

The camera inspection dialog will come up and you will see to points at the zero origin in the XY window. “Start interpolated” and “End interpolated”. By default a new path is in “add point” mode and with an interpolated path, each click will move the start then the end point, cycling through them. Click at two distinct areas of the XY Window and you will see a line between the start and the end of the path.

Let’s take a look at the camera inspector.

The name is the name of the camera. Currently this is not used anywhere apart from the designer being able to remember the “so-and-so” camera. The type is not editable but it does show which type of path the camera is based on.

Within Path and Target editing, you can choose whether you are editing the base camera path or a target path. The combo allows you to choose, and once chosen that path will be editable.

The Add Target button adds a target. You can choose which type and name it. When the first target is added, a change target event is automatically added at time 0 to the event list.

Choosing Edit points will allow you to drag points around based on the selected camera or target path.

Choosing Add points will allow you to add points to the selected camera or target path. For Fixed and Interpolated paths, Add point just cycles through or changes the fixed point. For a spline path, it will add new points to the spline. Add points drops points at the Z value of the camera view. I recommend always defining new camera points in the XY Window. Editing them in all 3 views and the camera view is fine but adding new points was designed for the XY Window.

Delete Selected and Select All are currently non-functiona.

The Time area shows the “base” time of the camera as well as the current time ( based on the scroll bar ) and the “total” time. Cameras have a base time (default is 30 seconds) from which the total time is calculated. Effectively events stack on top of the base time and alter that to produce a total time. If you add a “wait” event of 5 seconds, that will make the total time 35 seconds. This allows you to change the base time without having to redo all events.

The scrollbar will adjust the view to reflect an approximate position based on the where the scrollbar is. The scrollbar is segmented into quarter seconds so there are 40 positions for a 10 second camera path.

Track Camera will update the editor camera based on the scrollbar when you adjust the scrollbar.

The event list is a list of current events along the camera path. To add a new event click the Add button.

Delete Event does not current work.

Any changes to the base time need to be applied using the “Apply” button.

Preview does not work.

Load and Save will load and save a camera path..

To continue with the tutorial, lets add a spline-based target for our camera.

Click Add Target and type Blah for the name then choose Spline as the type.

Press OK.

Click a bunch of times in the XY Window to add points for the spline target path. You will see something similar to the following.

To preview the camera, from the button bar in the editor choose “Test Camera”. You will see the camera and the path move along and the camera window will show the view. The editor is non-responsive during a camera test. This is intentional.

The inspector dialog is still a bit twitchy, you may need to close it and reload it to see a complete list of events and get an accurate preview.

Once you are happy with your path, save it and then from the console of the game, type “camera test.camera” assuming you saved it as “test.camera”. You should see the camera path being previewed similar to what the editor provided.

Known problems.

· Waits do not work on splines.

· Dragging the scrollbar does not work correctly when waits have been added.

· You need to close and reload the inspector occasionally.

· Delete Selected, Select all do not work.

· Preview from within the dialog does not work.

· As mentioned above not all events work yet.

This current provides enough functionality to get in basic camera stuff. It is the same stuff we used to do the camera work in the DOOM technology demo. A new version should be available next week sometime.


Return to Castle Wolfenstein

Wolfenstein Scripting Definitions

By: Gray Matter Scripting Team

Copyright © 2000 Gray Matter Interactive Studios

AI Attributes

running_speed 220

Sets the AI’s running speed. Default: 220 Range: 1 – 300

walking_speed 90

Sets the AI’s walking speed. Default: 90 Range: 1 – 300

crouching_speed 80

Sets the AI’s crouching-moving speed. Default: 80 Range: 1 - 300

fov 240

This sets the FIELD OF VIEW for the AI. Default: 240 Range 1 – 360

yaw_speed 300

Sets the YAW SPEED, how fast they turn around. Default: 300 Range: 1 – 300

leader 0.0

Changes the AI’s personality/behavior. NOT FULLY FUNCTIONAL! USE AT OWN RISK! Default: 0 Range 0.0 – 1.0

aim_skill 0.5

Sets the AI’s ability to shoot at specific targets. Default: 0.5 Range: 0.0 – 1.0

aim_accuracy 0.5

Sets the AI’s accuracy. Default: 0.5 Range: 0.0 – 1.0

attack_skill 0.75

Sets the AI’s weaponry tactics. Grenades VS. Machine Gun, etc. Default: 0.75 Range: 0.0 – 1.0

reaction_time 0.5

Sets the AI’s reaction time in seconds. Default: 0.5 Range: 0.0 – 1.0

attack_crouch 0.4

Sets the AI’s frequency to crouch while attacking. Default: 0.4 Range: 0.0 – 1.0

idle_crouch 0.0

Sets the AI’s frequency to crouch while in idle. Default: 0.0 Range: 0.0 – 1.0

AGGRESSION

Sets the AI’s aggression, good for charging it’s enemies. Default: 0.5 Range: 0.0 – 1.0

tactical 0.8

Sets the AI’s tactical abilities, using environment for protection. Default: 0.8 Range: 0.0 – 1.0

camper 0.0

Sets the AI’s camping abilities. Default: 0.0 Range: 0.0 – 1.0

alertness 16000

Sets the AI’s sight distance in pixel units. Default: 16000 Range: 0 – 999999

starting_health 100

Sets the AI’s health when spawning in. Default: 100 Range: 0 – 99999

hearing_scale 1.0

Sets the AI’s hearing. Default: 1.0 Range: 0.0 – 10

inner_detection_radius 512

Sets the Inner Detection Radius (IDR) for the AI in pixel units. The IDR will make the AI react to several things. Example: Bullet impacts within the IDR will affect the AI.

AI Scripting Events

Key:

[word/number] = Optional

<word/number> = Mandatory

attributes

Sets the AI’s behavior when they first spawn in.

spawn

Will run all of the commands within this event upon spawning.

enemysight [ainame]

This event will trigger when they see a enemy AI. If AINAME is used, then this will only trigger upon sight of the matching enemy AI.

sight [ainame]

This event will trigger when they see a friendly AI. If AINAME is used, then this will only trigger upon sight of the matching friendly AI.

enemydead <ainame>

This event will trigger when the enemy AI (with corresponding AINAME) dies.

trigger <event>

This event will trigger when called upon, either by another script calling on this, or when going through a trigger brush.

pain <threshold>

This event will trigger when the AI is at a certain health.

death

This event will trigger once the AI dies. NOTE: All of the commands within this event must not take any think-time. For example, you cannot have a WAIT command in this event. If you do, it will crash.

activate <ainame (usually player)>

This event will trigger when the “PLAYER” uses/activates this AI.

enemysightcorpse [ainame]

This event will trigger when the AI sees an enemy corpse.

friendlysightcorpse

This event will trigger when the AI sees a friendly corpse.

avoiddanger [weapon]

This event will trigger when trying to avoid a weapon.

blocked <ainame (usually player)>

This event will trigger when the player is blocking the AI from proceeding.

statechange <current state> <result state>

relaxed query - When the AI changes state from “relaxed” to “query” then this even will trigger.

relaxed alert - When the AI changes state from "relaxed" to "alert" then this even will trigger.

relaxed combat - When the AI changes state from "relaxed" to "combat" then this even will trigger.

query relaxed - When the AI changes state from "query" to "relaxed" then this even will trigger.

query alert - When the AI changes state from "query" to "alert" then this even will trigger.

query combat - When the AI changes state from "query" to "combat" then this even will trigger.

alert combat - When the AI changes state from "alert" to "combat" then this even will trigger.

combat alert - When the AI changes state from "combat" to "alert" then this even will trigger.

bulletimpact

This event will trigger when the AI detects a bullet within their IDR.

inspectbodystart [ainame]

When the AI first sees a dead body this will trigger. you are able to put an ainame following the command which will only trigger when that AI is dead. You can place a “DENY” in this even to stop the AI from inspecting the body.

inspectbodyend

This will trigger when the AI reaches the dead body.

inspectsoundstart

This will trigger when the AI hears a sound. He will then go and investigate that sound. You can place a “DENY” in this event to stop the AI from inspecting the sound.

inspectsoundend

This will trigger when the AI has reaches the location of the sound.

playerstart

This will trigger once the player clicks on the “next” (arrow) button just after the loading.

fakedeath

This is triggered when the ZOMBIE does his “fake death.”

attacksound

If used, then once the AI starts to attack the player, and make a noise, this will trigger. Able to put “Deny” in order to prevent the AI to use generic sounds.

bulletimpactsound

If you want to have the AI say something when bulletimpact is triggered, use this event, do not use “bulletimpact.”

inspectfriendlycombatstart

This is triggered when the AI sees a friendly AI in combat.

AI Scripting Commands

gotomarker <targetname> [firetarget] [noattack] [nostop]

Tells the AI to go to an AI_MARKER using the current "MOTETYPE"; FIRETARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving. NOSTOP- increases the AI_MARKER size by 32 pixels so that it gives a nice transition from 1 marker to the next.

runtomarker <targetname> [firetarget] [noattack] [nostop]

Tells the AI to run to an AI_MARKER. FIRETARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving. NOSTOP- increases the AI_MARKER size by 32 pixels so that it gives a nice transition from 1 marker to the next.

walktomarker <targetname> [firetarget] [noattack] [nostop]

Tells the AI to walk to an AI_MARKER. FIRETARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving. NOSTOP- increases the AI_MARKER size by 32 pixels so that it gives a nice transition from 1 marker to the next.

crouchtomarker <targetname> [firetarget] [noattack] [nostop]

Tells the AI to crouch to an AI_MARKER. FIRETARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving. NOSTOP- increases the AI_MARKER size by 32 pixels so that it gives a nice transition from 1 marker to the next.

gotocast <ainame> [firetarget] [noattack]

Tells the AI to go to an AI character using the current MOVETYPE. FIREATTARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving.

runtocast <ainame> [firetarget] [noattack]

Tells the AI to run to an AI character. FIREATTARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving.

walktocast <ainame> [firetarget] [noattack]

Tells the AI to walk to an AI character. FIREATTARGET- Shoots at this target while moving; NOATTACK- Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving.

crouchtocast <ainame> [firetarget] [noattack]

Tells the AI to crouch to an AI character. FIREATTARGET- Shoots at this target while moving; NOATTACK - 4 - Does not attack while moving, may be used with firetarget so the AI faces/tracks a certain target while moving.

wait <duration> [moverange] [facetarget]

Tells the AI to wait for a certain duration. MOVERANGE- Used to set the amount of mobility the AI is able to use while waiting. FACETARGET- Used to track/look at a target.

trigger <ainame/scriptname> <event>

This will call/trigger an AI or Script_mover to run it's "trigger <event>"

followcast <ainame>

This will tell the AI to follow an AI Character.

playsound <soundname OR scriptname>

This will play a sound.wav or a script name in one of the .sounds files.

noattack <duration>

This will tell the AI not to attack for the duration.

attack [ainame]

This will tell the AI to attack an AI.

playanim <animation> [legs/torso/both]

This will tell the AI to play a certain animation once. LEGS- Only to play the LEGS animation. TORSO- Only to play the torso animation. BOTH- Play both LEGS and TORSO.

setammo <pickupname> <count>

Sets the amount of ammo given to the AI.

selectweapon <pickupname>

Tells the AI to select a certain weapon.

giveweapon <pickupname>

Tells the AI to give him/her-self a certain weapon.

givearmor <pickupname>

Tells the AI to give him/her-self armor.

giveinventory <pickupname>

Tells the AI to give him/her-self an inventory item.

takeweapon <pickupname>

Tells the AI to get rid of a certain weapon.

movetype <walk/run/crouch/default>

Tells the AI to either walk/run/crouch everywhere. Default=run.

alertentity <targetname>

This will trigger/activate certain entities in the map. Usually just TARGET_RELAYS.

savegame

This will save the game for the player.

fireattarget <targetname> [duration]

This will tell the AI to fire at a specific target once. If you add a DURATION you the AI will shoot for the duration.

godmode <on/off>

This will give the AI invincibility.

accum <buffer_index> <command> <paramater>

Accum is used for "what if" statements. Accums store integers which are used

to trigger scripts.

accum <n> inc <m>

This is used to "increase"/add to value already stored in the accum.

accum <n> abort_if_less_than <m>

This is used to abort the script if the value of accum <n> is less than <m>.

accum <n> abort_if_greater_than <m>

This is used to abort the script if the value of accum <n> is greater than <m>.

accum <n> abort_if_equal <m>

This is used to abort the script if accum <n> is equal to <m>.

accum <n> abort_if_not_equal <m>

This is used to abort the script if accum <n> is not equal to <m>.

accum <n> set <m>

This is used to set the value of accum <n> to <m>.

accum <n> bitset <m>

This will set accum n's bitset of 0-31 to ON or 1, whichever you prefer.

accum <n> bitreset <m>

This will set accum n's biteset of 0-31 to OFF or 0, whichever you prefer.

accum <n> abort_if_bitset <m>

This will abort if the bitset is ON or 1. So, the bitset needs to be OFF or 0.

accum <n> abort_if_not_bitset <m>

This will abort if the bitset is OFF or 0. So, the bitset needs to be ON or 1.

accum <n> random <m>

This is used so that accum <n> will randomly choose a number.

missionfailed

This is used to fail the PLAYER from completing his mission objectives.

objectivemet <n>

This is used to tell the player and update the journal that he/she has completed their objective.

objectiveneeded <n>

This is used in the “player” spawn to tell the player how many objectives he/she needs to complete the mission.

noaidamage <on/off>

This tells the AI not to take damage from any other AI.

print <text>

This will PRINT text up on the screen/console.

facetargetangles <targetname>

This will tell the AI to match the same angle as the Target. The target's angle is determined within WolfRad.

resetscript

This will tell the AI to FORGET everything he is doing and everything he has done and either continue the script or go into dynamic mode.

mount <targetname>

This will tell the AI to mount a fixed weapon. Must have a fixed weapon nearby.

unmount

This will tell the AI to dismount the fixed weapon he is currently on.

savepersistant <next_mapname>

???

changelevel <mapname> [nostats] [persistant]

This will change the map to the "mapname." NOSTATS- This will not display the PLAYERS score/kills. PERSISTANT- This will bring all of the items

teleport <targetname>

This will teleport the AI to the origin of the “targetname” instantly.

foundsecret

This will increase the "Found Secrets" on the score board by 1.

nosight <duration>

This will make the A.I. Blind for a duration.

sight

This will make the A.I. See if the AI is already blind.

noavoid

This will tell the A.I. Not to avoid anything. Including AI/Player/Script_movers.

avoid

This will tell the A.I. To avoid other AI/Player/Script_movers. Note: By default, this is always on unless you tell it to "noavoid."

attrib <attribute> <value>

This will change any of the AI's attributes during a scripted event. Note: STARTING_HEALTH cannot be used in this command. See SETHEALTH for details.

denyaction ("activate" Event only.)

This will deny the player from hitting his "use/activate" button on this particular AI.

headlook <on/off>

This will turn on/off the head look for the AI. This is an ambient head motion. NOTE: The AI's tactical must be set to 0.5+

deny ("avoiddanger" event only)

This will tell the AI to not avoid danger. Example, when a bazooka is fired at this AI he will not avoid the rocket.

backupscript

This will backup the last script running for the AI.

restorescript

This will restore the last script the AI was running. Must have backupscript before restorescript can function.

statetype <alert>

This changes the AI's STATE. Currently, there's only ALERT.

knockback <on/off>

This enables/disables knockback, by default, it's ON. Knockback is the ability to knock the AI backwards due to a bullet hitting them.

clearanim

This stops the current animation the AI is playing and resets them to their default animation, depending on their state.

zoom <on/off>

This enables/disables the AI to use his binoculars. This also increases their IDR by 10 times the set amount. It also decreases their FOV by 80%.

parachute <on/off>

This enables/disables the AI to use a PARACHUTE movetype. This will enable them to play the parachute animation and shoot at the same time. As PLAYANIM is not able to do this, yet.

cigarette <on/off>

This enables/disables the AI to have a cigarette in his left hand or not.

sethealth <n>

Since "attrib starting_health" does not work, we added this command so it does work.

notarget <on/off>

This will enable notarget for the AI, just like notarget is for the player.

startcam <camera file>

This is used to call a camera and have it play.

startcamblack <camera file>

This is used to start a camera and have it play with a fade-up from black.

stopcam

This immediately stops the current camera.

cvar <cvarname> <value>

This is used to set "ROM" cvar commands.

mu_start <wav file> <n>

This is used to start the music file. The wav file is located in the main/music folder. <n> is the time you want to fade-up.

mu_stop <n>

This is used to stop the music file.

mu_fade <wav file> <n>

This is used to start the music file. The wav file is located in the main/music folder. <n> is the time you want to fade-up.

mu_queue <wav file>

This is used to start the next sound track right as soon as the current one stops playing.

explicit_routing <on/off>

This is used to turn on/off the AI’s ability to dynamically navigate. Default, it’s on.

lockplayer <on/off>

This is used to lock the player’s movement. However, the player is still able to look around.

pushaway <ainame>

This is used to push the entity away, that is in front of the AI. Example; village1 when Kessler pushes the player out of the way, if the player tried to block him.

catchfire

This will instantly catch the AI on fire. This was used to prevent a bug from happening on faster machines in crypt2, where the guy comes around the corner on fire and then dies.

Brush Scripting Events

spawn

Will run all of the commands within this event upon spawning.

trigger <event>

Will run all of the commands within this event when called/trigger upon.

death (NOTE: Must have a "health" specified in entity.)

Will run all of the commands within this event when this AI dies. *NOTE: You cannot use "wait"

Brush Scripting

gotomarker <targetname> <speed> [accel/deccel] [turntotarget] [wait]

This will tell the SCRIPT_MOVER to move to a target, usually a Path_corner. Targetname is "name" of the PATH_CORNER; SPEED is used for how fast the SCRIPT_MOVER will move to the PATH_CORNER; ACCEL/DECCEL are used to accelerate/deccelerate to a PATH_CORNER. NOTE: For ACCEL, the SCRIPT_MOVER needs to start at speed of 0, and DECCEL needs to end at a speed of 0; TURNTOTARGET will face towards the targer (PATH_CORNER) depending on the angle; WAIT is used so that the script will not read ahead until the SCRIPT_MOVER has reached the TARGETNAME.

wait <duration>

This will tell the SCRIPT_MOVER to not move for the duration.

trigger <aiName/scriptName> <trigger>

This will call/trigger an AI or Script_mover to run it's "trigger <event>"

playsound <soundname OR scriptname> [LOOPING]

This will play a sound.wav or a script name in one of the .sounds files. LOOPING will loop the sound until "STOPSOUND" is used.

playanim <startframe> <endframe> [looping forever/duration] [rate FPS]

This will play an animation that the model has. STARTFRAME is the frame number you want to start on. ENDFRAME is the last frame number you want to play. LOOP FOREVER/DURATION is used if you want the animation to loop forever, or for a duration. RATE is used so that you can slow down the FPS.

alertentity <targetname>

This will trigger/activate certain entities in the map. Usually just TARGET_RELAYS.

accum <buffer_index> <command> <paramater>

Accum is used for "what if" statements. Accums store integers which are used to trigger scripts.

accum <n> inc <m>

This is used to "increase"/add to value already stored in the accum.

accum <n> abort_if_less_than <m>

This is used to abort the script if the value of accum <n> is less than <m>.

accum <n> abort_if_greater_than <m>

This is used to abort the script if the value of accum <n> is greater than <m>.

accum <n> set <m>

This is used to set the value of accum <n> to <m>.

accum <n> bitset <m>

This will set accum n's bitset of 0-31 to ON or 1, whichever you prefer.

accum <n> bitreset <m>

This will set accum n's biteset of 0-31 to OFF or 0, whichever you prefer.

accum <n> abort_if_bitset <m>

This will abort if the bitset is ON or 1. So, the bitset needs to be OFF or 0.

accum <n> abort_if_not_bitset <m>

This will abort if the bitset is OFF or 0. So, the bitset needs to be ON or 1.

accum <n> random <m>

This is used so that accum <n> will randomly choose a number.

missionfailed

This is used to fail the PLAYER from completing his mission objectives.

missionsuccess <mission_level>

This is used to tell the PLAYER he/she has completed the mission.

print <text>

This will PRINT text up on the screen/console.

faceangles <pitch> <yaw> <roll> <duration/GOTOTIME>

This will tell the SCRIPT_MOVER to rotate. DURATION/GOTOTIME, Duration will determine how long it takes the SCRIPT_MOVER to get to the ANGLES you inputed. GOTOTIME will calculate the time it takes for the SCRIPT_MOVER to reach it's target (PATH_CORNER).

resetscript

This will tell the AI to FORGET everything he is doing and everything he has done and either continue the script or go into dynamic mode.

attachtotag <targetname/scriptname> <tagname>

This will attach this SCRIPT_MOVER to the TAG on another SCRIPT_MOVER. NOTE: The SCRIPT_MOVER you will attach to must havea TAG with a TAGNAME. The modeller (Jason) will do this for you.

stopsound

This will stop the sound the SCRIPT_MOVER is playing.

halt

This will stop the SCRIPT_MOVER in it's tracks.

backupscript

This will backup the last script running for the script_mover.

restorescript

This will restore the last script the script_mover was running. Must have backupscript before restorescript can function.

sethealth <n>

This resets the health of the script_mover to <n>.

Basic Player Scripting structure

player

{

spawn

{

}

trigger <event>

{

}

death

{

}

}

Basic AI Scripting structure

ainame

{

attributes

{

}

spawn

{

}

trigger <event>

{

}

pain <threshold>

{

}

death

{

}

enemysight

{

}

}

Basic AI Marching Loop

nazi1

{

attributes

{

aim_accuracy 0.75

attack_crouch 0.1

idle_crouch 0.1

}

spawn

{

trigger nazi1 marchloop // This will begin the Marching loop.

}

trigger marchloop

{

walktomarker n1spot1

walktomarker n1spot2

facetargetangles n1spot2

wait 4000

walktomarker n1spot3

walktomarker n1spot4

facetargetangles n1spot4

wait 4000

trigger nazi1 marchloop // Restarts the marching loop.

}

death

{

}

enemysight

{

}

}

Basic Brush Scripting Structure

scriptname

{

spawn

{

}

trigger <event>

{

}

death

{

}

}

Basic Brush Scripting Clock Arm Rotating.

clockarm1

{

spawn

{

trigger clockarm1 rotateloop // Begins the rotate loop.

}

trigger rotateloop

{

faceangles -90 0 0 1000

faceangles -180 0 0 1000

faceangles -270 0 0 1000

faceangles -360 0 0 1000

trigger clockarm1 rotateloop // Triggers the rotate loop over again.

}

death

{

}

}


Q3Radiant Editor Manual: Page 12.1

Q3Radiant Editor Manual

Tools 9: Debugging Maps

Regardless of your skills, you can almost guarantee that you are going to make mistakes building your maps. You need tools to help you find and correct those mistakes. There are two classes of map debugging tools usable with Quake III Arena. The first are those that the editor gives you. The second are commands usable in the game.

The Editor's Debug Tools

The Q3Radiant editor has some built in debugging tools

The Pointfile
One of the most useful tools in the box, this is the "red flag" that warns you about problems with the "hull" or "shell" of the map. When you compile a map, the bsp process checks the integrity of the map hull. If a map has a hole in it's hull or if an entity's origin point is placed outside the map hull, the map will "leak". Quake III Arena maps must be totally contained volumes. They cannot have "leaks" in them. Leaks are openings in the hull between the contained space (or "breathable" as one mapper has described it) and the outer void where nothing can abide.

The pointfile appears as a series of points, connected by red line segments, that traces a connecting path between an entity inside the hull and a point in the outside world.. Follow the pointfile through the map and note where it passes out of the enclosed space and into the void. In the case of an entity outside the world, it may just draw a line near the entity. You may need to turn off the display of clip and hint brushes, and curves to find the leaks. Adjust your solid map geometry to close up the leaks.

When you save the map (or an auto-save occurs), the pointfile disappears. You can bring the pointfile back by toggling this command.

Note: If you use a front-end program for compiling, such as Q3Build, you will need to reload the map file and select the "pointfile" command under the File menu.

Next leak spot
(Menu: Misc > Next leak spot)
(Shortcut: SHIFT + CTRL +K)
If you have a pointfile displayed in your map, use this command to move from point to point along the file. It's an easy way to move along the path to the point where the red line passes out of the contained space of the map.

Previous leak spot
(Menu: Misc > Next leak spot)
(Shortcut: SHIFT + CTRL +K)
A feature just like "Next leak spot", except that you move backwards along the pointfile.

Junk.txt
The Q3MAP compiler outputs this log file. It logs what the compiler is doing during the process; displays error messages and gives final compile times for each phase. Because the compiler works in three discrete phases, you can also use this output to gauge how far along the compile has gone. Edit the project file to change the path to the destination for this output.

Error Messages
When you compile a map, you are likely to get error messages. Most of these are not serious and the game engine either corrects them or ignores them. This is a sampling of common messages and what you should do about them.

Mixed faces: One or more faces on a brush has a surface parameter that conflicts with the other surface parameters. This is not a problem. Putting nodraw or clip on a brush that has a face that draws will cause this. That includes most all "flame" brushes, many water brushes, and just about every instance where alpha-channel textures are used to create see-through brush faces.

Bad point to polygon form factor: A curve patch is larger than 512 units in at least one dimension. This is not fatal, but may result in some unusual light artifacts on the curve.

Unknown surfaceparm: "nomipmaps" Some shaders contain old or incorrectly spelled parameters. This is not a problem.

Too many portals. Your map is broken into too many separate hulls by areaportal brushes. Try to keep the number of discrete portalled areas under 16.

Duplicate plane. During the course of manipulating brushes, you may have moved edges in such a manner that two adjacent sides of a brush now form a single brush side. Use Find brush to locate the problem brush. Use the old brush as a template or pattern, but build the new one with a single side in the place of the duplicate plane sides. One way to solve the problem is to use the Clipper tool cut off a corner instead of collapsing two faces into one. While this is not a serious problem for multiplayer play, it can create "solid" areas in the bot navigation (.aas) file. This makes the bots think there are walls in places where there appear to be none. You can check for solid areas with the "bot_testsolid 1" inside the game (after creating an .aas file). See the Bot Navigation appendix for more details.

******* Leaked *******. There is a hole between the contained space of your map and the outer void. Use the pointfile to locate the problem.

Couldn't load baseq3/pics/colormap.pcx trying tools/colormap.pcx...failed! This is not a compile error, but a loading error. Correct it by checking the hi-color textures setting in Preferences.

Loading base_light/light_flare...failed, using default shader. Just ignore this.

match token ("{") failed at line [line number]. You broke a shader while editing it. Go closely look at the shader you most recently edited. Chances are you'll find a bracket error in the syntax.

In-game Debug tools

One of the best places to look for errors in your map is within the Quake III Arena game itself. After the map has compiled, execute your Debug Config and load your map. The commands here will help you discover the errors in your map.

General Cheats
The following are the general Quake III Arena cheat codes (they're actually developer's tools). You can enter them from the console, or bind them to whatever keys you prefer using the syntax bind [key] [command]. If the command is a string with spaces, then the string should be enclosed with quotation marks.

give [weapon/item/ammo/health] [amount] // Give selected weapon/item/ammo/health

give all // Gives all weapons, ammo, armor, and items

god // Godmode

noclip // Pass through anything. Use in conjunction with r_fastsky 1 or r_clear 1, or you will have hall of mirror problems when you pass out of the bounds of the map.

notarget // Bots think you're a pal viewpos // Outputs player coordinate position and facing angle.

General Toggle Binds
(Thanks to original authors GrandMaMa and Eutectic)
The following are some binds that you might like handy. Note that some of these will alter saved settings, so make sure that your preferred settings are loaded on startup, like in your autoexec.cfg file.

bind "your key" toggle r_speeds // polycount report
bind "your key" toggle r_showtris // tris triangles
bind "your key" toggle cg_drawfps // framerate counter
bind "your key" toggle com_speeds // shows all stats
bind "your key" toggle r_drawentities // ents won't be drawn

Debug Mode: Logfile Creation
One method that can be used for troubleshooting maps where curious errors occur (usually when simply too much is going on at once) is to resort to poring over the developer output. The console buffer is limited, and error-producing maps may crash, so printing the output to a logfile is desired. This script allows the toggling of these functions.

bind "your key" vstr dbg set dbg vstr debug_1

set developer 0 set logfile 0 set debug_1 "set dbg vstr debug_0;echo DEBUGMODE ON;developer 1;logfile 2" set debug_0 "set dbg vstr debug_1;echo DEBUGMODE OFF;developer 0;logfile 0"

GL_Showtris/R_Speeds/FrameCounter Toggle
(Based in part on an article by orginal author MD)

The "gl_showtris" and "r_speeds" commands allow you to see the number and location of polygons (surface triangles) in your view. The "

Show me the Triangles Showtris draws a white line around each triangle used to create the world when it is a part of a map's potential viewable set (PVS). This is especially effective tool, since it shows the triangle outlines of map areas that are being "seen" by the engine, which are not always just the ones that the player sees.

Depending on your video card, this may work well, or it may not. For some (like the Matrox cards, it comes with a huge performance hit).

The Need for (R_) Speeds This output is one of the more valuable reports you can get on a map. The numbers show you the numbers that can tell you what kind of real visual costs you are encounter. Combined with other commands that turn features like entities, curves, and multi-pass texturing on and off, you can get a realistic idea of where you're having problems.

Here's what those cryptic numbers mean. When r_speeds = 1, the numbers read as follows (where the # sign equals a number)

# / # shaders/surfs # leafs # verts # / # tris #.## mtex #.## dc

# / # shaders/surfs is the number of shaders in view, followec by the number of surfaces in view.

# leafs is how many leaf nodes are potentially visible.

# verts is how many vertexes are in view

# / # tris is the number of trangles drawn by the renderer in a single pass single pass followed by the number of triangles drawn by the renderer with all passes. These are the numbers that are most often implied when someone talks about "r_speeds." If the r_ext_multitexture variable is off, the numbers will reflect a more accurate accounting of the real triangle count (see multi-pass texturing section below).

# .## mtex #.## dc [definition under construction]

Frame Rate There is a tendency for rate of frame display to become a sort of god (or at least a "greatest good") for some players. Their quality of play, whether real or psychological, revolves around how fast their computer is flipping through screen updates. Everything else, to them, is throw away. While the design and complexity of a map can affect this, so can many features that are outside of the designer's control. For that reason, frame rate is not a particularly good way to judge the quality of your map.

The "cg_drawfps 1" command gives you instantaneous frame rate readout.

Use this command string to toggle the three at once. Include the following lines in your Debug Config script:

set r_showtris 0
set r_speeds 0
set cg_drawfps 0

bind "your key" "toggle r_showtris;toggle r_speeds;toggle cg_drawfps"

Lock the PVS Table
(Author: MD)
"PVS" means "potential viewable set." The PVS includes all the polygons that can be seen from a particular location in the map (i.e., where you are standing now). The game engine updates what is visible and what is not as you move through the map. You can stop this updating process, and see just how far the engine can see by moving until you find an area of the world that's not being drawn. Use this to debug views where the frame rate drops below an acceptable level. Go to a place where you get a bad "fps" reading. Execute this command. When the PVS Table is locked, you can walk through the map and see exactly how far your view extends. Surfaces in view will be drawn as normal. Non-seen surfaces will show up as the Hall of Mirrors effect (unless the fast sky or r_clear options are also set). Use the information as a guide for changing what can be seen in a view.

This command string script toggles the use of the PVS table to let you do this. It also toggles on the r_clear option, so instead of Hall of Mirrors the void beyond the world is seen in fashion doll pink.

set r_lockpvs 0 set r_clear 0
bind "your key" vstr lockview set lockview vstr lockview1
set lockview1 "set lockview vstr lockview0;echo PVS Locked;r_lockpvs 1;r_clear 1"
set lockview0 "set lockview vstr lockview1;echo PVS Unlocked;r_lockpvs 0;r_clear 0"

MultiPass Texturing Toggle
(Based on an article by original author: MD<)
The number of triangles that must be drawn before a frame can be displayed affects the speed at which the game is played. More triangles means lower speed. When a texture on a triangle requires additional drawing passes, it is the same as drawing an additional triangle again for each pass of redraw. The ideal video card for the Quake III Arena game is one that has a multi-pass texturing feature. What this means is that the second rendering pass on a texture is essentially free. Its triangle cost is not calculated into the r-speeds. Unfortunately, the map designer cannot plan on every user having such a card and must instead design for worst case scenarios. If you are working on machine that has a multi-pass texturing feature, you will need to find out how the other half plays. You need to toggle the feature off for this.

This feature toggles between multi-pass texturing and single-pass texturing. When multi-pass texturing is enabled, the additional triangles are masked. They won't appear in the r_speeds report.

For this feature to work, the video must be restarted. That command is included in the binding. For best results, refrain from pressing the bound key again until the video has re-initialized and the map has re-loaded. Your normal setting for r_ext_multitexture should appear also. In the key binding below, it's been set to a value of 1, which is the most common. This way it will be properly set on startup, since this toggle can hose that setting.

set r_ext_multitexture 1
bind "your key" "toggle r_ext_multitexture;vid_restart"

Turning Off Curves and Entities
How much of the r_speed cost in your map can be attributed to entities. How much to curves? These two commands turn off the drawing of those entities. The set commands start by setting the features to their "on" condition.

bind "your key" toggle r_drawentities // entities won't be drawn
bind "your key" toggle r_nocurves // curves won't be drawn

Curves, Caulk, T-Junctions and Cracks

(From an article on the same by Martin Ka'ai Cluney)

During the course of Quake III Arena development, a number of solutions were created to deal with the idiosyncrasies of the compiling process. None of these problems is a game killer, but the presence of these little flaws tends to reduce the professional appearance of game maps.

An Explanation of "Z-Fighting"
"Z-fighting" is caused when the engine tries to simultaneously draw two surfaces that share the same plane. "Z-fighting" commonly occurs when two brushes with different textures are in the same place (see fig. X-1,) but it can also occur on some video cards when a patch is placed over a textured brush (see fig. X-2.)

An Explanation of T-Junction Cracks
"T-junction cracks" are a little more complicated than 'Z-fighting', and can be more difficult to track down and fix. They are caused when the vertices (control points) of a curve patch don't match up with surrounding world geometry. They can be caused when a patch extends into the world on one or more sides (see fig. X-3,) or when there is a split in the faces that make up one or more edges of a patch (fig. X-4.)

Avoiding T-Junction Cracks and Z-fighting
The best way to keep maps free of "T-junction cracks" and "Z-fighting" is to keep these problems in mind while adding patches and supporting geometry. There are a few simple methods for adding patches. Initially, they may seem like more work that they're worth, but they will save hours of hunting down and fixing problems that can arise through careless construction.
  1. Avoid spanning more than one brush with one edge of a patch. For example, if an inverted bevel is 128 units tall, back it with 128 unit tall caulk brushes. Likewise, if the wall is made up of two vertically stacked brushes; use two vertically stacked patches of matching heights.
  2. Avoid patches that extend into world brushes, unless all of the edges extend into world brushes. When adding patches, if one edge of the patch extends into the world, while the other edges line up with other brushes, there will most likely be cracking. Sometimes, particularly in the case of 'flesh' elements, it is necessary to extend parts of a patch into the world. In these cases, extend all edges into the world, or into surrounding patches.
  3. Be Careful with vertices. Use Snap to Grid. Without it, your curves will create far more problems than they will otherwise might. Sometimes, especially after resizing patches, vertices can get "knocked off" the grid. Always make sure vertices are where they're supposed to be. If needed, patch vertices can always be snapped back to the grid using CTRL+ G. It's always a good idea to be completely aware of where things are in relation to the grid.
  4. Caulk, caulk and more caulk. Get into the habit early of building the space behind curve patches with caulk brushes. You will eliminate Z-fighting, seal up the area behind the curves, and unless you are building a map in fashion doll pink, edges that aren't aligned with the curves have a better chance of showing up.

Here are a few examples of common elements from the maps in Quake III Arena, and how they should (and should not) be built to avoid Cracks and "Z-Fighting":

Jump Pads
Jump pads are probably the most common occurrence of T-junction cracks in Quake III Arena Maps. They usually extend upwards through at least two 'levels' (layers) of textures, so they're a perfect illustration of proper caulking. They are also a perfect illustration of 'binding' curves within structural brushes.

Flat arches
Flat Arches are another good example of 'binding' curves with structural brushes. This is a handy technique when incorporating a curve into a complex map element seamlessly.

Rounded Wall Edges (endcapped)
This is a simple example of terminating a wall in a rounded edge. The most important thing to keep in mind here is where the vertices are placed. If the patch is extended into the ceiling or floor, there will almost certainly be cracks.

Inverted Wall Bevels
Filleting a wall seems like it would be a simple thing, but there are many cases that could cause cracks. It's important to make sure heights are consistent, especially in the case of layered texturing, as is the case in this example.

Finding and Fixing T-Junction Cracks and Z-Fighting
There will usually be cases where, despite careful building, cracks appear. When looking for cracks that may have been missed, there are three console commands that will be a great help:

\r_clear 1: This will clear the frame buffer on each frame, eliminating the Hall of Mirrors effect.

\r_fastsky 1: This will draw the sky as a single, solid color, making it easier to see the void behind curves. This makes cracks stand out. Be aware that fastsky also disables the function of portal screens and mirrors.

\r_showtris 1: This will draw white lines around all of the triangles in the world, showing exactly how the geometry in the map is affecting the patches.

NOTE: Another good way to use these commands is to set them to toggle on a key. The Debug Config below contains these commands as toggles.

Turn on r_clear, and r_fastsky, and run through the map, looking at the patches from all possible angles. If there is a crack, turn on r_showtris, and make sure that the patch does not extend into the world, unless it was intended to. Next, look at the surrounding brushes. Make sure that no splits meet the edge of the patch. If neither case is true (it happens these case… 'mystery cracks'), then try a different approach to building the area; perhaps splitting one patch into two, or rearranging the brushes surrounding the patch. When none of the above seems to work, experiment with as many different ways as possible. If something works, keep it in mind for the next time.

A Debug Config

The following script should be copied and pasted into a text file. Save the text file as "debug.cfg". When you want to use these commands while playing a map, you need to load the map using the console. First type in "/devmap [mymapname] to load the map. Next type in "/debug.cfg". This executes your development configuration. Note that this changes the key assignments of some keys (you define which one is used for each assignment of "yourkey". These debugging tools are considered "cheats." They will not function during normal game play.

//+++++++++++++++++++++
//toggle on/off frames per second, polygon wireframes, and polygon in view counts with one keypress
set r_showtris 0 //sets triangle display to off
set r_speeds 0 //sets triangle counter display to off
set cg_drawfps 0 //sets frame display counter to off
bind "your key" "toggle r_showtris;toggle r_speeds;toggle cg_drawfps"

//The following are some individual binds for a few debug tools
set r_drawentities 1
set toggle r_nocurves 0
bind "your key" "toggle r_speeds" // polycount report
bind "your key" "toggle r_showtris" // Shows the actual triangles that form the world
bind "your key" "toggle cg_drawfps" // framerate counter
bind "your key" "toggle com_speeds" // shows all stats
bind "your key" "toggle r_fastsky" //turns off detailed sky and turns void to sky color
bind "your key" "toggle r_clear 1" // This will clear the frame buffer on each frame.

//Show coordinates that can be related to map coordinates.
bind "your key" "viewpos" // Outputs player coordinate position and facing angle.

//Turn off Entities and Curves
bind "your key" "toggle r_drawentities" // entities won't be drawn
bind "your key" "toggle r_nocurves" // curves won't be drawn

//Toggle off the multi-pass texturing feature
set r_ext_multitexture 1
bind "your key" "toggle r_ext_multitexture;vid_restart"

//Output console messages to a log file
bind "your key" vstr dbg set dbg vstr debug_1
set developer 0 set logfile 0 set debug_1 "set dbg vstr debug_0;echo DEBUGMODE ON;developer 1;logfile 2" set debug_0 "set dbg vstr debug_1;echo DEBUGMODE OFF;developer 0;logfile 0"

//Lock the PVS Table
set r_lockpvs 0 //turns off any existing PVS lock
set r_clear 0 //turns "void" bright pink
bind "your key" vstr lockview set lockview vstr lockview1 //binds three vstr scripts to a key
set lockview 1 "set lockview vstr lockview 0;echo PVS Locked;r_lockpvs 1;r_clear 1"
set lockview 0 "set lockview vstr lockview 1;echo PVS Unlocked;r_lockpvs 0;r_clear 0"

//Game Cheats (for debugging purposes)
bind "your key" "give all" // Gives all weapons, ammo, armor, and items
bind "your key" "god" //toggles god mode //makes player invulnerable to everything but kill triggers
bind "your key" "toggle noclip; toggle r_clear 1"//toggles ability to pass through walls and clear function
bind "your key" "notarget" // Bots think you're a pal (until you shoot them)


UGO.com - Page Not Found

Submit Email Address

Put Down The Jergens
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

A Computer, a Full Tank Of Gas and an Open Road to Mexico
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

Pull Our Finger
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

We Don’t Know What It Means Either
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

Meaty, Beaty, Big and Bouncy
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

We’re Doing It To Impress Jodi Foster
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

Game Over, Yeah!!!
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

Avon Calling
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

We’ve Got High Hopes
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

No Standing
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

Take The UGO Challenge
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

We’ve Got Jungle Fever
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

Entertainment’s Got A New IP
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe


UGO.com - Page Not Found

Submit Email Address

You Must Be This High To Ride
1/23/2002
Music
Games
Sports
Tech
FilmTV
Freestyle
UnderGround Zero
Showcase
Download
Freestuff

Subscribe to the UGO Newsletter

Submit Email Address

Office Jerk
Are you a workplace prankster? Brush up on your skillz with our UnderGround Guide to Office Pranks.

Are You Ready for Some Football?
Monday Night Mayhem's Brad Beyer plays Dandy Don Meredith. UGO digs in a little deeper.

May Day
Celebrate supermodel May Anderson's birthday with her in this week's bThere.

Free Online Demos
Superior Web-based games await in our new Play Games Now! subchannel.

If you arrived at this page via a link on UGO.com, please email us at webmasters@ugo.com and we'll fix the problem.

Sorry, there is no UGO.COM web page matching your request. Either the page no longer exists, has been moved to another directory or somebody somewhere screwed up typing the URL.

So now what?

Click here to visit the UGO.com homepage for breaking entertainment headlines.

Or use the navigation to the left to find the UGO content you are most interested in.

(C) UGO Networks, Inc., 2001. UGO.com and UnderGroundOnline are trademarks of UGO Networks, Inc. All Rights Reserved.
Copyright | Disclaimer | Privacy Policy | Send Comments | Tools | Sitemap | Unsubscribe