// Reverse MvM mission by Space Jockey // Akure #base robot_standard.pop #base robot_giant.pop #base robot_standard_red.pop #base robot_giant_red.pop WaveSchedule { StartingCurrency 1200 CanBotsAttackWhileInSpawnRoom yes RespawnWaveTime 30 RespawnWaveTimeBlue 30 //replaces the normal respawn kv's PlayerMiniBossMinRespawnTime 999 FixedRespawnWaveTimeBlue 1 AddSentryBusterWhenDamageDealtExceeds 3000 AddSentryBusterWhenKillCountExceeds 15 // Essential stuff ReverseWinConditions 1 AllowJoinTeamBlueMax 6 AllowJoinTeamBlue 1 HumansMustJoinTeam Blue SetCreditTeam 3 SniperAllowHeadshots 1 //sniper and amby un-exist without this // MaxTotalPlayers 6 // currently doesn't work in reverse // Optional stuff ImprovedAirblast 1 // ape SendBotsToSpectatorImmediately 1 //keeps the populator less clogged, bot projectiles vanish on death + causes weird killcams RobotLimit 27 //going higher will eat player slots BluHumanInfiniteAmmo 1 FlagCarrierMovementPenalty 1 // (default: 0.5) BluHumanFlagCapture 0 BluHumanFlagPickup 0 BluPlayersAreRobots 1 SniperHideLasers 1 // Engi-bot style teleporter. Not recommended for gatebot, highly recommended for non-gatebot // Entrances will also act like bot tele exits BotTeleportUberDuration 1 BluHumanTeleportOnSpawn 1 BluHumanBotTeleporter 1 // BotsRandomCrit 1 // BotPushaway 0 //helpful for tele's but clumps squads into a ball // SentryBusterFriendlyFire 0 // CustomUpgradesFile "mvm_upgrades_example.txt" // Precache all custom models and sounds 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" DisableSound "music.mvm_end_last_wave" DisableSound "music.mvm_end_mid_wave" DisableSound "music.mvm_end_tank_wave" DisableSound "music.mvm_end_wave" DisableSound "music.mvm_lost_wave" DisableSound "music.mvm_start_last_wave" DisableSound "music.mvm_start_mid_wave" DisableSound "music.mvm_start_tank_wave" DisableSound "music.mvm_start_wave" // DisableSound "Announcer.MVM_Get_To_Upgrade" 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" OverrideSounds { "MVM.BombWarning" "combine_bank_alarm.mp3" // "MVM.GiantHeavyStep" "#mvm\giant_heavy\giant_heavy_step02.wav" // "MVM.GiantScoutStep" "#mvm\giant_scout\giant_scout_step_01.wav" // "MVM.GiantSoldierStep" "#mvm\giant_soldier\giant_soldier_step03.wav" // "MVM.GiantDemomanStep" "#mvm\giant_demoman\giant_demoman_step_03.wav" // "MVM.GiantPyroStep" "#mvm\giant_pyro\giant_pyro_step_04.wav" // "mvm\giant_common\giant_common_step_01.wav" "mvm\giant_heavy\giant_heavy_step02.wav" // "mvm\giant_common\giant_common_step_02.wav" "mvm\giant_scout\giant_scout_step_01.wav" // "mvm\giant_common\giant_common_step_03.wav" "mvm\giant_soldier\giant_soldier_step03.wav" // "mvm\giant_common\giant_common_step_04.wav" "mvm\giant_demoman\giant_demoman_step_03.wav" // "mvm\giant_common\giant_common_step_05.wav" "mvm\giant_pyro\giant_pyro_step_04.wav" "MVM.GiantHeavyLoop" "empty.wav" "MVM.GiantScoutLoop" "empty.wav" "MVM.GiantSoldierLoop" "empty.wav" "MVM.GiantDemomanLoop" "empty.wav" "MVM.GiantPyroLoop" "empty.wav" "Regenerate.Touch" "misc/null.wav" } PointTemplates { corelogic //all the things we want to automatically run when the popfile reloads. 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/smaller mvm maps, but the further away from the edict limit you can be the better //out-of-bounds decorations, ropes, unreachable easter egg room ents, etc. "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 "OnMapSpawn" "bot_stun_*,Kill,,0,-1" //some gates may stun players "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_rc5 "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 "OnMapSpawn" "spawnbot_right,Disable,,0,-1" //disable bad spawns "OnMapSpawn" "wave_start_relay,AddOutput,OnTrigger forcefield*:Disable:0:-1" "OnMapSpawn" "wave_finished_relay,AddOutput,OnTrigger forcefield*:Enable:0:-1" "OnMapSpawn" "obj_sentrygun,Disable,,0,-1" "OnMapSpawn" "obj_sentrygun,Sethealth,648,0.01,-1" "OnMapSpawn" "wave_start_relay,AddOutput,OnTrigger obj_sentrygun:Show:0:-1" //resupply "OnMapSpawn" "wave_start_relay,AddOutput,OnTrigger func_regenerate:Disable:0:-1" "OnMapSpawn" "wave_finished_relay,AddOutput,OnTrigger func_regenerate:Enable:0:-1" "OnMapSpawn" "wave_finished_relay,AddOutput,OnTrigger teleportblubacktospawn:Enable:0:0:-1" "OnMapSpawn" "wave_finished_relay,AddOutput,OnTrigger teleportblubacktospawn:Disable:0:0.1:-1" //What we're doing: //"wave_start_relay*,AddOutput, //most entities accept the input 'AddOutput', letting us daisy-chain them together. // * will trigger our relay alongside any others with wave_start_relay in the name (i.e. wave_start_relay_classic or wave_start_relay_endurance), 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 logic 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 trigger_teleport { "origin" "0 0 0" "mins" "-10000 -10000 -10000" "maxs" "10000 10000 10000" "spawnflags" "1" "StartDisabled" "1" "filtername" "filter_bluteam" "target" "spawnbot*" "targetname" "teleportblubacktospawn" } 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 "OnTrigger" "failuresound,PlaySound,,0,-1" //map dependent } 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" } 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 ambient_generic { "targetname" "failuresound" "health" "10" "message" "vo\announcer_failure.mp3" "pitch" "100" "pitchstart" "100" "radius" "20000" "spawnflags" "49" "origin" "0 0 0" } func_regenerate { "targetname" "regenerate" "associatedmodel" "locker_model" "TeamNum" "3" "mins" "-10000 -10000 -10000" "maxs" "10000 10000 10000" "origin" "0 0 0" } prop_dynamic { "targetname" "locker_model" "model" "models/empty.mdl" "solid" "6" "angles" "0 0 0" "disableshadows" "1" } } annotations { NoFixup 1 training_annotation { "targetname" "hint" "display_text" "This is an annotation! Use these to convey important information to players" "lifetime" "10" "origin" "2926.356201 -3175.968750 -61.9686" } } forcefields { NoFixup 1 func_forcefield { "disablereceiveshadows" "0" "targetname" "forcefield1" "origin" "-1872 -384 213" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "mins" "-16 -288 -520" "maxs" "16 288 520" "StartDisabled" "0" } prop_dynamic { "targetname" "forcefield1sign" "origin" "-1872 -384 213" "angles" "0 90 0" "modelscale" "1.25" "fademindist" "128" "fademaxdist" "1024" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } func_forcefield { "disablereceiveshadows" "0" "targetname" "forcefield2" "origin" "-1648 144 213" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "mins" "-240 -240 -520" "maxs" "240 240 520" "StartDisabled" "0" } prop_dynamic { "targetname" "forcefield2sign" "origin" "-1648 144 213" "angles" "0 90 0" "modelscale" "1.25" "fademindist" "128" "fademaxdist" "1024" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } func_forcefield { "disablereceiveshadows" "0" "targetname" "forcefield3" "origin" "-1152 368 213" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "mins" "-256 -16 -520" "maxs" "256 16 520" "StartDisabled" "0" } prop_dynamic { "targetname" "forcefield3sign" "origin" "-1152 368 213" "angles" "0 90 0" "modelscale" "1.25" "fademindist" "128" "fademaxdist" "1024" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } func_forcefield { "disablereceiveshadows" "0" "targetname" "forcefield4" "origin" "-256 392 176" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "mins" "-256 -16 -520" "maxs" "256 16 520" "StartDisabled" "0" } prop_dynamic { "targetname" "forcefield4sign" "origin" "-256 392 176" "angles" "0 90 0" "modelscale" "1.25" "fademindist" "128" "fademaxdist" "1024" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } func_forcefield { "disablereceiveshadows" "0" "targetname" "forcefield5" "origin" "-256 392 176" "renderamt" "255" "rendercolor" "255 255 255" "renderfx" "0" "rendermode" "10" "TeamNum" "2" "mins" "-256 -16 -520" "maxs" "256 16 520" "StartDisabled" "0" } prop_dynamic { "targetname" "forcefield5sign" "origin" "-256 392 176" "angles" "0 90 0" "modelscale" "1.25" "fademindist" "128" "fademaxdist" "1024" "disablereceiveshadows" "1" "model" "models/props_mvm/no_entry.mdl" "disableshadows" "1" "solid" "0" "StartDisabled" "0" } } station { NoFixup 1 prop_dynamic //upgrade station { "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" "-105 -100 0" "maxs" "105 100 242" "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" } } turretbody { NoFixup 1 prop_dynamic { "id" "3" "classname" "prop_dynamic" "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_badlands/barrel02.mdl" "modelscale" "1.75" "PerformanceMode" "0" "pressuredelay" "0" "RandomAnimation" "0" "renderamt" "255" "renderfx" "0" "rendermode" "0" "SetBodyGroup" "0" "skin" "1" "solid" "0" "spawnflags" "0" "origin" "0 0 0" } } wallsentry { NoFixup 1 OnSpawnOutput { Target "wallsentry" Action "sethealth" Param 500 } obj_sentrygun { "targetname" "wallsentry" "origin" "0 0 0" "teamnum" "2" "spawnflags" "8" "SolidToPlayer" "1" "defaultupgrade" "2" "modelscale" 1.5 } } hatchsentry { NoFixup 1 OnSpawnOutput { Target "hatchsentry" Action "sethealth" Param 250 } obj_sentrygun { "targetname" "hatchsentry" "origin" "0 0 0" "teamnum" "2" "spawnflags" "8" "SolidToPlayer" "0" "defaultupgrade" "2" } } GiantSniperModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/sniper_boss/bot_sniper_boss.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } GiantScoutModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/scout_boss/bot_scout_boss.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } GiantSoldierModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/soldier_boss/bot_soldier_boss.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } GiantPyroModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/pyro_boss/bot_pyro_boss.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } GiantDemoModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/demo_boss/bot_demo_boss.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } GiantHeavyModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/heavy_boss/bot_heavy_boss.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } RoboEngieModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/engineer/bot_engineer.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } RoboMedicModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/medic/bot_medic.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } RoboSpyModel { OnSpawnOutput { Target "!activator" Action "$SetModelOverride" Param "models/bots/spy/bot_spy.mdl" Delay 0.05 } OnParentKilledOutput { Target "!activator" Action "SetCustomModel" Param "" Delay 0 } } spawnpoints { NoFixUp 1 prop_dynamic { "targetname" "spawnpoint_red1a" "angles" "0 0 0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_mvm/robot_spawnpoint.mdl" "modelscale" "1.0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "3" "solid" "0" "origin" "-200 -1272 -416" } prop_dynamic { "targetname" "spawnpoint_red1b" "angles" "0 0 0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_mvm/robot_spawnpoint.mdl" "modelscale" "1.0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "3" "solid" "0" "origin" "68 -1731 -352" } prop_dynamic { "targetname" "spawnpoint_red2a" "angles" "0 0 0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_mvm/robot_spawnpoint.mdl" "modelscale" "1.0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "3" "solid" "0" "origin" "2647 -1405 -191" } prop_dynamic { "targetname" "spawnpoint_red2b" "angles" "0 0 0" "fademindist" "-1" "fadescale" "1" "MaxAnimTime" "10" "MinAnimTime" "5" "model" "models/props_mvm/robot_spawnpoint.mdl" "modelscale" "1.0" "renderamt" "255" "rendercolor" "255 255 255" "skin" "3" "solid" "0" "origin" "2787 424 -32" } // off logic logic_relay { "targetname" "red1a_off_logic" "OnTrigger" "spawnpoint_red1a,skin,3,0,-1" } logic_relay { "targetname" "red1b_off_logic" "OnTrigger" "spawnpoint_red1b,skin,3,0,-1" } logic_relay { "targetname" "red2a_off_logic" "OnTrigger" "spawnpoint_red2a,skin,3,0,-1" } logic_relay { "targetname" "red2b_off_logic" "OnTrigger" "spawnpoint_red2b,skin,3,0,-1" } // on logic logic_relay { "targetname" "red1a_on_logic" "OnTrigger" "spawnpoint_red1a,skin,0,0,-1" } logic_relay { "targetname" "red1b_on_logic" "OnTrigger" "spawnpoint_red1b,skin,0,0,-1" } logic_relay { "targetname" "red2a_on_logic" "OnTrigger" "spawnpoint_red2a,skin,0,0,-1" } logic_relay { "targetname" "red2b_on_logic" "OnTrigger" "spawnpoint_red2b,skin,0,0,-1" } } } SpawnTemplate "corelogic" SpawnTemplate "forcefields" SpawnTemplate "spawnpoints" SpawnTemplate { Name "station" Origin "-2680 462 -286" Angles "0 90 0" } SpawnTemplate { Name "station" Origin "-353 707 -289" Angles "0 270 0" } SpawnTemplate { Name "station" Origin "-2471.95 -670 -285" Angles "0 90 0" } SpawnTemplate { Name "wallsentry" Origin "-1258 2148 130.754" Angles "0 90 90" } SpawnTemplate { Name "turretbody" Origin "-1366 2148 130.754" Angles "0 90 90" } SpawnTemplate { Name "hatchsentry" Origin "-359 2129 -254.75" Angles "0 0 0" } SpawnTemplate { Name "hatchsentry" Origin "-1250 1920 -222.75" Angles "0 0 0" } SpawnTemplate { Name "hatchsentry" Origin "-1250 2350 -222.75" Angles "0 0 0" } ExtraSpawnPoint //bots will randomly select between identically named spawns, use RandomSpawn 1 to split spawns evenly { Name "redspawn" TeamNum 2 X "-2016" Y "2240" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-2016" Y "2144" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-1920" Y "2144" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-1920" Y "2144" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-2016" Y "2304" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-1920" Y "2304" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-2016" Y "2080" Z "-160" } ExtraSpawnPoint { Name "redspawn" TeamNum 2 X "-1920" Y "2080" Z "-160" } ExtraSpawnPoint { Name "spawnbot_big" TeamNum 2 X "-1699.99" Y "2773.97" Z "-180" } ExtraSpawnPoint { Name "spawnbot_big" TeamNum 2 X "-1699.99" Y "1679" Z "-180" } ExtraSpawnPoint { Name "spawnbot_front" TeamNum 2 X "-192" Y "-1080" Z "-384" } ExtraSpawnPoint { Name "spawnbot_front" TeamNum 2 X "-192" Y "-1080" Z "-384" } ExtraSpawnPoint { Name "spawnbot_front" TeamNum 2 X "-71" Y "-1731" Z "-331" } ExtraSpawnPoint { Name "spawnbot_mid" TeamNum 2 X "2649" Y "-1406" Z "-171" } ExtraSpawnPoint { Name "spawnbot_mid" TeamNum 2 X "2781" Y "419" Z "-17" } // Just in case PlayerSpawnTemplate { Name "GiantSniperModel" Class Sniper } PlayerSpawnTemplate { Name "GiantScoutModel" Class Scout } PlayerSpawnTemplate { Name "GiantSoldierModel" Class Soldier } PlayerSpawnTemplate { Name "GiantPyroModel" Class Pyro } PlayerSpawnTemplate { Name "GiantDemoModel" Class Demoman } PlayerSpawnTemplate { Name "GiantHeavyModel" Class Heavyweapons } PlayerSpawnTemplate { Name "RoboEngieModel" Class Engineer } PlayerSpawnTemplate { Name "RoboMedicModel" Class Medic } PlayerSpawnTemplate { Name "RoboSpyModel" Class Spy } RandomPlacement { Count 12 MinimumSeparation 1024 NavAreaFilter SNIPER_SPOT SentryGun { Level 1 } } PlayerAttributes { Demoman { "is miniboss" 1 "cannot upgrade" 1 "crit mod disabled" 0 "charge time increased" 3 "Attack not cancel charge" 1 "voice pitch scale" 0.7 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.25 "max health additive bonus" 3325 "health from packs increased" 0.5 "move speed bonus" 0.675 "override footstep sound set" 4 "collect currency on kill" 1 } Engineer { "max health additive bonus" 125 // "upgrade rate decrease" 2 "mult teleporter recharge rate" 0.01 "engineer teleporter build rate multiplier" 3 "engineer sentry build rate multiplier" 3 "building cost reduction" 0.5 "maxammo metal increased" 2 "cannot pick up intelligence" 1 "dmg taken from crit reduced" 0.1 "collect currency on kill" 1 } Medic { "medic machinery beam" 2.5 "heal rate bonus" 5 "dmg taken from crit reduced" 0.1 "overheal fill rate reduced" 0 "collect currency on kill" 1 } Heavyweapons { "is miniboss" 1 "cannot upgrade" 1 "crit mod disabled" 0 "voice pitch scale" 0.7 "damage force reduction" 0 "airblast vulnerability multiplier" 0.2 "max health additive bonus" 4700 "move speed bonus" 0.675 "override footstep sound set" 2 "collect currency on kill" 1 } Pyro { "is miniboss" 1 "cannot upgrade" 1 "crit mod disabled" 0 "flame_speed" 520 "voice pitch scale" 0.7 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.25 "max health additive bonus" 3325 "health from packs increased" 0.5 "move speed bonus" 0.675 "override footstep sound set" 6 "collect currency on kill" 1 } Scout { "is miniboss" 1 "cannot upgrade" 1 "crit mod disabled" 0 "voice pitch scale" 0.7 "damage force reduction" 0.7 "airblast vulnerability multiplier" 0.5 "max health additive bonus" 1375 "override footstep sound set" 5 "collect currency on kill" 1 } Soldier { "is miniboss" 1 "cannot upgrade" 1 "crit mod disabled" 0 "voice pitch scale" 0.7 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.25 "max health additive bonus" 3800 "health from packs increased" 0.5 "move speed bonus" 0.675 "boots falling stomp" 1 "override footstep sound set" 3 "collect currency on kill" 1 } Sniper { "is miniboss" 1 "cannot upgrade" 1 "crit mod disabled" 0 "voice pitch scale" 0.7 "damage force reduction" 0.5 "airblast vulnerability multiplier" 0.5 "max health additive bonus" 2875 "health from packs decreased" 0.5 "move speed bonus" 0.675 "override footstep sound set" 3 "collect currency on kill" 1 } Spy { "cannot pick up intelligence" 1 "dmg taken from crit reduced" 0.1 "collect currency on kill" 1 } } ItemWhitelist //Only allows to use specified weapons below { //scout ClassName "tf_weapon_handgun_scout_primary" ClassName "tf_weapon_bat" ClassName "tf_weapon_bat_wood" Name "The Force-a-nature" Name "Crit-a-Cola" Name "Bonk! Atomic Punch" //soldier ClassName "tf_weapon_rocketlauncher" ClassName "tf_weapon_particle_cannon" ItemName "Festive Black Box" ClassName "tf_weapon_buff_item" Name "The Disciplinary Action" //pyro ClassName "tf_weapon_flamethrower" ClassName "tf_weapon_rocketlauncher_fireball" ClassName "tf_weapon_flaregun" ClassName "tf_weapon_flaregun_revenge" Name "The Powerjack" //demo ClassName "tf_weapon_cannon" ClassName "tf_weapon_grenadelauncher" ClassName "tf_weapon_sword" Name "Ali baba's wee booties" Name "The Bootlegger" ClassName "tf_wearable_demoshield" //heavy Name "Fists of Steel" Name "The Huo Long Heatmaker" ClassName "TF_WEAPON_MINIGUN" Name "the killing gloves of boxing" ClassName "tf_weapon_shotgun_hwg" Name "Gloves of Running Urgently" //engie ClassName "tf_weapon_shotgun" ClassName "tf_weapon_shotgun_primary" ClassName "tf_weapon_shotgun_building_rescue" ClassName "tf_weapon_drg_pomson" ClassName "tf_weapon_wrench" ClassName "tf_weapon_builder" ClassName "tf_weapon_robot_arm" ClassName "tf_weapon_pda_engineer_build" ClassName "tf_weapon_pda_engineer_destroy" ClassName "tf_weapon_laser_pointer" //medic ClassName "tf_weapon_medigun" ClassName "tf_weapon_syringegun_medic" ClassName "tf_weapon_bonesaw" //sniper ClassName "tf_weapon_compound_bow" ClassName "tf_weapon_smg" ClassName "tf_weapon_charged_smg" Name "The Sydney Sleeper" Name "The Cozy Camper" Name "The Razorback" //spy ClassName "tf_weapon_revolver" ClassName "tf_weapon_builder_spy" ClassName "tf_weapon_pda_spy" ClassName "tf_weapon_knife" ClassName "tf_weapon_invis" } ItemAttributes // too powerful with infinite ammo { Itemname "The Short Circuit" "fire rate penalty" 3 } ItemAttributes // make redtape a stock sapper { ItemName "The Red-Tape Recorder" "sapper degenerates buildings" 0 "sapper damage penalty" 1 } ItemAttributes // make deadringer not infinite { ItemName "The Dead Ringer" "cloak_consume_on_feign_death_activate" 3 } //GIANT WEAPONS ItemAttributes { ItemName "The Huntsman" "arrow mastery" 2 "headshot damage increase" 1.25 "fire rate bonus" 0.6 "aiming movespeed decreased" 2 } ItemAttributes { ItemName "The Fortified Compound" "arrow mastery" 2 "headshot damage increase" 1.25 "fire rate bonus" 0.6 "aiming movespeed decreased" 2 } ItemAttributes { Classname "TF_WEAPON_SMG" "fire rate bonus" 0.7 "reload time decreased" 0.0025 "bullets per shot bonus" 2 "weapon spread bonus" 1.3 // "attack projectiles" 1 } ItemAttributes // Giant Jumping { ItemName "The Sandman" "provide on active" 1 "max health additive penalty" -300 "effect bar recharge rate increased" 0.1 "increased jump height" 2 "cancel falling damage" 1 "always crit" 1 //"head scale" 1.5 "no_duck" 1 } ItemAttributes // Super Scout { ItemName "The Holy Mackerel" "provide on active" 1 "max health additive penalty" -300 "move speed bonus" 1.3 "no double jump" 1 "no_duck" 1 } ItemAttributes // Rapid Fire Soldier { ItemName "TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" 0.0025 "fire rate bonus" 0.5 "Projectile speed increased" 0.65 } ItemAttributes // Rapid Fire Soldier { ItemName "Upgradeable TF_WEAPON_ROCKETLAUNCHER" "faster reload rate" 0.0025 "fire rate bonus" 0.5 "Projectile speed increased" 0.65 } ItemAttributes // Rapid Fire Soldier { ItemName "The Direct Hit" "faster reload rate" 0.0025 "fire rate bonus" 0.5 "Projectile speed increased" 0.65 } ItemAttributes // Rapid Fire Soldier { ClassName "TF_WEAPON_ROCKETLAUNCHER_AIRSTRIKE" "faster reload rate" 0.0025 "fire rate bonus" 0.5 "Projectile speed increased" 0.65 } ItemAttributes // Rapid Fire Soldier { ItemName "The Cow Mangler 5000" "faster reload rate" 0.0025 "fire rate bonus" 0.5 "Projectile speed increased" 0.65 "dmg bonus vs buildings" 2 "disable buildings on hit" 2 } ItemAttributes // Giant Black Box (1000hp per salvo) { ItemName "The Black Box" "damage bonus" 0.45 "fire rate bonus" 0.001 "faster reload rate" 1.6 "blast radius increased" 1.25 "projectile spread angle penalty" 4 "heal on hit for rapidfire" 333 "apply z velocity on damage" 150 } ItemAttributes // Giant Blast Soldier { ItemName "The Liberty Launcher" "damage bonus" 0.75 "apply z velocity on damage" 250 "fire rate bonus" 0.25 "clip size upgrade atomic" 5 "faster reload rate" 0.2 "blast radius increased" 1.2 "projectile spread angle penalty" 4 } ItemAttributes // Giant Charged { ItemName "The Original" "faster reload rate" 0.0025 "fire rate bonus" 2 "Projectile speed increased" 0.5 "always crit" 1 "apply z velocity on damage" 250 } ItemAttributes { ItemName "The Battalion's Backup" "max health additive bonus" 0 } Templates { Scout_Player { Class Scout ClassIcon tf2_lite Health 125 Attributes AutoJump AutoJumpMin 2 AutoJumpMax 2 Skill Expert MaxVisionRange 1200 Tag bot_red UseBestWeapon 1 UseHumanModel 1 AddCond { Name "TF_COND_REPROGRAMMED" } Action Mobber ExtAttr SuppressCanteenUse Item "The Soda Popper" Item "Mad Milk" Item "The Fan O'War" Item "Saxton Hat" Item "Employee Badge A" Item "Dillinger's Duffel" Item "Default Power Up Canteen (MvM)" ItemAttributes { ItemName "The Soda Popper" "damage bonus" 1.5 "clip size bonus upgrade" 2 } ItemAttributes { ItemName "Mad Milk" "applies snare effect" 1 } ItemAttributes { ItemName "Default Power Up Canteen (MvM)" "ubercharge" 1 "powerup charges" 2 "powerup duration" 5 } CharacterAttributes { "move speed bonus" 1.5 "dmg taken from crit reduced" 0.1 "deploy time decreased" 0.0025 "ammo regen" 1 } ItemModel { ItemName "Employee Badge A" Model "models/workshop/player/items/all_class/short2014_all_eyepatch/short2014_all_eyepatch_scout.mdl" } FireWeapon { Delay 0 Cooldown 0 Repeats 0 IfSeeTarget 0 IfHealthBelow 100 Type "Action" } WeaponSwitch { Delay 0 Repeats 1 IfSeeTarget 0 Type "Melee" IfHealthBelow 76 } } } Wave // Wave 1 { WaitWhenDone 65 Checkpoint Yes StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } InitWaveOutput { Target holograms_3way_relay Action Trigger } BlueTeamWipeCausesWaveLoss 1 WaveSpawn { Name "1a" Where spawnbot_front TotalCount 999 MaxActive 4 SpawnCount 2 WaitBeforeStarting 2 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_TFBot_Red_Scout_Melee } } } }