Documentation

This is the official Quake2World Online Manual.

About

Quake2World is a Free, standalone first person shooter video game. Our goal is to bring the fun and excitement of straightforward old-school death-match gaming to a more contemporary platform, and perhaps to a new generation of gamers. Quake2World is multiplayer-only. There is no single-player or offline gameplay mode. If you have no Internet and no friends, Quake2World might not be for you.

Features

Quake2World has a trim but solid feature set. It's better to do a few things really well than to do a hundred things poorly.

System Requirements

Quake2World system requirements are relatively modest when running with low-quality settings, however we recommend a fairly modern machine in order to enjoy effects like per-pixel lighting.

Base system requirements

Recommended system requirements

Installation & Maintenance

Quake2World is under development, and moves quickly. Some of the game data has been borrowed from other projects, and is in placeholder status. You should only install Quake2World if you wish to preview or contribute to the project.

Installation

To install Quake2World, follow the instructions for your operating system below.

Windows

GNU/Linux

Mac OS X

OpenBSD

Gentoo

The following steps need to be performed as root.

Gentoo Layman

This is a little more complex, but easier to maintain, especially if you use multiple overlays. The following steps need to be performed as root.

...
overlays = http://www.gentoo.org/proj/en/overlays/layman-global.txt
           http://jdolan.dyndns.org/svn/quake2world/trunk/gentoo/quake2world-layman-list.xml
...
nocheck  : yes
...

Maintenance

Quake2World follows a rolling release development model. You should ensure that your copy of Quake2World is up to date on a regular basis. Follow the instructions for your operating system below.

Windows

GNU/Linux, OpenBSD

Mac OS X

Gentoo

Gentoo Layman

Getting Started

Upon starting the game, you're presented with a console. There you may enter commands to view levels offline, connect to servers, change your player's name and model, customize your controls, etc. See Client Configuration and the related sub-pages for a full list of console variables and commands.

To gain your bearings, try viewing a level offline. Type map torn to spawn into cardo's level Torn Glory. By default, the w a s d keys will control your players movement, and your mouse will control your aim. The Levels section contains a full listing of maps available for offline viewing and online play.

Client Configuration

Quake2World strongly adheres to the philosophy of sane defaults, i.e. it should just work out of the box. Inexperienced players may find that the stock configuration suits them perfectly, while veterans will want to tweak key bindings and advanced preferences. Of course, there are a some settings that you'll need to adjust to suit your computer.

Just like QuakeWorld, Quake2World does not have an in-game menu system. The game is configured via a plain text file. Several alternative configurations are provided with the game. You can find them in the quake2world/default/configs directory.

Userinfo Variables

color
Controls player's color for rail slug trail. Other players will see your color. Valid color names are "red", "green", "blue", .. Defaults to "default".
msg
Controls message level filtering of server print messages. Values from 0 through 3 are valid. Defaults to 0 (unfiltered).
name
Specifies player's net handle. Defaults to "newbie".
password
Specifies password for protected servers. Defaults to "".
rate
Controls maximum bandwidth, in bytes, to be sent by the server. Values from 6000 through 25000 are valid. Defaults to 10000.
skin
Specifies player's model and skin. Defaults to "ichabod/ichabod".

Remote Console Variables

rcon_password
Specifies password for remote console command execution. Defaults to "".
rcon_address
Specifies remote hostname for remote connectionless console command execution. Defaults to "".

Benchmarking Variables

timedemo
Controls synchronization with system clock. Set to 1 for benchmarking. Defaults to 0.

General Variables

cl_addentities
Controls passing entities (players, projectiles, etc..) to the renderer. 0 means disabled, 1 means enabled. Defaults to 1.
cl_addparticles
Controls passing particles (smoke plumes, rain, etc..) to the renderer. 0 means disabled, 1 means enabled. Defaults to 1.
cl_async
Controls explicit separation of outgoing network packet rate and renderer refresh rate. 0 means disabled, 1 means enabled. Defaults to 0.
cl_blend
Controls screen flash effect when picking up items or receiving damage. 0 means disabled, 1 means enabled. Defaults to 1.
cl_chatsound
Specifies the sound which accompanies chat messages. Set to "" to disable. Deafults to "misc/chat.wav".
cl_counters
Controls the display of speed, framerate, and bandwidth counters. 0 means disabled, 1 means enabled. Defaults to 1.
cl_crosshair
Specifies the crosshair image from a preset list. Values from 0 to 7 are valid. Defaults to 1.
cl_crosshaircolor
Specifies crosshair color. Supported values include "red", "green", "yellow", and "orange". Defaults to "default".
cl_emits
Controls client-side "misc_emit" entities. 0 means disabled, 1 means enabled. Defaults to 1.
cl_footsteps
Controls playback of footstep event sounds from players. 0 means disabled, 1 means enabled. Defaults to 1.
cl_fov
Specifies horizontal field of view, in degrees. Values from 10 to 179 are valid. Defaults to 100.
cl_hud
Controls display of the heads up display. 0 means disabled, 1 means enabled. Defaults to 1.
cl_ignore
Specifies a pattern to identify chat messages which should be discarded. Defaults to "".
cl_maxfps
Specifies maximum number of frames rendered per second. Values greater than 10 are valid. Defaults to 0 (unlimited).
cl_maxpps
Specifies maximum number of outgoing network packets per second. Values greater than 10 and less than 101 are valid. Defaults to 0 (unlimited).
cl_netgraph
Controls display of the network profile graph. 0 means disabled, 1 means enabled. Defaults to 1.
cl_predict
Controls client sided movement prediction. 0 means disabled, 1 means enabled. Defaults to 1.
cl_railtrail
Controls appearance of the rail slug trail. 1 means simple trail, 2 means complex. Defaults to 2.
cl_showclamp
Report long frame times. 0 means disabled, 1 means enabled. Defaults to 0.
cl_showmiss
Report client sided prediction errors. 0 means disabled, 1 means enabled. Defaults to 0.
cl_shownet
Controls the display of network packet information. Values 0 through 3 are valid. 0 means disabled, 3 means verbose. Defaults to 0.
cl_timeout
Specifies interval (in seconds) that elapse without network activity before the client disconnects from the server. Defaults to 120.
cl_viewsize
Specifies the percentage of the screen eligible for 3D rendering. Values from 40 through 100 are valid. Defaults to 100.
cl_weather
Controls intensity of atmospheric weather effects. 0 means disabled, positive values increase intensity. Defaults to 1.

Commands

Renderer Configuration

The Quake2World renderer is highly configurable, and extremely performant on current generation hardware. It requires an OpenGL implementation of version 1.2.1 or better, and will use features from later versions (GLSL, VBO, ..) if available.

Variables

r_brightness
Controls texture brightness. Defaults to 1.5.
r_bumpmap
Controls bump mapping (per pixel lighting). 0.0 means disabled, positive values increase effect intensity. Defaults to 1.0.
r_contrast
Controls texture contrast. Defaults to 1.0.
r_coronas
Controls coronas (flares). 0 means disabled, 1 means enabled. Defaults to 1.
r_flares
Controls light flares. 0.0 means disabled, values between 0.0 and 1.0 control flare alpha. Defaults to 1.0.
r_fog
Controls global fog. 0 means disabled, 1 means auto (by weather effects), 2 means always enabled. Defaults to 1.
r_fullscreen
Controls fullscreen mode. 0 means disabled, 1 means enabled. Defaults to 1. Press F11 for fast toggle.
r_gamma
Controls overall brightness. Values from 0.0 to 3.0 are valid. Defaults to 1.0.
r_height
Controls screen resolution height. Defaults to 768.
r_invert
Controls inverted textures and lightmaps. Value is bitmapped: 1 -> textures, 2 -> lightmaps, 3-> both. Defaults to 0.
r_lighting
Controls all realtime lighting for cards supporting GLSL (see r_bumpmap, r_lights, ..). 0 means disabled, 1 means enabled. Defaults to 1.
r_lightmap
Controls modulate versus replace texture environment for lightmaps. 0 means modulate, 1 means replaced. Defaults to 0.
r_lightmapsize
Controls lightmap block size, useful for tuning on older cards. Must be a power of 2. Defaults to 2048.
r_lights
Controls dynamic light sources for cards supporting GLSL. 0 means disabled, 1 means enabled. Defaults to 1.
r_materials
Controls materials system activation (texture animations, environment maps, etc..). 0 means disabled, 1 means enabled. Defaults to 1.
r_modulate
Controls lightmap brightness. All positive values are valid. Values from 1.5 to 5.0 are useful. Defaults to 3.0.
r_monochrome
Controls monochromatic textures and lightmaps. Value is bitmapped: 1 -> textures, 2 -> lightmaps, 3-> both. Defaults to 0.
r_multisample
Controls multisampling (anti-aliasing). Values 0 through 4 are accepted, 0 means disabled. Defaults to 0.
r_optimize
Controls BSP recursion optimization strategy. 0 means disabled, 1 means enabled. Defaults to 1.
r_programs
Controls all GLSL program management. 0 means disabled, 1 means enabled. Defaults to 1.
r_rendermode
Controls rendering mode. Supported modes are pro and default. Defaults to default.
r_saturation
Controls image color saturation. All positive values are valid. Defaults to 1.0.
r_shadows
Controls blob shadows for entities. 0 means disabled, 1 means enabled. Defaults to 1.
r_soften
Controls lightmap softening. 0 means disabled, positive values increase softness. Defaults to 0.
r_specular
Controls specular highlights for bump mapping (see r_bumpmap). All positive values are valid, with higher values increasing highlight intensity. Defaults to 1.0.
r_swapinterval
Controls swap interval synchronization (V-Sync). 0 means disabled, 1 means enabled. Defaults to 0.
r_threads
Controls multi-threading (experimental). 0 means disabled, 1 means enabled. Defaults to 0.
r_vertexbuffers
Controls usage of OpenGL Vertex Buffer Objects (VBO) versus legacy vertex arrays. Value is bitmapped: 1 -> world 2 -> mesh entites 3-> both. Defaults to 3.
r_warp
Controls warping of liquid surfaces on cards supporting GLSL. 0 means disabled, 1 means enabled. Defaults to 1.
r_width
Controls screen resolution width. Defaults to 1024.



Commands

r_listimages
Lists all resident image files, with type and size information.
r_listmodels
Lists all resident model files, with type and size information.
r_screenshot
Captures the framebuffer image to file, e.g. ~/.quake2world/default/screenshots/quake2world00.tga.
r_reload
Forces all image data to be refreshed. This is required for e.g. r_brightness, r_contrast, r_modulate, r_monochrome, r_invert, ..to take effect.
r_restart
Apply screen resolution changes. Required for e.g. r_width, r_height, r_fullscreen, ..to take effect.

Movement & Controls

Command Default Bind Description
+attack MOUSE1 Fire weapon.
+forward W Move forward.
+back S Move backward.
+moveleft A Strafe left.
+moveright D Strafe right.
+moveup SPACE Jump or swim upward.
+movedown C Crouch or swim downward.
+speed SHIFT Toggle walk/run.
messagemode T Chat to other players.
messagemode2 Y Chat to teammates.
score X Toggle scoreboard.
screenshot F12 Capture a screenshot.
spectate Toggle spectator mode.
join <team> Join game.
vote <command|yes|no> F1|F2 Call vote, or vote on pending vote.

Location Files

Location files are strictly-formatted text files which contain coordinate-description pairs. They are used by Team Chat Macros to quickly report whereabouts to your team mates. You may create your own location files for any level. Simply spawn into a level, navigate to a key position in the level, and issue addloc My description. Repeat until you have captured a satisfactory number of locations -- you may store up to 1024 locations per level. When finished, issue savelocs before exiting the level. Your locations will be flushed to default/maps/level.loc, where level is the .bsp name.

Example: addloc above the rocket launcher

say_team I am %l with %h health.

newbie> I am above the rocket launcher with 94 health.

savelocs

You're encouraged to share your location files with friends, or post them in the Forums for others to download and use.

Team Chat Macros

Quake2World supports macro expansion for chat messages. This can be combined and embedded into chat binds to alert your teammates of your status. A table of available macros and their expanded values are listed below.

Macro Value
%l Location.*
%L Line of sight.*
%h Health points.
%a Armor points.
%d Last dropped item.

* Requires a valid location file for the current level. Example: bind MOUSE3 "say_team I am at %l with %h health and %a armor."

bind MOUSE4 "say_team Dropping %d at %l."

Server Configuration

The Quake2World server is a hardened and streamlined reincarnation of its predecessor. Dedicated versus Listen Servers A dedicated server is an instance of Quake2World which only hosts a game for other players; no one is sitting in front of the machine and playing. These are what you'll find when you type the servers command in the client. To run a dedicated server, you'll want a spare (GNU/Linux) computer and a relatively static IP address. The command will look something like:

        quake2world +set dedicated 1 +exec server.cfg

You may want to consider running your dedicated server with the GNU Screen utility, in which case the command would become:

        screen -S q2w quake2world +set dedicated 1 +exec server.cfg

A listen server is one which runs on your client computer. Listen servers are suitable for small LAN games with your friends. To start one, simply increase sv_maxclients to a value of e.g. 4, and load a level:

        sv_maxclients 4
        map fractures

Gameplay, Teams & Matches The default game module encapsulates some of the most popular classic Quake II gameplay modes: Deathmatch, Capture, Instagib, and Rocket Arena. It also offers teams support, and match mode where players must ready up for a game to begin. You can imagine some interesting permutations of these settings:

        #instagib with teams
        g_gameplay instagib; g_teams 1
        #rocket arena with balanced teams
        g_gameplay arena; g_rounds 1; g_teams 2
        #team deathmatch, match mode
        g_gameplay deathmatch; g_teams 1; g_match 1

Map Rotations The Quake2World server uses default/maps.lst to iterate through levels. The file format is rather straight forward, with level configurations specified within curly braces {}. As many as 64 levels can be specified and active within maps.lst. Maps may optionally have a floating point weight associated to them via default/maps.lst. This impacts their probability for selection when g_randommap is 1. Setting a map's weight to 0 will prevent it from being selected in either random or incremental rotations, but it will still be available via the vote command. HTTP Downloading The Quake2World client supports HTTP downloading of game content via libcURL. This enables players to download levels, sounds, etc.. from a web server, preferably on a different network than the game server, at high speeds. Setting this up is relatively simple; all you need is some web space. Copy any custom game media to a web-accessible location on your web server, maintaining the Quake2World directory structure, e.g.

        /var/www/htdocs/quake2world/default/ven_dm3.pak
        /var/www/htdocs/quake2world/default/maps/broken1.bsp
        /var/www/htdocs/quake2world/default/maps/ztn2dm4.bsp

To inform clients of this resource, set sv_downloadurl in server.cfg to the base directory of this resource, e.g. http://my.host.com/quake2world. Obey Thy Master In order for your server to be seen by the public, you must tell the master server about it. Set sv_public 1 in server.cfg. You should then see some messages in the console about heartbeats and pings:

        Sending heartbeat to 81.169.143.159:1996                                      
        Ping acknowledge from 81.169.143.159:1996

Logging and Statistics The server supports two different logging mechanisms: flat files, and a MySQL database. While flat files are easy to work with, a database enables much more interesting and flexible (i.e. realtime) analysis. To produce an old-school QuakeWorld fraglog file, set g_fraglog 1. For logging to MySQL, you must first provision a suitable database and install the schema found in src/default/schema.sql. Then, set the following in server.cfg:

        g_mysql 1
        g_mysqlhost localhost
        g_mysqluser user
        g_mysqlpassword password
        g_mysqldb q2w

For producing realtime statistics from the database, see the Stats package.

Gameplay

More info coming soon.

General information and tips

Quake2World has multiple game modes. This document explains what you are supposed to do in them and how to do it. Let's start with some general things and come to the specific game modes later.

You'll have to frag your enemies and stay alive to be successfull in any of the game modes. This means that you'll need to use the map and the items available on it to your advantage. Make sure to grab both weapons and health/armor!

Deathmatch / Free-For-All (FFA)

Classic deathmatch. There's many players but no teams in this gamemode, so just shoot at everything that moves and expect others to do the same.

The rough idea in this mode is to frag as many opponents as possible without getting yourself killed too often. The player who reaches the fraglimit first (fraglimit setting) or the player who has most frags when the timelimit is hit (timelimit mode) is the winner.

Capture the Flag (CTF)

Two teams (blue and red) fight against each other in this mode. Each team has a base that holds its flag. The idea is to steal the enemy flag and take it back to your base. You can only score a point if your own flag is still at your base, so better have someone defend it.

If a flag carrier is fragged he/she will drop the flag. Run over it to teleport it back to your base (if it's yours) or to pick it up (if it belongs to the other team).

Levels

Quake2World includes a varied collection of levels with the default installation. Some are remakes of Quake series classics, while others are original creations.

Aggressor

Originally created for Quake, Tyrann's classic Aggressor has been ported to numerous games -- a testament to its gameplay and build quality. The author describes the level:

"Brutal vertical action is the order of the day here. A medium sized base map that plays well with anywhere from 2-8 players, the more the bloodier."

Aggressor is an excellent level for one-versus-one games, and does just fine with small free-for-all groups too.

Type map aggressor at the console to play this map.

Aghast

Aghast is a dank, swampy deathmatch level originally created by Vondur for Quake. It's been reworked with textures from the Quake Retexture Project. This level is suited for small free-for-all or team deathmatch games.

Type map aghast at the console to play this map.

Catfight

Catfight is an original level created by Lava Croft and maintained by keres. This unique and overwhelmingly vertical arena is dressed up in the Andromeda texture set from Speedy, but with a frosty twist. Enjoy with 3-8 players free-for-all.

Type map catfight at the console to play this map.

Devolver

Devolver by TRaK is a moderately sized deathmatch level set in an abandoned, vaguely futuristic outpost. Adorned in a mix of textures from Evil Lair and Idolator, Devolver will comfortably hold 3 to 6 players free-for-all.

Type map devolver at the console to play this map.

Dies Irae

Dies Irae by Shadow is a large TDM and FFA map that is best suited for 6 or more players.

Type map diesirae at the console to play this map.

In The Arms of Lilith

This Quake2World original by spirit is a fast-paced tourney map best suited for some serious 1vs1 action. Set in a down-and-out chemical weapons plant on Saturn's moon Titan, this map offers no room to hide and demands precise and fast movement. Lots of vertical action, a good load of deadly weapons and a dense atmosphere make this rather small map a great place to fight your worst enemies and best friends alike.

The excellent textures were made by Rorshach.

Type map lilith at the console to play this map.

Stress Fractures

Stress Fractures is one of Jester's finest Quake2 deathmatch levels, and it's been given a dose of winter for Quake2World, complements of Yogi's Arctic texture set. Although suitable for stalking one-versus-one games, this map is ideal for 4 to 8 players free-for-all.

Type map fractures at the console to play this map.

The Frag Pipe

Everyone's (second?) favorite Quake2 level, The Frag Pipe, has been completely re-brushed and reworked for Quake2World by TRaK. Featuring textures from the Quake2Evolved project, The Frag Pipe will teleport you back to 1998 with style. Best for one-versus-one or small to medium sized free-for-all battles.

Type map q2wdm3 at the console to play this map.

Torn Glory

Torn Glory by Cardo is one of the most acclaimed Quake2 levels ever released. It's dressed in textures from Lunaran's Phobos set, and is superb for one-versus-one or small to medium sized free-for-all games.

Type map torn at the console to play this map.

Creating Levels

Creating levels for Quake2World is not unlike creating levels for Quake 2 or Quake 3: Arena. We recommend that you use Ingar's build of the NetRadiant editor, as it includes a game profile and preferences for Quake2World.

If you are new to Quake 2 level editing, you should start with Game Design's Quake 2 Guide, and return to this page once you've made your first simple level. Otherwise, please continue to one of the subsections below.

Textures and Texture Sources

Quake2World supports all popular image formats for world textures: TGA, PNG, JPG, and even Quake 2's WAL format. All of the textures distributed with Quake2World may be reused in other levels, provided you pass along whatever documentation comes with them. Please avoid creating levels with textures that may not be freely distributed.

Here are some sites which provide excellent quality, legally distributable textures:

Normalmaps and bump mapping

Quake2World's bump mapping (per-pixel lighting) uses a combination of deluxe mapping, dot3-bump mapping, and parallax mapping. This technique requires that you provide normalmap images for your world textures. Generally speaking, you'll want to provide a normalmap image for every opaque world texture appearing in your level. Materials textures like animations and pulses do not require normalmaps. The standard convention is to name your normalmaps with the _nm or _norm suffix. For example, if your texture is named torn/floor1.tga, the corresponding normalmap image should be named torn/floor1_nm.tga or torn/floor1_norm.tga. For parallax mapping, the format of your normalmap textures must be RGBA, with alpha channel encoded height. Creating proper normalmaps from diffuse textures can be difficult and tedious. We recommend that you elect to use textures specifically designed for this rendering technique, that should come with properly encoded normalmaps. Should you choose a texture set that does not, you might find this tutorial for creating normalmaps useful. There are several free tools available for creating and working with normalmaps:

The tutorial above is only one of many effective ways of creating normalmaps. There are several alternative methods, each with their own advantages:

A script for batch-processing textures into normalmaps with the GIMP Normalmap plugin can be found in src/tools/batch-normalmaps. However, batch-conversion will generally produce lesser-quality normalmaps than ones that are hand-tuned.

Additionally, you can and should tune each texture's bump mapping properties via the materials system.

Surface and Contents Flags

Several surface flags are available in Quake2World that were not previously supported by Quake 2.

SURF_NODRAW
Comparable to Quake III Arena's caulk feature; disables rendering of any face to which it is applied. Useful on backs of beams, bottoms of crates, etc.. The BSP compiler automatically assigns this flag to any surfaces textured with common/caulk.
SURF_TRANS33 + SURF_TRANS66
Combining the two legacy alpha blend flags causes the renderer to use the texture's alpha channel for blending. This is useful for light volumes and decals.
SURF_ALPHATEST
Enables OpenGL alpha-test on surfaces to which it is applied, allowing for grates, foliage, railings, fences, and other textures with "holes".
SURF_PHONG
Marks surfaces for Phong Interpolation (Phong Shading) during the BSP compile process. This should only be used on curved or organic geometry such as pipes, pillars, and terrain.

The Worldspawn Entity

The worldspawn entity is the core of the .map file structure. All world brushes appear within the context of the worldspawn entity. Quake2World adds several new properties to the worldspawn entity which impact everything from atmospheric weather to gameplay modes to lightmap resolution.

Runtime Variables

The following worldspawn keys are resolved at runtime, and may be overridden at the server operator's discretion via maps.lst.

message
The map title string, e.g. ^2S^7tress ^2F^7ractures by ^2J^7ester. Color escape sequences are supported. Avoid newline characters.
sky
The skybox prefix, e.g. unit1_, thundersky_, etc..
weather
Atmospheric weather type for the level. Valid values are none, rain, snow. You may also append fog, and optionally a fog color specified as rgb floating point numbers, e.g. rain fog 1.0 0.9 0.8.
gravity
The world gravity constant for the level, defaults to 800.
gameplay
The default gameplay type for the level. One of deathmatch, instagib, or rocket arena.
teams
Controls teams play. 0 is off, 1 is on, and 2 tries to enforce balanced teams.
ctf
Controls capture the flag. 0 is off, 1 is on, and 2 tries to enforce balanced teams.
match
Controls match mode, where players must ready-up for a match to begin. 0 is off, 1 is on.
fraglimit
Specifies maximum score a player may reach before an intermission.
roundlimit
Specifies the maximum rounds played before an intermission. Usually used in conjunction with rocket arena gameplay.
capturelimit
Specifies the maximum captures to transpire before an intermission. Only useful for ctf levels.
timelimit
Specifies maximum time, in minutes, that will transpire before an intermission.
give
A comma-delimited items list which each player will receive upon respawn, e.g. rocket launcher, super shotgun.

Compile-time Variables

The following worldspawn keys are resolved at compile time, and must be set before BSP compilation.

ambient_light
Specifies ambient light, or the minimum global lighting value for all light samples, as an rgb color, e.g. 0.07 0.06 0.06. A small ambient factor is recommended for most levels.
brightness
Controls light scale. This is used to uniformly brighten or darken your level. 1.0 is default, all positive floating point values are valid.
contrast
Controls light contrast. This can be used to create darker dark areas and lighter light areas. The default value is 1.0. Values significantly higher than 1.0 are not recommended.
lightmap_scale
Controls lightmap resolution, which is relative to texture size. Default is 16 (1/16). A value of 8 will produce sharper lightmaps, but will dramatically lengthen your static lighting compile times. In fact, setting this to 32 during development is a nice trick for speeding up your level design process.
saturation
Controls light saturation, or color influence. This can be used to make a level look more colorful, or more pale. The default value is 1.0. Values from 0.5 to 3.0 are most useful.
subdivide
Controls maximum surface size for the bsp stage of the compile. Generally, the default value 1024 is recommended. Lower values may reduce artifacts, while higher values may reduce r_speeds.
sun_angles
Controls sunlight direction, specified as pitch and yaw in degrees, e.g. -80 220.
sun_color
Controls sunlight color, specified as rgb floating point values, e.g. 1.0 0.9 0.8.
sun_light
Controls sunlight intensity. Values from 0 to 255 are valid, 40 to 150 typically produce best looking results.

The Emit Entity

The misc_emit entity is a client-sided entity type used to enrich your levels with non-vital information such as static meshes, particle torches, flickering lights, and ambient sounds. As many as 512 misc_emit entities may be added to a given level. This entity is highly customizable based on several key-value pairs.

Similar to Quake 2's spawnflags key-value pair, a set of flags exists for enabling certain misc_emit features. Whenever possible, these are automatically resolved by the game engine based on the key-value pairs you have set on the entity. Still, you will sometimes need to add these values to the flags key-value pair manually.

    EMIT_LIGHT      1
    EMIT_SPARKS     2
    EMIT_STEAM      4
    EMIT_FLAME      8
    EMIT_CORONA     16
    EMIT_SOUND      32
    EMIT_MODEL      64
flags
A bit-masked integer value; see above. When possible, flags are automatically resolved by the game engine based on the presence of other key-value pairs described below. However, some flag values must manually be set.
angles
3 positive floating point values in degrees, these provide directional information. Applicable to EMIT_SPARKS EMIT_MODEL.
color
3 positive floating point values, these provide rgb color information. Applicable to EMIT_LIGHT EMIT_CORONA.
count
A positive integer value which provides particle count information. Applicable to EMIT_SPARKS. Default is 12.
drift
A positive floating point value which provides some variance to event frequency. Values greater than 0.0 and smaller than 5.0 are most useful. Applicable to EMIT_LIGHT EMIT_SPARKS EMIT_STEAM EMIT_FLAME EMIT_SOUND. Default is 0.01.
hz
A positive floating point value which provides an event frequency baseline. Applicable to EMIT_LIGHT EMIT_SPARKS EMIT_STEAM EMIT_FLAME EMIT_SOUND. Use the drift key to add variance. Sane defaults are used where possible.
model
The game path of a model file, e.g. outpost/tree. The model must be a static mesh (i.e. not animated). It will be positioned according to the angles key. Applicable only to EMIT_MODEL, which is set when this key is present.
radius
A single floating point value which provides radius information. Applicable to EMIT_LIGHT EMIT_CORONA EMIT_FLAME. Defaults are 1.5, 12.0 and 1.0 respectively.
sound
The game path of a sound sample, e.g. aghast/drip. When no hz value is provided to emits which have a sound key, they are treated as looped ambient sounds. Applicable only to EMIT_SOUND, which is set when this key is present.
velocity
3 floating point values in units, these provide directional velocity information. Applicable to EMIT_STEAM
attenuation
Determines the size of the area in which a given sound is heard. Default is 1. Lower values will increase the range of the sound, whereas higher values will make the sound more localized. Setting this to -1 will make a sound play globally. Applicable to EMIT_SOUND

Examples

A torch flame, automatically accompanied by a crackling fire sound effect:

{
    // entity 1
    "classname" "misc_emit"
    "origin" "-24 512 256"
    "flags" "8"
 }

An ambient drip:

{
    // entity 2
    "classname" "misc_emit"
    "origin" "786 1284 16"
    "sound" "aghast/drip"
}

A flickering light with sparks:

{
    // entity 3
    "classname" "misc_emit"
    "origin" "-224 640 -64"
    "angles" "0 270 0"
    "flags" "3"
    "color" "1.0 0.9 0.5"
    "radius" "1.25"
    "count" "20"
    "hz" "0.25"
    "drift" "0.5"
}

A steam emitter, pointing downward and slightly north-east, and automatically accompanied by a hissing sound effect:

{
    // entity 4
    "classname" "misc_emit"
    "origin" "216 -48 512"
    "flags" "4"
    "velocity" "10 10 -40"
}

A static mesh tree:

{
    // entity 5
    "classname" "misc_emit"
    "origin" "-1024 -42 168"
    "model" "outpost/tree"
    "angles" "4 270 0"
}

Legacy Entities

The vast majority of Quake2World entities are carryovers from Quake 2. You'll notice, however, that several items have been removed, and a few new ones are available. Also, some old items have new spawnflags to alter their behavior. They are as follows:

item_*
All items in Quake2World (ammo, armor, weapons, ..) can be made to float in space, rather than drop to the floor upon spawning (which is the default behavior in Quake 2). Set spawnflags to 4 on any item to enable this behavior.
trigger_push
This is the accelerator pad entity so common in Quake 3 Arena, and also fairly popular in later Quake 2 levels. Setting spawnflags to 2 for these entities will make them emit a "rising rings" effect to help them stand out.
weapon_lightning
This is the lighting gun weapon, which Quake2World adds as a nod to classic Quake.

The BSP Compiler

Quake2World provides its own cross-platform BSP compilation tool called q2wmap. The compiler is based on the original Quake 2 tools, but in addition offers the following:

  • Support for large surfaces, reducing r_speeds by up to 30% on some levels.
  • High-color texture support during light stage.
  • Performance optimizations, such as not subdividing or lighting sky surfaces.
  • Configurable sunlight, ambient, brightness, saturation, contrast, and lightmap resolution via worldspawn entity.
  • Phong Interpolation (Phong Shading) for simulating curved or organic surfaces.
  • Integrated pak authoring for generating standard distribution Pakfiles for your levels.
  • Integrated materials file generation for getting started with the materials system.
  • Multi-threading for machines with more than one processor or core.

In addition to these things, the q2wmap source code is Valgrind clean. The stock tools are riddled with dangerous instructions and memory leaks.

Invoking the compiler is simple and straightforward. You should consider running it via a command prompt or shell rather than through GtkRadiant's build menu.

Standard full compile:

q2wmap -bsp -vis -light maps/my.map

Fast vis, extra light, two threads:

q2wmap -t 2 -bsp -vis -fast -light -extra maps/my.map

Materials file generation:

q2wmap -mat maps/my.map

Pakfile generation (produces map-my.pak):

q2wmap -pak maps/my.map

The Materials System

The materials system provides a flexible framework to enhance your levels with animations, light flares, environment maps, terrain blending, and other effects. If you are familiar with Quake 3 Arena's "shaders" system, you'll be right at home with materials.

A material is a set of directives and parameters for an individual world texture. Each texture in your level can have zero or one material definition. Materials are defined in a plain text file called materials/mymap.mat, where mymap is the name of your .bsp file. The BSP compiler can generate a default materials file for your level to get you started: q2wmap -mat maps/my.map

General Structure

Materials are comprised of a material definition, and then zero or more layers called stages. Each stage can describe one or more effect, and each effect is blended with the result of the prior stages. The basic structure of a materials file is:

{
    # Material definition
    material path/to/texture1
    parameters
    {
        # Stage definition
        texture path/to/texture2
        parameters 
    }
    ...
}

Material Definition

The material definition specifies the texture name and per-pixel lighting parameters.

normalmap path/to/normalmap
Normalmap overriding is used to apply common normalmap textures to several materials. By default, the engine tries ${texture}_nm and ${texture}_norm. Typically, this directive is omitted. See normalmaps and bump mapping
bump b
Bump amplification is used to tune bump mapping effects. Higher values increase the "bumpiness" of surfaces. The b parameter is required, and must be a positive floating point value, or 0.0. The default value is 1.0.
parallax p
Parallax amplification is used to tune the depth of bump mapped surfaces. Using values higher than 1.0 requires high-quality normalmaps, with properly encoded height values. The p parameter is required, and must be a positive floating point value, or 0.0. The default value is 1.0.
hardness h
Hardness is a multiplier for the specular component of bump mapped surfaces, and can be used to amplify or mute a material's reflectiveness. Organic materials benefit from lower values, while polished metals and glass benefit from higher ones. The h parameter is required, and must be a positive floating point value, or 0.0. The default value is 1.0.
specular s
Specular amplification is used to tune the specularity of bump mapped surfaces. The s parameter is required, and must be a positive floating point value, or 0.0. The default value is 1.0.

It is a best practice to define all material parameters for your opaque world surfaces, as they are eligible for per-pixel lighting. Quake2World provides safe defaults when you omit these parameters, but tuning them will often benefit the appearance of your level.

{
    material evil6/stone_floor
    bump 3.0
    hardness 1.5
    parallax 1.2
    specular 3.0
}

Note that blended materials such as glass or foliage do not support per-pixel lighting, and so you may safely omit the material parameters for them.

{
    material office/glass
    {
        envmap office/glass
    }
}

Stage Definition

There are four types of stages: texture envmap lightmap flare. A stage must start with a type declaration, e.g. texture lunaran/pad1_fx, envmap 0, lightmap, flare 1, etc..

Texture Stages

Texture stages are the most versatile and complex type, and must always declare a valid texture image, e.g. texture lunaran/pad1_fx. The following listing describes the texture stage directives.

anim frames hz
Frame-based animations are used to animate surfaces like computer screens. The stage texture name should end in 1, e.g. lunaran/computer1, with subsequent frames following in sequence. The frames parameter specifies the number of textures which comprise the animation. The hz parameter specifies the frequency of the effect. Both are required, and must be a positive integer and positive floating point number respectively.
blend src dest
The blend directive exposes OpenGL's GL_BLEND function. This is used for textures which lack an alpha channel, where additive blending is typically required. The src and dest parameters are GL constants, e.g. blend GL_ONE GL_SRC_ALPHA. The default blend function is GL_ONE GL_ONE_MINUS_SRC_ALPHA.
color r g b
The color directive is used to influence the stage's default color. This directive is often used in conjunction with other directives such as pulse or stretch. The parameters r g b are each required, and must each be floating point numbers between 0.0 and 1.0.
pulse hz
Pulses are used to animate surfaces like jump pads or light fixtures. The stage texture is interpolated over the base material using a sin function. The hz parameter specifies the frequency of the effect. It is required and must be a positive floating point number.
rotate hz
Rotation directives are used for fan blades, Yin-Yangs, and other surfaces which should appear to rotate. The hz parameter specifies the speed of the rotation. It is required, and must be a positive floating point number.
scale.s s, scale.t t
The scale directives are used to scale texture stages, and can be used when a stage texture is of a different resolution than the base material texture. S and T are the two texture coordinate axis. Each directive takes exactly one required parameter, which must be a positive floating point number.
scroll.s s, scroll.t t
The scroll directives are used to slide texture stages across the underlying base material. This is used for computer screen redraw lines, layered water surfaces, and trim lighting. S and T are the two texture coordinate axis. Each directive takes exactly one required parameter, which must be a floating point number.
stretch amp hz
Stretch directives are used to create continuous expanding and contracting effects. The amp parameter specifies the scale of the stretch, while hz specifies the frequency. Both are required, and must be positive floating point numbers.
terrain ceil floor
Terrain directives are used to achieve simple height-based terrain blending. The ceil and floor parameters specify the highest and lowest Z-axis coordinates where blending will occur. At Z coordinates less than floor, the base material texture will appear; at Z coordinates greater than ceil, the stage texture will appear. Linear interpolation is used to blend the two textures at Z coordinates between ceil and floor. Both parameters are required, and must be floating point numbers.
dirtmap intensity
Dirtmap directives are used to add randomized, blended artifacts to primary or terrain surfaces. This can effectively create unique looking surfaces, as generally no two polygons will receive the same set of artifacts. The intensity parameter specifies the overall amplification of the effect. It is required, and must be between 0.0 and 1.0.

Both terrain and dirtmap stages support per-pixel lighting, thus it is possible to create bumpmapped terrain. To do this, declare your terrain stage texture with a material definition prior to the base material.

{
    material organics/grass
    ...
}
{
    material organics/dirt
    ...        
    {
         texture organics/grass
         terrain 32.0 128.0
    }
}

Envmap Stages

Environment map stages are used to simulate reflections on metal, water, glass, etc. For convenience, they may be declared with numeric values to take advantage of several built-in effect textures, e.g. envmap 0. Alternatively, a unique texture can also be provided, e.g. envmap envmaps/my_envmap.

Environment map stages do not currently support any unique directives, but do support blend color scroll.s scroll.t, described above. If a color is not provided to the stage definition, Quake2World automatically uses the surface's average static lighting color to shade the environment map.

{
    material office/glass
    {
        envmap office/glass_envmap
        blend GL_SRC_ALPHA GL_ONE
        color 0.9 0.9 1.0
    }
}

Lightmap Stages

Lightmap stages are used to blend in statically computed lighting information. This is typically applied as the last drawn stage, and is useful for shading opaque or mostly opaque stages such as animations. Lightmap stages are declared by simply beginning the stage with the lightmap type name. Lightmap stages do not support any unique directives.

{
    material lunaran/computer0
    ...
    {
        anim 4 0.3
    }
    {
        lightmap
    }
}

Flare Stages

Flare stages are used to add flares (coronas) to surfaces such as light fixtures. For convenience, flare stages may reference numeric values to take advantage of several built-in effect textures, e.g. flare 1. Alternatively, a unique texture can also be provided, e.g. flare flares/my_flare.

Flare stages do not currently support any unique directives, but do support color scale.s scale.t described above. If a color is not provided to the stage definition, Quake2World automatically uses the surface's average static lighting color to shade the flare. Either of the scale.s or scale.t directives can be used to influence the size of the flare produced by this stage.

{
    material tech/small_light
    ...
    {
        flare tech/flare1
        scale.s 1.5
    }
}

More Examples

The best way to learn the materials system is to study some of the materials files that come with Quake2World. These are conveniently available in the Subversion repository.

Creating Models

Coming soon.

Frequently Answered Questions

When will Quake2World be released?

When it is ready. Currently, the project's release is gated by artwork. If you are an artist, or know one, and would like to help us, please get in touch.

Where are the in-game menus?

Like QuakeWorld, Quake2World does not have in-game menus. See Client Configuration for a list of console variables and commands.

How do I start a game?

To start a local game, type map fractures at the console. In order for other players on your LAN to connect to your computer, you must first set sv_maxclients to a value higher than 1 before starting the level.

Why is my framerate very low?

Quake2World will use GLSL effects if your video card claims it can support them, even if it can't run them very well. Try disabling r_lights, r_bumpmap, and finally r_programs in that order until you have a reasonable framerate.

How can I get more help?

You can always find a team member in #quetoo on irc.freenode.net. If you're new to IRC, we recommend X-Chat 2 (X-Chat 2 for Windows).

Licensing

The Quake2World source code is licensed under the GNU General Public License Version 2.0. For artwork and media, we accept work released under the GPL, Zlib, MIT, WTFPL, all CC variations, and generally anything that allows us to freely distribute the game.

We are aware that following the DFCW or DFSG would allow Quake2World to be included in free operating systems distribution. However, being completely "free as in freedom" is less important to us than providing a great game and giving our contributors the freedom to make their own licensing choices.