#base robot_giant.pop #base robot_standard.pop #base robot_standard_red.pop #base robot_giant_red.pop WaveSchedule { StartingCurrency 20000 CanBotsAttackWhileInSpawnRoom Yes RespawnWaveTimeBlue 1 FixedRespawnWaveTimeBlue 1 ReverseWinConditions 1 AllowJoinTeamBlue 1 HumansMustJoinTeam Blue SetCreditTeam 3 SniperAllowHeadshots 1 RobotLimit 26 //pair with MaxTotalPlayers to disallow spectators AllowJoinTeamBlueMax 6 MaxTotalPlayers 6 // currently doesn't work in reverse? ImprovedAirblast 1 BluHumanInfiniteAmmo 1 FlagCarrierMovementPenalty 1 // (default: 0.5) BluHumanFlagCapture 0 BluHumanFlagPickup 0 BluPlayersAreRobots 1 BotTeleportUberDuration 1 BluHumanTeleportOnSpawn 1 BluHumanBotTeleporter 1 PrecacheModel "models\props_mvm\mvm_upgrade_blu" PrecacheModel "models\bots\boss_bot\boss_tankred.mdl" PointTemplates { corelogic { NoFixup 1 logic_auto { "origin" "0 0 0" "targetname" "mainrelay" "OnMapSpawn" "item_ammopack*,Kill,,0,-1" "OnMapSpawn" "filter_redteam,Kill,,0,-1" "OnMapSpawn" "trigger_push,Disable,,0,-1" "OnMapSpawn" "wave_start_relay*,AddOutput,OnTrigger spawnbarrier*:Disable:0:-1" "OnMapSpawn" "wave_finished_relay,AddOutput,OnTrigger spawnbarrier*:Enable:0:-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" } 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 } trigger_multiple //Forces thirdperson while deploying bomb { "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 the 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" "-2.800533 -1918.912354 408.192719" "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" } game_round_win //use redwin_relay instead { "origin" "0 0 0" "TeamNum" "2" "targetname" "bots_win_red" "switch_teams" "0" "force_map_reset" "1" "classname" "game_round_win" } } barrierspawn //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" "mins" "-300 -200 -300" "maxs" "300 200 2000" "StartDisabled" "0" } } station { NoFixup 1 func_upgradestation { "mins" "-105 -100 0" "maxs" "105 100 242" "solid" "0" } 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.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" } 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_last { NoFixup 1 training_annotation { "targetname" "hint_last_vip" "display_text" "The last VIP has arrived!" "lifetime" "10" "origin" "560.047 -942.517 89" } } } SpawnTemplate "corelogic" SpawnTemplate //specify origin/angles here for templates we use multiple times { Name "station" "origin" "-1032.555420 2264.004150 406.1337" "angles" "-2 98 0" } SpawnTemplate { Name "station" "origin" "359.075470 5202.474609 379.031311" "angles" "0 -180 0" } SpawnTemplate { Name "station" "origin" "1048.031250 2294.859375 379.031433" "angles" "0 6 0" } SpawnTemplate { Name "barrierspawn" "origin" "40.806221 270.652008 513.031311" "angles" "0 0 0" } ExtraSpawnPoint { Name "buildingspawn" TeamNum 2 X "510.100311" Y "2008.822510" Z "607.878052" } ExtraSpawnPoint { Name "spawn1" TeamNum 2 X "85.249657" Y "1364.143677" Z "460.156372" } ExtraSpawnPoint { Name "spawn2" TeamNum 2 X "1446.468262" Y "457.509796" Z "641.031311" } ExtraSpawnPoint { Name "spawn3" TeamNum 2 X "-1373.483887" Y "-72.225800" Z "641.03131" } ExtraSpawnPoint { Name "spawn4" TeamNum 2 X "-9.612569" Y "145.847855" Z "737.03131" } ExtraSpawnPoint { Name "spawn5" TeamNum 2 X "1113.077271" Y "-1643.732422" Z "577.031311" } ExtraSpawnPoint { Name "spawn5" TeamNum 2 X "-948.947021" Y "-1638.975708" Z "587.442871" } ExtraSpawnPoint { Name "hatchspawn" TeamNum 2 X "-10.262997" Y "-1916.052124" Z "408.192719" } ExtraSpawnPoint { Name "RedSpawn_giant" //giants can't fit out of bot spawn TeamNum 2 X "68.419746" Y "907.231018" Z "481.031311" } ExtraSpawnPoint { Name "RedSpawn_giant2" //giants can't fit out of bot spawn TeamNum 2 X "-1432.290161" Y "-755.547668" Z "641.031311" } ExtraSpawnPoint { Name "RedSpawn_giant3" //giants can't fit out of bot spawn TeamNum 2 X "1097.862183" Y "-351.386475" Z "568.576111" } Wave { StartWaveOutput { Target wave_start_relay_classic Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } Explanation { Line "{blue}In this mission, you will have some ally bots to help, they are indicated in support. They can pick the bomb. {red}If all of them die, you lose!" Line "{blue} INFO:" Line "{blue}-You have infinite ammo and metal" Line "{blue}-VIPs cannot be targeted by medi guns" Line "{blue}-Bomb bots will periodically spawn to bring back the bomb after a reset, you can kill them if you want to pick up the bomb" Line "--------------------------------------------" Line "{green}Your VIPs this wave:" Line "{blue}-1 Giant Demoknight" Line "{blue}-1 Super Heavyweight Champ" Line "--------------------------------------------" } //-------------------------- //RED WAVESPAWNS //-------------------------- WaveSpawn { Name "rWave1a" Where RedSpawn_giant RandomSpawn 1 TotalCount 3 MaxActive 1 SpawnCount 1 TFBot { Template T_TFBot_Red_Giant_Soldier Attributes DisableDodge } } WaveSpawn { Name "rWave1a" Where spawn1 RandomSpawn 1 TotalCount 20 MaxActive 8 SpawnCount 2 RandomChoice { TFBot { Template T_TFBot_Red_Soldier ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Scout ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Demoman ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Pyro ClassIcon red2_lite } } } WaveSpawn { Name "rWave1b" Where spawn4 RandomSpawn 1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "rWave1a" TFBot { Template T_TFBot_Red_Giant_Demo_Burst Attributes AlwaysCrit Attributes DisableDodge } } WaveSpawn { Name "rWave1b" Where spawn2 RandomSpawn 1 TotalCount 20 MaxActive 8 SpawnCount 2 WaitForAllDead "rWave1a" RandomChoice { TFBot { Template T_TFBot_Red_Soldier ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Scout ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Demoman ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Pyro ClassIcon red2_lite } } } WaveSpawn { Name "rWave1b" Where spawn3 RandomSpawn 1 TotalCount 3 MaxActive 1 SpawnCount 1 WaitBetweenSpawnsAfterDeath 5 WaitForAllSpawned "rWave1a" RandomChoice { TFBot { Template T_TFBot_Red_Soldier ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Scout ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Demoman ClassIcon red2_lite } TFBot { Template T_TFBot_Red_Pyro ClassIcon red2_lite } } } WaveSpawn { //hatch defender Name "rWave1c" Where hatchspawn RandomSpawn 1 TotalCount 1 MaxActive 1 SpawnCount 1 WaitForAllDead "rWave1a" TFBot { Template T_TFBot_Red_Giant_Soldier_Spammer Attributes DisableDodge Tag bot_hatch //our tag } } WaveSpawn { Name "rWave1c" Where spawn5 // Where "" //map dependent, sometimes defaults to the first info_player_teamspawn it can find (most cases red spawn) RandomSpawn 1 TotalCount 959 //nice clean 999 on the wavebar MaxActive 8 SpawnCount 2 WaitForAllSpawned "rWave1b" TFBot { Template T_TFBot_Red_Sniper_Huntsman_Smg ClassIcon red2_lite } } //-------------------------- //BLU WAVESPAWNS //-------------------------- WaveSpawn { Name "wave1vip1" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_TFBot_Giant_DemoMan_PrinceTavish tag noflank AlwaysGlow 1 Attributes UseBossHealthBar CharacterAttributes { "health from healers reduced" 0.20 "ubercharge rate bonus for healer" 0.25 "collect currency on kill" 1 "healing received bonus" 0.2 "health regen" 50 } ItemAttributes { ItemName "The Eyelander" "mod weapon blocks healing" 1 } } } WaveSpawn { Name "wave1vip2" WaitForAllDead "wave1vip1" Where spawnbot TotalCount 1 MaxActive 1 SpawnCount 1 Support Limited WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 FirstSpawnOutput { Target hint_last_vip Action Show } DoneOutput { Target redwin_relay Action Trigger } TFBot { Template T_TFBot_Giant_Boxing_Heavy tag noflank AlwaysGlow 1 Attributes UseBossHealthBar CharacterAttributes { "health from healers reduced" 0.20 "ubercharge rate bonus for healer" 0.25 "collect currency on kill" 1 "healing received bonus" 0.2 "health regen" 50 } ItemAttributes { ItemName "the killing gloves of boxing" "mod weapon blocks healing" 1 } } } WaveSpawn { Name "bWave1a1" Where spawnbot TotalCount 999 MaxActive 2 SpawnCount 1 RandomSpawn 1 Support Limited //Support Limited and TotalCount 999 for RandomChoice/Squadded support WaitBetweenSpawns 3 RandomChoice { TFBot { Class Scout Skill Normal Action Mobber } TFBot { Template T_TFBot_Scout_FAN Action Mobber } } } } }