File: mapping.txt

package info (click to toggle)
nexuiz-data 2.5.2-13
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,294,288 kB
  • sloc: ansic: 10,523; perl: 6,845; sh: 2,188; java: 1,417; xml: 969; lisp: 519; ruby: 136; makefile: 125
file content (502 lines) | stat: -rw-r--r-- 18,600 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
==============
=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:

                         ###
    ---------------------###---
   /    >>>>  7  5  3  1 ###   \
  /     >>>> 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
<:    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.