#base robot_giant.pop #base robot_standard.pop #base robot_standard_red.pop #base robot_giant_red.pop #base robot_yoovy.pop #base robot_yoovy_reverse.pop WaveSchedule { StartingCurrency 700 CanBotsAttackWhileInSpawnRoom Yes //keep this so companion bots can combat spawn camping RespawnWaveTimeBlue 1 //replaces the normal respawn kv's FixedRespawnWaveTimeBlue 1 // Essential stuff ReverseWinConditions 1 AllowJoinTeamBlue 1 HumansMustJoinTeam Blue SetCreditTeam 3 SniperAllowHeadshots 1 //sniper and amby don't work without this, use AimAt Body if you don't want your sniper bots headshotting SendBotsToSpectatorImmediately 1 //keeps the populator less clogged, bot projectiles vanish on death + causes weird killcams. Highly recommended but not required // Optional stuff RobotLimit 26 //pair with MaxTotalPlayers to disallow spectators AllowJoinTeamBlueMax 6 MaxTotalPlayers 6 // currently doesn't work in reverse? ImprovedAirblast 1 BluHumanInfiniteAmmo 1 FlagCarrierMovementPenalty 0.75 // (default: 0.5) BluHumanFlagCapture 0 BluHumanFlagPickup 1 BluPlayersAreRobots 1 TextPrintTime 7 // Engi-bot style teleporter. Not recommended for gatebot, highly recommended for non-gatebot // Entrances will also act like new spawn locations/tele exits BluHumanTeleportOnSpawn 1 OverrideSounds { "MVM.GiantCommonExplodes" "ambient\explosions\explode_3.wav" "MVM.BombWarning" "combine_bank_alarm.mp3" } DisableSound "Announcer.MVM_Spy_Alert" DisableSound "Announcer.mvm_spybot_death" DisableSound "Announcer.mvm_spybot_death_all" DisableSound "Announcer.MVM_First_Wave_Start" DisableSound "Announcer.MVM_Wave_Start" DisableSound "Announcer.MVM_Wave_End" DisableSound "Announcer.MVM_Wave_Lose" DisableSound "Announcer.MVM_Final_Wave_Start" DisableSound "Announcer.MVM_Final_Wave_End" DisableSound "Announcer.MVM_Robots_Planted" DisableSound "Announcer.MVM_All_Dead" DisableSound "Announcer.MVM_Bomb_Alert_Entered" DisableSound "Announcer.MVM_Bomb_Alert_Near_Hatch" DisableSound "Announcer.MVM_Bomb_Alert_Deploying" DisableSound "Announcer.MVM_Sentry_Buster_Alert" DisableSound "Announcer.MVM_Sentry_Buster_Alert_Another" DisableSound "Announcer.MVM_General_Wave_Start" DisableSound "Announcer.MVM_Game_Over_Loss" DisableSound "Announcer.MVM_Tank_Planted" DisableSound "Announcer.MVM_Tank_Alert_Spawn" DisableSound "Announcer.MVM_Tank_Alert_Another" DisableSound "Announcer.MVM_Tank_Alert_Multiple" DisableSound "Announcer.MVM_Tank_Alert_Halfway" DisableSound "Announcer.MVM_Tank_Alert_Halfway_Multiple" DisableSound "Announcer.MVM_Tank_Alert_Near_Hatch" DisableSound "Announcer.MVM_Tank_Alert_Deploying" ClassLimit { Heavyweapons 1 Medic 1 Engineer 1 Sniper 1 Spy 1 Scout 2 Soldier 2 Demoman 2 Pyro 2 } PlayerAttributes { Engineer { "max health additive bonus" 150 "engineer teleporter build rate multiplier" 2 "engineer sentry build rate multiplier" 1.5 } } PointTemplates { disablebarrier { NoFixup 1 trigger_multiple { "targetname" "thirdperson" "StartDisabled" "1" "spawnflags" "3" "origin" "268 510 49" "maxs" "50 50 50" "mins" "-50 -50 -50" "filtername" "filter_blue" "OnStartTouch" "!activator,setforcedtauntcam,1,0.1,-1" "OnStartTouch" "!activator,SetHUDVisibility,0,0.1,-1" "OnStartTouch" "!activator,DisableDamageForces,,0,-1" "OnEndTouch" "!activator,setforcedtauntcam,0,0,-1" "OnEndTouch" "!activator,SetHUDVisibility,1,0,-1" "OnEndTouch" "!activator,EnableDamageForces,,0,-1" } } hatchblocker //hatch prop { NoFixup 1 prop_dynamic { "targetname" "hatchcover" "angles" "0 0 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_hydro/water_machinery2.mdl" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "modelscale" "1.0" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "100" "rendercolor" "100 100 255" "renderfx" "15" "rendermode" "0" "SetBodyGroup" "0" "CollisionGroup" "1" "skin" "0" "solid" "0" "spawnflags" "0" "StartDisabled" "0" "origin" "-3822 -194 -452" } } hatchblocker //hatch collision { NoFixup 1 func_forcefield { "disablereceiveshadows" "0" "origin" "-3.63 -1923.02 352.87" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "hatchcovercollision" "parentname" "hatchcover" "mins" "-100 -120 -100" "maxs" "100 120 100" "StartDisabled" "0" } } hatchunblocker { NoFixup 1 logic_relay { "targetname" "unblockhatch" "OnTrigger" "hatchcover,Kill,,0,-1" "OnTrigger" "hatchopen,Show,,0,-1" "OnTrigger" "thirdperson,Enable,,0,-1" } } corelogic //all the things we want to automatically run when the popfile loads. Use this the most to avoid spaghetti { NoFixup 1 logic_auto { "origin" "0 0 0" "targetname" "mainrelay" //delete as much unnecessary/unwanted stuff as you can from your map of choice. //you probably won't risk crashes on simpler mvm maps, but the further away from the edict limit you can be the better "OnMapSpawn" "item_ammopack*,Kill,,0,-1" //might want to comment this out if players have limited ammo "OnMapSpawn" "Barricade*,Kill,,0,-1" //rottenburg specific, deletes front tank barricade //if there is no targetname for wasteful ents, you can also delete them by classname //deleting these decoration ropes frees up nearly 100 edicts on mvm_yiresa "OnMapSpawn" "move_rope,Kill,,0,-1" "OnMapSpawn" "keyframe_rope,Kill,,0,-1" //"OnMapSpawn" "filter_redteam,Kill,,0,-1" //red team filters might cause problems, deleting them might cause more problems //"OnMapSpawn" "trigger_push,Disable,,0,-1" //some maps use trigger_pushes intended to un-stick bots //Gatebot related: //"OnMapSpawn" "bot_stun_*,Kill,,0,-1" //some gates may stun players //"OnMapSpawn" "filter_blue_bombhat,Kill,,0,-1" //gatebot maps will need their capture filter deleted for players to cap //"OnMapSpawn" "gate1_alarm*,Kill,,0,-1" //gets spammed by both red and blu team //AddOutput can be used to connect our own home-brewed point templates to existing map logic like so: "OnMapSpawn" "wave_start_relay*,AddOutput,OnTrigger spawnbarrier*:Disable:0:-1" "OnMapSpawn" "wave_finished_relay,AddOutput,OnTrigger spawnbarrier*:Enable:0:-1" //What we're doing: //"wave_start_relay*,AddOutput, //wave_start_relay_classic/endurance is the targetname for a logic_relay that is triggered on wave start, logic_relays (along with most other ents) accept AddOutput as an input. // * will trigger our relay alongside any others with wave_start_relay in the name, this only works for suffixes (*_start_relay* will not work) //OnTrigger spawnbarrier*:Disable:0:-1" //When wave_start_relay_classic/endurance triggers, it will trigger Disable on 'spawnbarrierA' and 'spawnbarrierA1' with a 0 second delay, -1 means this relay can be triggered an infinite amount of times. //We can also use AddOutput to change an ent rather than just latch onto it: "OnMapSpawn" "hint,AddOutput,display_text test,10,-1" //change annotation text to test 10s after map spawn "OnMapSpawn" "wave_start_relay_classic,AddOutput,OnTrigger hint:Show:0:-1" "OnMapSpawn" "tankpath1_1,AddOutput,OnPass red_tank_relay:Trigger:0:-1" } NoFixup 1 logic_relay //trigger this to kill all players and buildings { "targetname" "kill_relay" "OnTrigger" "obj_dispenser,RemoveHealth,5000,0,-1" "OnTrigger" "obj_sentrygun,RemoveHealth,5000,0,-1" "OnTrigger" "obj_teleporter,RemoveHealth,5000,0,-1" "OnTrigger" "player,SetHealth,-10000,0,-1" } NoFixup 1 logic_relay //trigger this to lose { "origin" "0 0 0" "targetname" "redwin_relay" "OnTrigger" "bots_win_red,RoundWin,,0,-1" "OnTrigger" "pit_explosion_wav,PlaySound,,0,-1" //map dependent } NoFixup 1 logic_relay { "targetname" "red_tank_relay" "OnTrigger" "tankbossred,Setteam,2,0.25,-1" "OnTrigger" "tankbossred,AddCaptureDestroyPostfix,destroy_mvm_cactus_valley3,0,-1" //cool explodey effect, doesn't work :( } NoFixup 1 trigger_multiple { "targetname" "thirdperson" "StartDisabled" "1" "spawnflags" "3" "origin" "1542.488770 739.029175 -143.968689" "maxs" "50 50 50" "mins" "-50 -50 -50" "filtername" "filter_blue" "OnStartTouch" "!activator,setforcedtauntcam,1,0.1,-1" //!activator is any entity currently inside of trigger_multiple "OnStartTouch" "!activator,SetHUDVisibility,0,0.1,-1" "OnStartTouch" "!activator,DisableDamageForces,,0,-1" //doesn't work? "OnEndTouch" "!activator,setforcedtauntcam,0,0,-1" "OnEndTouch" "!activator,SetHUDVisibility,1,0,-1" "OnEndTouch" "!activator,EnableDamageForces,,0,-1" } func_nav_prerequisite //tells bots with a tag to defend this area, like telling gatebots to stay at the gate { "targetname" "towernav" "mins" "-1000 -1000 -1000" "maxs" "1000 1000 1000" "Entity" "towerspawn" "filtername" "filter_tower" "origin" "1542.488770 739.029175 -143.968689" "spawnflags" "1" "start_disabled" "0" "StartDisabled" "0" "Task" "2" "Value" "-1" } filter_tf_bot_has_tag //our tag { "Negated" "0" "require_all_tags" "1" "tags" "bot_tower" "targetname" "filter_tower" } func_nav_prerequisite //repeated for hatch { "targetname" "hatchnav" "mins" "-100 -100 -100" "maxs" "100 100 100" "Entity" "hatchspawn" "filtername" "filter_hatch" "origin" "1542.488770 739.029175 -143.968689" "spawnflags" "1" "start_disabled" "0" "StartDisabled" "0" "Task" "2" "Value" "-1" } filter_tf_bot_has_tag { "Negated" "0" "require_all_tags" "1" "tags" "bot_hatch" "targetname" "filter_hatch" } NoFixup 1 game_round_win //do not interact with this { "origin" "0 0 0" "TeamNum" "2" "targetname" "bots_win_red" "switch_teams" "0" "force_map_reset" "1" "classname" "game_round_win" } } barriers //spawn blocker { NoFixup 1 func_forcefield { "disablereceiveshadows" "0" "origin" "0 0 0" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "targetname" "spawnbarrierA1" "parentname" "spawnbarrierA" "mins" "-300 -100 -300" "maxs" "300 100 1100" "StartDisabled" "0" } NoFixup 1 prop_dynamic //prop for show { "targetname" "spawnbarrierA" "angles" "0 0 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_vehicles/train_flatcar_container.mdl" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "modelscale" "1.5" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "0" "renderfx" "16" //hologram effect, see renderfx section on the developer wiki for more "rendermode" "0" "SetBodyGroup" "0" "skin" "1" //set to 1 for red traincar, many props separate different variants through skins "CollisionGroup" "0" "solid" "0" "spawnflags" "0" "StartDisabled" "0" "origin" "0 0 0" } } station { func_upgradestation { "mins" "-105 -100 0" "maxs" "105 100 242" "solid" "0" } NoFixup 1 prop_dynamic { "targetname" "upgradestation" "angles" "0 0 0" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "model" "models\props_mvm\mvm_upgrade_blu_center.mdl" "modelscale" "1" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "0" "spawnflags" "0" "origin" "0 0 0" } NoFixup 1 prop_dynamic { "targetname" "upgradestation1" "angles" "0 0 0" "DisableBoneFollowers" "0" "disablereceiveshadows" "0" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "model" "models\props_mvm\mvm_upgrade_blu_tools.mdl" "modelscale" "1" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "0" "solid" "0" "spawnflags" "0" "origin" "0 0 0" } func_upgradestation { "mins" "-100 -100 0" "maxs" "90 60 100" "parentname" "upgradestation" } NoFixup 1 prop_dynamic { "targetname" "shopcollision" "angles" "0 -90 0" "DisableBoneFollowers" "1" "disablereceiveshadows" "1" "model" "models/props_vehicles/train_flatcar_container.mdl" "disableshadows" "1" "ExplodeDamage" "0" "ExplodeRadius" "0" "fademaxdist" "0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "maxdxlevel" "0" "MinAnimTime" "5" "mindxlevel" "0" "modelscale" "1" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "0" "renderfx" "0" "rendermode" "10" "SetBodyGroup" "0" "skin" "0" "CollisionGroup" "5" "solid" "6" "spawnflags" "0" "StartDisabled" "0" "origin" "0 0 0" } } annotation { NoFixup 1 training_annotation { "targetname" "hatchopen" "parentname" "hatch_prop" "display_text" "The bomb can now be deployed!" "lifetime" "10" "origin" "3 -1920 408" } } } SpawnTemplate "corelogic" SpawnTemplate "annotation" SpawnTemplate //specify origin/angles here for templates we use multiple times { Name "station" "origin" "-97.61 5287.97 380.93" "angles" "0 -90 0" } SpawnTemplate //specify origin/angles here for templates we use multiple times { Name "station" "origin" "990.12 2080.01 390.86" "angles" "0 0 0" } SpawnTemplate //specify origin/angles here for templates we use multiple times { Name "station" "origin" "-2045.54 2407.59 223.11" "angles" "0 0 0" } SpawnTemplate { Name "barriers" //use these if your map has no spawn door "origin" "-23.71 2998.97 454.68" "angles" "0 0 0" } SpawnTemplate { Name "barriers" //use these if your map has no spawn door "origin" "880.13 2534.34 381.59" "angles" "0 -90 0" } SpawnTemplate { Name "barriers" //use these if your map has no spawn door "origin" "-891.36 2418.32 464.70" "angles" "0 90 0" } SpawnTemplate { Name "progressblocker1" "origin" "72.16 1175.97 361.57" "angles" "0 0 0" } PrecacheModel "models\props_mvm\mvm_upgrade_blu_center.mdl" PrecacheModel "models\props_mvm\mvm_upgrade_blu_tools.mdl" PrecacheModel "models\bots\boss_bot\boss_tankred.mdl" PrecacheSound "combine_bank_alarm.mp3" ExtraTankPath { Name "redblimp" Node "2118 -3549 1331" Node "86 -1293 1331" Node "66 805 1331" Node "595 1978 1331" Node "1400 3909 1263" } ExtraTankPath { Name "redtank" Node "-579 -3354 600" Node "-251 -3233 619" Node "-235 -2563 577" Node "223 -2540 577" Node "270 -2427 577" Node "277 -1921 419" Node "655 -1935 452" Node "710 -1282 577" Node "1053 -700 578" Node "1058 84.27 512.57" Node "546 691 481" Node "56.25 728 481" Node "61 2780 257" } ExtraSpawnPoint { Name "spawnbot_red1" TeamNum 2 X "831.96" Y "-2973.54" Z "587.03" } ExtraSpawnPoint { Name "spawnbot_red2" TeamNum 2 X "-907.65" Y "-2968.13" Z "589.03" } ExtraSpawnPoint { Name "spawnbot_redgiant1" TeamNum 2 X "1239.78" Y "-2324.08" Z "582.20" } ExtraSpawnPoint { Name "spawnbot_redgiant2" TeamNum 2 X "-1152.21" Y "-1946.75" Z "705.03" } ExtraSpawnPoint { Name "spawnbot_redfrontlines1" TeamNum 2 X "-685.40" Y "1557.98" Z "564.03" } ExtraSpawnPoint { Name "spawnbot_redfrontlines2" TeamNum 2 X "609.21" Y "2231.49" Z "564.03" } ExtraSpawnPoint { Name "spawnbot_redfrontlinesback1" TeamNum 2 X "-530.41" Y "1050.30" Z "462.55" } ExtraSpawnPoint { Name "spawnbot_redfrontlinesback2" TeamNum 2 X "559.88" Y "1038.49" Z "428.73" } ExtraSpawnPoint { Name "spawnbot_redmiddle1" TeamNum 2 X "469.94" Y "-438.30" Z "804.03" } ExtraSpawnPoint { Name "spawnbot_redmiddle2" TeamNum 2 X "-478.01" Y "-435.16 " Z "743.96" } ExtraSpawnPoint { Name "spawnbot_hatchguardian" TeamNum 2 X "0.80 " Y "-1926.72" Z "408.19" } ExtraSpawnPoint { Name "spawnbot_bombcarrier" TeamNum 2 X "-97.97" Y "5004.54" Z "470.98" } Wave //WAVE 1 - $700 { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } Explanation //Dispayed once the wave is initialized { Line "{purple}----------------------------------" Line "{red}Welcome to Yoovy's Coaltown Reverse mission!" Line "Here you'll have to give cover fire for a support Convoy that carries the bomb." Line "However although players can't deploy the bomb they can pick it up incase the Convoy is incapable of it's soul purpose." Line "{purple}----------------------------------" Line "{yellow}The Convoy's can {red}NOT {yellow}deploy the bomb as long as that dreaded Hatch Guardian is alive, kill it to continue onward." Line "{purple}----------------------------------" } SpawnTemplate "hatchblocker" SpawnTemplate "hatchunblocker" WaitWhenDone 65 Checkpoint Yes WaveSpawn { Name GUARDIAN TotalCurrency 0 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 Where spawnbot_hatchguardian DoneMessage "{yellow}THE BOMB CAN NOW BE DEPLOYED." DoneWarningSound "ambient\alarms\doomsday_lift_alarm.wav" DoneOutput { Target unblockhatch Action Trigger } TFBot { Template T_Yoovy_HG_Giant_Heavy } } WaveSpawn { Name GROUP_START TotalCurrency 25 TotalCount 8 MaxActive 8 SpawnCount 4 WaitBeforeStarting 0 WaitBetweenSpawns 5 Where spawnbot_redfrontlines1 Where spawnbot_redfrontlines2 RandomSpawn 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ ClassIcon heavy_champ_red CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_START TotalCurrency 25 TotalCount 6 MaxActive 6 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 5 Where spawnbot_redfrontlines1 Where spawnbot_redfrontlines2 RandomSpawn 1 TFBot { Template T_TFBot_Scout_Sandman CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_START TotalCurrency 50 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 Where spawnbot_redfrontlines1 Where spawnbot_redfrontlines2 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Soldier CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 125 TotalCount 20 MaxActive 8 SpawnCount 4 WaitBeforeStarting 15 WaitBetweenSpawns 6 Where spawnbot_redfrontlinesback1 Where spawnbot_redfrontlinesback2 RandomSpawn 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ ClassIcon heavy_champ_red CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 75 TotalCount 15 MaxActive 6 SpawnCount 3 WaitBeforeStarting 15 WaitBetweenSpawns 6 Where spawnbot_redmiddle1 Where spawnbot_redmiddle2 RandomSpawn 1 TFBot { Template T_TFBot_Scout_Sandman CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 50 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 45 WaitBetweenSpawns 0 Where spawnbot_redfrontlinesback1 Where spawnbot_redfrontlinesback2 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Soldier CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 100 TotalCount 18 MaxActive 6 SpawnCount 3 WaitBeforeStarting 4 WaitBetweenSpawns 7 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Class Demoman Skill Easy CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 100 TotalCount 24 MaxActive 8 SpawnCount 4 WaitBeforeStarting 4 WaitBetweenSpawns 7 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Template T_Yoovy_Scout_Melee CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 50 TotalCount 10 MaxActive 4 SpawnCount 2 WaitBeforeStarting 4 WaitBetweenSpawns 7 Where spawnbot_red1 Where spawnbot_red2 Squad { TFBot { Class HeavyWeapons Skill Easy CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } TFBot { Template T_TFBot_Medic_Quickfix CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 100 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 20 Where spawnbot_redgiant1 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Demoman_PrinceTavish CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_ENDLESS WaitForAllDead GROUP_2 TotalCurrency 0 TotalCount 9999 MaxActive 12 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 2 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Template T_TFBot_Demoman_Knight ClassIcon spammer CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_ENDLESS WaitForAllDead GROUP_2 TotalCurrency 0 TotalCount 9999 MaxActive 4 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 4 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Template T_TFBot_HeavyWeapons_Shotgun Name "Shotgun Heavy" ClassIcon spammer CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name CONVOY_SUPPORT TotalCurrency 0 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 30 Where spawnbot_giant Support 1 TFBot { Template T_TFBot_HeavyWeapons_Shotgun AlwaysGlow 1 Name "Convoy" Health 450 Scale 1.25 Item "The Battalion's Backup" Attributes SpawnWithFullCharge AddCond { Index 16 } CharacterAttributes { "increase buff duration" 9.0 "move speed bonus" 1.25 "head scale" 0.85 "health regen" 50 } ClassIcon blu2_lite } } } Wave //WAVE 2 - $900 { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } SpawnTemplate "hatchblocker" SpawnTemplate "hatchunblocker" WaitWhenDone 65 Checkpoint Yes WaveSpawn { Name GUARDIAN TotalCurrency 0 TotalCount 2 MaxActive 2 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 0 Where spawnbot_hatchguardian DoneMessage "{yellow}THE BOMB CAN NOW BE DEPLOYED." DoneWarningSound "ambient\alarms\doomsday_lift_alarm.wav" DoneOutput { Target unblockhatch Action Trigger } Squad { TFBot { Template T_Yoovy_HG_Giant_Soldier_Spammer } TFBot { Template T_Yoovy_HG_Giant_Medic } } } WaveSpawn { Name GROUP_START TotalCurrency 50 TotalCount 9 MaxActive 9 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 5 Where spawnbot_redfrontlines1 Where spawnbot_redfrontlines2 RandomSpawn 1 TFBot { Template T_TFBot_Pyro CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_START TotalCurrency 50 TotalCount 6 MaxActive 6 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 5 Where spawnbot_redfrontlines1 Where spawnbot_redfrontlines2 RandomSpawn 1 TFBot { Class HeavyWeapons Skill Normal CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 100 TotalCount 15 MaxActive 6 SpawnCount 3 WaitBeforeStarting 10 WaitBetweenSpawns 5 Where spawnbot_redmiddle1 Where spawnbot_redmiddle2 RandomSpawn 1 RandomChoice { TFBot { Template T_TFBot_Pyro CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } TFBot { Template T_TFBot_Pyro CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } TFBot { Template T_TFBot_Pyro Item "The Backburner" Name "Backburner Pyro" Skill Easy CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 100 TotalCount 10 MaxActive 4 SpawnCount 2 WaitBeforeStarting 10 WaitBetweenSpawns 5 Where spawnbot_redfrontlinesback1 Where spawnbot_redfrontlinesback2 RandomSpawn 1 TFBot { Class HeavyWeapons Skill Normal CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 100 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 15 WaitBetweenSpawns 20 Where spawnbot_redmiddle1 Where spawnbot_redmiddle2 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Demoman ClassIcon demo_spammer CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 150 TotalCount 32 MaxActive 8 SpawnCount 4 WaitBeforeStarting 4 WaitBetweenSpawns 7 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Class Scout Skill Normal CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 100 TotalCount 21 MaxActive 6 SpawnCount 3 WaitBeforeStarting 4 WaitBetweenSpawns 7 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Template T_TFBot_Sniper_Huntsman CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 50 TotalCount 6 MaxActive 2 SpawnCount 1 WaitBeforeStarting 4 WaitBetweenSpawns 7 Where spawnbot_redgiant1 RandomSpawn 1 TFBot { Template T_TFBot_Heavyweapons_Fist CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_2 WaitForAllDead GROUP_1 TotalCurrency 100 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 10 WaitBetweenSpawns 20 Where spawnbot_redgiant1 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Pyro CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_ENDLESS WaitForAllDead GROUP_2 TotalCurrency 0 TotalCount 9999 MaxActive 8 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 2 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Template T_TFBot_Pyro_Flaregun Name "Detonator Pyro" Item "The Detonator" Item "Old Guadalajara" ClassIcon spammer CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_ENDLESS WaitForAllDead GROUP_2 TotalCurrency 0 TotalCount 9999 MaxActive 4 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 4 Where spawnbot_red1 Where spawnbot_red2 RandomSpawn 1 TFBot { Class Scout Skill Easy ClassIcon spammer CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name CONVOY_SUPPORT TotalCurrency 0 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 30 Where spawnbot_giant Support 1 TFBot { Template T_TFBot_HeavyWeapons_Shotgun AlwaysGlow 1 Name "Convoy" Health 450 Scale 1.25 Item "The Battalion's Backup" Attributes SpawnWithFullCharge AddCond { Index 16 } CharacterAttributes { "increase buff duration" 9.0 "move speed bonus" 1.25 "head scale" 0.85 "health regen" 50 } ClassIcon blu2_lite } } } Wave //WAVE 3 - $800 { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action trigger } SpawnTemplate "hatchblocker" SpawnTemplate "hatchunblocker" WaitWhenDone 65 Checkpoint Yes WaveSpawn { Name GUARDIAN TotalCurrency 0 TotalCount 2 MaxActive 2 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 0 Where spawnbot_hatchguardian DoneMessage "{yellow}THE BOMB CAN NOW BE DEPLOYED." DoneWarningSound "ambient\alarms\doomsday_lift_alarm.wav" DoneOutput { Target unblockhatch Action Trigger } Squad { TFBot { Template T_Yoovy_HG_Giant_Demoman } TFBot { Template T_Yoovy_HG_Giant_Medic } } } WaveSpawn { Name GROUP_START TotalCurrency 50 TotalCount 12 MaxActive 12 SpawnCount 6 WaitBeforeStarting 0 WaitBetweenSpawns 6 Where spawnbot_redfrontlines1 Where spawnbot_redfrontlines2 RandomSpawn 1 TFBot { Template T_TFBot_Demoman_Knight CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_START TotalCurrency 50 TotalCount 6 MaxActive 6 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 6 Where spawnbot_redfrontlinesback1 Where spawnbot_redfrontlinesback2 RandomSpawn 1 TFBot { Class Soldier Skill Expert CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_START TotalCurrency 50 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 6 WaitBetweenSpawns 0 Where spawnbot_redfrontlinesback1 Where spawnbot_redfrontlinesback2 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Heavyweapons CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 100 TotalCount 30 MaxActive 10 SpawnCount 5 WaitBeforeStarting 15 WaitBetweenSpawns 7 Where spawnbot_redmiddle1 Where spawnbot_redmiddle2 RandomSpawn 1 TFBot { Template T_TFBot_Demoman_Knight CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 100 TotalCount 18 MaxActive 6 SpawnCount 3 WaitBeforeStarting 15 WaitBetweenSpawns 7 Where spawnbot_redfrontlinesback1 Where spawnbot_redfrontlinesback2 RandomSpawn 1 TFBot { Class Soldier Skill Expert CharacterAttributes { "force distribute currency on death" 1 } Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name GROUP_1 WaitForAllSpawned GROUP_START TotalCurrency 100 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 30 WaitBetweenSpawns 0 Where spawnbot_redmiddle1 Where spawnbot_redmiddle2 RandomSpawn 1 TFBot { Template T_TFBot_Giant_Heavyweapons CharacterAttributes { "force distribute currency on death" 1 } Attributes DisableDodge Attributes IgnoreFlag Action Mobber AddCond { Index 43 } AddCond { Index 5 Duration 2 } } } WaveSpawn { Name CONVOY_SUPPORT TotalCurrency 0 TotalCount 2 MaxActive 2 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 30 Where spawnbot_giant Support 1 TFBot { Template T_TFBot_HeavyWeapons_Shotgun AlwaysGlow 1 Name "Convoy" Health 450 Scale 1.25 Item "The Battalion's Backup" Attributes SpawnWithFullCharge AddCond { Index 16 } CharacterAttributes { "increase buff duration" 9.0 "move speed bonus" 1.25 "head scale" 0.85 "health regen" 50 } ClassIcon blu2_lite } } } Wave { InitWaveOutput { Target boss_deploy_relay Action Trigger } } }