]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - Docs/mapping.txt
Restore yet another weird path in SDL lib configs
[xonotic/xonotic.git] / Docs / mapping.txt
index c46d6996d78efbcb3942bb878b53161a4e03a709..5ab3e356c2a97148bf875803a0aba3c7bb16772a 100644 (file)
-==============
-=Mapping Help=
-==============
-
-While I can't help you make a map, I can help you get it listed in the menu and
-working in the maplist. :p  The central object is the .mapinfo file, but
-there's much more available.
-
-Table of Contents
------------------
-I        Map Lists & Scripts
-         (get your map listed and working)
-  i.     mapinfo
-  ii.    mapname.cfg
-
-II       Map Image
-
-III      Domination
-
-IV       CTF
-
-V        Rune Match
-
-VI       Race/CTS
-
-VII      Nexball
-
-Appendix A - Advanced mapinfo
-
-Appendix B - Helpful extras
-  i.     Team Colors
-  ii.    Text Colors
-
-Appendix C - Advanced Darkplaces shaders
-
-========================
-=I. Map Lists & Scripts=
-========================
-
-There now is just a single script/cfg file available to you, containing all map
-specific settings:
-
-mapname.mapinfo
-
-The mapinfo is actually required - however, the game is so nice that it
-automatically generates a draft of it for you.
-
-------------------
--The mapinfo file-
-------------------
-
-*cue even more scary music*
-
-The mapinfo file is basically what gets your map listed in the menu, and sets
-up the options needed to change to it. If no mapinfo file exists, the menu
-will automatically generate a rough draft for you on game startup. It will get
-stored into data/data/mapname.mapinfo.
-
-As an example, let's say I make a map called "wazat1.bsp". As long as I'm
-fantasizing, I might as well say this map is so well done I'm actually willing
-to release it for friends, neighbors, fellow forum visitors and other people
-who like me to judge me by. Let's also assume that I want domination,
-deathmatch/team deathmatch and runematch to all be playable on my map.
-
-This is very easy. First, I start the game and exit it again so the game writes
-data/data/wazat1.mapinfo for me. The file may look like:
-
-    title Wazat's Great Map
-    description Bleh.
-    author Unknown
-    _diameter 1966.839355
-    _spawnpoints 5
-    has weapons
-       cdtrack 5
-    type dm 30 20
-    type dom 200 20
-    type rune 200 20
-    type lms 9 20
-    type arena 10 20
-
-As I see, the menu autodetected that my map may be suitable for deathmatch,
-domination, runematch, last man standing and arena. But I want the map to be
-played in domination, deathmatch, team deathmatch, runematch only, and I also
-want different timelimits/fraglimits, so I will change the "type" lines to:
-
-    type dom 100 15
-    type rune 1000 25
-    type dm 40 15
-    type tdm 50 0 2
-
-Also, while I am at it, I should fix the placeholders in the map description lines:
-
-    title Wibble
-    description A large multi level arena map
-    author Wazat
-
-Although not entirely necessary, I will now move the .mapinfo file from
-data/data/maps/wazat1.mapinfo to data/maps/wazat1.mapinfo, so it is at the same
-place as my map. Next time I start the game, my map will be shown supporting
-the right game modes and with the right description in the menu.
-
-Also, note the "has weapons" line. If this line is not there (which happens if
-the map contains no weapon entities other than the Nex), the map will run in
-MinstaGib only and not be shown in the menu normally. So if you look for your
-map and don't find it, add "has weapons" to the mapinfo file, and make sure you
-have weapon entities placed.
-
-There's much more power in a mapinfo file. See Appendix A for more details.
-
-Gametype        | Syntax                                                                                            | Notes
-----------------+---------------------------------------------------------------------------------------------------+-------------------------------------------------------
-Deathmatch      | type dm      <fraglimit>  <timelimit>                                                 <leadlimit> |
-Team Deathmatch | type tdm     <fraglimit>  <timelimit> <teams>                                         <leadlimit> | 2, 3, or 4 teams
-Domination      | type dom     <pointlimit> <timelimit>                                                 <leadlimit> | teams are set by the map's entities
-CTF             | type ctf     <pointlimit> <timelimit> <caplimit>                                      <leadlimit> | pointlimit if g_ctf_win_mode is 2, otherwise caplimit
-Runematch       | type rune    <pointlimit> <timelimit>                                                 <leadlimit> |
-LMS             | type lms     <lives>      <timelimit>                                                 <leadlimit> |
-Arena           | type arena   <fraglimit>  <timelimit>                                                 <leadlimit> |
-Key Hunt        | type kh      <pointlimit> <timelimit> <teams>                                         <leadlimit> | 2, 3, or 4 teams
-Assault         | type as                   <timelimit>                                                             | never uses points
-Onslaught       | type ons                  <timelimit>                                                             | never uses points
-Race            | type rc                   <timelimit> <qualifyingtimelimit> <laplimit> <teamlaplimit> <leadlimit> | g_race_teams: teamlaplimit is used instead of laplimit
-CTS             | type cts                  <timelimit> <skill>                                                     | never uses points
-CA              | type dm      <fraglimit>  <timelimit>                                                 <leadlimit> |
-Nexball         | type dm      <fraglimit>  <timelimit>                                                 <leadlimit> |
-
-
-===============
-=II. Map Image=
-===============
-
-So, you've got your map listed in the menu and it plays properly, but the menu
-isn't showing your picture! Or the picture is scaled badly! What manner of man
-would create such an accursed abomination?!
-
-Well... That sounds like something I'd do. :D
-
-And it is really easy: just make a screenshot of the map in action (preferably
-with crosshair and HUD switched off), and place it next to the map as
-mapname.jpg. For best rendering and file size, make the image in 4:3 aspect
-ratio, but scale it to the resolution 256x256 or possibly 512x512. It will look
-skewed in your image editing app, but the menu will show it right, and your
-graphics card LOVES images of such dimension.
-
-
-=================
-=III. Domination=
-=================
-
-In order to get Domination working well in your map, you need to place dom_team
-and dom_controlpoint entites. You *must* have at least 3 dom_team entities - 2
-minimum teams and one blank one (empty netname and no team). You can have up to
-4 teams (5 dom_team entities), and remember: if you set 3 teams, the third team
-must be the yellow one, according to the team order.
-
-Dom Team
---------
-classname  dom_team
-netname    name of team (Red Team). Set to "" or don't define for the required
-           blank team.
-cnt        color of the team. See the "Helpful Extras" section for info.
-model      When this team captures control points, the points turn to this
-           model. If this is the neutral team, points start out as this model.
-noise      Sound to be played on the control point when it's captured. Only
-           players nearby will hear it.
-noise1     Sound to be played to all players when the control point is
-           captured. Also good for an annoncer voice ("Red Team has captured a
-           control point")
-
-Control Points
---------------
-classname  dom_controlpoint
-message    message to be displayed to all players when this point is captured,
-           preceded by the team's name. This defaults to " has captured a control point".
-           You can specify different names for each point, for example " has captured the
-           Lava Room".
-origin     where in the map this point is
-wait       How often this point gives its controlling team frags.
-frags      How many frags this point gives each wait cycle.
-
-Here is an example entry in a .ent file that includes colored text and 3 teams:
-
-{
-"classname" "dom_team"
-"netname" ""
-"model" "models/domination/dom_unclaimed.md3"
-}
-{
-"classname" "dom_team"
-"netname" "^4Blue Team"
-"cnt" "13"
-"noise" ""
-"noise1" "domination/claim.wav"
-"model" "models/domination/dom_blue.md3"
-}
-{
-"classname" "dom_team"
-"netname" "^1Red Team"
-"cnt" "4"
-"noise" ""
-"noise1" "domination/claim.wav"
-"model" "models/domination/dom_red.md3"
-}
-{
-"netname" "^3Yellow Team"
-"cnt" "12"
-"noise" ""
-"noise1" "domination/claim.wav"
-"model" "models/domination/dom_yellow.md3"
-}
-{
-"netname" "^6Pink Team"
-"cnt" "9"
-"noise" ""
-"noise1" "domination/claim.wav"
-"model" "models/domination/dom_pink.md3"
-}
-{
-"classname" "dom_controlpoint"
-"message" " ^3has captured the ^1Hallways"
-"origin" "-206.0 -488.8 -150.0"
-"frags" "3"
-"wait" "5"
-"scale" "1.3"
-}
-{
-"classname" "dom_controlpoint"
-"message" " ^3has captured the ^1Lavaroom"
-"origin" "1457.1  19.9 -110.0"
-"frags" "1"
-"wait" "5"
-}
-{
-"classname" "dom_controlpoint"
-"message" " ^3controls the ^1Nex & Strength"
-"origin" "-259.8 299.3  5"
-"frags" "1"
-"wait" "5"
-}
-{
-"classname" "dom_controlpoint"
-"message" " ^3has captured the ^1Upper Platform"
-"origin" "539.7 1206.0 182.0"
-"frags" "1"
-"wait" "5"
-}
-{
-"classname" "dom_controlpoint"
-"message" " ^3has captured the ^1Teleport Room"
-"origin" "-1000.0 636.2 -16.0"
-"frags" "1"
-"wait" "5"
-}
-
-
-As you can see in the example, there are 5 dom_team ents: one blank, Red, Blue,
-Yellow and Pink. Each control point has a different message (giving it a
-special name), and the one in the hallways gives 3 frags every 5 seconds
-instead of just one, making it more valuable.
-
-If your map contains the required entities for Domination, the menu will
-automatically detect it for supporting Domination. To force the map to get
-re-detected after you add such entities, delete the data/data/mapname.mapinfo
-file - or simply edit it to add the "type dom" line.
-
-
-=========
-=IV. CTF=
-=========
-
-Capture the flag needs at least 1 CTF flag per team, and can also make use of
-team spawnpoints.
-
-CTF Flags
----------
-classname  item_flag_team1 or item_flag_team2
-angle      direction the flag will point
-model      model of the flag (default: models/ctf/flag_red.md3 or
-           models/ctf/flag_blue.md3)
-noise      sound played when flag is stolen (default: "ctf/take.wav")
-noise1     sound played when flag is returned by a teammate (default:
-           "ctf/return.wav")
-noise2     sound played when flag is captured (default: "ctf/capture.wav")
-noise3     sound played when flag returns itself (default: "ctf/respawn.wav")
-
-Team Spawnpoints
-----------------
-classname  info_player_team1 or info_player_team2
-*note: These function just like info_player_deathmatch, but for one team only.
-If you don't make team spawnpoints, info_player_deathmatch is used instead.
-
-If your map contains the required entities for CTF, the menu will automatically
-detect it for supporting CTF. To force the map to get re-detected after you add
-such entities, delete the data/data/mapname.mapinfo file - or simply edit it to
-add the "type ctf" line.
-
-==============
-=V. Runematch=
-==============
-
-Runematch needs only one type of entity to work: rune spawn points. You will
-need at least one for each rune (5 minimum at the time of this writing), though
-you should probably have more than that in the map. Just give the points a
-classname and origin.
-
-Rune Spawnpoints
-----------------
-classname  runematch_spawn_point
-
-If your map contains the required entities for Runematch, the menu will automatically
-detect it for supporting Runematch. To force the map to get re-detected after you add
-such entities, delete the data/data/mapname.mapinfo file - or simply edit it to
-add the "type rune" line.
-
-==============
-=VI. Race/CTS=
-==============
-
-Making a race map is not hard: you need some special spawnpoints, and some checkpoints.
-
-Spawnpoints
------------
-classname  info_player_race
-target     targetname of the checkpoint
-race_place for finish line checkpoints, the place of the point, or -1 to make it qualifying/CTS-only, or unset to let all the other players spawn
-
-Checkpoints
------------
-classname  trigger_race_checkpoint
-targetname some name to target the checkpoint with
-cnt        number of the checkpoint (or 0 for finish line)
-
-Note that checkpoints are brush entities, and they should be somewhat thick and
-cover the full volume the player could use to get past them.
-
-Example of entity placement:
-
-                         ###
-    ---------------------###---
-   /    9999  7  5  3  1>###   \
-  /     9999 8  6  4  2 >###    \
- |     ------------------###     |
-%%%%%%%%                 ###|    |
-%%%%%%%%                 $$$|    |
- | ^ ^ ------------------$$$     |
- \                       $$$ <  /
-  \                      $$$ < /
-   ----------------------$$$---
-                         $$$
-
-###:  classname = trigger_race_checkpoint, cnt = 0, targetname = finish
-$$$:  classname = trigger_race_checkpoint, cnt = 1, targetname = cp1
-%%%:  classname = trigger_race_checkpoint, cnt = 2, targetname = cp2
->:    classname = info_player_race,                 target = finish, angle = 0
-1:    classname = info_player_race,                 target = finish, angle = 0, race_place = 1
-2:    classname = info_player_race,                 target = finish, angle = 0, race_place = 2
-....
-8:    classname = info_player_race,                 target = finish, angle = 0, race_place = 8
-9:    classname = info_player_race,                 target = finish, angle = 0, race_place = 9
-<:    classname = info_player_race,                 target = cp1,    angle = 180
-^:    classname = info_player_race,                 target = cp2,    angle = 90
-
-If your map contains the required entities for Race, the menu will automatically
-detect it for supporting Race. To force the map to get re-detected after you add
-such entities, delete the data/data/mapname.mapinfo file - or simply edit it to
-add the "type rc" line.
-
-CTS maps do not use checkpoints with race_place set, so you can leave them out
-for CTS maps.
-
-The skill parameter in the mapinfo entry for CTS shall be in the range from 0 (easy) to 10 (impossible).
-
-=============
-=VI. Nexball=
-=============
-
-There are three required entities: nexball_redgoal, nexball_bluegoal, and one of nexball_basketball
-or nexball_football. There are also optional nexball_yellowgoal and nexball_pinkgoal entities (don't
-add a pink goal when there is no yellow goal on the map, it will crash)
-
-Goals are made just like any other regular triggers. You can use multiple brushes for one trigger,
-but avoid this if possible.
-
-There are also two other goal-like entities, nexball_fault and nexball_bound, the first taking a point
-from the team that hits the trigger with the ball, the second simply returning it. You can spawn the
-ball inside a goal-like trigger, this can be useful for basketball maps with separate teams and a
-common ball spawn.
-The different keys for the entities are documented in entities.def.
-
-The ball is affected by trigger_impulse, but not by trigger_push or teleporters.
-
-You should better avoid patches on the field, as collisions can sometimes get buggy on these.
-
-
-===============================
-=Appendix A - Advanced mapinfo=
-===============================
-
-You now know how to make a basic, bare-bones mapinfo to set up a couple options
-and load your map. However, there's much more you can do!  Consider these
-senarios:
-
-1. The laser has too high of a force for laser jumps and ruins CTF
-2. I don't want players to start out with the shotgun, but with the machinegun
-   instead
-3. The map takes so much server CPU performance that the anti-wallhack can't be
-   made active
-
-Each of these situations can be resolved with ease with a little work in the
-mapinfo file.
-
-To do this, I can add the following lines to my mapinfo file:
-
-    settemp_for_type ctf g_balance_laser_primary_force 200
-    settemp_for_type all g_start_weapon_shotgun 0
-    settemp_for_type all g_start_weapon_uzi 1
-    settemp_for_type all sv_cullentities_trace 0
-
-These "settemp" settings are automatically removed when the map is left and
-another is loaded. As you can see, it is possible to make per-mode temporary
-settings, and global ones.
-
-Similar settings are also possible for the client:
-
-    clientsettemp_for_type all r_shadow_glossexponent 96
-
-Another possibility is to specify fog settings in the mapinfo, for convenience
-in case you set sv_foginterval by it too (to force the fog on the clients):
-
-    fog 0.2 0.25 0.3 0.3 1 1500
-    settemp_for_type all sv_foginterval 5
-
-
-=============================
-=Appendix B - Helpful Extras=
-=============================
-
-----------------
--i. Team Colors-
-----------------
-When you need to set an entity's color or team, use these values:
-
-Red
----
-Team:      5
-Color:     4
-
-Blue
-----
-Team:      14
-Color:     13
-
-Yellow
-------
-Team:      13
-Color:     12
-
-Pink
------
-Team:      10
-Color:     9
-
-
-----------------
--i. Text Colors-
-----------------
-Occasionally you may want to print text in color, such as team names. Here are your options:
-
-1  Red
-2  Green
-3  Yellow
-4  Blue
-5  Cyan
-6  Magenta
-7  White
-8  Grey (transparent)
-9  Grey (solid)
-0  Black
-
-==========================================
-=Appendix C - Advanced Darkplaces shaders=
-==========================================
-
-Shader parameters for DP's own features:
-- dp_reflect <distort> <r> <g> <b> <a>
-  Makes surfaces of this shader reflective with r_water. The reflection is
-  alpha blended on the texture with the given alpha, and modulated by the given
-  color. distort is used in conjunction with the normalmap to simulate a
-  nonplanar water surface.
-- dp_refract <distort> <r> <g> <b>
-  Makes surfaces of this shader refractive with r_water. The refraction
-  replaces the transparency of the texture. distort is used in conjunction with
-  the normalmap to simulate a nonplanar water surface.
-- dp_water <reflectmin> <reflectmax> <refractdistort> <reflectdistort> <refractr> <refractg> <refractb> <reflectr> <reflectg> <reflectb> <alpha>
-  This combines the effects of dp_reflect and dp_refract to simulate a water
-  surface. However, the refraction and the reflection are mixed using a Fresnel
-  equation that makes the amount of reflection slide from reflectmin when
-  looking parallel to the water to reflectmax when looking directly into the
-  water. The result of this reflection/refraction mix is then layered BELOW the
-  texture of the shader, so basically, it "fills up" the alpha values of the
-  water. The alpha value is a multiplicator for the alpha value on the texture
-  - set this to a small value like 0.1 to emphasize the reflection and make
-  the water transparent; but if r_water is 0, alpha isn't used, so the water can
-  be very visible then too.
-
+==============\r
+=Mapping Help=\r
+==============\r
+\r
+While I can't help you make a map, I can help you get it listed in the menu and\r
+working in the maplist. :p  The central object is the .mapinfo file, but\r
+there's much more available.\r
+\r
+Table of Contents\r
+-----------------\r
+I        Map Settings\r
+         (get your map listed and working)\r
+\r
+II       Map Image\r
+\r
+III      Domination\r
+\r
+IV       CTF\r
+\r
+V        Race/CTS\r
+\r
+VI       Nexball\r
+\r
+Appendix A - Advanced mapinfo\r
+\r
+Appendix B - Helpful extras\r
+  i.     Team Colors\r
+  ii.    Text Colors\r
+\r
+Appendix C - Advanced Darkplaces shaders\r
+\r
+=================\r
+=I. Map Settings=\r
+=================\r
+\r
+All map specific settings goes in a single file:\r
+\r
+mapname.mapinfo\r
+\r
+The mapinfo file is basically what gets your map listed in the menu, and sets\r
+up the options needed to change to it. If no mapinfo file exists, the menu\r
+will automatically generate a rough draft for you on game startup. It will get\r
+stored into data/data/mapname.mapinfo.\r
+\r
+As an example, let's say I make a map called "wazat1.bsp". As long as I'm\r
+fantasizing, I might as well say this map is so well done I'm actually willing\r
+to release it for friends, neighbors, fellow forum visitors and other people\r
+who like me to judge me by. Let's also assume that I want domination,\r
+deathmatch/team deathmatch to all be playable on my map.\r
+\r
+This is very easy. First, I start the game and exit it again so the game writes\r
+data/data/wazat1.mapinfo for me. The file may look like:\r
+\r
+    title Wazat's Great Map\r
+    description Bleh.\r
+    author Unknown\r
+    _diameter 1966.839355\r
+    _spawnpoints 5\r
+    has weapons\r
+    cdtrack 5\r
+    gametype dm // defaults: timelimit=20 pointlimit=30 leadlimit=0\r
+    gametype dom // defaults: timelimit=20 pointlimit=200 teams=2 leadlimit=0\r
+    gametype lms // defaults: timelimit=20 lives=9 leadlimit=0\r
+\r
+As I see, the menu autodetected that my map may be suitable for deathmatch,\r
+domination, last man standing and keepaway. But I want the map to be played in\r
+domination, deathmatch, team deathmatch only, and I also want different\r
+timelimits/fraglimits, so I will change the "gametype" lines to:\r
+\r
+    gametype dom pointlimit=100 timelimit=15\r
+    gametype dm pointlimit=40 timelimit=15\r
+    gametype tdm pointlimit=50 timelimit=0 teams=2\r
+\r
+Also, while I am at it, I should fix the placeholders in the map description lines:\r
+\r
+    title Wibble\r
+    description A large multi level arena map\r
+    author Wazat\r
+\r
+Although not entirely necessary, I will now move the .mapinfo file from\r
+data/data/maps/wazat1.mapinfo to data/maps/wazat1.mapinfo, so it is at the same\r
+place as my map. Next time I start the game, my map will be shown supporting\r
+the right game modes and with the right description in the menu.\r
+\r
+Also, note the "has weapons" line. If this line is not there (which happens if\r
+the map contains no weapon entities other than the Nex), the map will run in\r
+InstaGib only and not be shown in the menu normally. So if you look for your\r
+map and don't find it, add "has weapons" to the mapinfo file, and make sure you\r
+have weapon entities placed.\r
+\r
+There's much more power in a mapinfo file. See Appendix A for more details.\r
+\r
+Gametype        | Syntax                                                                                                   | Notes\r
+----------------+----------------------------------------------------------------------------------------------------------+-------------------------------------------------------\r
+Deathmatch      | gametype dm [timelimit=...] [pointlimit=...] [leadlimit=...]                                             |\r
+Team Deathmatch | gametype tdm [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                | 2, 3, or 4 teams\r
+Domination      | gametype dom [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                | 2, 3, or 4 teams, only if map has no dom_team ents\r
+CTF             | gametype ctf [timelimit=...] [caplimit=...] [leadlimit=...]                                              |\r
+LMS             | gametype lms [timelimit=...] [lives=...] [leadlimit=...]                                                 |\r
+Key Hunt        | gametype kh [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                 | 2, 3, or 4 teams\r
+Assault         | gametype as [timelimit=...]                                                                              | never uses points\r
+Onslaught       | gametype ons [timelimit=...]                                                                             | never uses points\r
+Race            | gametype rc [timelimit=...] [qualifying_timelimit=...] [laplimit=...] [teamlaplimit=...] [leadlimit=...] | g_race_teams: teamlaplimit is used instead of laplimit\r
+CTS             | gametype cts [timelimit=...] [skill=...]                                                                 | never uses points\r
+CA              | gametype ca [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                 | 2, 3, or 4 teams\r
+Nexball         | gametype nb [timelimit=...] [pointlimit=...] [leadlimit=...]                                             |\r
+Freeze Tag      | gametype ft [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                 | 2, 3, or 4 teams\r
+Keepaway        | gametype ka [timelimit=...] [pointlimit=...]                                                             |\r
+\r
+\r
+===============\r
+=II. Map Image=\r
+===============\r
+\r
+So, you've got your map listed in the menu and it plays properly, but the menu\r
+isn't showing your picture! Or the picture is scaled badly! What manner of man\r
+would create such an accursed abomination?!\r
+\r
+Well... That sounds like something I'd do. :D\r
+\r
+And it is really easy: just make a screenshot of the map in action (preferably\r
+with crosshair and HUD switched off), and place it next to the map as\r
+mapname.jpg. For best rendering and file size, make the image in 4:3 aspect\r
+ratio, but scale it to the resolution 256x256 or possibly 512x512. It will look\r
+skewed in your image editing app, but the menu will show it right, and your\r
+graphics card LOVES images of such dimension.\r
+\r
+\r
+=================\r
+=III. Domination=\r
+=================\r
+\r
+In order to get Domination working well in your map, you need to place dom_team\r
+and dom_controlpoint entites. You *must* have at least 3 dom_team entities - 2\r
+minimum teams and one blank one (empty netname and no team). You can have up to\r
+4 teams (5 dom_team entities), and remember: if you set 3 teams, the third team\r
+must be the yellow one, according to the team order.\r
+\r
+Dom Team\r
+--------\r
+classname  dom_team\r
+netname    name of team (Red Team). Set to "" or don't define for the required\r
+           blank team.\r
+cnt        color of the team. See the "Helpful Extras" section for info.\r
+model      When this team captures control points, the points turn to this\r
+           model. If this is the neutral team, points start out as this model.\r
+noise      Sound to be played on the control point when it's captured. Only\r
+           players nearby will hear it.\r
+noise1     Sound to be played to all players when the control point is\r
+           captured. Also good for an annoncer voice ("Red Team has captured a\r
+           control point")\r
+\r
+Control Points\r
+--------------\r
+classname  dom_controlpoint\r
+message    message to be displayed to all players when this point is captured,\r
+           preceded by the team's name. This defaults to " has captured a control point".\r
+           You can specify different names for each point, for example " has captured the\r
+           Lava Room".\r
+origin     where in the map this point is\r
+wait       How often this point gives its controlling team frags.\r
+frags      How many frags this point gives each wait cycle.\r
+\r
+Here is an example entry in a .ent file that includes colored text and 3 teams:\r
+\r
+{\r
+"classname" "dom_team"\r
+"netname" ""\r
+"model" "models/domination/dom_unclaimed.md3"\r
+}\r
+{\r
+"classname" "dom_team"\r
+"netname" "^4Blue Team"\r
+"cnt" "13"\r
+"noise" ""\r
+"noise1" "domination/claim.wav"\r
+"model" "models/domination/dom_blue.md3"\r
+}\r
+{\r
+"classname" "dom_team"\r
+"netname" "^1Red Team"\r
+"cnt" "4"\r
+"noise" ""\r
+"noise1" "domination/claim.wav"\r
+"model" "models/domination/dom_red.md3"\r
+}\r
+{\r
+"classname" "dom_team"\r
+"netname" "^3Yellow Team"\r
+"cnt" "12"\r
+"noise" ""\r
+"noise1" "domination/claim.wav"\r
+"model" "models/domination/dom_yellow.md3"\r
+}\r
+{\r
+"classname" "dom_team"\r
+"netname" "^6Pink Team"\r
+"cnt" "9"\r
+"noise" ""\r
+"noise1" "domination/claim.wav"\r
+"model" "models/domination/dom_pink.md3"\r
+}\r
+{\r
+"classname" "dom_controlpoint"\r
+"message" " ^3has captured the ^1Hallways"\r
+"origin" "-206.0 -488.8 -150.0"\r
+"frags" "3"\r
+"wait" "5"\r
+"scale" "1.3"\r
+}\r
+{\r
+"classname" "dom_controlpoint"\r
+"message" " ^3has captured the ^1Lavaroom"\r
+"origin" "1457.1  19.9 -110.0"\r
+"frags" "1"\r
+"wait" "5"\r
+}\r
+{\r
+"classname" "dom_controlpoint"\r
+"message" " ^3controls the ^1Nex & Strength"\r
+"origin" "-259.8 299.3  5"\r
+"frags" "1"\r
+"wait" "5"\r
+}\r
+{\r
+"classname" "dom_controlpoint"\r
+"message" " ^3has captured the ^1Upper Platform"\r
+"origin" "539.7 1206.0 182.0"\r
+"frags" "1"\r
+"wait" "5"\r
+}\r
+{\r
+"classname" "dom_controlpoint"\r
+"message" " ^3has captured the ^1Teleport Room"\r
+"origin" "-1000.0 636.2 -16.0"\r
+"frags" "1"\r
+"wait" "5"\r
+}\r
+\r
+\r
+As you can see in the example, there are 5 dom_team ents: one blank, Red, Blue,\r
+Yellow and Pink. Each control point has a different message (giving it a\r
+special name), and the one in the hallways gives 3 frags every 5 seconds\r
+instead of just one, making it more valuable.\r
+\r
+If your map contains the required entities for Domination, the menu will\r
+automatically detect it for supporting Domination. To force the map to get\r
+re-detected after you add such entities, delete the data/data/mapname.mapinfo\r
+file - or simply edit it to add the "gametype dom" line.\r
+\r
+\r
+=========\r
+=IV. CTF=\r
+=========\r
+\r
+Capture the flag needs at least 1 CTF flag per team, and can also make use of\r
+team spawnpoints.\r
+\r
+CTF Flags\r
+---------\r
+classname  item_flag_team1 or item_flag_team2\r
+angle      direction the flag will point\r
+model      model of the flag (default: models/ctf/flag_red.md3 or\r
+           models/ctf/flag_blue.md3)\r
+noise      sound played when flag is stolen (default: "ctf/take.wav")\r
+noise1     sound played when flag is returned by a teammate (default:\r
+           "ctf/return.wav")\r
+noise2     sound played when flag is captured (default: "ctf/capture.wav")\r
+noise3     sound played when flag returns itself (default: "ctf/respawn.wav")\r
+\r
+Team Spawnpoints\r
+----------------\r
+classname  info_player_team1 or info_player_team2\r
+*note: These function just like info_player_deathmatch, but for one team only.\r
+If you don't make team spawnpoints, info_player_deathmatch is used instead.\r
+\r
+If your map contains the required entities for CTF, the menu will automatically\r
+detect it for supporting CTF. To force the map to get re-detected after you add\r
+such entities, delete the data/data/mapname.mapinfo file - or simply edit it to\r
+add the "gametype ctf" line.\r
+\r
+=============\r
+=V. Race/CTS=\r
+=============\r
+\r
+Making a race map is not hard: you need some special spawnpoints, and some checkpoints.\r
+\r
+Spawnpoints\r
+-----------\r
+classname  info_player_race\r
+target     targetname of the checkpoint\r
+race_place for finish line checkpoints, the place of the point, or -1 to make it qualifying/CTS-only, or unset to let all the other players spawn\r
+\r
+Checkpoints\r
+-----------\r
+classname  trigger_race_checkpoint\r
+targetname some name to target the checkpoint with\r
+cnt        number of the checkpoint (or 0 for finish line)\r
+\r
+Note that checkpoints are brush entities, and they should be somewhat thick and\r
+cover the full volume the player could use to get past them.\r
+\r
+Example of entity placement:\r
+\r
+                         ###\r
+    ---------------------###---\r
+   /    9999  7  5  3  1>###   \\r
+  /     9999 8  6  4  2 >###    \\r
+ |     ------------------###     |\r
+%%%%%%%%                 ###|    |\r
+%%%%%%%%                 $$$|    |\r
+ | ^ ^ ------------------$$$     |\r
+ \                       $$$ <  /\r
+  \                      $$$ < /\r
+   ----------------------$$$---\r
+                         $$$\r
+\r
+###:  classname = trigger_race_checkpoint, cnt = 0, targetname = finish\r
+$$$:  classname = trigger_race_checkpoint, cnt = 1, targetname = cp1\r
+%%%:  classname = trigger_race_checkpoint, cnt = 2, targetname = cp2\r
+>:    classname = info_player_race,                 target = finish, angle = 0\r
+1:    classname = info_player_race,                 target = finish, angle = 0, race_place = 1\r
+2:    classname = info_player_race,                 target = finish, angle = 0, race_place = 2\r
+....\r
+8:    classname = info_player_race,                 target = finish, angle = 0, race_place = 8\r
+9:    classname = info_player_race,                 target = finish, angle = 0, race_place = 9\r
+<:    classname = info_player_race,                 target = cp1,    angle = 180\r
+^:    classname = info_player_race,                 target = cp2,    angle = 90\r
+\r
+If your map contains the required entities for Race, the menu will automatically\r
+detect it for supporting Race. To force the map to get re-detected after you add\r
+such entities, delete the data/data/mapname.mapinfo file - or simply edit it to\r
+add the "gametype rc" line.\r
+\r
+CTS maps do not use checkpoints with race_place set, so you can leave them out\r
+for CTS maps.\r
+\r
+The skill parameter in the mapinfo entry for CTS shall be in the range from 0 (easy) to 10 (impossible).\r
+\r
+=============\r
+=VI. Nexball=\r
+=============\r
+\r
+There are three required entities: nexball_redgoal, nexball_bluegoal, and one of nexball_basketball\r
+or nexball_football. There are also optional nexball_yellowgoal and nexball_pinkgoal entities (don't\r
+add a pink goal when there is no yellow goal on the map, it will crash)\r
+\r
+Goals are made just like any other regular triggers. You can use multiple brushes for one trigger,\r
+but avoid this if possible.\r
+\r
+There are also two other goal-like entities, nexball_fault and nexball_bound, the first taking a point\r
+from the team that hits the trigger with the ball, the second simply returning it. You can spawn the\r
+ball inside a goal-like trigger, this can be useful for basketball maps with separate teams and a\r
+common ball spawn.\r
+The different keys for the entities are documented in entities.def.\r
+\r
+The ball is affected by trigger_impulse, but not by trigger_push or teleporters.\r
+\r
+You should better avoid patches on the field, as collisions can sometimes get buggy on these.\r
+\r
+\r
+===============================\r
+=Appendix A - Advanced mapinfo=\r
+===============================\r
+\r
+You now know how to make a basic, bare-bones mapinfo to set up a couple options\r
+and load your map. However, there's much more you can do!  Consider these\r
+senarios:\r
+\r
+1. The laser has too high of a force for laser jumps and ruins CTF\r
+2. I don't want players to start out with the shotgun, but with the machinegun\r
+   instead\r
+3. The map takes so much server CPU performance that the anti-wallhack can't be\r
+   made active\r
+\r
+Each of these situations can be resolved with ease with a little work in the\r
+mapinfo file.\r
+\r
+To do this, I can add the following lines to my mapinfo file:\r
+\r
+    settemp_for_type ctf g_balance_blaster_primary_force 200\r
+    settemp_for_type all g_balance_shotgun_weaponstart 0\r
+    settemp_for_type all g_balance_machinegun_weaponstart 1\r
+    settemp_for_type all sv_cullentities_trace 0\r
+\r
+These "settemp" settings are automatically removed when the map is left and\r
+another is loaded. As you can see, it is possible to make per-mode temporary\r
+settings, and global ones.\r
+\r
+Similar settings are also possible for the client:\r
+\r
+    clientsettemp_for_type all r_shadow_glossexponent 96\r
+\r
+Another possibility is to specify fog settings in the mapinfo, for convenience\r
+in case you set sv_foginterval by it too (to force the fog on the clients):\r
+\r
+    fog 0.2 0.25 0.3 0.3 1 1500\r
+    settemp_for_type all sv_foginterval 5\r
+\r
+\r
+=============================\r
+=Appendix B - Helpful Extras=\r
+=============================\r
+\r
+----------------\r
+-i. Team Colors-\r
+----------------\r
+When you need to set an entity's color or team, use these values:\r
+\r
+Red\r
+---\r
+Team:      5\r
+Color:     4\r
+\r
+Blue\r
+----\r
+Team:      14\r
+Color:     13\r
+\r
+Yellow\r
+------\r
+Team:      13\r
+Color:     12\r
+\r
+Pink\r
+-----\r
+Team:      10\r
+Color:     9\r
+\r
+\r
+----------------\r
+-i. Text Colors-\r
+----------------\r
+Occasionally you may want to print text in color, such as team names. Here are your options:\r
+\r
+1  Red\r
+2  Green\r
+3  Yellow\r
+4  Blue\r
+5  Cyan\r
+6  Magenta\r
+7  White\r
+8  Grey (transparent)\r
+9  Grey (solid)\r
+0  Black\r
+\r
+==========================================\r
+=Appendix C - Advanced Darkplaces shaders=\r
+==========================================\r
+\r
+Shader parameters for DP's own features:\r
+- dp_reflect <distort> <r> <g> <b> <a>\r
+  Makes surfaces of this shader reflective with r_water. The reflection is\r
+  alpha blended on the texture with the given alpha, and modulated by the given\r
+  color. distort is used in conjunction with the normalmap to simulate a\r
+  nonplanar water surface.\r
+- dp_refract <distort> <r> <g> <b>\r
+  Makes surfaces of this shader refractive with r_water. The refraction\r
+  replaces the transparency of the texture. distort is used in conjunction with\r
+  the normalmap to simulate a nonplanar water surface.\r
+- dp_water <reflectmin> <reflectmax> <refractdistort> <reflectdistort> <refractr> <refractg> <refractb> <reflectr> <reflectg> <reflectb> <alpha>\r
+  This combines the effects of dp_reflect and dp_refract to simulate a water\r
+  surface. However, the refraction and the reflection are mixed using a Fresnel\r
+  equation that makes the amount of reflection slide from reflectmin when\r
+  looking parallel to the water to reflectmax when looking directly into the\r
+  water. The result of this reflection/refraction mix is then layered BELOW the\r
+  texture of the shader, so basically, it "fills up" the alpha values of the\r
+  water. The alpha value is a multiplicator for the alpha value on the texture\r
+  - set this to a small value like 0.1 to emphasize the reflection and make\r
+  the water transparent; but if r_water is 0, alpha isn't used, so the water can\r
+  be very visible then too.\r
+\r