// mvm_horseshoevalley // map created by ducks // mission created by ducks #base robot_giant.pop #base robot_standard.pop #base robot_gatebot.pop WaveSchedule { Templates { T_TFBot_Heavyweapons { Name "Heavy" Class Heavyweapons Skill Normal } T_TFBot_Pyro_Fireman // Beefier melee fighters that aren't gimmicky. { Name "Fireman Pyro" ClassIcon pyro_fireaxe_lite Class Pyro Skill Hard Health 350 // Just enough health that snipers can't easily wipe them, but just enough to allow them to support against these. Scale 1.2 WeaponRestrictions MeleeOnly Item "Firewall Helmet" ItemAttributes { ItemName "TF_WEAPON_FIREAXE" "damage bonus" 1.6 // 104 damage, enough to two-hit a soldier! } CharacterAttributes { "move speed bonus" 0.85 // Just fast enough to corner players in poor positions, but too slow to catch players in the open. } } T_TFBot_Medic_Kritz { Name "Kritz Medic" ClassIcon medic_kritz Class Medic Skill Normal Item "The Kritzkrieg" ItemAttributes { ItemName "The Kritzkrieg" "uber duration bonus" 999 "ubercharge rate bonus" 10 } ItemAttributes { ItemName "TF_WEAPON_SYRINGEGUN_MEDIC" "damage penalty" 0.1 } Attributes SpawnWithFullCharge CharacterAttributes { "bot medic uber health threshold" 300 } } T_TFBot_Giant_Medic_Kritz { Name "Giant Kritz Medic" ClassIcon medic_kritz_giant Class Medic Skill Expert WeaponRestrictions SecondaryOnly Item "The Kritzkrieg" ItemAttributes { ItemName "The Kritzkrieg" "uber duration bonus" 999 "ubercharge rate bonus" 10 } ItemAttributes { ItemName "TF_WEAPON_SYRINGEGUN_MEDIC" "damage penalty" 0.1 } Health 2500 // Small health pool for a giant, but we don't want these hanging around after the death of the patient. These are not healing bots so it's possible their patient dies first. Attributes MiniBoss Attributes SpawnWithFullCharge CharacterAttributes { "move speed bonus" 0.65 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "bot medic uber health threshold" 3000 "heal rate bonus" 6 } } T_TFBot_Giant_Sniper_Huntsman // The scary part of this giant is its ability to deal massive DPS for its relatively small health pool. { Name "Giant Rapid Bowman" ClassIcon sniper_bow_multi Class Sniper Skill Hard Item "The Fortified Compound" ItemAttributes { ItemName "The Fortified Compound" "fire rate bonus" 0.25 } Health 2750 Attributes MiniBoss CharacterAttributes { "move speed bonus" 0.5 "damage force reduction" 0.6 "airblast vulnerability multiplier" 0.6 "override footstep sound set" 6 } } T_TFBot_Sniper_SMG { Name "SMG Sniper" ClassIcon sniper_smg Class Sniper Skill Normal WeaponRestrictions SecondaryOnly } } StartingCurrency 650 CanBotsAttackWhileInSpawnRoom No RespawnWaveTime 7 AddSentryBusterWhenDamageDealtExceeds 4500 AddSentryBusterWhenKillCountExceeds 15 Advanced Yes Mission { Objective DestroySentries Where spawnbot Where spawnbot_gatea Where spawnbot_gateb CooldownTime 40 TFBot { Template T_TFBot_SentryBuster } } Mission { Objective Engineer Where spawnbot Where spawnbot_gatea Where spawnbot_gateb BeginAtWave 99 // Disabled... RunForThisManyWaves 1 CooldownTime 20 DesiredCount 3 TFBot { Template T_TFBot_Engineer_Sentry_Tele_Battle TeleportWhere spawnbot Tag avoid_spawn_left Tag avoid_spawn_center } } Mission { Objective Spy Where spawnbot Where spawnbot_gatea Where spawnbot_gateb BeginAtWave 3 RunForThisManyWaves 1 CooldownTime 40 DesiredCount 3 TFBot { Template T_TFBot_Spy } } Mission { Objective Engineer Where spawnbot Where spawnbot_gatea Where spawnbot_gateb BeginAtWave 4 RunForThisManyWaves 1 CooldownTime 75 DesiredCount 1 TFBot { Template T_TFBot_Engineer_Sentry_Teleporter TeleportWhere spawnbot Tag avoid_spawn_left Tag avoid_spawn_center } } Mission { Objective Sniper Where spawnbot Where spawnbot_gatea Where spawnbot_gateb BeginAtWave 2 RunForThisManyWaves 1 CooldownTime 30 DesiredCount 3 TFBot { Template T_TFBot_Sniper } } Mission { Objective Spy Where spawnbot Where spawnbot_gatea Where spawnbot_gateb BeginAtWave 6 RunForThisManyWaves 1 CooldownTime 70 DesiredCount 3 TFBot { Template T_TFBot_Spy } } Wave // Wave 1 { Checkpoint Yes InitWaveOutput { Target wave_init_gateB Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name wave1_stage1_pyros TotalCurrency 100 TotalCount 20 MaxActive 10 SpawnCount 5 WaitBeforeStarting 0 WaitBetweenSpawns 10 Where spawnbot_center Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFGateBot_Pyro_Normal //Tag avoid_spawn_left //Tag avoid_spawn_right } } WaveSpawn { Name wave1_stage1_support TotalCurrency 80 Support 1 TotalCount 16 MaxActive 8 SpawnCount 4 WaitForAllDead wave1_stage1_pyros WaitBeforeStarting 0 WaitBetweenSpawns 10 Where spawnbot_center Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFGateBot_Pyro_Flaregun //Tag avoid_spawn_left //Tag avoid_spawn_right } } WaveSpawn { Name wave1_stage1_demomen TotalCurrency 100 TotalCount 20 MaxActive 8 SpawnCount 4 WaitBeforeStarting 0 WaitBetweenSpawns 10 Where spawnbot_left Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFBot_Demoman //Tag avoid_spawn_center //Tag avoid_spawn_right } } WaveSpawn { Name wave1_stage1_giants TotalCurrency 100 TotalCount 3 MaxActive 3 SpawnCount 1 WaitBeforeStarting 5 WaitBetweenSpawns 15 Where spawnbot_center Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFBot_Giant_Pyro //Tag avoid_spawn_left //Tag avoid_spawn_right } } WaveSpawn { Name wave1_stage2_support TotalCurrency 100 Support 1 TotalCount 20 MaxActive 10 SpawnCount 5 WaitForAllDead wave1_stage1_giants WaitForAllDead wave1_stage1_demomen WaitBeforeStarting 8 WaitBetweenSpawns 8 Where spawnbot_center Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFBot_Scout_Melee //Tag avoid_spawn_left //Tag avoid_spawn_right } } WaveSpawn { Name wave1_stage2_giants TotalCurrency 120 TotalCount 12 MaxActive 8 SpawnCount 4 WaitForAllDead wave1_stage1_giants WaitBeforeStarting 8 WaitBetweenSpawns 15 Where spawnbot_left Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Demoman //Tag avoid_spawn_center //Tag avoid_spawn_right } TFBot { Template T_TFBot_Medic_QuickFix Tag bot_squad_member } TFBot { Template T_TFBot_Medic_QuickFix Tag bot_squad_member } TFBot { Template T_TFBot_Medic_QuickFix Tag bot_squad_member } } } } Wave // Wave 2 { Checkpoint Yes InitWaveOutput { Target wave_init_gateA Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name wave2_stage1_heavies // Push them back! TotalCurrency 120 TotalCount 24 MaxActive 12 SpawnCount 3 WaitBeforeStarting 0 WaitBetweenSpawns 8 Where spawnbot_center Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 Squad { TFBot { Class Heavy //Tag avoid_spawn_center //Tag avoid_spawn_right } } } WaveSpawn { Name wave2_stage1_soldiers TotalCurrency 180 Support 1 TotalCount 32 MaxActive 10 SpawnCount 5 WaitBeforeStarting 8 WaitBetweenSpawns 8 Where spawnbot_left Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Class Soldier //Tag avoid_spawn_left //Tag avoid_spawn_right } } WaveSpawn { Name wave2_stage2_scouts // Keep the bomb moving! TotalCurrency 80 TotalCount 20 MaxActive 15 SpawnCount 3 WaitForAllDead wave2_stage1_heavies WaitBeforeStarting 20 WaitBetweenSpawns 12 Where spawnbot Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFBot_Scout_Melee Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave2_stage3_tank1 // Now that the players have been pushed back by the heavies, it's time to force them to push into the tank! TotalCurrency 120 TotalCount 1 MaxActive 1 SpawnCount 1 WaitBeforeStarting 20 WaitBetweenSpawns 10 Tank { Health 20000 Name "tankboss" Speed 75 // Skin 1 StartingPathTrackNode tank_path_a_1 OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } } Wave // Wave 3 { Checkpoint Yes InitWaveOutput { Target wave_init_random Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name wave3_stage1_giant_soldiers TotalCurrency 100 TotalCount 3 MaxActive 3 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 15 Where spawnbot Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFBot_Giant_Soldier Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave3_stage1_firemen TotalCurrency 100 TotalCount 25 MaxActive 10 SpawnCount 5 WaitBeforeStarting 3 WaitBetweenSpawns 10 Where spawnbot Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFBot_Pyro_Fireman Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave3_stage2_gate_scouts TotalCurrency 100 TotalCount 20 MaxActive 10 SpawnCount 5 WaitForAllSpawned wave3_stage1_giant_soldiers WaitBeforeStarting 30 WaitBetweenSpawns 20 Where spawnbot Where spawnbot_gatea Where spawnbot_gateb RandomSpawn 1 TFBot { Template T_TFGateBot_Scout_Normal Tag avoid_spawn_center Tag avoid_spawn_right } } } Wave // Wave 4 { Checkpoint Yes InitWaveOutput { Target wave_init_random Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name wave4_stage1_heavies // Bog standard wave population. TotalCurrency 80 TotalCount 18 MaxActive 12 SpawnCount 6 WaitBeforeStarting 0 WaitBetweenSpawns 16 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Heavyweapons Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave4_stage1_giants // Bog standard wave population. TotalCurrency 125 TotalCount 5 MaxActive 5 SpawnCount 1 WaitBeforeStarting 15 WaitBetweenSpawns 5 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Giant_Soldier Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave4_stage2_scouts // Keep the bomb moving if players clear the base waves before tanks get a chance to push. TotalCurrency 120 TotalCount 24 MaxActive 8 SpawnCount 4 WaitForAllSpawned wave4_stage1_heavies WaitBeforeStarting 15 WaitBetweenSpawns 8 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Scout_Melee Attributes AlwaysCrit Tag avoid_spawn_left Tag avoid_spawn_right } } WaveSpawn { Name wave4_stage2_tanks // Push back players to set up for the giant heavies... TotalCurrency 225 TotalCount 3 MaxActive 3 SpawnCount 1 WaitBeforeStarting 65 WaitBetweenSpawns 15 Tank { Health 10000 Name "tankboss" Speed 75 // Skin 1 StartingPathTrackNode tank_path_a_1 OnKilledOutput { Target boss_dead_relay Action Trigger } OnBombDroppedOutput { Target boss_deploy_relay Action Trigger } } } WaveSpawn { Name wave4_stage3_giants // These giants are tough, but they're even tougher if no one deals with the uber medics with them. Players should expect them (nothing else to spawn), and they should deal with them. TotalCurrency 180 TotalCount 10 MaxActive 10 SpawnCount 5 WaitBeforeStarting 120 WaitBetweenSpawns 30 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Tag avoid_spawn_left Tag avoid_spawn_right } TFBot { Template T_TFBot_Medic Tag bot_squad_member } TFBot { Template T_TFBot_Medic Tag bot_squad_member } TFBot { Template T_TFBot_Medic Tag bot_squad_member } TFBot { Template T_TFBot_Medic Tag bot_squad_member } } } WaveSpawn { Name wave4_stage3_boxers // Bog standard wave population to support the heavies. TotalCurrency 120 TotalCount 24 MaxActive 12 SpawnCount 6 WaitBeforeStarting 125 WaitBetweenSpawns 10 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ Tag avoid_spawn_left Tag avoid_spawn_center } } } Wave // Wave 5 { Checkpoint Yes InitWaveOutput { Target wave_init_random Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name wave5_stage1_knights TotalCurrency 160 TotalCount 32 MaxActive 16 SpawnCount 8 WaitBeforeStarting 0 WaitBetweenSpawns 12 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Demoman_Knight Attributes AlwaysCrit Tag avoid_spawn_left Tag avoid_spawn_center } } WaveSpawn { Name wave5_stage1_giantknights TotalCurrency 90 TotalCount 4 MaxActive 4 SpawnCount 1 WaitForAllSpawned wave5_stage1_knights WaitBeforeStarting 6 WaitBetweenSpawns 6 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Giant_DemoMan_PrinceTavish Attributes AlwaysCrit Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave5_stage1_giantbows TotalCurrency 120 TotalCount 12 MaxActive 6 SpawnCount 3 WaitBeforeStarting 9 WaitBetweenSpawns 12 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Giant_Sniper_Huntsman Tag avoid_spawn_left Tag avoid_spawn_right } } WaveSpawn { Name wave5_stage2_heavycombos TotalCurrency 160 TotalCount 32 MaxActive 16 SpawnCount 16 WaitForAllSpawned wave5_stage1_knights WaitBeforeStarting 25 WaitBetweenSpawns 15 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Heavyweapons Tag avoid_spawn_center Tag avoid_spawn_right } TFBot { Template T_TFBot_Medic Tag bot_squad_member } } } WaveSpawn { Name wave5_stage3_soldiers // while technically part of stage 2, this is meant to punish for not clearing the heavies in time. TotalCurrency 90 TotalCount 30 MaxActive 20 SpawnCount 5 WaitForAllSpawned wave5_stage2_heavycombos WaitBeforeStarting 10 WaitBetweenSpawns 7 Where spawnbot RandomSpawn 1 TFBot { Class Soldier Tag avoid_spawn_left Tag avoid_spawn_center } } WaveSpawn { Name wave5_stage4_giantshotguns TotalCurrency 120 TotalCount 8 MaxActive 8 SpawnCount 2 WaitForAllSpawned wave5_stage3_soldiers WaitBeforeStarting 15 WaitBetweenSpawns 16 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons_Shotgun Tag avoid_spawn_center Tag avoid_spawn_right } TFBot { Template T_TFBot_Giant_Medic_Kritz Tag bot_squad_member } } } WaveSpawn { Name wave5_stage4_smgs TotalCurrency 60 TotalCount 36 MaxActive 12 SpawnCount 6 WaitForAllSpawned wave5_stage3_soldiers WaitBeforeStarting 15 WaitBetweenSpawns 12 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Sniper_SMG Tag avoid_spawn_left Tag avoid_spawn_right } } } Wave // Wave 6 { Checkpoint Yes InitWaveOutput { Target wave_init_random Action Trigger } StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } WaveSpawn { Name wave6_stage1_heavygiants TotalCurrency 80 TotalCount 4 MaxActive 4 SpawnCount 2 WaitBeforeStarting 0 WaitBetweenSpawns 40 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Tag avoid_spawn_center Tag avoid_spawn_right } TFBot { Template T_TFBot_Giant_Medic Tag bot_squad_member } } } WaveSpawn { Name wave6_stage1_soldiergiants TotalCurrency 80 TotalCount 4 MaxActive 4 SpawnCount 2 WaitBeforeStarting 15 WaitBetweenSpawns 45 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Soldier Tag avoid_spawn_left Tag avoid_spawn_right } TFBot { Template T_TFBot_Giant_Medic_Kritz Tag bot_squad_member } } } WaveSpawn { Name wave6_stage1_demogiants TotalCurrency 80 TotalCount 4 MaxActive 4 SpawnCount 2 WaitBeforeStarting 15 WaitBetweenSpawns 45 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Demoman Tag avoid_spawn_left Tag avoid_spawn_right } TFBot { Template T_TFBot_Giant_Medic_Kritz Tag bot_squad_member } } } WaveSpawn { TotalCurrency 60 Name wave6_stage2_scouts TotalCount 20 MaxActive 12 SpawnCount 4 WaitBeforeStarting 70 WaitBetweenSpawns 10 Where spawnbot RandomSpawn 1 TFBot { Class Scout Skill Hard Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave6_stage2_soldiers TotalCurrency 120 TotalCount 18 MaxActive 9 SpawnCount 3 WaitBeforeStarting 60 WaitBetweenSpawns 9 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Soldier_RocketShotgun Attributes AlwaysCrit Tag avoid_spawn_left Tag avoid_spawn_right } } WaveSpawn { Name wave6_stage3_burstsoldiers TotalCurrency 120 TotalCount 6 MaxActive 6 SpawnCount 3 WaitForAllSpawned wave6_stage2_soldiers WaitForAllSpawned wave6_stage2_scouts WaitBeforeStarting 18 WaitBetweenSpawns 30 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Giant_Soldier_Spammer_Reload Attributes AlwaysCrit Tag avoid_spawn_center Tag avoid_spawn_right } } WaveSpawn { Name wave6_stage3_pyros TotalCurrency 140 TotalCount 28 MaxActive 12 SpawnCount 4 WaitForAllSpawned wave6_stage2_soldiers WaitForAllSpawned wave6_stage2_scouts WaitBeforeStarting 15 WaitBetweenSpawns 10 Where spawnbot RandomSpawn 1 TFBot { Template T_TFBot_Pyro Tag avoid_spawn_left Tag avoid_spawn_right } } WaveSpawn { Name wave6_stage4_heavybosses TotalCurrency 120 TotalCount 8 MaxActive 8 SpawnCount 4 WaitForAllSpawned wave6_stage3_burstsoldiers WaitBeforeStarting 20 WaitBetweenSpawns 10 Where spawnbot RandomSpawn 1 Squad { TFBot { Template T_TFBot_Giant_Heavyweapons Tag avoid_spawn_center Tag avoid_spawn_right } TFBot { Template T_TFBot_Giant_Medic Tag bot_squad_member } TFBot { Template T_TFBot_Giant_Medic_Kritz Tag bot_squad_member } TFBot { Template T_TFBot_Giant_Medic_Kritz Tag bot_squad_member } } } WaveSpawn { Name wave6_stage4_support TotalCurrency 0 TotalCount 20 MaxActive 12 SpawnCount 6 WaitForAllSpawned wave6_stage3_burstsoldiers WaitBeforeStarting 20 WaitBetweenSpawns 8 Where spawnbot RandomSpawn 1 Support 1 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ Tag avoid_spawn_left Tag avoid_spawn_center } } } }