-==============
-=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> |
-Team Deathmatch | type tdm <fraglimit> <timelimit> <teams> | 2, 3, or 4 teams
-Domination | type dom <pointlimit> <timelimit> | teams are set by the map's entities
-CTF | type ctf <pointlimit> <timelimit> <caplimit> | pointlimit if g_ctf_win_mode is 2, otherwise caplimit
-Runematch | type rune <pointlimit> <timelimit> |
-LMS | type lms <lives> <timelimit> |
-Arena | type arena <fraglimit> <timelimit> |
-Key Hunt | type kh <pointlimit> <timelimit> <teams> | 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> | g_race_teams: teamlaplimit is used instead of laplimit
-CTS | type cts <timelimit> <skill> | never uses points
-
-
-===============
-=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
+ gametype arena // defaults: timelimit=20 pointlimit=10 leadlimit=0\r
+\r
+As I see, the menu autodetected that my map may be suitable for deathmatch,\r
+domination, last man standing and arena. 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
+Arena | gametype arena [timelimit=...] [pointlinit=...] [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_laser_primary_force 200\r
+ settemp_for_type all g_start_weapon_shotgun 0\r
+ settemp_for_type all g_start_weapon_uzi 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