Worldspawn Overview
When learning level design in the quake 3 engine you'll often her references to worldspawn, but few times people actually explain what it is and how you can best use the keys.
Worldspawn is the first entity listed in your .MAP. It is the first entity listed in any map, as it contains all the brush coordinate information that gives your map its architecture. As far as what you need to know it contains all the global settings for your map.
To access worldspawn, select a brush(not an entity), and then press the N Key to bring up the entity window. From worldspawn, you can set a range of keys for the brushes inside the worldspawn group, these keys have affect during compile and are baked into the .BSP, most values cannot be changed at runtime while some can.
I will go over all of the keys I am aware of that you can use for the worldspawn.
message
This is the text to print while loading the map. Most of the time this is used for the name of the level and the level designer's name. Sometimes people forget to credit themselves here and nobody knows who made the map.. ^1234 colour values do not work in this text and will show those characters instead.
All letters will be converted to Uppercase.
music
Relative path to a looping .wav file used for levelwide music (eg. music/delirium/noise.wav) This shouldn't get used. unless your creating a fun map of some sort you should use target_speaker's for your sounds. If you do happen to use this I recommend not such a loud noise as it's quite irritating to hear while playing. Otherwise I would 100% recommend sticking to individual sound entities within your map.
_ambient OR ambient
Adds a constant value to overall lighting. Use is not recommended for realism. Ambient light will have a tendency to flatten out variations in light and shade. Perfectly fine for jump maps and arena maps, though I'd experiment with _minlight as it doesn't blow out like ambient does.
_color
RGB value for ambient light color, default is 1 1 1 (White) I mix this with _minlight for test maps. another way to set the color, is while your selecting a normal brush, press 'k' and select your color from there. In some Quake 3 mods, this value controls the dust colour.
gravity
Sets the default gravity of level when the map loads. (default is normal gravity: 800).
This is one of the values which can be overridden by the server, however this will change the default gravity of the map and subsequently the server, until the gravity is set by the server again. So I would not recommend fiddling with this as I realised myself once that g_gravity values on the server do not change between maps.
enablePrecip
Toggling rain/snow on your map. Sprites fall from any skybox shader within the map(compile required) will travel downward until they hit a solid brush, spristes will travel through patch mesh and through entities. Default is 0.
precipAmount
Apparently this can go up to 1024 and has a minimum of 64, beams are cast downward around the player in a cone where the drops move around in '3d'. While it seems to accept lower values, I don't believe it does anything differently. Unsure on what the default is.
globalfog
This only works on some ports of ioQuake3.exe, once upon a time this was going to be a feature for Urban Terror but this can bake in a fog value for some custome executables. That value cannot be overridden by the client and if set to a poor value will put that player at a disadvantage - Value would be entered as 0.7 0.7 0.7 0.00002 (Red, Green, Blue, density(1 means you cant see, higher density than my example is not recommended))
gridsize
Determines the granularity of the lightgrid created by q3map. The lightgrid is a collection of volumes cut through your BSP which contain a uniform grid of lighting information used on dynamic objects only(entities).
Value is three integers separated by spaces, representing number of units between grid points on the X Y Z axis. The default gridsize value is 128 128 256. Use larger powers of 2 to reduce BSP size and compile time on very large and/or open maps.
The default value is fine, I recommend lowering the value to your own tastes, I normally go as low as 32 32 64 or 64 64 128. Lower values can increase compile times. MAKE SURE YOU KEEP THE VALUES TO POWERS OF 2
_blocksize
q3map always splits the BSP tree along the planes X=_blocksize*n and Y=_blocksize*n. Default _blocksize value is 1024. Increase the blocksize using larger powers of 2 to reduce compile times on very large maps with a low structural brush density.
The default value is fine(1024x1024), when doing larger open maps try 2048 to reduce compile time MAKE SURE YOU KEEP THE VALUES TO POWERS OF 2, smaller maps can use 512 and Jump maps using hollowed boxes and teleporters should use 0 to remove all default splits, or if you're an absolute pro at vis-blocking your map.
While it is not mentioned in the documentation I've read, _blocksize accepts a 3rd value for the Z axis, so you can split more vertical maps with this value. Though it does not by default.
_minlight
Minimum light value, levelwide. Uses the _color key to set color. Does not add unlike ambient.
When I've used this in maps, I've generally used a very low value between 0-20 (combined with sunlight/shader light) anything more looks out of place and washed out. Over time I've stopped using ambient and minlight and have lit everything manually with skyshaders, light shaders and pointlights - it looks more realistic. Props to anyone who can make ambient/minlight look good.
_mingridlight
This sets the minimum lightgrid (dynamic entity lighting) levelwide.
This value refers to all dynamic entities. Including; players/weapons/items/player and weapon vfx with specific lightmap values. This is a MUST for all levels, without this playermodels are hard to see from a distance, a small value like 50 can make all the difference. I normally set this above 120 for all of my maps and competitive players really appreciate it.
_minvertexlight
This sets the minimum light on vertex lit models levelwide.
I recommend leaving this alone, unless you're having shadow issues on your vertex lit models. In which case, it's likely a bad model or a rough shape. Regardless I'm not here to judge, keep this to lower values like 0-50 if you need to use it, else I'd recommend trying a different lighting method.
_keeplights
Keep light entities in the BSP. Normally stripped out by the BSP process and read from the .map file by the lighting phase.
This is set to 0 by default, you can easily set this to 1 to keep all light entities used in your map, I recommend this if you plan on letting people learn from your map. Or you know, in case you ever need to decompile it yourself because you lost the source files...
_lightmapscale
Floating point value scaling the resolution of lightmaps on brushes/patches in the world. Can be overridden in func_group (or other entities) (default 1.0). I would recommend setting this on a per entity basis or by using func_groups on brushes where you want higher detailed shadows. Increasing lightmap resolution levelwide can increase .BSP size and memory use unnecessarily, it's best practise for optimization to target your usage of increased lightmap resolution.
_noshadersun
This will ignore q3map_sun/sun directives in sky shaders and ONLY use entity sun lights. I have never used this in an actual level but I can assume it's only practical usecase is for turning a map to night time without requiring a new .shader file. Thus, not breaking compatibility with the daytime version.
_farplanedist
This sets the limit (in quake units) on how far the vis phase of compilation can see. Used in combination with level-wide fog, it can help reduce r_speeds on large, open maps. While this might seem amazing, Quake 3 only supports linear fog, meaning this key is not practical without having extremely dense fog in your map. Unless your map is extremely long and open.
_foghull
Points to the shader to use for "fog hull." Foghull shader should be a sky shader. Omit the "textures/" prefix. This shader needs to exist in a .shader file also. _foghull does not cull anything projected by the _skybox entitiy unfortunately, there is no way around this as the hull culling comes from the player origin and the projected geometry does not exist in it's projected position.
_cs OR _castshadows
Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
_rs OR _receiveshadows
Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
_celshader
Sets the cel shader used for this geometry. Note: omit the "textures/" prefix. Overridable in entities, though if you're doing a cel shaded map it should be set here rather on a per entity basis as you may want to turn it on/off easily for testing.
_indexmap OR alphamap
Q3MAP2 TERRAIN KEY - pretty much redundant as tri-souping with alphablending shaders is the preferred method of terrain building.
_layers OR layers
Q3MAP2 TERRAIN KEY - pretty much redundant as tri-souping with alphablending shaders is the preferred method of terrain building.
_shader OR shader
Q3MAP2 TERRAIN KEY - pretty much redundant as tri-souping with alphablending shaders is the preferred method of terrain building.