352 ratings
Making your own MVM Missions
By ★ Conga ★
This guide will help you not only start making mann vs machine custom missions but also balance, perfect and master them.
All information in from me,friends and co-workers in mvm and is highly accurate, I will try to update it as certain questions/mvm updates come along, other than that I hope you enjoy the guide.
(But 90% my personal experience)

This guide is not for experienced mission makers, so don't expect to learn a whole lot here but you might find some useful tips~
1. Basic Requirements
If you want to start making custom mann vs machine waves then you'll need the following or you may fail, get incorrect outcomes or be confused throughout certain parts of this guide.

1. NotePad++
Notepad++ is a requirement if you want to start making custom mvm missions as it allows you to edit .pop files and find errors easier. http://notepad-plus-plus.org/

2. old.mvm.tf
This website has greatly helped me in making missions and reduced the time to make them intensely.
(Note: Before you ask, mvm.tf is broken and shouldn't be used)
(Note: Don't use their test servers, they're way too old)
(Note: It might work for some people, it's usually a "by person" basis but old.mvm.tf still has a much better layout imo)

3. population
This file is what you put missions in to test them if they work, there's no point in making a fun exciting mission if it's broken and untested.
If you don't have a population folder then it's simple, go to Local Disk (C:) > Program Files > Steam > SteamApps > Common > Team Fortress 2 > tf > custom
Now once you're in your custom folder, (make one if you don't have one) make a new folder called "pop" without quotes, go in to that folder and make another folder called "scripts" without quotes again, after that go into that folder and make one last folder called "population" without quotes.

Entry into the Team Fortress 2 folder may differ from yours but once you're in the Team Fortress 2 folder, there's no difference.
2. Understanding the website
Now I understand that you've read all which is above if you're here.

old.mvm.tf can be confusing to some people but you should be able to use it with ease after reading this, also I'll be splitting this in to two "sub-sections" so don't think I've forgotten anything.

1. Starting currency, sentry buster when x and what are all these buttons?

2. Starting currency is pretty obvious, it's the amount of $$$ you get at the start of a mission.

2. "Dispatch a sentry buster when damage/kills exceeds: x"
This is the amount of kills/damage done before a normal unchanged sentry buster is deployed into the field. (Yes you can make custom supports but we'll get to that later)
Say if I set the kills to 50, every time 50 robots are killed one sentry buster is spawned.
If I set the damage to 10000, every time 10,000 damage is done one sentry buster is spawned
This is a bad way to create sentry busters as it is very unpredictable and even when done correctly can be unfair, exploited or underpowered.

3. Respawn time is the base value of how long it takes to respawn for free, it'll go up by 1 everytime you die in one wave and resets the next wave.

4. Fixed respawn time, if this is enabled then your value no longer increases everytime you die.

Zombie bots, self said but it basiclly gives all robots the item "cursed voodoo soul".
The item is an all-class version of the "cursed voodoo >classname< soul"
This will also make the wave number 666 regardless of which wave it is and the end wave.

Advanced mission, certain achievements can only be obtained for having this enabled.

Bots can attack in spawn, if this is enabled bots can attack in areas of the map which contain "func_spawnroom".
To make it simple, it lets bots attack in their own spawn.

5. Choose bots in templates, it's broken and holds no effect.

6. Randomize, generates a completely random mission.
Not reccommended unless you plan for an insanity server night.

Clear All, Only press this button if you're %100 sure you want to get rid of all current progress, even then I would save it so I could atleast get back to it.

7. Save, saves the current mission to their website.
Like a quick save

Load, loads the current mission saved on their website.
Like a quick load

8. Map, lets you choose a map for your mission to be on.

9. Missions, lets you add support bots to your map coming in when timed.

2. Making waves and adding bots
Okay, now we're talking a bit more advanced so pay attention if you havn't been.

1. Wave #1, this is the current wave you're editing.
Press the + button to the left of it to create a new wave.
To delete a wave simply find the big text version with $??? of your current selected wave and click the red x.
Say I'm on wave 4 and I don't want it, so I go down to where it says in big text "WAVE #4 $400" (or whatever money value it says there) and I press the red x to the right of it down a bit.

2. The money value next to the big text is how much money in total exsist in your current wave, remember users can still collect all of your money for an A+ and a bonus $100 however that doesn't always happen.

3. SQUAD #1, (or whatever you named it) this is the current squad selected, squads are a group of bots which we will get into high detail later.

Now I think you get the basics of wave and controlling over all everything.
Stop right there, don't be making bots yet!
We still need to talk about how to control and limit your bots spawning habits!
3. Limiting and controlling your bots
Learning how to limit and control your bots is very important for any missions balance, lets go over a few simple rules first.

1. At no time may you have over 21 active bots
2. In the case you do go over 21 active bots, certain bots will not be spawned and are placed on a "waiting list"
3. Tanks aren't bots and don't contribute to the "21 max active bots" rule, however having too many tanks can cause server lag.

1. Now lets get started.
Sub-wave, these are going to be shown by x10 >scout symbol< but that'll change once you play around with numbers and bots a bit, you can make more sub-waves by pressing that little + sign to the left of it.

2. Name, this is the name of you current sub-wave.
I like to name mine a1, a2, a3, b1, b2, c1, c2, c3, c4, etc
This is important so keep it organised.
Also multiple sub-waves can be called the same thing.

Wait for all spawned, once all robots from the chosen sub-wave/s have spawned, the robots from the sub-wave/s containing this data will spawn.

Wait for all dead, once all robots from the chosen sub-wave/s have spawned, the robots from the sub-wave/s containing this data will spawn.

3. Currency, this is how much money robots will drop overall from set sub-wave.
Say I set the value to 100, and I had 50 demomen in my wave overall I would have each demoman drop $2 each.

4. Total squad count, this is how many bots spawn overall, if you had multiple different bots in one sub-wave this value in simply multiplied by the amount of different bots when in-game.

Max active squads, this is how many bots you can have active at once, if you had multiple different bots in one sub-wave this value in simply multiplied by the amount of different bots when in-game.

Squad spawn count, this is how many bots will spawn each time spawning is triggered, if you had multiple different bots in one sub-wave this value in simply multiplied by the amount of different bots when in-game.

Wait before spawn, this is how long it takes when spawning is triggered for the bots to spawn, this value takes place in seconds.
0 = instant when triggered.
1 = 1 second before spawning when triggered.
2 = 2 seconds before spawning when triggered.
10 = 10 seconds before spawning when triggered.
30 = 30 seconds before spawning when triggered.
60 = 60 seconds before spawning when triggered.

5. Wait between spawns, this is how long it takes until spawning is triggered again from another spawning, this value takes place in hammer seconds which are different to real time seconds.
0 = instant, all bots are spawned when possible to spawn.
1 = 1 second between spawns.
2 = 2 seconds between spawns.
10 = 10 seconds between spawns.
30 = 30 seconds between spawns.
60 = 60 seconds between spawns.

6. Support, when this is enabled the bots in set sub-wave will spawn endlessly until the wave ends, these bots are not required to die in order for the wave to end. (tank exception)

Random Choice, when this is enabled you'll gain "choice" buttons.
You can put different bots under each "choice".
In-game when "choice" is made, bots are spawned randomly.
Say I have a choice for a soldier bot, scout bot and heavy bot.
It may spawn:
scout, scout, soldier
soldier, heavy, scout
heavy, heavy, heavy
scout, soldier, soldier

Random Spawn, pretty obvious.
Spawns bot at a random spawn point

7. Also to delete a sub-wave you can press the red x directly right from where it says
"Squad #1 >scout symbol<X10 (Mac Active 5 Bots)
This may differ depending on how you edit your wave.
4. Making your very own robot
Yes, it's what you've all been waiting for, making your very own custom robot.

We can add valve robot but they're boring and speak for themselves, besides do we REALLY need a guide piece for that? Just click on the bot it has on the list and it'll add it.

Now to start making your very own bot, go over to that scout bot over there where it says stuff like:

Also if you can't see that (you may want to do this anyways) set your zoom to %75, you should be able to do this by going into the options for your webpage.

1. First select a class for your robot, the scout icon is highlighted, (probably unless you skipped ahead >:c) however you can change that.
It doesn't have to be a scout, simply click another icon and your bot will change class however I will be using soldier for this, you can choose whatever you want.

2.The first this you see below the icons is templates, well when I said valve templates were boring and useless before well.... I was lying.
You can learn things from valve templates but more importantly you can use their giant templates to speed making your own bots up.
If you do make something based from a valve template though, be sure to go to that template tab and set it to nothing, (at the top) this will help us out when we're in notepad++ later.

Now after that you see name, give your bot a name or he'll simply be called what class he is,
soldiers are called soldier
scouts are called scout
heavies are called heavyweapons

I'll call mine "tim the giant soldier"
Well he's not giant yet but he soon will be.

Now you see health, make him as healthy as you want but don't go overboard.
I'd give:
Normal bots - normal hp
Large bots - x5 hp
Giant bots - around the value valve gives (2k - 5k)
Boss bots - 40k - 60k
Since I want tim to be a boss soldier I'll give him 50,000 health

Now you see scale, this is how big your bot is and most giants don't need this, only boss bots. (We'll go over that later)
Micro bot: 0.25
Small bot: 0.75
Normal bot: 1.0
Large bot: 1.2-1.4
Giant bot: 1.75
Boss bot: 1.7-2.1
Since tim is a boss I'll give him 1.9, you can go over/under given values but be sure to not go too overboard...

Max vision range, this is how far your bot can see, if it's left blank your bot can see forever.
I'd give giant heavies 1200 on this and non-bowman snipers 2500.
NOTE: non-bowman snipers don't work unless they're support bots.

3. Navigation preferance, all valve maps have build-in navigation paths which you'd have to look at them in hammer inorder to see, when a navigation preferance is set a bot will follow that path.
This is very unused, even by valve.

4. Skill, this is how good the AI of your bot is.
Easy - takes a while to notice you, poor aim (doesn't do good support for sniper/spy)
Normal - takes a bit to notice you, meh aim (doesn't do good support for sniper/spy)
Hard - notices you quickly, good aim
Expert - notices you nearly instantly, aimbot aim
Tim shall become an expert

Weapon restriction, when this is set a bot will only use the select weapon with exceptions.
Say if I set it to melee only, the bot would use melee and nothing else
Say if I set it to secondary only, the bot would use his secondary and nothing else
Say if I set it to primary only, I'd get no difference ._.
Exceptions are:
If secondary is use item and out of charge (will go to primary unless boots/base jumper)
If beefalo steak sandvich is eaten (forced melee)
If bot has buff banner (will use)
If bot has throwable (will use but clever exception)
NOTE: Don't give heavy a sandvich.... He just keeps eating it and afks in spawn ;-;

Now you'll see behavior, I like leaving it empty but sometimes I use it..
Push - gatebot capping
Iddler - whadda expect?
Mobber - groups with other mobber bots
Tim shall be able to capture any gate

5. After behaviors you'll see attributes, not weapon attributes, "attributes".
You'll get the hang of it eventually..
Attributes are like addconds but not quite, hard to explain but the best way to describe it is "an infinite addcond with unique buffs/debuffs along with differences to bot AI"
1. SpawnWithFullCharge - Medics spawn with full uber and soldiers spawn with full buff banners.
2. AlwaysCrit - Always Crit.
3. HoldFireUntilFullReload - The bot will refuses to shoot until he is fully reloaded.
4. RemoveOnDeath - Thinks he does something but same if it didn't exsist.
5. SuppressFire - Bot will not shoot
6. DisableDodge - the bot no longer attempts to strafe and dodge projectiles.
7. BecomeSpectatorOnDeath - probably gonna break your mission.
8. RetainBuildings - if this is on then if an engineer bot dies his buildings will act as if he still exsists.
9. MiniBoss - Makes a bot giant, core effects are:
sapper style changed
backstab style changed
looks change (for some classes)
scale is 1.75 (unless overridden)
airblast only knocks target upwards and barely back
10. UseBossHealthBar - Shows the bots health to the entire server, pretty much what that bossbot libertylauncher chief guy has.
11. TeleportToHint - Used by engineers, with this enabled they will teleport to an engineer bot hint.
12. AlwaysFireWeapon - Bot is forced to always shoot/fire their weapon.
13. IgnoreFlag - Bot will completely ignore the flags exsistance, I'd enable the push behavior if using this or else they'll be vegtables.
14. AutoJump - Bot will be forced to jump on timer
Tim will have MiniBoss and UseBossHealthBar since he is a bossbot
NOTE: Hold ctrl when selecting attributes inorder to select multiple

6. Now you see AutoJump right? Go up a bit and you'll see "auto jump min" and "auto jump max".
"auto jump min" - the minimum amount of time in hammer seconds before AutoJump is triggered.
"auto jump max" the maximum amount of time in hammer seconds before AutoJump is triggered.
Now your bot should automaticlly jump. (assuming you have the attribute AutoJump)

7. Weapons: speaks for itself, choose what weapons your bot will hold/what hats he will wear.

8. Attributes (again), now we're talking about the fun attributes like rapidfire demomen and speedy giant pyros.
Just drag & drop.
You have a giant list so it'd be impossible to list and explain them all without wasting three days and a week.
Here are some fun ones though:
Set DamageType Ignite
apply z velocity on damage (Should be same value as attribute below, positive values push away and negative values pull towards attacker)
apply look velocity on damage (Should be same value as attribute above, positive values push away and negative values pull towards attacker)
projectile spread angle penalty

Also attributes go by scale, some differ and some by toggle.
some examples are:
"damage bonus" 2.25 (+%125 damage)
"damage penalty" 1.1 (+%10 damage, they go by scale)
"projectile spread angle penalty" 3 (+3 spread angle penalty)
"restore health on kill" 110 (restores you to %110 health on kill)
"heal on kill" 1000 (+1000 health on kill)
"fire rate bonus" 0.5 (%50 faster firing speed)
"faster reload rate" 0.1 (%90 faster reload rate)
"silent killer" 1 (silent killer)
"damage bonus" -2.00 (Now this is an interesting one, any value of damage which is -1 or below will heal and overheal players above their maximam overheal, use it wisely and it will only work on melee weapons)

Now go play around and make the skeleton of a nice wave... Not yet, lets talk about balance.
5. Balance

Before you go ahead and make some big super wave lets talk about balance, balancing a mission is very important unless you want some stupid overkill challenge like omnish*t, in that case just skip this and make all your bots instant kill.
If you do want to make a balanced mission though lets start with starting currency, you should only have $500 to start with unless the mission holds extra challenge, then I'd give it an extra $400 like certain "too hard" missions have. ($4000-$6000 on wave 666 missions, $5000 is a good balance point)
It's not hard really, just give the players a fair bit of money each round, atleast enough for the next wave/sub-wave from hell. *cough* wave 666 missions *cough*
The only true way to get an accurate value of this is to keep testing the mission with some random people/friends.
If atleast %35.5 (2/6) of you suck at playing mvm then thou shall get inaccurate values/test results.
(exceptions cough cough)

You see templates? Why did we never touch it? Because it's useless, completely.
You see support bots down there? Why are we waiting to edit them? Because editting them now is completely useless.
Inf cash doesn't count as balance, it's just lazyiness.

NOW make the skeleton of your mission.

After you're done making it on old.mvm.tf click the "generate" button
6. Polishing your mission and custom support bots

Now you're done with old.mvm.tf and into notepad++
You may have noticed you weren't able to add custom icons on there and any which were there are no gone ever since you pressed that generate button, anyways take your .pop file and slap it into that population file we made at the start of the guide, give it a name too like...
mvm_rottenburg_( ͡° ͜ʖ ͡°)

Now jump into it and start adding icons, these are under name and should look something like...

Name "Tim the giant soldier"
ClassIcon Soldier_barrage
Scale 1.9

You don't need to have your name or scale like that, it's just an example.
Anyways if you want a list of icons they can be found right here.
(Thanks to Quick Little Bastard for the second link)

Now give all the bots you want icons, after you polished that lets look at this line of code.
Mission { Objective Spy Where spawnbot_mission_spy BeginAtWave 1 RunForThisManyWaves 2 InitialCooldown 50 CooldownTime 60 DesiredCount 3 TFBot { Template T_TFBot_Spy Health 1 Name "X10 Kunai Spy" Class Spy Skill Expert Item "tf_weapon_revolver" Item "conniver's kunai" ItemAttributes { ItemName "conniver's kunai" "restore health on kill" 180000 "max health additive penalty" 0 } } }
This code will spawn three x10 kunai spies with 1 hp but 1800 hp on kill every 60 seconds.
However it was once just this.
Mission { Objective Spy Where spawnbot_mission_spy BeginAtWave 1 RunForThisManyWaves 2 InitialCooldown 50 CooldownTime 60 DesiredCount 3 TFBot { Template T_TFBot_Spy } }
What did I do you ask? I simply added values, under the template press enter (or whatever you may have it strangley binded to) and create a new line.
Under here you can change the hp, icon, weapon stats and pretty much anything.
Why didn't we do this on old.mvm.tf again? Because templates are needed there on support and ruin the world for us.

Also take note, all bots require all three weapons to be described if set bot has weapons listed.
If a weapon is missed out on, the bot will not spawn/have issues.

Bonus note: You can add an objective to the spawning info to make sentrybusters, fixed sniper and other things. Pretty much an objective.
Objective DestroySentries TotalCurrency 400 TotalCount 10 MaxActive 9 SpawnCount 9 Where spawnbot WaitBeforeStarting 0 WaitBetweenSpawns 20

BlazingDiancie: I now know how to give robots proper australiums
BlazingDiancie: for australium reskins of the stock weps
BlazingDiancie: you need to set the robots weapon to its upgradeable version
BlazingDiancie: such as "tf_weapon_minigun" becomes "upgradeable tf_weapon_minigun"
BlazingDiancie: then set "item style override" to 1 on the weapon you set as upgradeable
BlazingDiancie: this will tell the game to use the gold texture
BlazingDiancie: and if you want it to look authentic, set "is australium item" to 1 and "loot rarity" to 1 as well

Also you might've noticed things like
#base robot_giant.pop
#base robot_standard.pop
#base robot_gatebot.pop
Keep them there if you're using even a single non-custom valve template, they're referencing the files.

Anyways now your Mission should be ready for publishing and submission to your local mann vs machine server owner or if you want to test it simply load teamfortress 2, go to the map you made it for and vote for it.
7. Custom Maps
Say you made a wonderful mission but don't want it for a valve map and it's not listed on the old.mvm.tf website, it's easy to convert.

First change the name of your mission to suit the map.
say if the map was called mvm_hardcore, I would name my mission mvm_hardcore_>mission name here<

Now after you've done that you also need to know the spawnpoints in the map, simply ask the developer of the map/look at it in hammer.

So if the spawnpoints are:

then those are the only spawn point names you can use, go into notepad++ and fix the spawnpoint names, it's not hard to miss with them saying:

Be sure every bot is in working order and test the mission to make sure you did everything correct.

While we're on the subject of custom maps, lets talk about something for people who both make custom maps and make custom mvm waves.

.pop files can do more than just spawnbots, you see all those names in there? They mean something, it'd take a while to write down and explain everything you can do with .pop files and maps but here are a few I like.

You can make an infinite mission with four robot spawns each in a "generator", you can use func_breakable to make the "generators" destoryable.
When all four "generators" are destroyed the defenders win, during the this time they must defend the hatch.

You could have 7 control points where the bots and humans are trying to cap all, no bot can go past the required to cap point and same with defenders.

You could have no hatch but when all players die, you loose.
You can do this by making a large trigger brush over the entire map.
Once you've done that make it only detect players on red and attact it to a math_counter (with wanted inputs) and a round_win set to blue so when the counter reaches x value, bots win.

Also you can trigger map events, use relays and follow by trigger.
Troll Example:
WaveSpawn { TotalCurrency 400 TotalCount 10 MaxActive 9 SpawnCount 9 Where spawnbot WaitBeforeStarting 0 WaitBetweenSpawns 20 // Instant Gameover FirstSpawnOutput { Target boss_deploy_relay Action trigger } Squad { TFBot { Health 125 Name "Troll Scout" Class Scout Skill Normal Item "tf_weapon_scattergun" Item "tf_weapon_pistol_scout" Item "tf_weapon_bat" } } } } }
It's a little hard to explain but map makers should understand this very, very easy.
There's even an unused relay on bigrock which enables/disables the cliff.

I'm getting off-topic now but you can do a lot with custom mvm maps and .pop files, they can even trigger map events.
BONUS: Bot AI and the special support bots
While we're here lets talk about how the Bots AI works and how unique support bots are.

The bots AI is to pickup the bomb and take it to the hatch ignoring all danger while they're at it.
However bots will not go for areas of the map which are drops or marked for the bot not to walk in.
Bots will ignore trigger_hurt blocks and all possible danger as said above.

As you can see their AI is pretty simple when it comes to movement, oh and they "dodge" btw.

When it comes to aiming and reaction speed it's all based off of their difficulty and normal/easy doesn't support snipers/spies very well. (although you'd already know this if you read above, I'm not going to repeat myself so go read what's above if you havn't already)

When it comes to weapons the ai is fairly strict but at the same time loose.

"MvM bots will always use their primary weapon unless they have a chargable secondary, take bonk! atomic punch or a buff banner as an example, however this can be overridden" ~ me
A list of secondarys bots will use are:
Bonk! atomic punch
Buff banner
Battalions backup
Buffalo steak sandvich
Dalokahs bar
Chargin' targe
Splendid screen
Tide turner
(Take note spies will disguise regardless and use all of their weapons if not restricted)

Also take note that you can force bots to use weapons.

Now I'll say there's more to support bots than meets the eye. (bots like the x10 kunai spy I showed you ealier not bots in waves tagged with support)
(Also support bots will add extra bots to the game if possible & required)

Normal spies vs Support spies

Normal spies:
Spawns at x spawn point and walks to buildings
AI seems worse

Support spies:
Teleports behind red team and has an advantage
AI seems better and more clean

Normal engineers vs Support engineers

Normal engineers:
Doesn't build teleporter

Support engineers:
Builds teleporter
Teleports to hint

Normal snipers vs Support snipers

Normal snipers:
Can't use sniper rifle (they can if you make them AlwaysFire)
Can use bow

Support snipers:
Can use sniper rifle
Will use melee if provoked

Now sentry busters are a unique one..
You can make ANY class a sentry buster leading to some unique things such as:
Sandman buster
Bonk! atomic punch buster
Buff banner buster
Battalions backup buster (that gotta hurt)
Concheror buster
Medic buster
Spy buster? (This results in the sentry buster moving while detonating if disguised)

As you can see the fun is endless!
Mission { Objective DestroySentries Where spawnbot_mission_sentry_buster BeginAtWave 1 RunForThisManyWaves 2 InitialCooldown 70 CooldownTime 80 DesiredCount 1 TFBot { Template T_TFBot_SentryBuster Health 2500 Name "Sandman Bonk Buster" Scale 2 Class Scout Skill Expert WeaponRestrictions MeleeOnly Attributes "MiniBoss" Item "tf_weapon_scattergun" Item "bonk! atomic punch" Item "the sandman" CharacterAttributes { "damage penalty" 0.95 "move speed bonus" 2 } } }
Damage penalty is usally 0 for those who don't know but who says you can't edit it for more fun?
Although don't forget making a bot into a sentry buster will completely change it's movement AI.

The movement AI of a sentry buster is:
1. run towards selected sentry
2. chase after engineer if engineer has picked up selected sentry
3. once right next to sentry/engineer, taunt (and then go kaboom in a suicidal explosion, the bots AI is suicidal anyways..)

Oh and before you ask.
Initial Cooldown: The time before the first batch of this starts
Cooldown: The time between batches
BONUS: Making a x10 mission mission and thisLD tags
Ok, so you want to make a mission for x10.
Making a mission for x10 only requires a few simple changes.

1. Increased difficulty, they have super weapons of mass destruction and invincibility.
I don't think I need to list this one.
Increased hp is a good start. [50-100%]

2. Counters, let me explain this one.
A demoman has the targe n charge giving him fire and explosive resistance, however it doesn't make him immune to:
  • Bullet damage
  • Melee damage
  • Fall damage
  • Critical damage
  • Drowning damage
  • Trigger damage
[Ignore the last two, those are just for a mappers reference]

Anyways you might not've known criticals were their own damage type, but this is good because:
Armor Penetration
You can give any bot critical hits to bypass some of a players armor but remember, if a player takes -100% ranged damage for example, range damage can include crits so counter it with melee damage.
However don't go too harsh on the penetration if you want good balance, every class deserves a chance to shine and show how invincible they are.
So throw them with spies, snipers and sentrybusters

One last thing, good hp multipliers are:
Normal robots: 2.33-3
Giant robots: 2.0
Boss robots 1.5

Pretty simple, if you want some examples those can be found right here: https://www.dropbox.com/s/gna7qmq9g4pi9hl/Wraths.rar?dl=0

(Mission pack I made, download it for your own x10 mvm server if you want to and have fun!)

ThisLD, firstly if you don't know what it is then go here:
Now that you know what thisLD is, there's two tags you need to know if you want better missions with improved bot control.
[VIP] - This tag will make it so only VIP users can play as this bot, good for bosses and skill demanding bots.
[Block] - This tag will make it so no user can play as the bot, perfect for endless missions, 1 robot waves and ai based bots.
BONUS: Gatebots
Ok so someone wanted me to do gatebots.
Gatebots are really easy to do.

First i'd add the gatebot hat onto it so people are more aware but it isn't required.

Second look at this code for a giant medic I edited.
WaveSpawn { Name 4a WaitForAllDead 3a TotalCurrency 320 TotalCount 16 MaxActive 8 SpawnCount 2 Where spawnbot WaitBeforeStarting 5 WaitBetweenSpawns 8 Squad { TFBot { Health 2500 Name "Giant Flak Jacket Gate Medic" BehaviorModifiers Push Class Medic Skill Expert WeaponRestrictions SecondaryOnly Attributes "SpawnWithFullCharge" Attributes "MiniBoss" Attributes "IgnoreFlag" Tag bot_gatebot Tag nav_prefer_gate1_flank Tag bot_giant Item "tf_weapon_syringegun_medic" Item "the quick-fix" Item "tf_weapon_bonesaw" Item "das metalmeatencasen" Item "MvM GateBot Light Medic" CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "heal rate bonus" 200 "dmg taken from blast reduced" 0.65 "dmg taken from bullets reduced" 0.95 } ItemAttributes { ItemName tf_weapon_syringegun_medic "damage penalty" 0.1 } } } } RevertGateBotsBehavior { Item "MvM GateBot Light Medic" ItemAttributes // turn off light hat { ItemName "MvM GateBot Light Demoman" "item style override" 1 } Tag bot_giant Skill Expert WeaponRestrictions SecondaryOnly Attributes "SpawnWithFullCharge" Attributes "MiniBoss" CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "heal rate bonus" 200 "dmg taken from blast reduced" 0.65 "dmg taken from bullets reduced" 0.95 } ItemAttributes { ItemName tf_weapon_syringegun_medic "damage penalty" 0.1 } } } }
As you can tell this is a custom giant medic which is also a gatebot.
Pro tip: A bot can have an unlimited amount of hats/miscs, just don't do too many or tf2 will break.
Also the // are just comments which don't do anything in-game for those who don't know.

Anyways as you can see the important tags here are:
BehaviorModifiers Push
Attributes "IgnoreFlag"
Tag bot_gatebot
Tag nav_prefer_gate1_flank
Tag bot_giant

The most important one here is:
BehaviorModifiers Push

That means the bot is allowed to capture anything marked as a "control point"

Attributes "IgnoreFlag"

This one means the bot will ignore the flag at all costs

Tag nav_prefer_gate1_flank

This one is obvious, it tells the bot to take this exact navigation route and not run off course to the hatch, ignoring gates.

Tag bot_gatebot

I believe this means the Gatebot hat will react and the secondary part of code will respond when all gates are captured, simply defining it as a gatebot. Don't quote me though~


Everything under this code is what happens after all gates are captured, most key values aren't required.

Tag bot_giant

Prevents the bot from being completely stunned. (mann hattan example)

Not much else really, for reference go here:
BONUS: Referencing the map
I probably won't cover too much here, as most of it is self-explanatory once you know how it works~
What i'll be telling you here is, .pop files don't just spawn robots, they also tell the map what to do.

This is what I talked about earlier in the guide, about the .pop file referencing objects in the map~

A simple example of this is a quick mission I wrote up a while ago which I used to experiment with such powers~

#base robot_giant.pop #base robot_standard.pop #base robot_gatebot.pop population { StartingCurrency 400 RespawnWaveTime 6 CanBotsAttackWhileInSpawnRoom no Wave { WaitWhenDone 65 Checkpoint Yes StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { TotalCurrency 400 TotalCount 10 MaxActive 9 SpawnCount 9 Where spawnbot WaitBeforeStarting 0 WaitBetweenSpawns 20 // Instant Gameover FirstSpawnOutput { Target boss_deploy_relay Action trigger } Squad { TFBot { Health 125 Name "★ Scout ★" Class Scout Skill Normal Item "tf_weapon_scattergun" Item "tf_weapon_pistol_scout" Item "tf_weapon_bat" } } } } }

The above mission is.. quite literally undefeatable, and unless you work some console magic you'll just loose as soon as you start~
There's nothing special here at all, except for one small piece~
// Instant Gameover FirstSpawnOutput { Target boss_deploy_relay Action trigger }

This might seem a bit alien to everything else in this guide so far, so let me chop it up for you~

StartWaveOutput and DoneOutput are both things the tf_logic_mann_vs_machine refers to, StartWaveOutput is called upon when the wave starts, everything withing its brackets will happen, likeso DoneOutput does the same when a wave ends respectfully~
...You might not've understood that so, let me put it in easier terms


There's not too much more I can do without going into custom mapping, bue the target is the name of the object you're going to be intereacting with, and the action is what it'll do~
If you're not too familiar with this, I'd highly suggest you spend a few hours in hammer, logic_relay, tf_point_weapon_mimic and trigger_multiple might interest you.
Also, while we're on the topic of custom maps, It's best that I warn inform you now, this has very little, if any usability in valve maps. This is best utilised in custom maps with your custom waves, which have custom relays you can trigger~

However, before you forget~
// Instant Gameover FirstSpawnOutput { Target boss_deploy_relay Action trigger }

Lets get back onto this snippet of code, it's the whole reason I talked to you about all that afterall~
FirstSpawnOutput is what's called upon when a bot spawns in MannVsMachine, once it's called upon we've told it to target boss_deploy_relay. (which is the relay triggered when a tank successfully deploys its bomb)
Once we've targeted it, we're telling the pop file to trigger it, and it does so, causing an instant game over upon the first robot spawn~

If you really want to get into this, i'd highly suggest you get into using hammer, learn to crawl before you learn to walk, or even run~
These are practically just the same as outputs in hammer, so all you need to know are the names and actions~

Here's a list of the calls that I know of so far: (feel free to list more below if you know them, and they can't be done by the map itself)
FirstSpawnOutput - When the first robot in a squadron spawns
StartWaveOutput - When the wave begins
DoneOutput - When the wave ends

Just one last word of advice... don't be irresponsible with this, i've warned you~
Thankyou for reading this guide
I hope you enjoy making many mann vs machine missions in the future.
Comment below if you have any questions/feedback and I'm working on this guide whenever I can.
Thumbs up if you think this guide was good and if you really love it that much then click the "add to favorites button"

Oh and you might've noticed by now that all class weapons don't work, to fix this try and decode this.

EDIT: Thank you for 5 stars and 10,000 views, thankyou for this great achievement.

EDIT: Here's the download for my x10 mission I reference sometimes here~
< >
Wazzup Feb 23 @ 11:35pm 
So to add weapons that are not in the websites would I just put the name of the weapon....and does this also apply to cometics? Thank you for your time.
Voidx Jan 25 @ 8:49pm 
I dont understand how to do sub-waves and so they go in order. Please explain more as to these sub-waves support as spies or snipers add
KyuuGryphon Jan 3 @ 12:48pm 
So I've been poking around and I'm curious - is there a way to use I/O parameters in FirstSpawnOutput and such? For example, say I want to send an input to the bomb to set its respawn timer - I've tried using "Action SetReturnTime 10" or similar, but it doesn't seem to take effect.

Is there a way to do this through the popfile?
_Arad_ Jan 1 @ 6:12am 
+Mechadexic, you have to zoom out the page to 75% and then it will appear on the right
_Arad_ Jan 1 @ 4:18am 
Where do you put the RevertGateBotsBehavior?