How To make a TC map
In this tutorial i will explain how to make a TC map. I expect people to know the basics and how to set up CP_ maps with multiple rounds. I will also compare most info with TC_hydro as most know the map. Also, before you start to map read the full tutorial or you might miss some important steps which will force you to edit the map.
Whats in this tutorial
- The first steps
- Before setting up the rounds
- Setting up the rounds
- Limiting the route
- The Timer, Roundstrings and other details
- The Timer
- Making the image of the map
- Locating Control Points
- Special round examples
- Defend the base
- Invade to get back in the battle
1. The first steps
At first before you even start to map you should layout the idea (or a part of it). A TC map that starts out of nothing usualy will get major gameplay issues cousing unbalance. There are multiple ways you can layout the map. You can for example have both teams start with the same ammount of CPs (like in hydro). you can also have 1 team only start with 1 and have to take over as much as possible like a bit in dustbowl (the exception that its only 1 vs 1 cp all the time and the defenders can also capture). The most interesting part is however the multiple routes. This gets done the same way as in any other multiple staged CP map.
2. Before setting up the rounds
Before you start making the rounds you should name the control points in such a way that they are easy to become identified. I recommend to use the same naming as in TChydro. In this map they named the CPs to CPA, CPB to CPD. This will also work with directions like N for north and S for south (choose what you prefer as long as you keep the name simple). The more complex you make the names the harder its to recognise them later, it will still work though.
In hydro each team also had a special base that only gets attacked in the last round. These team bases were named CPRED and CPBLUE. This makes it easier to identify those.
Look at Screenshot B for the example of the naming of the CPs in tchydro - As i dont know the exact which cp had which name this might be slightly wrong but the names on the image are used in the map
3. Setting up the rounds
Making the rounds is exactly the same as with a CP map. the only diffirence is that you should only include 2 CPs and both teams should be able to win. The rounds never get played if both CPs are in control by a single team. For rounds which need a random selection the priorities should all be the same. If the priorities are set lower the rounds only get played if all the rounds with a higher priority are finished or dont have options for the enemy to play in it and take one CP over.
In Hydro the normal rounds (rounds with only CP A-D) have a priority of 50. the rounds with CPBLUE or CPRED have it on 10 so they will only show up if a team has lost CP A-D. By using the priorities smart you can get some nice effects with defending the base. I will give some examples of it later.
You should make a round for each possible route that they can take.
As it might be hard to remember which round has which cp there is a simple trick to make it easier to find it back without having to watch the properties. This is by naming the rounds something like: RoundAD for the round CPA versus CPD or RoundABlue for the base attacking rounds (CPA versus CPBLUE).
Remember that a teamcontrolpointmaster entity is still needed for a TC map as its needed for every map with control points no matter how they are used.
4. Limiting the route
Very important is that during a round there is no option to reach a CP out of the playing area. This is because it confuses players if its possible plus they cant be capped anyway. This can be done by making a funcbrush that blocks the way. In the teamcontrolpointround you should add an output so all doors of that round will open when the round starts and make them close again on the end. for overlapping doors (which get opened in multiple rounds) you should make the open triggers work after 0.1 second or they might still close as triggers sometimes could be faster than they should.
This step could take a while and its important to think about this during the designing on paper. (i made the mistake of not doing this making it hard to get good looking doors in my map - tcinvasionbeta1). There is however a easy way to make the triggers easier to read. Name the brushes something like: RoundABEnable if they must make a bridge in that round or RoundABDisable when they are doors that must open or walls that should be gone. These doors should only become triggered from within the round they are used. See screenshot C for an example, at first you see the round activating a start relay. in that relay there are lots of entities getting an enable trigger and a disable trigger. The end trigger has the oposite.
5. The Timer, Roundstrings and other details
The following paragraphs are basicly all trigger work. This is why i group them together. many will also make use of the same screenshot.
5.1 The timer
As you most likely want to have all round having the same time its recommended to make everything work thru a single timer. In hydro this timer is called timercentral (as you can see already on screenshot C - as the relay triggers it). Doing this makes it easier to setup the timer for each round as you simply can copy paste the trigger settings for each round. However, there are a few things to watch for. Its very important that you only have 1 timer in the hud so if you make use of more make sure you trigger those and set the DrawInHUD to 1 if they must show and 0 if they must not (again see the relay on screenshot C for the example). Also, as each round the timer doesnt have to become reset this has to be done yourself. At first its important to make the timer pause on the end of each round (allways pause as this works best). Then for the start of each round do a settime or addtime (depends on what you want) trigger and give a value in seconds. This allows you to have any time for the map and extend the time of last round. At last also make sure the timer resumes or the timer wont count.
A round string is simply used to give some basic information to a team for special rounds (like 1 team has to defend and 1 has to attack). still, this has a limitation as you cant see in the round who is usualy defending. However, if you for example setup the rounds like in the bases of hydro then you can make use of it very easy. In all other rounds its recommended to have both teams the same string with only slight diffirences.
On screenshot C in the round entity you can see the outputs to tfgamerules. Those outputs set the string. of course you can make your own string for it.
This entity doesnt have to be placed inside the map, thats why it shows up as broken in the triggers. The effects however are very usefull as you can change the spawntimes anytime you want. Just make an output with SetRedTeamGoalString replaced by addredteamrespawnwavetime or addblueteamrespawnwavetime. By giving those a positive value they get longer spawn times and a negative value makes them shorter. Best is to base them on the time as later in the rounds you want to have more people attacking to get a bigger change in captures. To reset it for other rounds you can simply set the time back using the setredteamrespawnwavetime and setblueteamrespawnwavetime outputs.
6. Making the image of the map
One of the most recognising things in a tc map is the map showing the current battle. This might look hard but its easy to do it. At first you will have to make an image of the map with a size of 1024 wide and 512 high and centered. its advised to make use of an alpha channel to make it look smooth ingame instead of a squared box which doesnt fit. Also you should keep away from the edges or the immage might not fit that well. In this immage you should keep the locations of the control points empty to make them better visible. For the bases you can put the image on it if you want as long as its not possible to let the enemy start a round with it.
See screenshot B for the example of the image of tchydro. The gray is mostly transparent on it with some semi transparent effect over it to make it look like a crayon effect. Make sure to give this immage some effort as its the thing that lets people recognise your map.
With the file belongs a VTF. this should look alot like :
"UnlitGeneric" //note its an unlit generic and not a lightmap generic
Just copy paste this for the image to save time ;)
[imagename] in the file can be replaced with everything you want. This means the VMT can use any name. the VTF must be named exactly as the map. Both files should be placed into [username]\team fortress 2\tf\materials\overviews or they wont work.
6.1 Locating control points
As the image doesnt have to be related to the mapsize itself you are forced to give the locations of the CPs on the immage yourself. the problem is that they dont use the scale of 1024 - 512 ingame but 560 - 280. This means you need to resize the immage to this to be able to find out the exact locations of the CPs on the immage. This location is the exact center of the CP (you dont have to save the resized immage, its just to make it easier to find the locations for you). This information will be put into a .res file and will look like :
Again, copy paste is recommended to get the template
"hideicon" "1" // This makes the CP not show up on the map. its used for CPs that are on the image itself like the bases in hydro.
"cp_A" // CP name used in hammer
"x" "170" // X location on the 560-280 sized image
This file should be placed at:
[username]\team fortress 2\tf\resource\roundinfo
and have all CPs that are in the map. When a battle gets played the arrows will show up between them. You dont have to do anything for that
Hint: If you dont have a immage yet use a blank one otherwise it wont work but with a blank one you can still see the result
After this is done the map overview will already work. So there is only some work left to make this look good.
7. Special round examples
As i said before i would give some examples for special rounds like the base rounds in tchydro. For these rounds there are many options. I have 2 examples of which i think are good (they are close to each other in style but worth to look at):
7.1 Defend the base
This is the one used in hydro. It starts with 5 minutes of defending, its rare that you succeed but when you do the CP of the offenders changes the owner to the defending team. To make this is simple:
roundwin entity to make the defending team able to win.
Set the outputs to something like in Screenshot D.
If you want it you can also make the defenders able to capture but this isnt a must.
- Make a timer specialy for this round and make it hidden on the hud and paused for all other rounds. it should only be for that specific round.
- Make a game
7.2 Invade to get back in the battle
This is the situation i used in tcinvasion. The offenders only have 1 CP and must take over an other one or they lose. Its the oposite of the hydro situation (remaking the situation of hydro is a good start for making this effect). There are only a few diffirences needed in this case:
- Make sure the CP of the offenders gets taken over before the win gets activated (by adding a delay of 0.1 to the win output). This is because the last CP cant be taken over during the win as it would result in a double win (it took me some time to find out why it didnt work in my map before and the delay was simply the solution).
- Its recommended to give the offenders a unfair advantage to the defenders to make the battle more fair - something like dustbowl should be good. You can also give the offenders a way shorter spawntime for it.