Creating maps for KMQuake2 is easier than you would expect. There are no special map editor settings required. You need only use the included kmquake2_lazarus.def (for Radiant) or .fgd (for Worldcraft) entity lists to support the new or modifed entities. The rest of the mapping-related changes are new tricks and capabilities that you can use in the map itself, at compile time, or at run time.
To make a texture have a cut-out, make a .wal texture with the areas to be invisible as color 255, or the last color in the palette that appears as a dark pink or peach in Wally. You can find a tutorial on making these textures here. Alternately, you can make a TGA texture with cut-outs by using an alpha channel that makes those parts invisible.
This autoscaling can be used to texture a map with TGA or JPG textures and make it look as if it had been done with a texture stretch of 0.5, 0.25, 0.125, or even smaller. The size of any identically named .wal texture found at runtme is compared to the size of the TGA or JPG texture, and the resulting divedend is the texture scale used. For instance, if the .wal version of a texture is 128x128, and the JPG version is 512x512, then the surface will look like it has a texture stretch of 0.25. This technique avoids the problems caused by actually using such small stretch values, such as undersized dynamic light glows and MAX_MAP_LIGHTING compile errors.
This script file contains alias definitions, which are virtual entity classnames that are changed to another classname when a map loads, each with a set of default key values. These values can be any key value normally suppported in the game, and are subordinate to what the mapper specifies, except for classname. For example, this alias definition:
scenery_tree1
{
"classname" "model_spawn"
"spawnflags" "4"
"usermodel" "scenery/tree1/tris.md2"
"solidstate" "3"
"bleft" "-16 -16 -16"
"tright" "16 16 168"
}
defines a virtual entity classname, scenery_tree1, which is converted to a model_spawn at runtime with the listed fields already filled in. Scenery_tree1 can then be added to the entity list with the proper bounding box and model info, allowing the mapper to see the model and its bounding box in-editor to more easily position it.
{
map "marics81"
longname "Topaz"
type "dm teamdm"
}
The map field is the filename of the level's .bsp file (sans .bsp extension). The longname field is the map's title, and the type field determines which game modes the map shows up in. In KMQ2's start server menu, the maps from .arena files are added after the maps from maps.lst, and are filtered by the selected game type. Here are the valid type tokens:
Deathmatch: dm teamdm ffa team
Cooperative: coop
CTF: ctf
3Team CTF: 3tctf
The script should be named mapname.arena (for a level named mapname.bsp), and it should go in a folder called scripts, parallel to the maps folder. The path for this file inside a pak or pk3 file should be scripts/mapname.arena.