Startup Guide to DG Mapping


Introduction

This guide is simply a run down of what you'll need to get your map up and running with DeGeneration's new features and gameplay. It assumes that you have knowledge of GTK Radiant and have mapped previously for RTCW or some other Q3 game. If you haven't used GTK Radiant or if you don't have any previous mapping experience you might want to visit the forums and tutorials over at TRAM Design http://www.tramdesign.net

We hope you'll find DeGeneration easy to adapt to. We've tried to include as many prefabs and scripts with the LDR as possible. It should allow you to copy and paste most of it into your map with little effort. Our thinking was that this would allow you to take things further, faster. The potential for creativity is very high as there are so many new features for you to choose from.
As you read this guide also consider that DeGeneration still contains the base code for RTCW so you are able to run your RTCW maps with the DG mod. If your map is up and running with RTCW you don't have to change a thing for it to run under DG, however if you want to use some of the new mapping features and entities in DeGeneration you will need to add them to your map and/or script.

You'll need to download the Level Designer's Kit for the files included in this tutorial.
 




Overview of Changes 
Degeneration modifies, fixes and adds new entities, extends the ability of existing scripting commands, adds new scripting commands, console commands and more. These will no doubt give you options that you've never had before and allow you to create some very interesting maps that will give you much more control and flexibility. For a complete list of changes see the Script Definitions and Entity Definitions.
 

Setting up GTK Radiant

The very first thing you need to do is setup GTK Radiant.


Setting up a project

Even GTKRadiant advises against doing this, but if you want to then power to you! I'm going to assume if you are going to setup a project you know what you're doing. For any others read the next section.


Mapping from main
All we need to do is put the files where they need to be. It's a simple copy and paste routine. The default installation for the Level Designer's Kit is in your DeGeneration folder.

 



Getting Started

This part assumes that you already have a map or a test map to use, that you have RTCW, DG and the Level Designer's Kit installed. We'll be going over what you'll need to add to your map and/or script to make it DG compatible.
 

Game Manager
Let's start by adding in the game_manager part of your script since its quick. We've even included a copy of the game_manager from the standard maps for you to use. (included maps\dg_game_manager.script, dga_game_manager.script is for an assault style map with only one generator and dgdm_game_manager.script is for Deathmatch and Team Deathmatch)

- Open your map and add a script_multiplayer entity if you don't already have one.
- Select the script_multiplayer entity and hit "N" so we can make add some settings.
- Add the key "scriptname" and a value of "game_manager".
- Open the scripts\game_manager.script file included and copy the entire contents of the file into your map's script file.
- Save your script with the same name as your map file and close.

NOTE: Your map and script need to have the same name or they won't work. For example mapname.map & mapname.script. The included dg_game_manager.script was written to support two generators and two checkpoints. For a single generator map take a look at dga_game_manager.script.

Dropzone Area
Included there are several dropzone prefab maps with their scripts.

- dg_dropzone_cargoonly_ns - This is the single cargo plane north/south
- dg_dropzone_ew - This is the full dropzone east/west
- dg_dropzone_ew_180 - This is the full dropzone east/west turned 180 degrees
- dg_dropzne_ns - This is the full dropzone north/south

These are for East/West and North/South orientation so that you don't have to mess with adjusting angles for your map. These maps are standard setup for the dropzone which is where the part box falls scattering parts everywhere for the players to pick up. Generally the dropzone is at the center of the map.

Open it up. In it you will see 4 entities:               
- dg_dropzone (sets the dropzone area)
- dg_partbox (sets item type, amount of,
radius, etc)
- dg_compassicon (shows dropzone in compass)
- target speaker (plays plane sound which
includes two types of plane sounds and a
muffled sound to play globally)
 
 

Let's add the Dropzone to your map.

- Open up the dropzone prefab that best fits your map.
- Select view and then filter to make sure there are no filters being applied. We want to make sure we get all the entities involved.
- Draw a box around all of the entities in the map, except for the info_player_start, then go to selection, select and select inside so that everything is selected.
- Select edit, copy
- Open the destination map, select edit, paste and move the dropzone associated entities where you want them in your map.

NOTE: Make sure you position the dg_dropzone entity no closer than 64 units to the top of your map. If you do, the parachute might get stuck in the sky and hang there so position your sky so that the script_movers (planes) are centered in the width of the sky brush and make it so that the sky brush is 256 units thick like the picture below.

If you're unsure consult the included prefab. If you don't do this right, players will be able to see the planes hang in mid air while they wait to fly a sortie.

 
Adjusting the Dropzone Area
You can adjust the size of your dropzone area by adjusting the trigger (not the origin) of your dg_dropzone entity. The dropbox will drop randomly starting from anywhere on the trigger's surface. Here are the settings for the dg_dropzone entity:
 
   "drift"                   How far to drift while falling, default 0
   "angle"                 Angle of the drift, default 0 (north)
   "targetname"        Targetname used by dg_dropbox entities
   "wait"                   Time (seconds) a dropbox will wait after alerting dropzone
 
 
Adjusting the Partbox
When the partbox entity is fired you can trigger other things just like the target_speaker entities you see setup in the prefab map. To take it further, in the map called Shipment you'll notice that the two bay doors open to allow the box to fall through. Those doors are triggered by the partbox entity. You can drop parts, ammo and health packs with this entity by setting the item1, 2 and/or 3 keys. Here are the settings for the dg_dropbox entity:
 
STARTINVIS - Set to start invisible, use alert/show/hideentity script commands change its state
NOPARACHUTE - Never attach a parachute, by default the box has a parachute attached when dropping greater than 256 units
NOWEAPONDAMAGE - Set to never take damage from weapon fire
NOFALLDAMAGE - Set to turn off damage from falling
NOSERVERCONTROL - Set to disable server control of dropbox settings
 
By default the box takes 1 health damage per unit fallen to a maximum 256
 
   "wait"                   Time in seconds between respawn, 0 = once only, default 90 (1.5 mins)
   "radius"                Maximum radius from origin in x and y which the items will be launched, default 100
   "health"                Amount of health the box has, default 100
   "target"                Can optionally target one or more dg_dropzones to define area(s) in which to randomly spawn
"targetname"        For targeting from other entities or scripting alert/show/hideentity commands
   "item1"                 Item name 1,2 and 3 to launch out, see notes for valid item names
   "item2"
   "item3"
   "item1count"         Number of item 1, 2 and 3 to launch out, see notes for valid values
   "item2count"
   "item3count"
 
Valid names for items:
   "health"                Health pack
   "ammo"                Ammo pack
   "gear"                  DeGeneration Gear item
   "battery"              DeGeneration Battery item
   "fuse"                  DeGeneration Fuse item
                 
Valid counts for items:
Any number between -50 and 50
If the number is negative, eg -5, between 1 and 5 items will be launched at random
 
 
 
Dropzone Default Settings
classname dg_dropbox
spawnflags 4 //check the noweapondamage checkbox
item1 gear //sets what item 1 is
item2 battery //sets what item 2 is
item3 fuse //sets what item 3 is
item1count 3 //sets the number of item1’s to drop
item2count 5 //sets the number of item2’s to drop
item3count 7 //sets the number of item3’s to drop
target t1 //targets the dg_dropzone entity
targetname mainpartbox //used by scripting to control partbox
radius 256 //sets the maximum radius the items will bounce
 
classname dg_dropzone
targetname t1
drift 25 //the drift of the box on the way down
target flyby //targets the target_speaker
 
classname target_speaker
spawnflags 32 //check the no_pvs checkbox
noise sound/degeneration/plane_flyover1.wav //the default flyover wave file
targetname flyby
 
classname dg_compassicon
spawnflags 3 //check the axis and allies checkbox
 
 
 
The Generators
Included are generator prefab maps and scripts for Axis/Allies at angles 0, 90, 180 & 270 called dg_generator_allies_0.map, dg_generator_allies_0.script, etc. where 0 is the angle at which the prefab is set to.
 
Since the generators are very complex it's highly recommended that you do not modify any part of the prefab as it includes numerous entities, clip brushes and triggers among other things.


 The generators are built using dg_buildable entities.  These entities allow for you to make buildable items with brushes and/or models and can be used for numerous applications.  For example you could create a buildable barrier that would block access to a certain area.  This barrier could be destroyed with dynamite or grenades by the other team. You could make a bridge that's only destructable by an air strike. Maybe you could have a section of stairs in your map that are in need of repair. For now we will only concentrate on getting functional generators into your map. Exploring the other possibilities can be found in the Buildable Tutorial.
 
 
Choose your angle
Consider the picture below.  This would be considered the front.
 

 
The angle setting is based on the left side of the generator so you should pick your angle based on the chart below:
 
If you want the front to face 90 degrees choose 180
If you want the front to face 180 degrees choose 270
If you want the front to face 270 degrees choose 0/360
If you want the front to face 0/360 degrees choose 90
 
 
 
Let's do it
To prepare your generator's area, you should have an open space that is at least 900(L) x 900(W) x 448(H) units.  This is the minimum area required to place a generator.
 
- Open up the dg_generator_team_angle.map that you'd like to use depending on the team and angle you need to use.
- Make sure you have all filters turned off. Select view and then filter and make sure there are no checkmarks next to anything; otherwise those things won't be selected for our next step.
- Draw a box around the entire generator and its setup, then go to selection, select and select inside so that everything is selected.
- Select edit, copy
- Open the destination map, select edit, paste and move the generator and its parts where you want them.
- Do this again for the other team's generator (if you're putting two generators in your map)

NOTE: Keep everything selected until you get it right where you want it. There are too many parts to reselect them again. If by accident you do deselect everything or if you need to move it, we recommend that you delete it and add it again. Otherwise you might cause a problem that will be hard to track down.


The Generator Script
You will notice that each generator prefab map has its own script file. We've made it easy for you in that all you have to do is copy and paste the script for the generators right into your script.
 
Let's open up the script file for the generator prefab you're using. There is a generator_team_angle.script file to accompany each generator_team_angle.map file.
Look for the part of the script that starts with "generator_team" (team being allies or axis depending on the one you're using). Copy that entire section into your map's script just below the game_manager area that you added earlier.

Now open up the corresponding script file for your other team's generator and do the same thing. Just copy the second generator script to the end of your map's script.

NOTE: If you compile your map you should have working generators (make sure you've included an info_player_start entity so you can spawn!)

 

Testing your generators
You can test your generators manually by collecting parts or you can run your map in devmap and use other quicker methods. Here are a couple quick things to know about testing your generators.
 
The "give all" console command was altered to give you 3 gears (and an mg42 btw) to test building your generator. If you just want parts, use the command "give parts" to give yourself 3 gears or "give mg42" for just an mg42.
 
BuildableDebugInc, BuildableDebugTarget, BuildableDebug & BuildableDebugHealth were created to make testing the buildable entity much easier and faster. Keep in mind that this doesn't only pertain to the generators.
 

Script example:

The four scripts below will allow you to build the generator effortlessly without having to get parts. If you add these to your configuration this is what they'll do:
 
*F1 - toggles between the buildable going up in 100 health increments or down in 100 health increments. This is the best speed we've found when dealing with generator, any higher builds too fast.
*F2 - toggles between the axis generator and the Allies generator. For buildable entities other than generators simply replace targetname.
*F3/F4 - changes generator health value to something specific ranging from 0-10000. F4 changes health upwards and F3 downwards.
*F5 - starts the debugging of the buildable.
 

//changes from +100/-100 increments
set gdbug+ "BuildableDebugInc 100; echo ^2+100 enabled; set gdbug vstr gdbug-"
set gdbug- "BuildableDebugInc -100; echo ^2-100 enabled; set gdbug vstr gdbug+"
set gdbug "vstr gdbug+"
bind F1 "vstr gdbug"
 
//toggles axis-allies buildable
set gdbug_axis "BuildableDebugTarget generator_axis; echo ^2Axis generator selected; set gdbug_team vstr gdbug_allies;"
set gdbug_allies "BuildableDebugTarget generator_allies; echo ^2Allies generator selected; set gdbug_team vstr gdbug_axis;"
set gdbug_team "vstr gdbug_axis"
bind F2 "vstr gdbug_team"
 
//start-stop debugging
set gd_start "BuildableDebug; set gd_state vstr gd_stop"
set gd_stop "BuildableDebug; set gd_state vstr gd_start"
set gd_state "vstr gd_start"
bind F5 "vstr gd_state"
 
//raise-lower generator health
bind f3 "vstr health30"
bind f4 "vstr health70"
set health00 "BuildableDebugHealth 0;echo ^2Gen @ 0%;bind f4 vstr health10"
set health10 "BuildableDebugHealth 1000;echo ^2Gen @ 10%;bind f3 vstr health00;bind f4 vstr health20"
set health20 "BuildableDebugHealth 2000;echo ^2Gen @ 20%;bind f3 vstr health10;bind f4 vstr health30"
set health30 "BuildableDebugHealth 3000;echo ^2Gen @ 30%;bind f3 vstr health20;bind f4 vstr health40"
set health40 "BuildableDebugHealth 4000;echo ^2Gen @ 40%;bind f3 vstr health30;bind f4 vstr health50"
set health50 "BuildableDebugHealth 5000;echo ^2Gen @ 50%;bind f3 vstr health40;bind f4 vstr health60"
set health60 "BuildableDebugHealth 6000;echo ^2Gen @ 60%;bind f3 vstr health50;bind f4 vstr health70"
set health70 "BuildableDebugHealth 7000;echo ^2Gen @ 70%;bind f3 vstr health60;bind f4 vstr health80"
set health80 "BuildableDebugHealth 8000;echo ^2Gen @ 80%;bind f3 vstr health70;bind f4 vstr health90"
set health90 "BuildableDebugHealth 9000;echo ^2Gen @ 90%;bind f3 vstr health80;bind f4 vstr health100"
set health100 "BuildableDebugHealth 10000;echo ^2Gen @ 100%;bind f3 vstr health90"

Once you've tested your generator's functionality then you're ready to move on to the next step.
 
 
Cameras
You can use cameras for anything you'd like, but in DG we've added this functionality mostly for the generator destruction sequences. Since these are a tutorial in their own right we've written a camera tutorial. 

 
 
Spawnpoints
The spawnpoints are the same as they are with vanilla wolf with a couple exceptions. Since there are technically 3 areas for each team to spawn (base, checkpoint and dropzone) we had to give both mappers and players alike more control. There are times when playing where you might want to spawn in a specific area and your choice of area will change as the game's situations change.
 
So what we've done was extended the team_wolf_objective entity to make it easier to switch between spawnpoints. The entity now allows for a targetname key and that targetname will allow players to choose their spawnpoints via script, mappers to set their default spawnpoint and more.
 
 
 
Let's do it
Setup your base spawns, where your team will start, like you normally would using the team_CTF_redspawn and team_CTF_redplayer for Axis while using team_CTF_bluespawn and team_CTF_blueplayer for the Allies just as you always have.
 
Once you've setup the spawns in your base create a team_wolf_objective above each group of spawns. If you have several small groups within the group just center the team_wolf_objective between those smaller groups.
 
Give the team_wolf_objective a key of "targetname" and a value of "spawn_team_generator" where "team" is either allies or axis. This targetname is what players can use to trigger spawning in this area via a script or bind. You can find out more information about doing that in the section called "Testing your spawns".
 
Then give your team_wolf_objective a key of "description" with a value of "Team Generator". That's the wording that will show up in the limbo menu for players to select manually.
 
Now repeat this process for the other areas such as your checkpoints, dropzone, etc. Keep in mind that just as it is normally, for the other areas you won't need to have team_CTF_redplayer and team_CTF_blueplayer. Those are only required for the initial spawns.
 

NOTE: team_wolf_objectives work on distance. If you have two groups of spawnpoints make sure that the team_wolf_objective is closer to the group you want to use it.

See below for a list of the proper targetnames to use with your locations and keep in mind if you do not use them exactly as they are written, players will have problems using their scripts and you might have problems starting your map without script errors. It's best to use the same ones so that players who already have scripts setup for use with current DG maps can use yours the same way.

spawn_allies_checkpoint
spawn_drop_zone
spawn_axis_checkpoint
spawn_axis_generator
spawn_allies_generator


Your map's default spawn
If you look in your map's script inside the game_manager section you'll notice the following two lines.
 
                        wm_setspawndefault                  1 spawn_allies_generator
                        wm_setspawndefault                  0 spawn_axis_generator
 
 
Those lines will set the default spawnpoints for your map. We recommend using the generator or base spawns as the default for better gameplay, but you're free to change them as you wish. If you leave the lines out completely the default spawn will most likely default to the dropzone or the closest spawn available to the other team's generator/objective. Depending on your map's layout that might not be the case and spawning might not be predictable.
 
Vanilla wolf's rule is that the default spawn for your team is the closest available one to its objective while being furthest away from the initial spawns. Initial spawns are determined by spawnpoints with a key of "spawnflags" set to a value of "3". This doesn't give players much control.
 
 
Checkpoints
Included is the dg_checkpoint setup. Open up the dg_checkpoint.map and you'll see a checkpoint, a spawn point and a team_wolf_objective for each team. Simply copy them into your map where you want them. Then open up the dg_checkpoint.script file and copy and paste its contents to the end of your script.

NOTE: You'll have to of course create more spawnpoints so that you can have more spots for players to spawn into your map when the checkpoint is captured.

Take note of the playsoundteam command in the script. They allow you to play specific voiceovers per team when the checkpoints are captured. You can find more information about that command in the dg_ldr_script_definitions.html file included with this LDR.
 
 
 
Paraspawns
They're extremely simple to use. Simply place any spawnpoint above the ground at least 256 units and the player will automatically spawn with a parachute. That's it! It's all in the code to trace downwards and determine the player's height.
 
I would advise setting them up as high as you can. You should factor them into your map design ahead of time since it can be fairly difficult to compensate for them later on.  We recommend you use Terragen or sky_portals to make your horizons nice and pretty for the players on the way down.

NOTE: If a players parachute hits something on the way down they can sometimes fall to their death so it's best not to make it overly difficult for them to land on solid ground.  Also consider that when a player's feet touch any brush the parachute will disengage. Don't place the paraspawns directly over trees or objects that the parachute would catch on or they might get annoyed playing your map.

Also make sure that you set your paraspawns at least 128 units away from the sky and/or clip brushes as well as 128 units from each other. Reason for distance from the sky/clip brushes is that the parachute can spawn inside the sky/clip brush and the player will be stuck. The reason for distance between the spawns is that it will just look better.
 
 
 
Testing your spawns
The script below is probably the easiest way to make sure your spawn points are working properly. Hitting F6 will toggle between all 5 possible spawn areas.

//toggles spawn default
set spawn_alliesg "setspawnpt spawn_allies_generator; echo ^2Spawning: Allies Generator; set spawnpoint vstr spawn_alliesc;"
set spawn_alliesc "setspawnpt spawn_allies_checkpoint; echo ^2Spawning: Allies Checkpoint; set spawnpoint vstr spawn_dropzone;"
set spawn_dropzone "setspawnpt spawn_drop_zone; echo ^2Spawning: Dropzone; set spawnpoint vstr spawn_axisc;"
set spawn_axisc "setspawnpt spawn_axis_checkpoint; echo ^2Spawning: Axis Checkpoint; set spawnpoint vstr spawn_axisg;"
set spawn_axisg "setspawnpt spawn_axis_generator; echo ^2Spawning: Axis Generator; set spawnpoint vstr spawn_alliesg;"
set spawnpoint "vstr spawn_dropzone"
bind f6 "vstr spawnpoint"

 
 
Team Doors
Included is a prefab of team doors to give you an idea of how they work. They will allow you to control which teams can access which areas based on which team they're on. Typically these are used throughout DG to prevent spawn camping in a team's base.

 

NOTE: Remember to use team doors wisely. Only that team can open it so consider its power in terms of gameplay for your map.

There are 3 different entities that utilize the team doors functionality: dg_door_rotating, dg_door, dg_invisible_user. These are exactly the same as func_door_rotating, func_door, and func_invisible_user with two exceptions.

The dg_ versions of each incorporate team door functionality.
The dg_door_rotating now has fixed opening and closing sounds.

 

NOTE: If you already have a door in your map you don't have to recreate it. Simple open it's door properties and change the classname value to the corresponding entity. Then just add the team setting.

 
Moveable MG42s
Degeneration has added the ability to assemble, disassemble and move MG42s. However it's only possible to do this with MG42s that use tripods. Engineers are the only class that can assemble and disassemble them while it's the only class that is unable to move them.

NOTE:  When placing your MG42s in a map you might want to place it in an area where players pass frequently. This will increase its chances of being used. You may however want to place it in an area where it can be put to good use if left there just in case players don't want to move it.


Deathmatch & Team Deathmatch
There's not much to know about these two modes, but let's go over what you need to make them work.

Game Manager
A sample of the game_manager section of the standard Deathmatch scripts is included. You can find it here - dgdm_game_manager.script.

Arena File
You're going to need to specify a new gametype in your arena file so that it's categorized under the proper listing. In your arena file you'll have to specify "freedm" for Deathmatch and "teamdm" for Team Deathmatch.

Sample Arena file:

{
    map "dgdm_flow"
    longname "Flow Deathmatch"
    type "freedm teamdm"
    timelimit 10
    axisRespawnTime 1
    alliedRespawnTime 1
}
 

Spawnpoints
You'll need to have at least one info_player_start spawnpoint just like any other mode, but all of the other spawnpoints need to be info_player_deathmatch.

Item Placement
There's nothing tricky about item placement, but be aware if you specify a wait time for your items/health/weapons/ammo/armor then the server settings will not be able to override them. If you use the wait setting make sure you do it with good reason.

G_gametype
The g_gametype setting for Deathmatch is 0 and for Team Deathmatch it's 3. WolfMP is 5 and Stopwatch is 6.


Conclusion
Hopefully this guide has made it easy for you to get started making maps for DeGeneration.  If you have questions or issues please drop by TRAM Design ( www.tramdesign.net ) and/or the forums at http://www.tramdesign.net/cgi-bin/ultimatebb.cgi

Copyright © Tram design - All Rights Reserved Legal Notices