============== =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 Assault VII Onslaught Appendix A - Advanced mapinfo Appendix B - Helpful extras i. Team Colors ii. Text Colors ======================== =I. Map Lists & Scripts= ======================== There are actually 2 script/cfg options available to you, each serving a different purpose and being executed at a different time during the map's life cycle: 1. mapname.mapinfo 2. mapname.cfg Of these, the mapinfo is the only one that's truely required - and the game is even 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 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. ------------- -mapname.cfg- ------------- Unlike the mapinfo, which is processed by the server, the mapname.cfg file is processed by the client, and therefore is used for client settings like fog or the music to play. To make the mapname.cfg, make a file with the same name as your map's .bsp file, except with a .cfg extension instead of .bsp. For example, my "wazat1.bsp" map would use "wazat1.cfg". It uses the same name as your map, thus the term mapname.cfg. It will typically only contain a single line: cd loop 6 where 6 is the number or name of a track in sound/cdtracks/ =============== =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). 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" } { "classname" "dom_team" "netname" "^6Pink Team" "cnt" "9" "noise" "" "noise1" "domination/claim.wav" "model" "models/domination/dom_pink.md3" } { "classname" "dom_team" "netname" "^3Yellow Team" "cnt" "12" "noise" "" "noise1" "domination/claim.wav" "model" "models/domination/dom_yellow.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, Pink and Yellow. 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. ========== =III. 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. ================ =III. 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. ================================= =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. =============================== =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